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