Пример создания документа с движениями в ERP 2.5.7

10.08.21

Разработка - БСП (Библиотека стандартных подсистем)

Пример создания документа с движениями в ERP 2.5.7, а также включение документа в основные подсистемы, а именно по управлению доступом, датам запрета изменения, контролю остатков, использованию характеристик и серий и прочее.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Пример создания документа с движениями в ERP 2.5.7:
.cfe 122,70Kb
50
50 Скачать (1 SM) Купить за 1 850 руб.

Введение

В данной статье я приведу пример создания документа с движениями по регистру накопления, включая контроль остатков, используя встроенные средства ERP 2.5.7, в том числе функционал БСП. Полностью код не привожу, чтобы не засорять листингами кода данную статью. Но на примере любого типового документа можно посмотреть реализацию по ключевым словам. К статье приложено расширение с описанным функционалом, конфигурация остается полностью на поддержке. Описанный в статье документ будет подключен к основным подсистемам, необходимым нам для работы, а именно:

  • Даты запрета изменения

  • Префиксация объектов

  • Варианты отчетов

  • Управление доступом

  • Печать

  • Подключаемые команды

  • Ввод документов на основании

А также подключим функционал:

  • Отчет "Движения документа"

  • Учет характеристик

  • Учет серий

С одной стороны само решение не сложное. Любой опытный разработчик, посмотрев работу типовых документов, напишет аналогичное решение. С другой стороны, возможно кому-то мой труд в написании данной статьи пригодится в разработке собственного функционала в ERP.

 

Встраивание документа в подсистемы

В первую очередь опишу реализуемую схему:

Учет ведется по новому регистру накопления "Дополнительный учет товаров" с типом остатки в разрезе номенклатуры, характеристик, серий и документа оприходования.

Типовой документ "Приобретение товаров и услуг" будет делать приход по этому регистру, а новый документ "Дополнительный расход товаров", который вводится на основании, будет делать расход.

Думаю с самим документом у нас нет вопросов. Создали документ, добавили необходимые реквизиты и табличные части. Не забываем установить периодичность и нужную длину номера документа (в ERP 11 символов), а так же необходимые параметры выбора и связи параметров выбора для добавляемых в объекты реквизиты.

Уточню, что если вы планируете в документе использовать характеристики и серии, то рекомендую табличную часть назвать "Товары" т.к. основные механизмы ориентируются на это имя ТЧ. И хотя в параметрах можно принудительно указать свое имя, в некоторых механизмах по сериям жестко прописано имя "Товары".

Моя реализация идет через расширение, но можно дорабатывать и в основной конфигурации.

 

Подсистема "Даты запрета изменения"

Добавим в общий модуль процедуру ДатыЗапретаИзмененияПереопределяемый.ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения, где для нового документа пропишем источник данных

ДатыЗапретаИзменения.ДобавитьСтроку(ИсточникиДанных,
	Метаданные.Документы.РасшСт_ДополнительныйРасходТоваров.ПолноеИмя(),
	"Дата",
	"Закупки",
	"Организация");

В расширение добавить общий модуль ДатыЗапретаИзменения, чтобы подписка его видела.

Добавить подписку "Проверить дату запрета изменения перед записью документа"

Имя РасшСт_ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента
Источник ДокументОбъект.РасшСт_ДополнительныйРасходТоваров
Событие ПередЗаписью
Обработчик* ДатыЗапретаИзменения.ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента

 

Добавить подписку "Проверить дату запрета изменения перед удалением"

Имя РасшСт_ПроверитьДатуЗапретаИзмененияПередУдалением
Источник ДокументОбъект.РасшСт_ДополнительныйРасходТоваров
Событие ПередУдалением
Обработчик* ДатыЗапретаИзменения.ПроверитьДатуЗапретаИзмененияПередУдалением

* При использовании расширений Общий модуль ДатыЗапретаИзменения необходимо добавить в расширение, чтобы подписка видела обработчик.

