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