Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 12:37

Ошибка "Деление на 0"

Автор Dmitry Qwe, 21 авг 2017, 17:25

0 Пользователей и 1 гость просматривают эту тему.

Dmitry Qwe

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

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

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

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



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

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

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

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

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

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

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

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

КонецЕсли;

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

КонецЦикла;

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


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


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

oleg-x

Движение.Стоимость = Выборка.Количество / Выборка.КоличествоОстаток * Выборка.СтоимостьОстаток;
Либо количествоОстаток, либо СтоимостьОстаток равен нулю.
Делай исключение:
Движение.Стоимость = ?(Выборка.КоличествоОстаток * Выборка.СтоимостьОстаток,0,Выборка.Количество / Выборка.КоличествоОстаток * Выборка.СтоимостьОстаток)

Когда есть деление, всегда делай исключение, иначе могут быть не предвиденные проблемы.
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

Dmitry Qwe

Цитата: oleg-x от 21 авг 2017, 17:33Либо количествоОстаток

точно не может быть равно 0 потомучто отчет остатки товаров выводит количество остаток отлично
Добавлено: 21 авг 2017, 17:45


Цитата: oleg-x от 21 авг 2017, 17:33Движение.Стоимость = ?(Выборка.КоличествоОстаток * Выборка.СтоимостьОстаток,0,Выборка.Количество / Выборка.КоличествоОстаток * Выборка.СтоимостьОстаток)

Данный код не помог, все та же ошибка

oleg-x

1) На какой кусок кода у вас выпадает ошибка.
2) Пройдитесь отладчиком, там вам все станет ясно.
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

Dmitry Qwe

Цитата: oleg-x от 21 авг 2017, 18:02
2) Пройдитесь отладчиком, там вам все станет ясно.
Цитата: oleg-x от 21 авг 2017, 18:02Пройдитесь отладчиком, там вам все станет ясно.

Прошелся, действительно показывает что количествоОстаток 0 и стоимостьОстаток тоже 0, но как он может быть 0 если приходная создает движение по регистру без проблем?

Добавлено: 21 авг 2017, 18:22


Нашел, вот ошибка
ПО ДокТЧ.Ссылка = ОстаткиТоваровОстатки.Номенклатура

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск