Процедура ТабличноеПоле1НоменклатураПриИзменении(Элемент)
ЭлементыФормы.Товары.ТекущиеДанные.Цена = Элемент.Значение.Цена;
ТоварыПриАктивизацииСтроки(ЭлементыФормы.Товары);
КонецПроцедуры
Процедура ОбработкаПроведения(Отказ, Режим)
Если ПолучитьФорму().ПолучениеОстатковВмодуле = 0 Тогда
Запрос = Новый Запрос; //1.1
Запрос.Текст =
"ВЫБРАТЬ
| ВложенныйЗапрос.Номенклатура,
| ВложенныйЗапрос.Количество,
| ОстаткиНоменлатурыОстатки.КоличествоОстаток,
| ОстаткиНоменлатурыОстатки.СуммаОстаток
|ИЗ
| (ВЫБРАТЬ
| РасходнаяНакладнаяТовары.Номенклатура КАК Номенклатура,
| СУММА(РасходнаяНакладнаяТовары.Количество) КАК Количество
| ИЗ
| Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары
| ГДЕ
| РасходнаяНакладнаяТовары.Ссылка = &Ссылка
|
|
| И (НЕ РасходнаяНакладнаяТовары.Номенклатура = &Ссылка)
|
| СГРУППИРОВАТЬ ПО
| РасходнаяНакладнаяТовары.Номенклатура) КАК ВложенныйЗапрос
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменлатуры.Остатки(
| &МоментВремени,
| Номенклатура В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| РасходнаяНакладнаяТовары.Номенклатура
| ИЗ
| Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары
|
|
| ГДЕ
| РасходнаяНакладнаяТовары.Ссылка = &Ссылка)) КАК ОстаткиНоменлатурыОстатки
| ПО (ВложенныйЗапрос.Номенклатура = ОстаткиНоменлатурыОстатки.Номенклатура)";
Если Режим = РежимПроведенияДокумента.Оперативный Тогда
Запрос.Текст = Запрос.Текст + "
| ДЛЯ ИЗМЕНЕНИЯ
| РегистрНакопления.ОстаткиНоменклатуры.Остатки";
КонецЕсли;
Если Режим = РежимПроведенияДокумента.Оперативный Тогда
Запрос.УстановитьПараметр("МоментВремени",Неопределено);
Иначе
Запрос.УстановитьПараметр("МоментВремени",МоментВремени());
|
|
КонецЕсли;
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Результат = Запрос.Выполнить(); //1.4
СтрокаВыборки = Результат.Выбрать(); //1.5
Пока СтрокаВыборки.Следующий() Цикл
ОстКол = ?(СтрокаВыборки.КоличествоОстаток = Null, 0, СтрокаВыборки.КоличествоОстаток);
Если ОстКол < СтрокаВыборки.Количество Тогда
Сообщить("Товара """ + СокрЛП(СтрокаВыборки.Номенклатура) +
""" на всех складах не хватило. Реально есть " + ОстКол+"."+Символы.ПС+
"Документ расходная накладная №"+Номер+" от "+Дата+" не проводится!");
Отказ = Истина;
Продолжить;
КонецЕсли;
ОстСумма = ?(СтрокаВыборки.СуммаОстаток = Null, 0, СтрокаВыборки.СуммаОстаток);
|
|
СуммаСписания=?(ОстКол=СтрокаВыборки.Количество,ОстСумма,Окр(ОстСумма/ОстКол*СтрокаВыборки.Количество,2));
Движение = Движения.ОстаткиНоменклатуры.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = СтрокаВыборки.Номенклатура;
Движение.Количество = СтрокаВыборки.Количество;
Движение.Сумма = СуммаСписания;
КонецЦикла;
Иначе
ОстаткиНоменклатуры=РегистрыНакопления.ОстаткиНоменклатуры;
Для Каждого ТекСтрокаТаблицаТоваров Из Товары Цикл
Если ТекСтрокаТаблицаТоваров.Номенклатура.Услуга
Тогда Продолжить
КонецЕсли;
//Проверка остатка при любом проведении
ФильтрПоРегистру = Новый Структура("Номенклатура");
ФильтрПоРегистру.Номенклатура = ТекСтрокаТаблицаТоваров.Номенклатура;
Если Режим = РежимПроведенияДокумента.Оперативный Тогда
ТаблицаОстатков = ОстаткиНоменклатуры.Остатки(,ФильтрПоРегистру,"Номенклатура",);
Иначе
МомВр=Ссылка.МоментВремени();
ТаблицаОстатков = ОстаткиНоменклатуры.Остатки(МомВр,ФильтрПоРегистру,"Номенклатура",);
КонецЕсли;
ОстКол = ТаблицаОстатков.Итог("Количество");
Если ОстКол < ТекСтрокаТаблицаТоваров.Количество Тогда
Сообщить("В строке "+ТекСтрокаТаблицаТоваров.НомерСтроки+" товара """ +
СокрЛП(ТекСтрокаТаблицаТоваров.Номенклатура) +
""" на всех складах не хватило. Реально есть " + ОстКол+"."+Символы.ПС+
"Документ расходная накладная №"+Номер+" от "+Дата+" не проводится!");
Отказ = Истина;
Продолжить;
КонецЕсли;
ОстСумма = ТаблицаОстатков.Итог("Сумма");
СуммаСписания=?(ОстКол=ТекСтрокаТаблицаТоваров.Количество,ОстСумма,
Окр(ОстСумма/ОстКол*ТекСтрокаТаблицаТоваров.Количество,2));
Движение = Движения.ОстаткиНоменклатуры.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаТаблицаТоваров.Номенклатура;
Движение.Количество = ТекСтрокаТаблицаТоваров.Количество;
Движение.Сумма = СуммаСписания;
КонецЦикла;
КонецЕсли;
Движения.ОстаткиНоменклатуры.Записать();
КонецПроцедуры
Вывод:
В ходе выполнения лабораторной была создана конфигурация для работы с расходной накладной на предприятии. Были получены навыки работы с документом, создания форм ввода данных и организации работы регистров сведений и накопления.
Дата добавления: 2018-02-15; просмотров: 290; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!