1с предприятие ошибка деление на 0

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

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

Совсем скоро предстоит начислять зарплату за январь в программах 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.      Обработка исключительной ситуации

2.      Совершаем ошибку в 1С 8.3

3.      А что еще можно делать с результатом попытки?

4.      А ваши транзакции то здесь при чём?  

1.      Обработка исключительной ситуации

—        Приветствую, Амиго! Ты, как я понял, пришёл на мою лекцию по физическим основам изготовления термитных пирамидок для заряда аппаратов гиперболоидной конструкции? Нет? А зачем тогда?

—        Здравствуйте, профессор. Сегодня мы собирались разобрать конструкцию «Попытка-Исключение».

—        А… Это… Ну, тогда вот:

—        Кажется, понятно. А можно примеров добавить?

—        Ох уж эти юные роботы, всегда хотят практики. С примерами это будет выглядеть вот так:

Ох, извини, это для старых баз. На новых космолётах с прошивкой выше 8.1 есть более удобный способ узнать код ошибки.  

2.      Совершаем ошибку в 1С 8.3

Ты и сам можешь попробовать. Главное – придумать ошибку в 1С 8.3. Самая простая ошибка – это разделить что-нибудь на нуль или на, как это говорят на современном сленге, ноль.

В ответ получим:

Нажимаем на кнопку «Подробно…» и видим: Деление на 0 {NudlsProff_Расширение.NudlsProff_ФормаОшибок.Форма(96)}: Результат = 1/0

Добавляем нашей красоты:

Теперь пользователю ВИДНО, что случилось. И ПОНЯТНО, что с этим делать.

Описание=’Деление на 0′

ИмяМодуля=’NudlsProff_Расширение.NudlsProff_ФормаОшибок.Форма’

НомерСтроки=99

ИсходнаяСтрока=’        Результат = 1 / 0;’

Позвоните Профессору Нудлсупо тел+7 (495) 125-23-77

и ознакомьтесь с теорией деления на ноль

https://elementy.ru/email/1530320/Pochemu_nelzya_delit_na_nol     

3.      А что еще можно делать с результатом попытки?

—        А что ещё мы можем делать в результате с попыткой?

—        Мы можем обработать попытку в попытке.

По своей сути Попытка-Исключение – это отлов исключительной ситуации. Ситуации, которая может произойти. Возможно, даже и не по вине юного робота. Робот же должен учесть все возможные ситуации при написании кода и обработать их. Но наш мир не идеален и даже программы не всегда работают идеально. Именно тогда мы и должны проанализировать возможные последствия и понять, что для нас важнее: чтобы код выполнился до конца или вызвать прерывание работы ошибочного кусочка кода, но дать пользователю исправить ситуацию и продолжить работу.

—        Профессор, Вы опять забыли про примеры.

—        Ах, да, конечно. Например, мы записывали файл на диск. Пользователь, конечно, выбрал папку для записи файла, но случайно удалил её во время работы программы. Вся наша программа рухнет из-за невнимательности.

Нельзя просто обернуть код в попытку и обезопасить себя от последствий. Также неправильно и маскировать ошибку общими фразами – дальнейший поиск и исправление этого бага вызовет уйму вопросов. Нужно показать максимально информативное сообщение пользователю, чтобы он передал его в службу поддержки. Всё-же, исключительная ситуация – это баг, который нужно исправлять.  

4.      А ваши транзакции то здесь при чем?

—        То есть если в программе что-то может пойти не так, например, при записи файла на диск, обработке web-hook, работе с API, синхронизации с другими базами, записи изменений в справочник или документ, для безопасности я должен обернуть потенциально опасный кусочек кода в Попытку-Исключение, и тем самым пользователь сможет продолжить работу, а мы всегда будем знать, где именно и почему возникает ошибка?

—        Да, Амиго, все верно! Кстати, поскольку уж речь зашла о записи объектов баз данных, очень важно не забывать правильно закрывать ваши транзакции:

 

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

Алексей Зятнин

 

Добрый день.
При импорте заказов с сайта возникает ошибка «Деление на 0». Откуда такое может возникать?

