Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Деление на 0  (Прочитано 8304 раз)
0 Пользователей и 1 Гость смотрят эту тему.
staff
Помогающий

ua
Offline Offline
Пол: Мужской

« : 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
Опытный

ru
Offline Offline

« Ответ #1 : 23-11-2009 12:37 » 

Что - то мне подсказывает раз ошибка "Деление на 0", значит что-то делится на ноль  Аминь!, видимо у тебя переменная "с"=0
А вообще посмотри на какую строку ругается
« Последнее редактирование: 23-11-2009 12:41 от Dest » Записан
staff
Помогающий

ua
Offline Offline
Пол: Мужской

« Ответ #2 : 23-11-2009 12:53 » 

выводит ошибку по строке процедуры "c29=(100*c4-c26*c22)/c20;"
Записан
staff
Помогающий

ua
Offline Offline
Пол: Мужской

« Ответ #3 : 23-11-2009 13:16 » 

проблему с делением на 0 решил добавив
если c20<>0 тогда
.............................
конецесли;

теперь осталась теперь проблема вывода отчета так что бы результаты формировались вдоль, а не друг под другом
Записан
Dest
Опытный

ru
Offline Offline

« Ответ #4 : 23-11-2009 13:24 » 

Отчет выводится в табличный документ?
Записан
Джон
просто
Администратор

de
Offline 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."
Джон
просто
Администратор

de
Offline 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
Помогающий

ua
Offline Offline
Пол: Мужской

« Ответ #7 : 23-11-2009 13:57 » 

незнаю сейчас проверяю значения от исходной таблицы (копия excel) и с тем что у меня в 1С получается, то все считается, первоначально у меня идет поэтапно, я же не все числа зараз вставляю
вы мне помогите решить проблему с макетом, выбирал Табличный Документ
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 23-11-2009 22:46 » 

см.справку:
ТабличныйДокумент (SpreadsheetDocument)
ВставитьОбласть (InsertArea)

ну и в любой типовой можешь посмотреть пример как строится отчет с перменным количесвом колонок
Записан
staff
Помогающий

ua
Offline Offline
Пол: Мужской

« Ответ #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
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 24-11-2009 10:18 » 

Оформи код с использование [ code ] [ /code ] (без пробелов)

Где текст ошибки и в какой строке возникает? Телепатией в полной мере не владею Улыбаюсь
« Последнее редактирование: 24-11-2009 15:17 от Sel » Записан
staff
Помогающий

ua
Offline Offline
Пол: Мужской

« Ответ #11 : 24-11-2009 11:11 » 

уже проблема решилась, я назначал имена областей по строкам и из за этого у меня отчет результатов расчетов выводился друг под другом, а когда присвоил имя столбцам, то отчет начал выводиться горизонтально так, как хотелось изначально )))
спасибо за оказанную помощь
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines