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