1С:Предприятие 8.3 (8.3.6.2076)
Управление торговлей, редакция 11.1 (11.1.10.193)
Версия установленного модуля 5.0.0.8

 

Администратор

Сообщений: 5188
Баллов: 875
Регистрация: 16.10.2013

количество заказанного товара у заказа 0. Из за этого.

 

Да вроде нет. Один заказ в 1С пришел, потом ошибка. Я проверил следующий заказ в нем все товары по 1шт.
Да и вообще как-то непонятно. Из 8 заказов в 1С пришел только 1.  

 

Администратор

Сообщений: 5188
Баллов: 875
Регистрация: 16.10.2013

на втором заказе ошибка и потом обмен упал. Все логично. Напишите в техподдержку. Пусть они смотрят, где 0 в XML

 

Добрый день.
Причина аналогичной проблемы с такой же версией обмена обнаружена при стоимости доставки равной нулю (0).
Решение этого вопроса я пока не нашел.
Если где есть ответ — подскажите.
Спасибо.

 

Аналогичная проблема, кто-нибудь поборол?

 

Администратор

Сообщений: 5188
Баллов: 875
Регистрация: 16.10.2013

Есть подозрение, что это из за скидки. Этот момент должны поправить в БУС, чтобы 0 доставка не выгружалась

 

Немного непонятно — необходимо ждать обновления Битрикса или модуля обмена?

 

та же проблема — заказ приготовили под отправку но клиент пришел сам — заказ был изменен и сумма доставки изменена на 0

       <Товар>
           <Ид>ORDER_DELIVERY</Ид>
           <Наименование>Доставка заказа</Наименование>
           <Единица>
               <Код>796</Код>
               <НаименованиеПолное>Штука</НаименованиеПолное>
           </Единица>
           <Коэффициент>1</Коэффициент>
           <ЦенаЗаЕдиницу>0.0000</ЦенаЗаЕдиницу>
           <Количество>1</Количество>
           <Сумма>0.0000</Сумма>
           <ЗначенияРеквизитов>
               <ЗначениеРеквизита>
                   <Наименование>ВидНоменклатуры</Наименование>
                   <Значение>Услуга</Значение>
               </ЗначениеРеквизита>
               <ЗначениеРеквизита>
                   <Наименование>ТипНоменклатуры</Наименование>
                   <Значение>Услуга</Значение>
               </ЗначениеРеквизита>
           </ЗначенияРеквизитов>
       </Товар>

Александр так кто должен это исправить? И есть ли это в планах? У нас таких заказов довольно много.

 

2

kavd

: Техподдержка отписалась 12.05.2016 что ошибка исправлена, требуется установить обновления Битрикса:

«Автоматическое сообщение о выгрузке обновления

«Создаётся второй документ отгрузки.»
Модуль: sale, версия: 16.0.25
Решение: исправлено
Номер обращения в разработку: 73009.
Обратите внимание, что обычно обновления выходят в статусе бета. Если вы  не видите это обновление в списке, можете включить установку бета  версий на странице обновлений или подождать (в среднем две недели),  когда обновление будет иметь статус стабильного»    

 

Администратор

Сообщений: 5188
Баллов: 875
Регистрация: 16.10.2013

Дополнительная проверка(со стороны 1С) деления на 0 будет в следующей версии модуля 1С

 

Пользователь 97673

Заглянувший

Сообщений: 18
Регистрация: 31.07.2011

#12

01.06.2016 21:53:37

Цитата
Евгений Черемных написал:
2  kavd : Техподдержка отписалась 12.05.2016 что ошибка исправлена, требуется установить обновления Битрикса:

«Автоматическое сообщение о выгрузке обновления

«Создаётся второй документ отгрузки.»
Модуль: sale, версия: 16.0.25
Решение: исправлено
Номер обращения в разработку: 73009.

Евгений — а в какой версии это исправлено? У меня 16.0.27 и там эта проблема имеется.
и не очень понятно при чем тут «Создаётся второй документ отгрузки.»  

 