Подсистема "Префиксация объектов"

Добавить подписку "Проверить номер документа по дате и организации"

Имя РасшСт_ПроверитьНомерДокументаПоДатеИОрганизации
Источник ДокументОбъект.РасшСт_ДополнительныйРасходТоваров
Событие ПередЗаписью
Обработчик* ПрефиксацияОбъектовСобытия.ПроверитьНомерДокументаПоДатеИОрганизации

 

Добавить подписку "Установить префикс информационной базы и организации номеру документа"

Имя РасшСт_УстановитьПрефиксИнформационнойБазыИОрганизацииНомеруДокумента
Источник ДокументОбъект.РасшСт_ДополнительныйРасходТоваров
Событие ПриУстановкеНовогоНомера
Обработчик* ПрефиксацияОбъектовСобытия.УстановитьПрефиксИнформационнойБазыИОрганизации

* При использовании расширений общий модуль ПрефиксацияОбъектовСобытия необходимо добавить в расширение, чтобы подписка видела обработчик.

Подсистема "Варианты отчетов"

Добавим отчет "Дополнительный учет товаров".

Одним из параметров нашего отчета будет поле "Оприходование товаров". Для того, чтобы мы могли этот отчет вызывать из панели отчетов документа, необходимо в общий модуль ВариантыОтчетовЛокализация.НастроитьВариантыОтчетов внести описание отчета

ОписаниеОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.РасшСт_ДополнительныйУчетТоваров);
ОписаниеОтчета.ОпределитьНастройкиФормы = Истина;
ОписаниеВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, ОписаниеОтчета, "");
ОписаниеВарианта.Описание = НСтр("ru = 'Состояние дополнительного учета товаров'");

В общем модуле ВариантыОтчетовПереопределяемый.ОпределитьОбъектыСКомандамиОтчетов определим, что наш отчет будет выводится в панели для нового документа

Объекты.Добавить(Метаданные.Документы.РасшСт_ДополнительныйРасходТоваров);

А так же для того, чтобы этот отчет отображался в меню новой подсистемы необходимо дополнить процедуру ВариантыОтчетовПереопределяемый.ОпределитьРазделыСВариантамиОтчетов кодом:

Разделы.Добавить(Метаданные.Подсистемы.РасшСт_ДополнительныйУчетТоваров,
	НСтр("ru = 'Отчеты по дополнительному учету товаров'"));

В модуле менеджера документа необходимо прописать добавление отчета

Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
  КомандаОтчет = КомандыОтчетов.Добавить();
  КомандаОтчет.Менеджер = Метаданные.Отчеты.РасшСт_ДополнительныйУчетТоваров.ПолноеИмя();
  КомандаОтчет.Представление = Метаданные.Отчеты.РасшСт_ДополнительныйУчетТоваров.Синоним;
  КомандаОтчет.МножественныйВыбор = Истина;
  КомандаОтчет.Важность = "Важное";
  КомандаОтчет.ДополнительныеПараметры.Вставить("ИмяКоманды", "РасшСт_ДополнительныйУчетТоваров");
  КомандаОтчет.ВидимостьВФормах = "ФормаДокумента,ФормаСписка";
  Отчеты.ДвиженияДокумента.ДобавитьКомандуОтчетОДвиженияхДокумента(КомандыОтчетов, Параметры);
КонецПроцедуры

А в модуле отчета нам необходимо прописать установку параметров ОпределитьНастройкиФормы и сопутствующие процедуры (ПриСозданииНаСервере, ПередЗагрузкойВариантаНаСервере, УстановитьОбязательныеНастройки, СформироватьПараметрыОтчета).

Полный пример в приложенном расширении, чтобы не засорять данное описание кучей кода. Если поискать поиском в конфигурации по вышеуказанным ключевым именам процедур, то можно найти другие примеры реализации отчетов.

 

Подсистема "Управление доступом"

