|
0
HolySheep
04.12.25
✎
10:58
|
Добрый день. Для учебы выполняю задания по 1с сборника чистова. Задача 11.
При проведении документа "расходная накладная" в расходе в любом случае указывается единица, даже если указано другое количество
Вот модуль объекта
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ОстаткиНоменклатуры.Записать();
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,
| СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
| РасходнаяНакладнаяСписокНоменклатуры.Партия КАК Партия
|ПОМЕСТИТЬ Товары
|ИЗ
| Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
|ГДЕ
| РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
| РасходнаяНакладнаяСписокНоменклатуры.Партия
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОстаткиНоменклатурыОстатки.Партия КАК Партия,
| ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
| Товары.Номенклатура КАК Номенклатура,
| ПРЕДСТАВЛЕНИЕ(Товары.Номенклатура) КАК НоменклатураП,
| Товары.Количество КАК Количество
|ИЗ
| Товары КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(&МоментВремени, ) КАК ОстаткиНоменклатурыОстатки
| ПО Товары.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура
| И (Товары.Партия <> ДАТАВРЕМЯ(1, 1, 1)
| И Товары.Партия = ОстаткиНоменклатурыОстатки.Партия
| ИЛИ Товары.Партия = ДАТАВРЕМЯ(1, 1, 1))
|
|УПОРЯДОЧИТЬ ПО
| ОстаткиНоменклатурыОстатки.Партия
|ИТОГИ
| СУММА(КоличествоОстаток),
| МАКСИМУМ(Количество)
|ПО
| Номенклатура";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Если Режим = РежимПроведенияДокумента.Оперативный Тогда
Запрос.УстановитьПараметр("МоментВремени", Неопределено)
Иначе
Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
КонецЕсли;
ВыборкаТовары = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Движения.ОстаткиНоменклатуры.Записывать = Истина;
Пока ВыборкаТовары.Следующий() Цикл
Если ВыборкаТовары.Количество > ВыборкаТовары.КоличествоОстаток Тогда
Сообщить("Не хватает товаров " + ВыборкаТовары.НоменклатураП + " "
+ (ВыборкаТовары.Количество - ВыборкаТовары.КоличествоОстаток));
Отказ = Истина;
Продолжить;
КонецЕсли;
ОсталосьСписать = ВыборкаТовары.Количество();
ВыборкаПартии = ВыборкаТовары.Выбрать();
Пока ВыборкаПартии.Следующий() И ОсталосьСписать > 0 Цикл
Если ВыборкаПартии.КоличествоОстаток <= ОсталосьСписать Тогда
СписатьКоличество = ВыборкаПартии.КоличествоОстаток;
ОсталосьСписать = ОсталосьСписать - СписатьКоличество;
Иначе
СписатьКоличество = ОсталосьСписать;
ОсталосьСписать = 0;
КонецЕсли;
Если СписатьКоличество > 0 Тогда
Движение = Движения.ОстаткиНоменклатуры.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаТовары.Номенклатура;
Движение.Партия = ВыборкаПартии.Партия;
Движение.Количество = СписатьКоличество;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
И ФОРМА ДОКУМЕНТА
&НаСервереБезКонтекста
Функция ПолучитьПартии(Номенклатура)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОстаткиНоменклатурыОстатки.Партия КАК Партия
|ИЗ
| РегистрНакопления.ОстаткиНоменклатуры.Остатки(, Номенклатура = &Номенклатура) КАК ОстаткиНоменклатурыОстатки";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Результат = Запрос.Выполнить().Выгрузить();
Спс = Новый СписокЗначений;
Спс.ЗагрузитьЗначения(Результат.ВыгрузитьКолонку("Партия"));
Возврат Спс;
КонецФункции
&НаКлиенте
Процедура СписокНоменклатурыПартияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтрокаТЧ = Элементы.СписокНоменклатуры.ТекущиеДанные;
ДанныеВыбора = ПолучитьПартии(СтрокаТЧ.Номенклатура);
СтандартнаяОбработка = Ложь;
Если ДанныеВыбора.Количество() = 0 Тогда
Сообщить("Партии отсутствуют");
КонецЕсли;
КонецПроцедуры
|
|
|
8
HolySheep
04.12.25
✎
12:49
|
(7) в моем понимании, Должно вернуть количество товаров, но я уже не уверена, что это правильно
|
|