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