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

Конфигурации на обычных формах встречаются повсеместно, поэтому очень важно знать про такую возможность 1С и уметь создавать обработки.

Рассмотрим ее создание на примере документа “Перемещение товаров” конфигурации “Бухгалтерия предприятия 2.0”

Как создать свою обработку заполнения с нуля?

    1. Создаете обработку в конфигуратор: меню “Файл\Новый\Внешняя обработка”
    2. Задаете ее имя без пробелов и синоним, под которым эта обработка будет подключаться
    3. В модуле объектов добавляете процедуру “Инициализировать()”. Она должна быть экспортной и иметь 3 параметра (с удобными вам именами)
Процедура Инициализировать(Объект, ИмяТабличнойЧасти=Неопределено, ТабличноеПоле=Неопределено)Экспорт

	ТабличнаяЧасть = Объект[ИмяТабличнойЧасти];
//Теперь можно ее обрабатывать
КонецПроцедуры;
  1. Добавляете по желанию Макет “Параметры авторегистрации” Параметры_авторегистрации
  2. Параметры_авторегистрации2
  3.  Добавляете обработку в “Дополнительные обработки табличных частей” в меню “Сервис\Дополнительные обработки” Регистрация внешней обработки заполнения табличных частей
  4. Используете после перезапуска 1С в меню “Заполнить” выбранной табличной части Перемещение товаров Заполнить

Вот так быстро и просто создается обработка. Остается только написать код обработчика )

Особенности использования

Обработка запускается всегда из формы объекта.

Конфигурация предоставляет доступ непосредственно к объекту, даже если он не записан.

  • Это очень удобно.
  • Необходимо помнить что объект может быть не записан и его “Ссылка” пустая и запросом его данные не получишь.

Требуется дополнительные права для использования подсистемы рядовым пользователем: за это отвечает роль “ПравоЗапускаВнешнихОбработок”

Отлаживать обработку сложнее

  • можно использовать обработку-прослойку
  • добавить форму обработки, а в ней реквизит формы с типом отлаживаемого, вызов отладки: “Инициализировать(СсылкаНаОтлаживаемыйОбъект.ПолучитьОбъект(), “Товары”);
  • ставить точку остановка в общем модуле

В процессе разработки придется регулярно обновлять обработку в справочнике внешних отчетов (такое обновление не требует перезапуска 1С).

Необходимо отрабатывать все возможные места ошибок, ведь конфигурация запускает обработку через “Попытку Исключение” –  значит код прерываться будет именно там, а не в месте ошибок.

Обрабатываемый объект может изменятся разработчиком конфигурации – переименовываться его реквизиты – это сделает обработку неработоспособной, если вы не примете дополнительные меры.

Возможно программное открытие формы обработки, это позволит вам сделать удобный диалог, а даже альтернативный “Подбор документов”.

Вам доступно чтение и изменение реквизитов объекта –  не обязательно должна быть обработана табличная часть.

Она  может быть пустой – главное, чтобы было к чему прописаться для обработки.

 

Окончательный код обработчика (для примера)

 

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

 

Реклама всегда менее актуальна, чем думают ее создатели.

— Законы Мерфи