Answer the question
In order to leave comments, you need to log in
Why is an Error reading a value in 1s being issued?
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ОстаткиТоваров.Записывать = Истина;
Движения.Продажи.Записывать = Истина;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СУММА(ЕСТЬNULL(ОстаткиТоваровОстатки.КоличествоОстаток, 0)) КАК КоличествоОстаток,
| ОстаткиТоваровОстатки.Номенклатура КАК Номенклатура,
| СУММА(ЕСТЬNULL(ОстаткиТоваровОстатки.СуммаОстаток, 0)) КАК СуммаОстаток,
| СУММА(ЕСТЬNULL(РасходРасходТЧ.Количество, 0)) КАК Количество
|ИЗ
| Документ.Расход.РасходТЧ КАК РасходРасходТЧ
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки
| ПО ОстаткиТоваровОстатки.Номенклатура = РасходРасходТЧ.Номенклатура
|
|СГРУППИРОВАТЬ ПО
| ОстаткиТоваровОстатки.Номенклатура";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Количество > Выборка.КоличествоОстаток Тогда
Движения.ОстаткиТоваров.Записывать = Ложь;
Движения.Продажи.Записывать = Ложь;
Сообщить("Недостаточно товара на складе!");
КонецЕсли;
СуммаСебестоимость = 0;
СуммаСебестоимость = Выборка.СуммаОстаток / Выборка.КоличествоОстаток * Выборка.Количество;
Для Каждого ТекСтрокаРасходТЧ Из РасходТЧ Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаРасходТЧ.Номенклатура;
Движение.Количество = Выборка.Количество;
Движение.Сумма = СуммаСебестоимость;
Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаРасходТЧ.Номенклатура;
Движение.Количество = Выборка.Количество;
Движение.Сумма = Выборка.Сумма;
КонецЦикла;
КонецПроцедуры
Answer the question
In order to leave comments, you need to log in
The selection is received, but its traversal (while selection.next(), etc.) is not carried out. In general, in the current version, there are several lines in the selection, including possible nulls by nomenclature. I would throw out this code and start with a verbal description of the desired algorithm.
Well, the algorithm is not correct.
As I understood the goal is to find the remains, if they are enough to create a record.
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Количество > Выборка.КоличествоОстаток Тогда
Движения.ОстаткиТоваров.Записывать = Ложь;
Движения.Продажи.Записывать = Ложь;
Сообщить("Недостаточно товара на складе!");
КонецЕсли;
Для Каждого ТекСтрокаРасходТЧ Из РасходТЧ Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question