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