Автоматическое распределение серий (партий) товаров при поступлении
В некоторых случаях необходимо, для увеличении скорости приемки партионного товара, автоматически
проводить оприходование товара по сериям (партиям) с указанием срока годности товара.
Делается это так:
1. Создается кнопка
2. Добавляется код в модуль формы
&НаКлиенте
Процедура РаспределитьПоПартиям(Команда)
Для каждого ТекСтрока из Объект.Товары цикл
Структура=Новый Структура;
Структура.Вставить("Номенклатура",ТекСтрока.Номенклатура);
Структура.Вставить("Характеристика",ТекСтрока.Характеристика);
Структура.Вставить("Количество",ТекСтрока.Количество);
Массив=Объект.Серии.НайтиСтроки(Структура);
Если Массив.Количество()>0 тогда
Продолжить;
Иначе
Серия=ЗаписатьПартииВРегистр(Объект.Дата,ТекСтрока.Цена,Объект.Контрагент,ТекСтрока.Номенклатура);
ТекСтрока.Серия=Серия;
НовСтрокаСерий=Объект.Серии.Добавить();
НовСтрокаСерий.Серия=Серия;
НовСтрокаСерий.Количество=ТекСтрока.Количество;
НовСтрокаСерий.Номенклатура=ТекСтрока.Номенклатура;
НовСтрокаСерий.Характеристика=ТекСтрока.Характеристика;
НовСтрокаСерий.Склад=Объект.Склад;
ПодготовитьЗаполнитьУстановитьВидимостьСерий();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ЗаписатьПартииВРегистр(ДатаПоставки,ЦенаПоставки,Поставщик,Номенклатура)
ЗапросНом=Новый Запрос;
ЗапросНом.Текст="ВЫБРАТЬ
| Номенклатура.ВидНоменклатуры.Ссылка КАК ВидНоменклатуры
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка = &Номенклатура
|
|СГРУППИРОВАТЬ ПО
| Номенклатура.ВидНоменклатуры.Ссылка"
;
ЗапросНом.Параметры.Вставить("Номенклатура",Номенклатура);
ВыборкаНом=ЗапросНом.Выполнить().Выбрать();
Пока ВыборкаНом.Следующий() цикл
ВидНоменклатуры=ВыборкаНом.ВидНоменклатуры;
КонецЦикла;
МаксимальныйНомерИзСправочника = Справочники.СерииНоменклатуры.ВычислитьМаксимальныйНомерСерии(ВидНоменклатуры);
НомерСерии=МаксимальныйНомерИзСправочника+1;
СерииНоменклатуры=Справочники.СерииНоменклатуры.СоздатьЭлемент();
СерииНоменклатуры.ВидНоменклатуры=ВидНоменклатуры;
СерииНоменклатуры.ГоденДо=ДатаПоставки;
СерииНоменклатуры.Номер=Формат(НомерСерии, "ЧЦ=8; ЧВН=; ЧГ=");
СерииНоменклатуры.Наименование=Строка(НомерСерии)+" до "+ДатаПоставки+" (Серия номенклатуры)";
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| ДополнительныеРеквизитыИСведения.Ссылка,
| ДополнительныеРеквизитыИСведения.Наименование
|ИЗ
| ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
|ГДЕ
| ДополнительныеРеквизитыИСведения.Наименование ПОДОБНО ""%"" + &ВидНоменклатуры + ""%""
|
|СГРУППИРОВАТЬ ПО
| ДополнительныеРеквизитыИСведения.Ссылка,
| ДополнительныеРеквизитыИСведения.Наименование"
;
Запрос.Параметры.Вставить("ВидНоменклатуры",ВидНоменклатуры.Наименование);
Выборка=Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() цикл
НовСтрока=СерииНоменклатуры.ДополнительныеРеквизиты.Добавить();
Если Найти(Выборка.Наименование,"Дата")>0 Тогда
НовСтрока.Свойство=Выборка.Ссылка;
НовСтрока.Значение=ДатаПоставки;
ИначеЕсли Найти(Выборка.Наименование,"Поставщик")>0 Тогда
НовСтрока.Свойство=Выборка.Ссылка;
НовСтрока.Значение=Поставщик;
ИначеЕсли Найти(Выборка.Наименование,"Цена")>0 Тогда
НовСтрока.Свойство=Выборка.Ссылка;
НовСтрока.Значение=ЦенаПоставки;
КонецЕсли;
КонецЦикла;
СерииНоменклатуры.Записать();
Возврат СерииНоменклатуры.Ссылка;
КонецФункции
3. И всё. Работает.