Деление на 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С.
Автор статьи: Ирина Плотникова
Понравилась статья? Подпишитесь на рассылку новых материалов
Добавить комментарий
+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, синхронизации с другими базами, записи изменений в справочник или документ, для безопасности я должен обернуть потенциально опасный кусочек кода в Попытку-Исключение, и тем самым пользователь сможет продолжить работу, а мы всегда будем знать, где именно и почему возникает ошибка?
— Да, Амиго, все верно! Кстати, поскольку уж речь зашла о записи объектов баз данных, очень важно не забывать правильно закрывать ваши транзакции:
Специалист компании «Кодерлайн»
Алексей Зятнин
Добрый день. 1С:Предприятие 8.3 (8.3.6.2076) |
|
Администратор Сообщений: 5188 |
количество заказанного товара у заказа 0. Из за этого. |
Да вроде нет. Один заказ в 1С пришел, потом ошибка. Я проверил следующий заказ в нем все товары по 1шт. |
|
Администратор Сообщений: 5188 |
на втором заказе ошибка и потом обмен упал. Все логично. Напишите в техподдержку. Пусть они смотрят, где 0 в XML |
Добрый день. |
|
Аналогичная проблема, кто-нибудь поборол? |
|
Администратор Сообщений: 5188 |
Есть подозрение, что это из за скидки. Этот момент должны поправить в БУС, чтобы 0 доставка не выгружалась |
Немного непонятно — необходимо ждать обновления Битрикса или модуля обмена? |
|
та же проблема — заказ приготовили под отправку но клиент пришел сам — заказ был изменен и сумма доставки изменена на 0 <Товар> Александр так кто должен это исправить? И есть ли это в планах? У нас таких заказов довольно много. |
|
2 kavd : Техподдержка отписалась 12.05.2016 что ошибка исправлена, требуется установить обновления Битрикса: «Автоматическое сообщение о выгрузке обновления «Создаётся второй документ отгрузки.» |
|
Администратор Сообщений: 5188 |
Дополнительная проверка(со стороны 1С) деления на 0 будет в следующей версии модуля 1С |
Пользователь 97673 Заглянувший Сообщений: 18 |
#12 01.06.2016 21:53:37
Евгений — а в какой версии это исправлено? У меня 16.0.27 и там эта проблема имеется. |
||
2 kavd: Вот и мне непонятно, но таков ответ ТП. Там, правда, еще приписочка была, вот она: «Обратите внимание, что обычно обновления выходят в статусе бета. Если вы не видите это обновление в списке, можете включить установку бета версий на странице обновлений или подождать (в среднем две недели), когда обновление будет иметь статус стабильного.» 2 Александр Денисюк : в обновлении для УТ 11.1 тоже будет поправлено или вы развитие остановили на 5.0.0.8 ? |
|
Евгений — про бету это стандартная приписка — уточните у них что они решили именно эту проблему и в каком точно релизе |
|
Пользователь 97673 Заглянувший Сообщений: 18 |
#15 15.06.2016 22:18:38
Александр — в новом модуле 6.0.2.1 эта ошибка «деление на 0» не исправлена — причина та же — сумма доставки 0 |
||
Александр Денисюк
Администратор Сообщений: 5188 |
#16 16.06.2016 10:54:47
не исправлена. |
||
Пользователь 97673 Заглянувший Сообщений: 18 |
#17 16.06.2016 12:03:36
А можно узнать какова ее судьба? Ранее вы утверждали что будет исправлено в новом модуле — мы его ждали а теперь выясняется что напрасно. |
||||
при выгрузке каталога на сайт выдает ошибку «деление на 0» |
|
Пользователь 75301 Заглянувший Сообщений: 3 |
#19 23.06.2016 13:12:21
Александр ответьте пожалуйста когда будет исправлена эта ошибка — вы обещали еще в прошлой версии |
||||
Добрый вечер. Столкнулся с такой же проблемой. Когда в модуле обмена стоит «Если у документа есть скидка, то в документ она попадает как ручная скидка» и в заказе есть скидка обмен падает и выдает ошибку «Деление на 0». Как это можно победить? |
|
Добрый день! Производим выгрузку в каталог, УТ 11.3.3.226 установлен последний модуль 6.5.0.1, настроена выгружать цены, цены на номенклатуру установлены, установлено выгружать остатки, остатки на складах имеются. При выгрузке в каталог не приходят ни цены ни остатки, по окончанию выгрузки выдает ошибку «Деление на 0» |
|
Пользователь 417675 Эксперт Сообщений: 273 |
#22 18.07.2017 13:00:59
В запросе главном не увидел деления. Вам бы в отладке в 1С посмотреть, поставить остановку по ошибке. Деление может быть при расчете веса, объема, например. |
||
Пользователь 1276369 Заглянувший Сообщений: 2 |
#23 18.07.2017 14:20:25
в папку тоже не выгружает |
||
Пользователь 1312067 Заглянувший Сообщений: 20 |
#24 06.08.2017 03:45:36
Тамара, та же ситуация что и у вас, нашлось решение? |
||||
Пользователь 1312067 Заглянувший Сообщений: 20 |
#25 06.08.2017 05:23:38 Опишу немного подробнее проблему. При стандартном обмене с сайтом, товары, остатки и цены выгружаются нормально. |
Хочу сделать чтобы системы при отсутствии какого либо товара выдавала ошибку и запрещала проведение документа Расходная, а так же при проведении формировала движение документа и рассчитывала стоимость по этой формуле
Движение.Стоимость = Выборка.Количество / Выборка.КоличествоОстаток * Выборка.СтоимостьОстаток;
Сам код модуля объекта документ расходная
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.ОстаткиТоваров.Записывать = Истина;
Движения.ОстаткиТоваров.Очистить(); // очищать при перепроведении
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДокТЧ.Номенклатура КАК Номенклатура,
| СУММА(ДокТЧ.Количество) КАК Количество,
| МАКСИМУМ(ЕСТЬNULL(ОстаткиТоваровОстатки.КоличествоОстаток, 0)) КАК КоличествоОстаток,
| МАКСИМУМ(ЕСТЬNULL(ОстаткиТоваровОстатки.СтоимостьОстаток, 0)) КАК СтоимостьОстаток
|ИЗ
| Документ.Расходная.Товары КАК ДокТЧ
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(&МоментВремени, ) КАК ОстаткиТоваровОстатки
| ПО ДокТЧ.Ссылка = ОстаткиТоваровОстатки.Номенклатура
|ГДЕ
| (НЕ ДокТЧ.Номенклатура.Услуга)
| И ДокТЧ.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| ДокТЧ.Номенклатура";
Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
Запрос.УстановитьПараметр("Ссылка", Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.Количество > Выборка.КоличествоОстаток Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не хватает товара" + Выборка.Номенклатура + """, из необходимых " + Выборка.КоличествоОстаток;
Сообщение.Сообщить();
Отказ = Истина;
Движения.ОстаткиТоваров.Записывать = Ложь;
КонецЕсли;
Движение = Движения.ОстаткиТоваров.ДобавитьРасход();
Движение.Период = Дата;
Движение.Номенклатура = Выборка.Номенклатура;
Движение.Количество = Выборка.Количество;
Движение.Стоимость = Выборка.Количество / Выборка.КоличествоОстаток * Выборка.СтоимостьОстаток;
КонецЦикла;
//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
КонецПроцедуры
В итоге при проведении документа расходная вылезает ошибка «Деление на 0»
До этого в приходной сделал поступление товара с количеством 1000шт, в расходной пытаюсь списать 1 и вылетает ошибка. В регистре остатков есть запись по приходной, что пришло 1000шт.
В чем может быть проблема?