Создать в расширении роли "Добавление изменение дополнительный учет товаров" и "Чтение дополнительный учет товаров", куда добавить шаблоны и прописать доступ к документу

#Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
#ДляОбъекта("")
#Иначе
#ПоЗначениям( "Документ.РасшСт_ДополнительныйРасходТоваров","Чтение","",
"Организации","Организация",
"","",
"","",
"","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","" )
#КонецЕсли

Про "Чтение", "Добавление", "Изменение" думаю не нужно объяснять. 

В общем модуле УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа пропишем наш документ

Списки.Вставить(Метаданные.Документы.РасшСт_ДополнительныйРасходТоваров, Истина);

Если используем расширение, то добавим в него роль "ПолныеПрава" и добавим права на все новые объекты, иначе под полными правами у вас будут доступны такие действия как "Интерактивное удаление".

В модуль менеджера документа добавим процедуру

Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
	
	Ограничение.Текст =
	"РазрешитьЧтениеИзменение
	|ГДЕ
	|	ЗначениеРазрешено(Организация)";
	
КонецПроцедуры

В форме документа в событие "ПриЧтенииНаСервере" необходимо добавить следующий код

	// СтандартныеПодсистемы.УправлениеДоступом
	Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
		МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
		МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
	КонецЕсли;
	// Конец СтандартныеПодсистемы.УправлениеДоступом

 

Подсистема "Печать"

В общий модуль УправлениеПечатьюПереопределяемый.ПриОпределенииОбъектовСКомандамиПечати добавим наш новый документ

СписокОбъектов.Добавить(Документы.РасшСт_ДополнительныйРасходТоваров);

В модуле менеджера должны быть определены процедуры ДобавитьКомандыПечати и Печать.

 

Подсистема "Ввод документов на основании"

В общий модуль СозданиеНаОснованииПереопределяемый.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании добавляем

Объекты.Добавить(Метаданные.Документы.РасшСт_ДополнительныйРасходТоваров);

В модуле менеджера добавляем пустую процедуру ДобавитьКомандыСозданияНаОсновании()

Т.к. на основании нового документа пока ничего не вводим.

А для ввода на основании "Приобретения товаров и услуг" нам нужно добавить процедуру

Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт
  Если ПравоДоступа("Добавление", Метаданные.Документы.РасшСт_ДополнительныйРасходТоваров) Тогда
	КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить();
	КомандаСоздатьНаОсновании.Менеджер = Метаданные.Документы.РасшСт_ДополнительныйРасходТоваров.ПолноеИмя();
	КомандаСоздатьНаОсновании.Представление = ОбщегоНазначенияУТ.ПредставлениеОбъекта(Метаданные.Документы.РасшСт_ДополнительныйРасходТоваров);
	КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить";
    Возврат КомандаСоздатьНаОсновании;
  КонецЕсли;
  Возврат Неопределено;
КонецФункции

И в модуль менеджера документа "Приобретение товаров и услуг" в процедуру ДобавитьКомандыСозданияНаОсновании вносим новую команду на основании

Документы.РасшСт_ДополнительныйРасходТоваров.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);

 

Подсистема "Подключаемые команды"

Вызовом всех ранее названных подсистем управляем подсистема "Подключаемые команды". Вызов происходит через обработчики формы документа и списка.

Полностью приводить код не имеет смысла. Посмотреть пример можно в любом типовом документе или в приложенном расширении.

Код подсистемы обозначен в коде с комментарием

// СтандартныеПодсистемы.ПодключаемыеКоманды

 

Проведение документа

У документа в параметре "Удаление движений" устанавливаем "Не удалять автоматически". Удалением движений мы будем управлять самостоятельно.

В новых версиях ERP ввели такое понятие как "Механизмы конфигурации". Это некоторая модульная система, где прописаны различные механизмы, которые при необходимости можно вызывать при проведении документа.

