1с розница ошибка деление на ноль

вот запрос на который ругается и не может выполнить

Запрос = Новый Запрос(»

    |ВЫБРАТЬ

    |    ВременнаяТаблицаТовары.Индекс                         КАК Индекс,

    |    ВременнаяТаблицаТовары.Номенклатура                   КАК Номенклатура,

    |    ВременнаяТаблицаТовары.Характеристика                 КАК Характеристика,

    |    ВременнаяТаблицаТовары.ВидЦены                        КАК ВидЦены,

    |    ВременнаяТаблицаТовары.Цена                           КАК Цена,

    |    ВременнаяТаблицаТовары.Упаковка                       КАК Упаковка,

    |    ВременнаяТаблицаТовары.ЦенаИзмененаВручную            КАК ЦенаИзмененаВручную

    |ПОМЕСТИТЬ

    |    ВременнаяТаблицаТовары

    |ИЗ

    |    &Товары КАК ВременнаяТаблицаТовары

    |ИНДЕКСИРОВАТЬ ПО Номенклатура, Характеристика, ВидЦены

    |;

    |ВЫБРАТЬ

    |    Товары.Индекс КАК Индекс,

    |    Товары.Номенклатура КАК Номенклатура,

    |    Товары.Характеристика КАК Характеристика,

    |    Товары.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,

    |    Товары.Номенклатура.ЦеноваяГруппа КАК ЦеноваяГруппа,

    |    ВЫБОР

    |        КОГДА Товары.Номенклатура.ВидНоменклатуры.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыВеденияДополнительныхДанныхПоНоменклатуре.ОбщиеДляВидаНоменклатуры)

    |            ТОГДА ИСТИНА

    |        КОГДА Товары.Номенклатура.ВидНоменклатуры.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыВеденияДополнительныхДанныхПоНоменклатуре.ИндивидуальныеДляНоменклатуры)

    |            ТОГДА ИСТИНА

    |        ИНАЧЕ ЛОЖЬ

    |    КОНЕЦ КАК ХарактеристикиИспользуются,

    |    Товары.ВидЦены КАК ВидЦены,

    |    Товары.Цена КАК Цена,

    |    Товары.ЦенаИзмененаВручную КАК ЦенаИзмененаВручную,

    |    ВЫБОР

    |        КОГДА ЦеныНоменклатуры.Упаковка = Товары.Упаковка

    |            ТОГДА ЦеныНоменклатуры.Цена

    |        ИНАЧЕ ЦеныНоменклатуры.Цена / ЕСТЬNULL(ЦеныНоменклатуры.Упаковка.Коэффициент, 1) * ЕСТЬNULL(Товары.Упаковка.Коэффициент, 1)

    |    КОНЕЦ КАК ДействующаяЦена,

    |    ВЫРАЗИТЬ(ВЫБОР

    |            КОГДА ЦеныНоменклатуры.Цена <> 0

    |                ТОГДА 100 * (Товары.Цена — ВЫБОР

    |                        КОГДА ЕСТЬNULL(ЦеныНоменклатуры.Упаковка, &ПустаяУпаковка) = Товары.Упаковка

    |                            ТОГДА ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0)

    |                        ИНАЧЕ ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0) / ЕСТЬNULL(ЦеныНоменклатуры.Упаковка.Коэффициент, 1) * ЕСТЬNULL(Товары.Упаковка.Коэффициент, 1)

    |                    КОНЕЦ) / ВЫБОР

    |                        КОГДА ЕСТЬNULL(ЦеныНоменклатуры.Упаковка, &ПустаяУпаковка) = Товары.Упаковка

    |                            ТОГДА ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0)

    |                        ИНАЧЕ ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0) / ЕСТЬNULL(ЦеныНоменклатуры.Упаковка.Коэффициент, 1) * ЕСТЬNULL(Товары.Упаковка.Коэффициент, 1)

    |                    КОНЕЦ

    |            ИНАЧЕ 0

    |        КОНЕЦ КАК ЧИСЛО(19, 2)) КАК Процент,

    |    Товары.Упаковка КАК Упаковка

    |ИЗ

    |    ВременнаяТаблицаТовары КАК Товары

    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры

    |        ПО (ЦеныНоменклатуры.ВидЦены = Товары.ВидЦены)

    |            И (ЦеныНоменклатуры.Характеристика = Товары.Характеристика)

    |            И (ЦеныНоменклатуры.Номенклатура = Товары.Номенклатура)

    |            И (ЦеныНоменклатуры.Период В

    |                (ВЫБРАТЬ

    |                    МАКСИМУМ(Цены.Период)

    |                ИЗ

    |                    РегистрСведений.ЦеныНоменклатуры КАК Цены

    |                ГДЕ

    |                    Цены.ВидЦены = Товары.ВидЦены

    |                    И Цены.Номенклатура = Товары.Номенклатура

    |                    И Цены.Характеристика = Товары.Характеристика

    |                    И Цены.Период <= &Дата))

    |

    |УПОРЯДОЧИТЬ ПО

    |    Индекс

    |ИТОГИ

    |    МИНИМУМ(ЕдиницаИзмерения)

    |ПО

    |    Номенклатура,

    |    Характеристика

    |»);

   I_learn_1c