2 kavd: Вот и мне непонятно, но таков ответ ТП. Там, правда, еще приписочка была, вот она: «Обратите внимание, что  обычно обновления выходят в статусе бета. Если вы не видите это  обновление в списке, можете включить установку бета версий на странице  обновлений или подождать (в среднем две недели), когда обновление будет  иметь статус стабильного.»

2

Александр Денисюк

: в обновлении для УТ 11.1 тоже будет поправлено или вы развитие остановили на 5.0.0.8 ?

 

Евгений — про бету это стандартная приписка — уточните у них что они решили именно эту проблему и в каком точно релизе

 

Пользователь 97673

Заглянувший

Сообщений: 18
Регистрация: 31.07.2011

#15

15.06.2016 22:18:38

Цитата
Александр Денисюк написал:
http://1c.1c-bitrix.ru/support/forum/user/221269/:

Александр — в новом модуле 6.0.2.1 эта ошибка «деление на 0» не исправлена — причина та же — сумма доставки 0

 

Александр Денисюк

Администратор

Сообщений: 5188
Баллов: 875
Регистрация: 16.10.2013

#16

16.06.2016 10:54:47

Цитата
kavd написал:
Александр — в новом модуле 6.0.2.1 эта ошибка «деление на 0» не исправлена — причина та же — сумма доставки 0

не исправлена.

 

Пользователь 97673

Заглянувший

Сообщений: 18
Регистрация: 31.07.2011

#17

16.06.2016 12:03:36

Цитата
Александр Денисюк написал:

Цитата
kavd  написал:
Александр — в новом модуле 6.0.2.1 эта ошибка «деление на 0» не исправлена — причина та же — сумма доставки 0

не исправлена.

А можно узнать какова ее судьба? Ранее вы утверждали что будет исправлено в новом модуле — мы его ждали а теперь выясняется что напрасно.

 

при выгрузке каталога на сайт выдает ошибку «деление на 0»
опытным путем выяснил что причина в ценах. Цены все установлены проверено. в итоге товаров нет либо есть но с нулевыми ценами.

 

Пользователь 75301

Заглянувший

Сообщений: 3
Регистрация: 04.11.2010

#19

23.06.2016 13:12:21

Цитата
Александр Денисюк написал:

Цитата
kavd  написал:
Александр — в новом модуле 6.0.2.1 эта ошибка «деление на 0» не исправлена — причина та же — сумма доставки 0

не исправлена.

Александр ответьте пожалуйста когда будет исправлена эта ошибка — вы обещали еще в прошлой версии

 

Добрый вечер. Столкнулся с такой же проблемой. Когда в модуле обмена стоит «Если у документа есть скидка, то в документ она попадает как ручная скидка» и в заказе есть скидка обмен падает и выдает ошибку «Деление на 0». Как это можно победить?

 

Добрый день! Производим выгрузку в каталог, УТ 11.3.3.226 установлен последний модуль 6.5.0.1, настроена выгружать цены, цены на номенклатуру установлены, установлено выгружать остатки, остатки на складах имеются. При выгрузке в каталог не приходят ни цены ни остатки, по окончанию выгрузки выдает ошибку «Деление на 0»
Коллеги помогите, в чем может быть причина такого поведения?  

 

Пользователь 417675

Эксперт

Сообщений: 273
Баллов: 46
Регистрация: 08.07.2016

#22

18.07.2017 13:00:59

Цитата
Тамара Маргия написал:
Добрый день! Производим выгрузку в каталог, УТ 11.3.3.226 установлен последний модуль 6.5.0.1, настроена выгружать цены, цены на номенклатуру установлены, установлено выгружать остатки, остатки на складах имеются. При выгрузке в каталог не приходят ни цены ни остатки, по окончанию выгрузки выдает ошибку «Деление на 0″Коллеги помогите, в чем может быть причина такого поведения?  

В запросе главном не увидел деления.
В папку тоже не выгружает?

Вам бы в отладке в 1С посмотреть, поставить остановку по ошибке.

Деление может быть при расчете веса, объема, например.

 

Пользователь 1276369

Заглянувший

Сообщений: 2
Регистрация: 18.07.2017