Т.к. мы создаем свой новый регистр со своим уникальным составом и логикой, создадим собственный механизм конфигурации. Для этого в общий модуль ПроведениеДокументовЛокализация.ДополнитьУчетныеМеханизмыКонфигурации вносим

МеханизмыКонфигурации.Вставить("РасшСт_ДополнительныйУчетТоваров", "РасшСт_ДополнительныйУчетТоваров");

Первый параметр - Имя механизма

Второй параметр - Общий модуль или менеджер, где располагается логика.

В модуле менеджера нового документа, а так же "Приобретение товаров и услуг" определим или расширим процедуру, которая добавит наш документ к новому механизму.

Процедура ЗарегистрироватьУчетныеМеханизмы(МеханизмыДокумента) Экспорт
  МеханизмыДокумента.Добавить("РасшСт_ДополнительныйУчетТоваров");
КонецПроцедуры

Добавим общий модуль РасшСт_ДополнительныйУчетТоваров (сервер, внешнее соединение).

В общем модуле пропишем процедуры

Функция ПараметрыДляПроведенияДокумента(Документ, Свойства) Экспорт
	Параметры = ПроведениеДокументов.ПараметрыУчетногоМеханизма();
	// Проведение
	Если Свойства.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
		Параметры.ПодчиненныеРегистры.Добавить(Метаданные.РегистрыНакопления.РасшСт_ДополнительныйУчетТоваров);
	КонецЕсли;
	Параметры.КонтрольныеРегистрыИзменений.Добавить(Метаданные.РегистрыНакопления.РасшСт_ДополнительныйУчетТоваров);
	Возврат Параметры;
КонецФункции

и

Процедура ОтразитьДвижения(ТаблицыДляДвижений, Движения, Отказ) Экспорт
	Если Отказ Тогда
		Возврат;
	КонецЕсли;
	ПроведениеДокументов.ОтразитьДвижения(ТаблицыДляДвижений, Движения, "РасшСт_ДополнительныйУчетТоваров");
КонецПроцедуры

Добавление регистра в параметры "КонтрольныеРегистрыИзменений" указывает, что по регистру проводится контроль.

Необходимо добавить процедуру ИнициализироватьДанныеКонтроляИзменений(), где текстом запроса из предварительно созданной временной таблицы "ДвиженияДополнительныйУчетТоваровИзменение" и таблицы остатков по регистру выбираем данные.

Ошибки фиксируются и выводятся в процедуре "СообщитьОРезультатахКонтроляИзменений"

При этом в модуле набора записей регистра накопления "Дополнительный учет товаров" добавляем процедуры "ПередЗаписью" где формируем временную таблицу "ДвиженияДополнительныйУчетТоваровПередЗаписью" и процедуру "ПриЗаписи", где вычисляем изменения и помещаем во временную таблицу "ДвиженияДополнительныйУчетТоваровИзменение".

Вызовы подсистемы проведения документов при событиях документа:

Событие "Перед записью"

ПроведениеДокументов.ПередЗаписьюДокумента(ЭтотОбъект, РежимЗаписи, РежимПроведения);

Событие "Обработка проведения"

ПроведениеДокументов.ОбработкаПроведенияДокумента(ЭтотОбъект, Отказ);

Событие "Обработка удаления проведения"

ПроведениеДокументов.ОбработкаУдаленияПроведенияДокумента(ЭтотОбъект, Отказ);

Событие "При записи"

ПроведениеДокументов.ПриЗаписиДокумента(ЭтотОбъект, Отказ);

При проведении документа вызов ПроведениеДокументов.ОбработкаПроведенияДокумента идет в модуль менеджера документа, где вызывается процедура ДанныеДокументаДляПроведения(), в которой инициализируются параметры запроса и тексты запросов для движений. В нашем случае движение у документа по одному регистру, соответственно у нас одна функция с текстом запроса.

