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