staff
|
|
« : 23-11-2009 09:12 » |
|
Задача заключается в чем, есть набор формул для вычисления значений. Первоначально по умолчанию в таблице для ввода цифр стоят 0,000, вводим цифры для расчета, нажимаем кнопку Расчет и исходя из написанных формул производится расчет, но при нажатии на кнопку выдает ошибку "Деление на 0" код процедуры: Процедура КнопкаНажатияВыполнить(Элемент) // Вставить содержимое обработчика. c=z+x; z2=z*z1; x2=x*x1; c2=(z2+x2)/c; z4=z*z3; x4=x*x3; c4=(z4+x4)/c; c6=c5*(100-(c2+(c4-c2*c4/100)))/100; c7=c6*c; z9=z8*z; x9=x8*x; c9=(z9+x9)/c; z11=z10*z; x11=x10*x; c11=(z11+x11)/c; c13=c12*c; z15=z14*z; x15=x14*x; c15=(z15+x15)/c; z17=z16*z; x15=x14*x; c15=(z15+x15)/c; z17=z16*z; x17=x16*x; c17=(z17+x17)/c; z19=z18*z; x19=x18*x; c19=(z19+x19)/c; c21=c20*c; c23=c22*c; c24=c20*(100-c2)/100; c25=c24; c26=100-c20; c27=c26/c; c28=100*(c24-c19)/(100-(c19+c17)); c29=(100*c4-c26*c22)/c20; c30=c28*(100-c29)/(100-c12); c31=(10000-100*(c6+c4+c30)+c30*(c15+c12))/(100-(c11+c9)); c32=c31*c11/100; c33=c30*c15/100; c34=c6-(c32+c33); c35=(c4-(((c31*c9)+(c30*c12))/100)); КонецПроцедуры
и еще такой вопрос, во время формирования отчета новая таблица со значениями добавляется постоянно вниз, а надо что бы новая таблица с данными выводилась в ряд
|
|
|
Записан
|
|
|
|
Dest
Опытный
Offline
|
|
« Ответ #1 : 23-11-2009 12:37 » |
|
Что - то мне подсказывает раз ошибка "Деление на 0", значит что-то делится на ноль , видимо у тебя переменная "с"=0 А вообще посмотри на какую строку ругается
|
|
« Последнее редактирование: 23-11-2009 12:41 от Dest »
|
Записан
|
|
|
|
staff
|
|
« Ответ #2 : 23-11-2009 12:53 » |
|
выводит ошибку по строке процедуры "c29=(100*c4-c26*c22)/c20;"
|
|
|
Записан
|
|
|
|
staff
|
|
« Ответ #3 : 23-11-2009 13:16 » |
|
проблему с делением на 0 решил добавив если c20<>0 тогда ............................. конецесли;
теперь осталась теперь проблема вывода отчета так что бы результаты формировались вдоль, а не друг под другом
|
|
|
Записан
|
|
|
|
Dest
Опытный
Offline
|
|
« Ответ #4 : 23-11-2009 13:24 » |
|
Отчет выводится в табличный документ?
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #5 : 23-11-2009 13:37 » |
|
выводит ошибку по строке процедуры "c29=(100*c4-c26*c22)/c20;"
И это тебя удивляет? Меня удивляет, что тебя это удивляет. Где у тебя c20 определено? Какое значение ему присвоено? проблему с делением на 0 решил добавив если c20<>0 тогда Ничего ты не решил. Сразу же можешь выкинуть все значения в которых с20 используется, ну и до кучи - все зависимые от них. ps рекурсивно
|
|
« Последнее редактирование: 23-11-2009 13:40 от Джон »
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #6 : 23-11-2009 13:42 » |
|
Ещё кстати добавь проверку
z+x <> 0
c19+c17 <> 100
и
с12 <> 100
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
staff
|
|
« Ответ #7 : 23-11-2009 13:57 » |
|
незнаю сейчас проверяю значения от исходной таблицы (копия excel) и с тем что у меня в 1С получается, то все считается, первоначально у меня идет поэтапно, я же не все числа зараз вставляю вы мне помогите решить проблему с макетом, выбирал Табличный Документ
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #8 : 23-11-2009 22:46 » |
|
см.справку: ТабличныйДокумент (SpreadsheetDocument) ВставитьОбласть (InsertArea) ну и в любой типовой можешь посмотреть пример как строится отчет с перменным количесвом колонок
|
|
|
Записан
|
|
|
|
staff
|
|
« Ответ #9 : 24-11-2009 09:21 » |
|
прочитал в синтакс-помощник в 1С принцип построения отчета горизонтально, попробовал написать аналогичный цикл формирования но пишет постоянно ошибки помогите направить на истинный путь для написания данного цикла и в какой части кода его надо писать
код процедуры формирования отчета: Процедура КнопкаСформироватьНажатие(Кнопка) // Вставить содержимое обработчика. Запрос = Новый запрос; Запрос.Текст = "ВЫБРАТЬ | ТеоретическийБалансПодсолнечника.Регистратор КАК Регистратор, | СУММА(ТеоретическийБалансПодсолнечника.z) КАК z, ......................... | СУММА(ТеоретическийБалансПодсолнечника.x) КАК x, ......................... | СУММА(ТеоретическийБалансПодсолнечника.c) КАК c, ......................... |ИЗ | РегистрНакопления.ТеоретическийБалансПодсолнечника КАК ТеоретическийБалансПодсолнечника |ГДЕ | ТеоретическийБалансПодсолнечника.Период МЕЖДУ &НачалоДня И &КонецДня | |СГРУППИРОВАТЬ ПО | ТеоретическийБалансПодсолнечника.Регистратор | |УПОРЯДОЧИТЬ ПО | Регистратор |ИТОГИ | СУММА(z), ......................... | СУММА(x), ......................... | СУММА(c), ......................... |ПО | Регистратор |АВТОУПОРЯДОЧИВАНИЕ"; Запрос.УстановитьПараметр("НачалоДня", НачалоДня(НачПериода)); Запрос.УстановитьПараметр("КонецДня", КонецДня(КонПериода)); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); темп = Новый ТабличныйДокумент; ТабДок = ПолучитьМакет("Макет"); ОбластьПробел = ТабДок.ПолучитьОбласть("Пробел"); Темп.Вывести(ОбластьПробел); ОбластьВведение = ТабДок.ПолучитьОбласть("Введение"); Темп.Вывести(ОбластьВведение); Пока Выборка.Следующий() цикл ОбластьПериод = ТабДок.ПолучитьОбласть("Период"); ОбластьПериод.Параметры.Период="с "+Формат(НачПериода,"ДЛФ=DT")+" по "+Формат(КонПериода,"ДЛФ=DT"); Темп.Вывести(ОбластьПериод); ВыборкаРегистратор=Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаРегистратор.Следующий() цикл если ВыборкаРегистратор<>Неопределено тогда ОбластьРегистратор = ТабДок.ПолучитьОбласть("Регистратор"); ОбластьРегистратор.Параметры.Дата=ВыборкаРегистратор.Регистратор.Дата; ОбластьРегистратор.Параметры.z=ВыборкаРегистратор.z; ................................................................... ОбластьРегистратор.Параметры.x=ВыборкаРегистратор.x; .................................................................... ОбластьРегистратор.Параметры.c=ВыборкаРегистратор.c; .................................................................... Темп.Вывести(ОбластьРегистратор); конецесли; конеццикла; конеццикла; ТабФорма = Отчеты.ТеоретическийБалансПодсолнечника.ПолучитьФорму("ФормаТаблицы"); ТабФорма.Открыть(); ТабФорма.ЭлементыФормы.Результат.Вывести(Темп); КонецПроцедуры
код примера с синтак-помощник:
ТабДок = Новый ТабличныйДокумент; Итог = 0; Для К=1 По 10 Цикл ТабДок.Область("R"+(К+1)+"C1").Текст = "Строка "+К; ТабДок.Область("R"+(К+1)+"C2").Текст = К*10; Итог = Итог+К*10; КонецЦикла; ТабДок.ВставитьОбласть(ТабДок.Область("R2"), ТабДок.Область("R3"), ТипСмещенияТабличногоДокумента.ПоГоризонтали); ТабДок.Область("R2C1").Текст = "Итого:"; ТабДок.Область("R2C2").Текст = Итог; Рамка = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1); ТабДок.Область("R2C1:R2C2").Обвести(,Рамка,,Рамка); ТабДок.ОтображатьСетку = Ложь; ТабДок.Защита = Ложь; ТабДок.ТолькоПросмотр = Истина; ТабДок.Показать("Пример использования метода ВставитьОбласть()");
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #10 : 24-11-2009 10:18 » |
|
Оформи код с использование [ code ] [ /code ] (без пробелов) Где текст ошибки и в какой строке возникает? Телепатией в полной мере не владею
|
|
« Последнее редактирование: 24-11-2009 15:17 от Sel »
|
Записан
|
|
|
|
staff
|
|
« Ответ #11 : 24-11-2009 11:11 » |
|
уже проблема решилась, я назначал имена областей по строкам и из за этого у меня отчет результатов расчетов выводился друг под другом, а когда присвоил имя столбцам, то отчет начал выводиться горизонтально так, как хотелось изначально ))) спасибо за оказанную помощь
|
|
|
Записан
|
|
|
|
|