20.06.18 — 09:44

Доброе утро,

посоветуйте пожалуйста что можно попробовать.

Розница 2.2, в нее конвертацией из 7.7 загружена Установка цен, пустых строк в ТЧ нет, заполнены цены, единицы измерения.

При открытии загруженного документа вылетает ошибка Деление на ноль, если этот же док Скопировать, то форму создания скопированного открывает, тч заполнена как и должна, не изменяя ничего сохраняю копию, она открывается, все хорошо. Что не так может быть с загруженным документом? как понимаю при открытии формы чего-то не хватает, но чего…

вот ошибка

{Документ.УстановкаЦенНоменклатуры.Форма.ФормаДокумента.Форма(3665)}: Ошибка при вызове метода контекста (Выполнить)

    РезультатЗапроса = Запрос.Выполнить();

по причине:

Ошибка выполнения запроса

по причине:

Ошибка при выполнении операции над данными:

Ошибка SQL: Деление на 0

по причине:

Ошибка SQL: Деление на 0

по причине:

Деление на 0 значения типа Numeric

вот запрос на который ругается и не может выполнить

Запрос = Новый Запрос(»

    |ВЫБРАТЬ

    |    ВременнаяТаблицаТовары.Индекс                         КАК Индекс,

    |    ВременнаяТаблицаТовары.Номенклатура                   КАК Номенклатура,

    |    ВременнаяТаблицаТовары.Характеристика                 КАК Характеристика,

    |    ВременнаяТаблицаТовары.ВидЦены                        КАК ВидЦены,

    |    ВременнаяТаблицаТовары.Цена                           КАК Цена,

    |    ВременнаяТаблицаТовары.Упаковка                       КАК Упаковка,

    |    ВременнаяТаблицаТовары.ЦенаИзмененаВручную            КАК ЦенаИзмененаВручную

    |ПОМЕСТИТЬ

    |    ВременнаяТаблицаТовары

    |ИЗ

    |    &Товары КАК ВременнаяТаблицаТовары

    |ИНДЕКСИРОВАТЬ ПО Номенклатура, Характеристика, ВидЦены

    |;

    |ВЫБРАТЬ

    |    Товары.Индекс КАК Индекс,

    |    Товары.Номенклатура КАК Номенклатура,

    |    Товары.Характеристика КАК Характеристика,

    |    Товары.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,

    |    Товары.Номенклатура.ЦеноваяГруппа КАК ЦеноваяГруппа,

    |    ВЫБОР

    |        КОГДА Товары.Номенклатура.ВидНоменклатуры.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыВеденияДополнительныхДанныхПоНоменклатуре.ОбщиеДляВидаНоменклатуры)

    |            ТОГДА ИСТИНА

    |        КОГДА Товары.Номенклатура.ВидНоменклатуры.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыВеденияДополнительныхДанныхПоНоменклатуре.ИндивидуальныеДляНоменклатуры)

    |            ТОГДА ИСТИНА

    |        ИНАЧЕ ЛОЖЬ

    |    КОНЕЦ КАК ХарактеристикиИспользуются,

    |    Товары.ВидЦены КАК ВидЦены,

    |    Товары.Цена КАК Цена,

    |    Товары.ЦенаИзмененаВручную КАК ЦенаИзмененаВручную,

    |    ВЫБОР

    |        КОГДА ЦеныНоменклатуры.Упаковка = Товары.Упаковка

    |            ТОГДА ЦеныНоменклатуры.Цена

    |        ИНАЧЕ ЦеныНоменклатуры.Цена / ЕСТЬNULL(ЦеныНоменклатуры.Упаковка.Коэффициент, 1) * ЕСТЬNULL(Товары.Упаковка.Коэффициент, 1)

    |    КОНЕЦ КАК ДействующаяЦена,

    |    ВЫРАЗИТЬ(ВЫБОР

    |            КОГДА ЦеныНоменклатуры.Цена <> 0

    |                ТОГДА 100 * (Товары.Цена — ВЫБОР

    |                        КОГДА ЕСТЬNULL(ЦеныНоменклатуры.Упаковка, &ПустаяУпаковка) = Товары.Упаковка

    |                            ТОГДА ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0)

    |                        ИНАЧЕ ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0) / ЕСТЬNULL(ЦеныНоменклатуры.Упаковка.Коэффициент, 1) * ЕСТЬNULL(Товары.Упаковка.Коэффициент, 1)

    |                    КОНЕЦ) / ВЫБОР

    |                        КОГДА ЕСТЬNULL(ЦеныНоменклатуры.Упаковка, &ПустаяУпаковка) = Товары.Упаковка

    |                            ТОГДА ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0)

    |                        ИНАЧЕ ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0) / ЕСТЬNULL(ЦеныНоменклатуры.Упаковка.Коэффициент, 1) * ЕСТЬNULL(Товары.Упаковка.Коэффициент, 1)

    |                    КОНЕЦ

    |            ИНАЧЕ 0

    |        КОНЕЦ КАК ЧИСЛО(19, 2)) КАК Процент,

    |    Товары.Упаковка КАК Упаковка

    |ИЗ

    |    ВременнаяТаблицаТовары КАК Товары

    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры

    |        ПО (ЦеныНоменклатуры.ВидЦены = Товары.ВидЦены)

    |            И (ЦеныНоменклатуры.Характеристика = Товары.Характеристика)

    |            И (ЦеныНоменклатуры.Номенклатура = Товары.Номенклатура)

    |            И (ЦеныНоменклатуры.Период В

    |                (ВЫБРАТЬ

    |                    МАКСИМУМ(Цены.Период)

    |                ИЗ

    |                    РегистрСведений.ЦеныНоменклатуры КАК Цены

    |                ГДЕ

    |                    Цены.ВидЦены = Товары.ВидЦены

    |                    И Цены.Номенклатура = Товары.Номенклатура

    |                    И Цены.Характеристика = Товары.Характеристика

    |                    И Цены.Период <= &Дата))

    |

    |УПОРЯДОЧИТЬ ПО

    |    Индекс

    |ИТОГИ

    |    МИНИМУМ(ЕдиницаИзмерения)

    |ПО

    |    Номенклатура,

    |    Характеристика

    |»);

