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