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