Содержание:

1.      Типовой отчет «Валовая прибыль предприятия»

2.      Как избежать ошибки деления на 0?

1.     Типовой отчет «Валовая прибыль предприятия»

Рассмотрим возможность добавления пользовательских полей в схему компоновки данных отчета 1С 8. Для примера добавим поле 1С 8.3 “Цена” в типовой отчет “Валовая прибыль предприятия” и разместим его между колонками “Количество” и “Выручка” в 1С.   

Рис. 1 Типовой отчет “Валовая прибыль предприятия”

Нам нужно нажать на кнопку “Еще”, перейти на закладку “Прочее” и выбрать пункт “Изменить вариант отчета”.

Переходим на закладку “Пользовательские поля”, нажимаем кнопку “Добавить”, выбираем пункт “Новое поле выражение”

Рис. 2 Добавление нового поля в отчет

2.     Как избежать ошибки деления на 0

В поле “Заголовок” указываем название нашей колонки. Оно будет выводится в отчет. В поле “Выражение детальных записей” укажем следующий код 1С 8.3:

ВЫБОР

КОГДА Количество <> 0

ТОГДА Выручка/Количество

ИНАЧЕ 0

КОНЕЦ

Эта конструкция нужна, чтобы избежать ошибки деления на 0. Разберем ее подробнее.   

