Untitled
unknown
plain_text
2 years ago
7.3 kB
8
Indexable
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
// Согласно условию закупка производится на основании Заказа покупателя, реализуем ввод на основании
Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда
ЗаказПокупателя = ДанныеЗаполнения.Ссылка;
Для Каждого ТекСтрокаСписокНоменклатуры Из ДанныеЗаполнения.СписокНоменклатуры Цикл
НоваяСтрока = СписокНоменклатуры.Добавить();
НоваяСтрока.Количество = ТекСтрокаСписокНоменклатуры.Количество;
НоваяСтрока.Номенклатура = ТекСтрокаСписокНоменклатуры.Номенклатура;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаПроведенияОУ(Отказ)
// ДВИЖЕНИЯ ПО РЕГИСТРУ ОСТАТКИ НОМЕНКЛАТУРЫ (СТАРАЯ МЕТОДИКА ПРОВЕДЕНИЯ)
Движения.ОстаткиНоменклатуры.Записывать = Истина;
Движения.ОстаткиНоменклатуры.Записать();
// Установка блокировки данных в регистре по Заказу покупателя документа и списку номенклатур табличной части
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
ЭлементБлокировки.УстановитьЗначение("ЗаказПокупателя", ЗаказПокупателя);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
Блокировка.Заблокировать();
// Получение данных для формирования движений
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,
| СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество
|ПОМЕСТИТЬ ВТ_СписокНоменклатуры
|ИЗ
| Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
|ГДЕ
| РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_СписокНоменклатуры.Номенклатура КАК Номенклатура,
| ВТ_СписокНоменклатуры.Номенклатура.Представление КАК НоменклатураПредставление,
| ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
| ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0) КАК СуммаОстаток,
| ВТ_СписокНоменклатуры.Количество КАК КоличествоВДокументе
|ИЗ
| ВТ_СписокНоменклатуры КАК ВТ_СписокНоменклатуры
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(
| &МоментВремени,
| ЗаказПокупателя = &ЗаказПокупателя
| И Номенклатура В
| (ВЫБРАТЬ
| ВТ_СписокНоменклатуры.Номенклатура КАК Номенклатура
| ИЗ
| ВТ_СписокНоменклатуры КАК ВТ_СписокНоменклатуры)) КАК ОстаткиНоменклатурыОстатки
| ПО ВТ_СписокНоменклатуры.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
Запрос.УстановитьПараметр("ЗаказПокупателя", ЗаказПокупателя);
// Обход результатов запроса
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Превышение = Выборка.КоличествоВДокументе - Выборка.КоличествоОстаток;
Если Превышение > 0 Тогда
// Контроль наличия номенклатуры
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = СтрШаблон("Превышение остатка по номенклатуре %1 в количестве %2",
Выборка.НоменклатураПредставление, Превышение);
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;
Если Отказ Тогда
Продолжить;
КонецЕсли;
// Движение по регистру Остатки номенклатуры
Движение = Движения.ОстаткиНоменклатуры.ДобавитьРасход();
Движение.Период = Дата;
Движение.ЗаказПокупателя = ЗаказПокупателя;
Движение.Номенклатура = Выборка.Номенклатура;
Движение.Количество = Выборка.КоличествоВДокументе;
Движение.Сумма = Выборка.КоличествоВДокументе / Выборка.КоличествоОстаток * Выборка.СуммаОстаток;
КонецЦикла;
КонецПроцедуры
Editor is loading...