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