“КОГДА Количество <> 0 ТОГДА” – проверяем поле “Количество” на неравенство нулю. Если условие выполняется (“Количество” не равно нулю), то выполняется конструкция “Выручка/Количество”. Если же условие не выполняется (“Количество” равно нулю), то делаем поле “Количество” равным нулю – “ИНАЧЕ 0”.

В общем виде эта конструкция выглядит так:

ВЫБОР

КОГДА <УСЛОВИЕ 1>

ТОГДА <ФОРМУЛА 1>

ИНАЧЕ <ФОРМУЛА 2>

КОНЕЦ

Аналогичным образом можно добавить любую другую формула в 1С для расчета пользовательского поля. Важно помнить, что обращение к полям отчета осуществляется по заголовкам колонок отчета 1С 8.

Копируем данную конструкцию в поле “Выражение итоговых записей”.

 

Рис. 3 Код для избегания ошибки деления на ноль

Сохраняем созданное поле, нажав на кнопку “Ок”. Видим, что наше поле появилось на вкладке “Пользовательские поля”.

Рис. 4 Вкладка “Пользовательские поля”

Настроим округление поля 1С 8.3 Цена до двух знаков после запятой. Переходим на закладку Условное оформление 1С и нажимаем кнопку “Добавить”

Рис. 5 Настройка округления данных в поле

На закладке Оформление находим параметр “Формат”. Устанавливаем флаг использования, нажимаем на кнопку выбора.



Рис. 6 Редактирование элемента условного оформления

На закладке “Число” устанавливаем флаг использования на поле “Точность”, задаем нужное количество знаков после запятой. Ниже можно посмотреть пример, как будет выглядеть наше число после применения настроек 1С 8.3. Сохраняем изменения, нажав на кнопку “ОК”.

Рис. 7 Результат проведения настроек округления

Для параметра “Формат” установилось нужное нам значение

Рис. 8 Для параметра формат было установлено необходимое значение

Перейдем на закладку “Оформляемые поля”. Найдем в доступных полях группировку “Пользовательские поля”, раскроем ее и увидим созданное нами поле “Цена”. Выбираем его двойным кликом или перенеся его мышкой в список выбранных полей.

Рис. 9 Перенос созданного поля в список выбранных

Видим, что наша настройка формата добавилась в таблицу на вкладке “Условное оформление”.

Рис. 10 Настройка формата добавлена в таблицу

Осталось разместить колонку “Цена” между колонками “Количество” и “Выручка” в 1С. Для этого переходим на закладку “Поля”. В списке доступных полей находим группировку “Пользовательские поля”, раскроем ее и увидим созданное нами поле “Цена”. Переносим его мышкой между колонками “Количество” и Выручка в 1С.

Важно обратить внимание, что в отчет 1С 8 выводятся только колонки, у которых стоит флаг использования. Поэтому неважно, что колонка “Цена” стоит перед колонками “Вес (нетто)” и “Объем”. Флаг использование у них не стоит, в отчет 1С 8 они выведены не будут.

Нажимаем кнопку “Завершить редактирование”.

Рис. 11 Перенос нового поля и завершение редактирования отчета в 1С

Переформируем отчет 1С 8 и посмотрим на результат

Рис. 12 Новый вид отчета “Валовая прибыль предприятия”

Специалист компании «Кодерлайн»

Максим Кригер

Деление на 0: как исправить ошибку в программах 1С?

Опубликовано 25.01.2022 16:09
Автор: Administrator
Просмотров: 15835