Функция ТекстЗапросаТаблицаДополнительныйУчетТоваровНоменклатуры(Запрос, ТекстыЗапроса, Регистры)
	
	ИмяРегистра = "РасшСт_ДополнительныйУчетТоваров";
	
	Если Не ПроведениеДокументов.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
		Возврат "";
	КонецЕсли;
	
	ТекстЗапроса = "
	|ВЫБРАТЬ
	|	&Период									КАК Период,
	|	ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)	КАК ВидДвижения,
	|	Товары.НомерСтроки						КАК НомерСтроки,
	|	Товары.Ссылка							КАК Ссылка,
	|	Товары.Номенклатура						КАК Номенклатура,
	|	Товары.Характеристика					КАК Характеристика,
	|	Товары.Серия							КАК Серия,
	|	&ДокументОприходованияСклад				КАК Склад,
	|	&ДокументОприходования					КАК ДокументОприходования,
	|	Товары.Количество						КАК Количество
	|ИЗ
	|	Документ.РасшСт_ДополнительныйРасходТоваров.Товары КАК Товары
	|
	|ГДЕ
	|	Товары.Ссылка = &Ссылка";
	
	ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
	
	Возврат ТекстЗапроса;
	
КонецФункции

Аналогичный текст запроса для этого регистра (с изменениями под документ, с видом движения "Приход") должен находится в модуле менеджера документа "Приобретение товаров и услуг".

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

 

Прочий функционал

 

Отчет "Движения документа"

  1. Добавим в расширение типовой отчет "ДвиженияДокумента".

  2. В модуль менеджера документа в процедуру ДобавитьКомандыОтчетов добавим команду отчета

Отчеты.ДвиженияДокумента.ДобавитьКомандуОтчетОДвиженияхДокумента(КомандыОтчетов, Параметры);

 

Учет характеристик

Предполагается что у нас в ТЧ Товары уже есть реквизит Характеристика с типом СправочникСсылка.ХарактеристикиНоменклатуры.

В форме в Объект.Товары добавляем реквизит

Имя

Тип

ХарактеристикиИспользуются

Булево

 

Устанавливаем условное оформление для поля характеристика. По умолчанию подразумевается что ТЧ имеет имя "Товары", а поле характеристика - "ТоварыХарактеристика"

НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтаФорма);

При событиях формы ПриЧтенииНаСервере, ПриСозданииНаСервере и ПослеЗаписиНаСервере нам необходимо перезаполнить служебный реквизит ХарактеристикиИспользуются для каждой строки ТЧ Товары.

Для этого вызывается процедура ЗаполнитьСлужебныеРеквизитыПоНоменклатуре(), где в параметрах вызова процедуры НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции указывается ключ "ЗаполнитьПризнакХарактеристикиИспользуются".

Так же чтобы корректно работало условное оформление, нам необходимо обновлять служебные реквизиты при изменении номенклатуры. Для этого в событие ТоварыНоменклатураПриИзменении в структуру действий необходимо вставить следующий ключ

СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу",    ТекущаяСтрока.Характеристика);

Думаю нет смысла описывать обработчик строки. 

ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);

Но если интересно как он работает, просто посмотрите код обработчика.

 

Учет серий

В ERP есть два способа хранения серий. В ТЧ Товары и в ТЧ Серии. В данном решении я опишу упрощенный вариант хранения серий в ТЧ Товары.

В объекте в ТЧ Товары у нас должно быть добавлено два реквизита

 

В форме в Объект.Товары добавляем реквизиты

Имя

Тип

Серия СправочникСсылка.СерииНоменклатуры

СтатусУказанияСерий

Число (2,0)

 

В форме документа в Объект.Товары добавляем реквизит

Имя

Тип

ТипНоменклатуры ПеречислениеСсылка.ТипыНоменклатуры

 

Устанавливаем условное оформление для полей

НоменклатураСервер.УстановитьУсловноеОформлениеСерийНоменклатуры(ЭтаФорма, "СерииВсегдаВТЧТовары");
НоменклатураСервер.УстановитьУсловноеОформлениеСтатусовУказанияСерий(ЭтаФорма, Истина);

