Процедура ТабличноеПоле1НоменклатураПриИзменении(Элемент)   



       ЭлементыФормы.Товары.ТекущиеДанные.Цена = Элемент.Значение.Цена;  

       ТоварыПриАктивизацииСтроки(ЭлементыФормы.Товары);

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

 

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

       Если ПолучитьФорму().ПолучениеОстатковВмодуле = 0 Тогда

                       

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

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

                                  

                              "ВЫБРАТЬ

                               |     ВложенныйЗапрос.Номенклатура,

                               |     ВложенныйЗапрос.Количество,

                               |     ОстаткиНоменлатурыОстатки.КоличествоОстаток,

                               |     ОстаткиНоменлатурыОстатки.СуммаОстаток

                               |ИЗ

                               |     (ВЫБРАТЬ

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

                               |                 СУММА(РасходнаяНакладнаяТовары.Количество) КАК Количество

                               |     ИЗ

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

                               |     ГДЕ

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

                               |                 И (НЕ РасходнаяНакладнаяТовары.Номенклатура = &Ссылка)

                               |         

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

                               |                 РасходнаяНакладнаяТовары.Номенклатура) КАК ВложенныйЗапрос

                               |                 ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменлатуры.Остатки(

                               |                                        &МоментВремени,

                               |                                        Номенклатура В

                               |                                                    (ВЫБРАТЬ РАЗЛИЧНЫЕ

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

                               |                                                    ИЗ

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

                               |                                                    ГДЕ

                               |                                                                РасходнаяНакладнаяТовары.Ссылка = &Ссылка)) КАК ОстаткиНоменлатурыОстатки

                               |                 ПО (ВложенныйЗапрос.Номенклатура = ОстаткиНоменлатурыОстатки.Номенклатура)";

                               

                              Если Режим = РежимПроведенияДокумента.Оперативный Тогда

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

                              | ДЛЯ ИЗМЕНЕНИЯ

                              | РегистрНакопления.ОстаткиНоменклатуры.Остатки";

                                           КонецЕсли;    

                               

                              Если Режим = РежимПроведенияДокумента.Оперативный Тогда       

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

                                           Иначе 

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

                                           КонецЕсли; 

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

                       

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

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

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

                                          ОстКол = ?(СтрокаВыборки.КоличествоОстаток = Null, 0, СтрокаВыборки.КоличествоОстаток);

   

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

                   Сообщить("Товара """ + СокрЛП(СтрокаВыборки.Номенклатура) + 

                   """ на всех складах не хватило. Реально есть " + ОстКол+"."+Символы.ПС+

                   "Документ расходная накладная №"+Номер+" от "+Дата+" не проводится!");

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

                   Продолжить;

                   КонецЕсли; 

   

                   ОстСумма = ?(СтрокаВыборки.СуммаОстаток = Null, 0, СтрокаВыборки.СуммаОстаток);    

                   СуммаСписания=?(ОстКол=СтрокаВыборки.Количество,ОстСумма,Окр(ОстСумма/ОстКол*СтрокаВыборки.Количество,2));    

                   Движение = Движения.ОстаткиНоменклатуры.Добавить();

                   Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

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

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

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

                  Движение.Сумма = СуммаСписания;

                   КонецЦикла;                     

       Иначе

                   ОстаткиНоменклатуры=РегистрыНакопления.ОстаткиНоменклатуры;

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

                               Если ТекСтрокаТаблицаТоваров.Номенклатура.Услуга

                                           Тогда Продолжить

                               КонецЕсли;     

                   //Проверка остатка при любом проведении

                   ФильтрПоРегистру = Новый Структура("Номенклатура");

                   ФильтрПоРегистру.Номенклатура = ТекСтрокаТаблицаТоваров.Номенклатура;    

                              Если Режим = РежимПроведенияДокумента.Оперативный Тогда

                   ТаблицаОстатков = ОстаткиНоменклатуры.Остатки(,ФильтрПоРегистру,"Номенклатура",);

                   Иначе

                    МомВр=Ссылка.МоментВремени();

                    ТаблицаОстатков = ОстаткиНоменклатуры.Остатки(МомВр,ФильтрПоРегистру,"Номенклатура",);

                   КонецЕсли;

   

                   ОстКол = ТаблицаОстатков.Итог("Количество");

   

                   Если ОстКол < ТекСтрокаТаблицаТоваров.Количество Тогда

                   Сообщить("В строке "+ТекСтрокаТаблицаТоваров.НомерСтроки+" товара """ +

                   СокрЛП(ТекСтрокаТаблицаТоваров.Номенклатура) + 

                   """ на всех складах не хватило. Реально есть " + ОстКол+"."+Символы.ПС+

                   "Документ расходная накладная №"+Номер+" от "+Дата+" не проводится!");

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

                    Продолжить;

                   КонецЕсли;

         

   

                   ОстСумма = ТаблицаОстатков.Итог("Сумма");

   

                   СуммаСписания=?(ОстКол=ТекСтрокаТаблицаТоваров.Количество,ОстСумма,

                   Окр(ОстСумма/ОстКол*ТекСтрокаТаблицаТоваров.Количество,2));

   

                   Движение = Движения.ОстаткиНоменклатуры.Добавить();

                   Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

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

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

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

                   Движение.Сумма = СуммаСписания;

                   КонецЦикла;

       КонецЕсли;

Движения.ОстаткиНоменклатуры.Записать();

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

 

Вывод:

В ходе выполнения лабораторной была создана конфигурация для работы с расходной накладной на предприятии. Были получены навыки работы с документом, создания форм ввода данных и организации работы регистров сведений и накопления.


Дата добавления: 2018-02-15; просмотров: 89; ЗАКАЗАТЬ РАБОТУ