В начало

ОП «Проверка товара» в РН

 

            Есть документ «РасходнаяНакладная» и регистр накопления «ОстаткиТоваров».

            Необходимо проверить остаток товара перед проведением документа «РасходнаяНакладная» и при недостаточном количестве вывести сообщение и указать строку в документе какого именно товара не хватает.

 

Листинг 1. В модуле формы документа «РасходнаяНакладная»

Процедура ОбработкаПроведения (Отказ, Режим)

 

            Движения.ОстаткиТоваров.Записывать = Истина;

           

            Запрос = Новый Запрос;

            Запрос.Текст =

                        "ВЫБРАТЬ

                        |   МИНИМУМ (Расходная.НомерСтроки) КАК НомерСтроки,

                        |           Расходная.Номенклатура,

                        |           СУММА(Расходная.Количество) КАК Количество,

                        |           МАКСИМУМ(ЕСТЬNULL(Регистр.КоличествоОстаток, 0)) КАК КоличествоОстаток,

                        |           МАКСИМУМ(ЕСТЬNULL(Регистр.СтоимостьОстаток, 0)) КАК СтоимостьОстаток

                        |ИЗ

                        |           Документ.РасходнаяНакладная.Товары КАК Расходная

                        |                       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(&МоментВремени, ) КАК Регистр

                        |                       ПО Расходная.Номенклатура = Регистр.Номенклатура

                        |ГДЕ

                        |           Расходная.Ссылка = &Ссылка

                        |           И (НЕ Расходная.Номенклатура.Услуга)

                        |

                        |СГРУППИРОВАТЬ ПО

                        |           Расходная.Номенклатура";

 

            Запрос.УстановитьПараметр("Ссылка", Ссылка);

            Запрос.УстановитьПараметр("МоментВремени", МоментВремени());

 

            Результат = Запрос.Выполнить();

 

            Выборка = Результат.Выбрать();

 

            Пока Выборка.Следующий() Цикл

                        Если Выборка.Количество > Выборка.КоличествоОстаток Тогда

                                    //***********************************

                                   //Указывание пользователю строки

                                   //с недостающим товаром

                                   //***********************************

                                   Сообщение = Новый СообщениеПользователю();

                                   Сообщение.Текст = "Ругнуться что товара нет!";

                                   Сообщение.Поле = "Товары["  + (Выборка.НомерСтроки - 1) + "].Количество";

                                   Сообщение.УстановитьДанные(ЭтотОбъект);

                                   Сообщение.Сообщить();

                                   //***********************************

                                  

                                   Отказ = Истина;

                                   Движения.ОстаткиТоваров.Записывать = Ложь;

                        КонецЕсли;     

                       

            Если Отказ Тогда  //Заглушка

                        Продолжить;

            КонецЕсли;                             

           

            Движение = Движения.ОстаткиТоваров.ДобавитьРасход();

            Движение.Период = Дата;

            Движение.Номенклатура = Выборка.Номенклатура;

            Движение.Количество = Выборка.Количество;

            Движение.Стоимость = Выборка.Количество / Выборка.КоличествоОстаток *

                                 Выборка.СтоимостьОстаток;      

            КонецЦикла;

 

 

 

            Для Каждого ТекСтрокаТовары Из Товары Цикл

                        //Регистр накопления ОстаткиТоваров

                        Движение = Движения.ОстаткиТоваров.ДобавитьРасход();

                        Движение.Период = Дата;

                        Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;

                        Движение.Количество = ТекСтрокаТовары.Количество;

            КонецЦикла;

 

КонецПроцедуры