В процедуре ЗаполнитьСлужебныеРеквизитыПоНоменклатуре() добавляем

ЗаполнитьПризнакТипНоменклатуры            = Новый Структура("Номенклатура", "ТипНоменклатуры");
ПараметрыЗаполненияРеквизитов.Вставить("ЗаполнитьПризнакТипНоменклатуры", ЗаполнитьПризнакТипНоменклатуры);

Далее в этой процедуре у нас идет общий обработчик заполнения служебных реквизитов

НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции(Объект.Товары, ПараметрыЗаполненияРеквизитов);

В обработчике "ТоварыНоменклатураПриИзменении" у нас должны быть ключи

ЗаполнитьПризнакТипНоменклатуры          = Новый Структура("Номенклатура", "ТипНоменклатуры");
ПроверитьСериюРассчитатьСтатус           = Новый Структура("ПараметрыУказанияСерий, Склад", ПараметрыУказанияСерий, Объект.Склад);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры",       ЗаполнитьПризнакТипНоменклатуры);
СтруктураДействий.Вставить("ПроверитьСериюРассчитатьСтатус",        ПроверитьСериюРассчитатьСтатус);

Обработчики поля серия

Событие "ТоварыСерияПриИзменении"

ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
	
ВыбранноеЗначение = НоменклатураКлиентСервер.ВыбраннаяСерия();
ВыбранноеЗначение.Значение                   = ТекущаяСтрока.Серия;
ВыбранноеЗначение.ИдентификаторТекущейСтроки = ТекущаяСтрока.ПолучитьИдентификатор();
	
НоменклатураКлиент.ОбработатьУказаниеСерии(ЭтаФорма, ПараметрыУказанияСерий, ВыбранноеЗначение);

Событие "ТоварыСерияНачалоВыбора", которое вызывает процедуру открытия формы подбора серий ОткрытьПодборСерий()

	СтандартнаяОбработка = Ложь;
	ОткрытьПодборСерий(Элемент.ТекстРедактирования);

Процедура ОткрытьПодборСерий

Процедура ОткрытьПодборСерий(Текст = "", ТекущиеДанные = Неопределено)
	Если НоменклатураКлиент.ДляУказанияСерийНуженСерверныйВызов(ЭтаФорма, ПараметрыУказанияСерий, Текст, ТекущиеДанные) Тогда
		ТекстИсключения = НСтр("ru = 'Ошибка при попытке указать серии - в этом документе для указания серий не нужен серверный вызов.'");
		ВызватьИсключение ТекстИсключения;
	КонецЕсли;
КонецПроцедуры

Подбор серий вызывает форму обработки "ПодборСерийВДокументы" в зависимости от настроек. При выборе серии идет оповещение о выборе. Для его обработки в форму документа в событие "ОбработкаВыбора" нам необходимо добавить код

Если НоменклатураКлиент.ЭтоУказаниеСерий(ИсточникВыбора) Тогда
	НоменклатураКлиент.ОбработатьУказаниеСерии(ЭтаФорма, ПараметрыУказанияСерий, ВыбранноеЗначение);
КонецЕсли;

Для работы механизма с сериями в модуле менеджера должны быть определены следующие процедуры и функции

Функция ИменаРеквизитовДляЗаполненияПараметровУказанияСерий() Экспорт
	Возврат "Дата,Склад";
КонецФункции
// Возвращает параметры указания серий для товаров, указанных в документе.
Функция ПараметрыУказанияСерий(Объект) Экспорт
	ПараметрыУказанияСерий = НоменклатураКлиентСервер.ПараметрыУказанияСерий();
	Возврат ПараметрыУказанияСерий;	
КонецФункции

Пример заполнения ПараметрыУказанияСерий можно посмотреть в типовых документах. В зависимости от цели документа мы настраиваем параметры, например:

