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