#23

18.07.2017 14:20:25

Цитата
Алексей Беспалов написал:
В запросе главном не увидел деления.В папку тоже не выгружает?Вам бы в отладке в 1С посмотреть, поставить остановку по ошибке.Деление может быть при расчете веса, объема, например

в папку тоже не выгружает
вес и объем в программе не ведется у номенклатуры.

 

Пользователь 1312067

Заглянувший

Сообщений: 20
Баллов: 1
Регистрация: 06.08.2017

#24

06.08.2017 03:45:36

Цитата
Тамара Маргия написал:

Цитата
Алексей Беспалов  написал:
В запросе главном не увидел деления.В папку тоже не выгружает?Вам бы в отладке в 1С посмотреть, поставить остановку по ошибке.Деление может быть при расчете веса, объема, например

в папку тоже не выгружает
вес и объем в программе не ведется у номенклатуры.

Тамара, та же ситуация что и у вас, нашлось решение?

 

Пользователь 1312067

Заглянувший

Сообщений: 20
Баллов: 1
Регистрация: 06.08.2017

#25

06.08.2017 05:23:38

Опишу немного подробнее проблему.
УТ 11.2, БУС 17.0.11 (на 16й так же пробовали)

При стандартном обмене с сайтом, товары, остатки и цены выгружаются нормально.
Если же использовать модуль обмена версии 6.0.3.4, то при попытке выгрузить товары с остатками и ценами, на этапе выгрузке цен вылетает «Деление на 0».

Хочу сделать чтобы системы при отсутствии какого либо товара выдавала ошибку и запрещала проведение документа Расходная,  а так же при проведении формировала движение документа и рассчитывала стоимость по этой формуле


Движение.Стоимость = Выборка.Количество / Выборка.КоличествоОстаток * Выборка.СтоимостьОстаток;

Сам код модуля объекта документ расходная


Процедура ОбработкаПроведения(Отказ, РежимПроведения)



Движения.ОстаткиТоваров.Записывать = Истина;
Движения.ОстаткиТоваров.Очистить(); // очищать при перепроведении
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДокТЧ.Номенклатура КАК Номенклатура,
| СУММА(ДокТЧ.Количество) КАК Количество,
| МАКСИМУМ(ЕСТЬNULL(ОстаткиТоваровОстатки.КоличествоОстаток, 0)) КАК КоличествоОстаток,
| МАКСИМУМ(ЕСТЬNULL(ОстаткиТоваровОстатки.СтоимостьОстаток, 0)) КАК СтоимостьОстаток
|ИЗ
| Документ.Расходная.Товары КАК ДокТЧ
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(&МоментВремени, ) КАК ОстаткиТоваровОстатки
| ПО ДокТЧ.Ссылка = ОстаткиТоваровОстатки.Номенклатура
|ГДЕ
| (НЕ ДокТЧ.Номенклатура.Услуга)
| И ДокТЧ.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| ДокТЧ.Номенклатура";

Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
Запрос.УстановитьПараметр("Ссылка", Ссылка);

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

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

Пока Выборка.Следующий() Цикл

Если Выборка.Количество > Выборка.КоличествоОстаток Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не хватает товара" + Выборка.Номенклатура + """, из необходимых " + Выборка.КоличествоОстаток;
Сообщение.Сообщить();

Отказ = Истина;
Движения.ОстаткиТоваров.Записывать = Ложь;

КонецЕсли;

Движение = Движения.ОстаткиТоваров.ДобавитьРасход();
Движение.Период = Дата;
Движение.Номенклатура = Выборка.Номенклатура;
Движение.Количество = Выборка.Количество;
Движение.Стоимость = Выборка.Количество / Выборка.КоличествоОстаток * Выборка.СтоимостьОстаток;

КонецЦикла;

//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА


КонецПроцедуры

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

  • 1с почта подключиться выдает ошибку
  • 1с постоянно вылетает непредвиденная ошибка
  • 1с после обновления платформы ошибка потока
  • 1с после динамического обновления ошибка формата потока
  • 1с попытка исключение сообщение об ошибке