//Инициализация параметров
ПараметрыУказанияСерий = НоменклатураКлиентСервер.ПараметрыУказанияСерий();

//Проверка что серии используются
ПараметрыСерийСклада = СкладыСервер.ИспользованиеСерийНаСкладе(Объект.Склад, Ложь);
ПараметрыУказанияСерий.УчитыватьСебестоимостьПоСериям = ПараметрыСерийСклада.УчитыватьСебестоимостьПоСериям;
ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры  = ПараметрыСерийСклада.УчитыватьСебестоимостьПоСериям;

//Указание, что серии используются в ТЧ "Товары"
ПараметрыУказанияСерий.ИмяТЧСерии = "Товары";

 

Так же должна быть определена функция ТекстЗапросаЗаполненияСтатусовУказанияСерий для вычисления статусов серий

Функция ТекстЗапросаЗаполненияСтатусовУказанияСерий(ПараметрыУказанияСерий) Экспорт

	ТекстЗапроса = 
	"ВЫБРАТЬ
	|	Товары.Номенклатура,
	|	Товары.Характеристика,
	|	Товары.Серия,
	|	Товары.Количество,
	|	Товары.СтатусУказанияСерий,
	|	Товары.НомерСтроки
	|ПОМЕСТИТЬ Товары
	|ИЗ
	|	&Товары КАК Товары

    ...

	|ВЫБРАТЬ
	|	Статусы.НомерСтроки КАК НомерСтроки,
	|	Статусы.СтатусУказанияСерий КАК СтатусУказанияСерий
	|ИЗ
	|	Статусы КАК Статусы
	|ГДЕ
	|	Статусы.СтатусУказанияСерий <> Статусы.СтарыйСтатусУказанияСерий
	|
	|УПОРЯДОЧИТЬ ПО
	|	НомерСтроки";
	
	Возврат ТекстЗапроса;
КонецФункции

В форме, для корректного отображения серий, необходимо серию и статус указания серии сгруппировать в одной колонке. Для поля ТоварыСтатусУказанияСерий указывается общая картинка СтатусыУказанияСерий. Остальные настройки можно посмотреть в любом типовом документе с серией.

При реализации через расширение проверьте, что реквизит ТипНоменклатуры для ТЧ Объект.Товары должен иметь тип ПеречислениеСсылка.ТипыНоменклатуры. Одна из ошибок, что копируя реквизит, не добавляют в расширение непосредственно само перечисление. В результате не работает условное оформления по сериям и соответственно нет возможности выбрать серию.

 

Заключение

Думаю, описанного функционала хватит, чтобы создать свой документ или добавить уже созданный документ в одну из перечисленных подсистем. Никаких ноу-хау, использование типового кода и типовых методов, за исключением собственных имен метаданных. 

ERP Разработка Серии УправлениеДоступом ДатыЗапретаИзменения ДвиженияДокументов УправлениеПечатью ВариантыОтчетов

См. также

БСП (Библиотека стандартных подсистем) Программист Платные (руб)

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

1800 руб.

21.11.2024    2356    8    14    

8

БСП (Библиотека стандартных подсистем) Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В статье рассмотрим пошаговую инструкцию создания дополнительного отчета с фоновым формированием результата.

04.10.2024    2082    MadRave    11    

24

БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Добавим дополнительные свойства в новый документ средствами БСП

02.09.2024    4364    John_d    10    

53

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Бесплатно (free)

Всё больше организаций выбирает для серверов под 1С операционные системы Linux. Одним из отличий систем Windows и Linux является отсутствие COM объектов, которые зачастую использовались для формирования печатных форм офисных документов (Word). Конечно, можно выполнять печать и на клиенте, но есть риск импортозамещения. В работе у меня случались проблемы с зависанием процесса Word, поэтому я не люблю его использовать.

29.07.2024    5755    PROSTO-1C    12    