Совсем скоро предстоит начислять зарплату за январь в программах 1С. И большинство расчетчиков и бухгалтеров столкнутся с такой ошибкой в базах как «Деление на 0». Почему это происходит и как самостоятельно, не прибегая к помощи программистов, исправить самую частую ошибку января любого года расскажем в данной публикации. 

 Итак, ошибка выглядит следующим образом:

Возникает она потому, что не указана норма дней на новый календарный год.

Есть несколько причин почему так происходит:

1. Не заполнены графики работы на новый календарный год – это самая популярная ситуация.

В 1С: ЗУП ред. 3.1 они находятся в разделе «Настройка» – «Предприятие» — «Графики работы сотрудников», в 1С: Бухгалтерии предприятия ред. 3.0 — в разделе «Зарплата и кадры» — «Справочники и настройки» — «Графики работы».

По кнопке «Заполнить» сформируется график и ошибка уйдет.

Такие манипуляции необходимо сделать со всеми введенными графиками, в том числе индивидуальными.

2. Неверно заполнен производственный календарь

В вышеуказанных разделах 1С есть производственные календари. Редко, но бывает, что ошибка деления на 0 происходит из-за некорректно заполненного календаря.

На скриншоте приведен календарь на следующий 2023 год. Видите, он полностью красный? Именно так и выглядит эта ошибка. Разработчики к концу 2022 года ее поправят, и норма дней будет считаться корректно.

3. В графике работ все дни помечены как выходные

Да, такое тоже бывает. Иногда пользователи вводят индивидуальные графики сотрудникам, «играются» с их заполнением, но не всегда программа это понимает и порой выдает ошибку деления на 0.

4. Ошибка в формуле расчета

Иногда пользователю необходимо считать зарплату по своим индивидуальным формулам расчета. Но зачастую формула вводится неверно, отсюда и возникает эта ошибка. В этом случае мы рекомендуем обращаться к консультантам 1С. Возможно вашу формулу можно настроить штатными механизмами 1С.

Тут же стоит сказать еще об одной вытекающей из этого пункта ошибке — не верно настроен приоритет видов начислений. Именно в случае когда создается много начислений со своими формулами расчета они начинают конфликтовать со стандартным начислением оплаты по окладу.
Так что, друзья, не выдумываем велосипед там, где его давно изобрели, а обращаемся к специалистам 1С.

5. В редких случаях такая ошибка возникает в следствие экстренного отключения электроэнергии, аварийного завершения 1С. В этом случае необходимо почистить кэш и прибегнуть к тестированию базы 1С.

Автор статьи: Ирина Плотникова

Text.ru - 100.00%

Понравилась статья? Подпишитесь на рассылку новых материалов

Добавить комментарий

 +3 

   

Распечатать

Это сообщение возникает в том случае, если в алгоритме конфигурации Используется деление и не выполняется проверка значения делителя. Обычно эта ошибка возникает из-за того, что не заполнены какие-либо данные (сумма, количество, коэффициенты и т.п.). Необходимые для работы алгоритма данные должны быть заполнены, например, в документе или справочнике, элемент которого выбран в документе. Обычно эта проблема решается вводом необходимых для работы алгоритма данных и повторным запуском алгоритма (формирования отчета или проведения документов).

Решение:
в коде

Код 1C v 8.х

 //Просто проверка на то что Делитель не равен 0
Если Число(ШиринаБумаги) <> 0 Тогда
КолвоБумСПриладкой = КолвоБумаги / Число(ШиринаБумаги);
КонецЕсли;

в запросе:

Код 1C v 8.х

 ВЫБОР 
КОГДА ПартииТоваровНаСкладахОстатки.КоличествоОстаток = 0 ТОГДА 0
ИНАЧЕ ЕСТЬNULL(ПартииТоваровНаСкладахОстатки.СтоимостьОстаток / ПартииТоваровНаСкладахОстатки.КоличествоОстаток, 0)
КОНЕЦ КАК Себестоимость

  • 1с расширение ошибка инициализации модуля переменная не определена
  • 1с распределение расходов ошибка распределения
  • 1с рарус код ошибки 12057
  • 1с публикация на веб сервере iis ошибка 404
  • 1с публикация мобильного приложения ошибка 404