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