52
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. dj_tol 104 10.08.21 09:30 Сейчас в теме
Однозначно ПЛЮС. А в целом описано кратко и по сути. ИТС пока прочитаешь, разрознено все, пока поймешь, блин целая история... ERP отдельный мир но очень интересный.
6. ovasiliev 6 14.08.21 20:53 Сейчас в теме
(1) Причём здесь ERP.
Название конфигурации выбрано просто для кликбейта.
А ключевая конфигурация здесь - БСП.
7. maraty 464 15.08.21 10:16 Сейчас в теме
(6) Название выбрано исключительно потому, что расширение делал в erp. Если бы не было характеристик, серий и отчета по движениям, можно было бы и БСП в заголовке написать.
rpgshnik; +1 Ответить
8. ovasiliev 6 15.08.21 10:42 Сейчас в теме
(7) А я и не говорю, что в данном случае кликбейт - это плохо. Далеко не все читающие здесь заголовки знают, что такое БСП. А за ERP зацепятся.
2. xrrg 337 10.08.21 09:57 Сейчас в теме
Не надо ли использовать обработчик из подписки ПроверитьНомерДокументаПоДатеИОрганизации?
Вместо указанного обработчика из подписки УстановитьПрефиксИнформационнойБазыНомеруДокумента, может, надо использовать обработчик из УстановитьПрефиксИнформационнойБазыИОрганизацииНомеруДокумен­та?
3. maraty 464 10.08.21 11:00 Сейчас в теме
(2)
УстановитьПрефиксИнформационнойБазыНомеруДокумента

Да, полностью согласен. спасибо! Выбрал не ту подписку для примера. Я использовал подписку для документов без организации.
Нужно использовать две подписки
ПроверитьНомерДокументаПоДатеИОрганизации
И УстановитьПрефиксИнформационнойБазыИОрганизацииНомеруДокумен­та
Вернее создать свои копии в расширении. Немного позже отредактирую статью и поправлю пример.
4. Fominro 13.08.21 11:26 Сейчас в теме
Конечно плюс, но вот бы еще описать и добавить остальные разделы БСП: версионирование, работу с файлами, заметками, запрет редактирования реквизитов объектов.
Был бы такой свозной пример - шаблон по внедрению основных разделов БСП в документы
5. maraty 464 13.08.21 12:08 Сейчас в теме
(4)
Конечно плюс, но вот бы еще описать и добавить остальные разделы БСП: версионирование, работу с файлами, заметками, запрет редактирования реквизитов объектов.
Был бы такой свозной пример - шаблон по внедрению основных разделов БСП в документы

Эти подсистемы достаточно просто внедряются без использования расширений, могу сделать сквозной пример в отдельном описании (версионирование, присоединяемые файлы, запрет редактирования реквизитов, дополнительные реквизиты и свойства, подключаемые отчеты и обработки). К тому же мое решение ориентируется на функционал ERP.
Сложность реализации в расширении - использование определяемых типов, что требует некоторого усложнения реализации, поэтому не стал выносить в расширение и в статью соответственно. Ок, сделаю дополнительное описание подключения указанных подсистем БСП, без специфики определенной конфигурации.
itoptimum; +1 Ответить
9. rpgshnik 3801 23.08.21 10:53 Сейчас в теме
10. maraty 464 23.08.21 18:56 Сейчас в теме
(9) в моей статье описание полностью нового документа. В приведенной статье - точки входа в существующих документах. Т.е. по второй статье можно доработать документ, созданный по моей статье :)
rpgshnik; +1 Ответить
11. Gladkov_Anton 347 02.09.22 14:06 Сейчас в теме
Возможно кому-то поможет:
Описание "СтатусУказанияСерий" см. в описании процедуры НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий
12. rozer 311 07.12.22 15:20 Сейчас в теме
очень помогли переложить логику проведения самописных документов из КА2.4 на 2.5
Оставьте свое сообщение