Произвольные действия дополнительных реквизитов в 1С:Документооборот

20.03.26

Задачи пользователя - Адаптация типовых решений

Данное расширение позволяет писать произвольные скрипты при создании дополнительных реквизитов, изменении, обновлении, перед записью. Какие проблемы решает расширение? Расширение позволяет писать произвольные скрипты в режиме предприятия и не дорабатывать конфигурацию.

Файлы

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

Наименование Скачано Купить файл
Произвольные действия дополнительных реквизитов в 1С:Документооборот
.cfe 600,92Kb
6 6 200 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

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

 

 

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

Действия описываются в справочнике "Действия дополнительных реквизитов".

Предусмотрены следующие действия:

1. При создании чтении на сервере - выполняется один раз при открытии формы. Также выполняется при нажатии команды "Перечитать" в форме.

2. При изменении - выполняется при изменении дополнительного реквизита. Может быть выполнено в контексте клиента или сервера.

 

 

3. После заполнения реквизитов в форме - выполняется при каждом типовом заполнении реквизитов в форме, например после изменения вида документа.

 

 

4. Перед записью - выполняется перед записью на сервере. В обработчике этого вида можно разместить дополнительные проверки заполненности или логики заполнения дополнительных реквизитов. 

5. Обработка проверки заполнения - выполняется на сервере. В обработчике этого вида можно разместить дополнительные проверки заполненности. 

Ниже небольшое видео для наглядности:

Листинг обработчиков из примера:

Дата начала при изменении

// Получаем список дополнительных реквизитов формы
	Список = Форма.Свойства_ОписаниеДополнительныхРеквизитов;
	
	// Получаем значение ДатаНачала
	ДатаНачала = Неопределено;
	Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ДатаНачала");
	
	Если ЗначениеЗаполнено(Свойство) Тогда
		
		НайденныеСтроки = Список.НайтиСтроки(Новый Структура("Свойство", Свойство));
		
		Если НайденныеСтроки.Количество() > 0 Тогда
			
			ПолеДополнительногоРеквизита = НайденныеСтроки[0];
			ДатаНачала = Форма[ПолеДополнительногоРеквизита.ИмяРеквизитаЗначение];
			
		КонецЕсли;
		
	КонецЕсли;
	
	// Получаем значение ДатаОкончания
	ДатаОкончания = Неопределено;
	Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ДатаОкончания");
	
	Если ЗначениеЗаполнено(Свойство) Тогда
		
		НайденныеСтроки = Список.НайтиСтроки(Новый Структура("Свойство", Свойство));
		
		Если НайденныеСтроки.Количество() > 0 Тогда
			
			ПолеДополнительногоРеквизита = НайденныеСтроки[0];
			ДатаОкончания = Форма[ПолеДополнительногоРеквизита.ИмяРеквизитаЗначение];
			
		КонецЕсли;
		
	КонецЕсли;
	
	// Проверяем, что обе даты заполнены
	Если ЗначениеЗаполнено(ДатаНачала) И ЗначениеЗаполнено(ДатаОкончания) Тогда
		
		// Вычисляем количество дней между датами
		РазницаВСекундах = ДатаОкончания - ДатаНачала;
		КоличествоДней = Окр(РазницаВСекундах / 86400, 0, РежимОкругления.Окр15как20);
		
		// Устанавливаем значение в реквизит Длительность
		Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "Длительность");
		
		Если ЗначениеЗаполнено(Свойство) Тогда
			
			НайденныеСтроки = Список.НайтиСтроки(Новый Структура("Свойство", Свойство));
			
			Если НайденныеСтроки.Количество() > 0 Тогда
				
				ПолеДополнительногоРеквизита = НайденныеСтроки[0];
				Форма[ПолеДополнительногоРеквизита.ИмяРеквизитаЗначение] = КоличествоДней;
				
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЕсли;

Дата окончания при изменении

// Получаем список дополнительных реквизитов формы
	Список = Форма.Свойства_ОписаниеДополнительныхРеквизитов;
	
	// Получаем значение ДатаНачала
	ДатаНачала = Неопределено;
	Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ДатаНачала");
	
	Если ЗначениеЗаполнено(Свойство) Тогда
		
		НайденныеСтроки = Список.НайтиСтроки(Новый Структура("Свойство", Свойство));
		
		Если НайденныеСтроки.Количество() > 0 Тогда
			
			ПолеДополнительногоРеквизита = НайденныеСтроки[0];
			ДатаНачала = Форма[ПолеДополнительногоРеквизита.ИмяРеквизитаЗначение];
			
		КонецЕсли;
		
	КонецЕсли;
	
	// Получаем значение ДатаОкончания
	ДатаОкончания = Неопределено;
	Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ДатаОкончания");
	
	Если ЗначениеЗаполнено(Свойство) Тогда
		
		НайденныеСтроки = Список.НайтиСтроки(Новый Структура("Свойство", Свойство));
		
		Если НайденныеСтроки.Количество() > 0 Тогда
			
			ПолеДополнительногоРеквизита = НайденныеСтроки[0];
			ДатаОкончания = Форма[ПолеДополнительногоРеквизита.ИмяРеквизитаЗначение];
			
		КонецЕсли;
		
	КонецЕсли;
	
	// Проверяем, что обе даты заполнены
	Если ЗначениеЗаполнено(ДатаНачала) И ЗначениеЗаполнено(ДатаОкончания) Тогда
		
		// Вычисляем количество дней между датами
		РазницаВСекундах = ДатаОкончания - ДатаНачала;
		КоличествоДней = Окр(РазницаВСекундах / 86400, 0, РежимОкругления.Окр15как20);
		
		// Устанавливаем значение в реквизит Длительность
		Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "Длительность");
		
		Если ЗначениеЗаполнено(Свойство) Тогда
			
			НайденныеСтроки = Список.НайтиСтроки(Новый Структура("Свойство", Свойство));
			
			Если НайденныеСтроки.Количество() > 0 Тогда
				
				ПолеДополнительногоРеквизита = НайденныеСтроки[0];
				Форма[ПолеДополнительногоРеквизита.ИмяРеквизитаЗначение] = КоличествоДней;
				
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЕсли;

Перенос реквизитов в отдельную группу (при создании на сервере):

// Получаем ссылки на необходимые элементы формы
	ГруппаСтраницы = Форма.Элементы.Найти("ГруппаСтраницы");
	ГруппаКонтрагенты = Форма.Элементы.Найти("ГруппаКонтрагенты");
	
	// Проверяем существование родительской группы
	Если ГруппаСтраницы = Неопределено Тогда
		ВызватьИсключение "Не найдена группа ""ГруппаСтраницы"" на форме";
	КонецЕсли;
	
	// Проверяем, не существует ли уже такой элемент
	СуществующаяСтраница = Форма.Элементы.Найти("ДанныеКомандировки");
	
	Если СуществующаяСтраница = Неопределено Тогда
		
		// Добавляем новую страницу
		НоваяСтраница = Форма.Элементы.Вставить("ДанныеКомандировки", Тип("ГруппаФормы"), ГруппаСтраницы);
		
		// Устанавливаем вид группы как Страница
		НоваяСтраница.Вид = ВидГруппыФормы.Страница;
		
		// Устанавливаем заголовок страницы
		НоваяСтраница.Заголовок = "Данные командировки";
		
		// Если найден элемент ГруппаКонтрагенты, перемещаем новую страницу перед ним
		Если ГруппаКонтрагенты <> Неопределено Тогда
			Форма.Элементы.Переместить(НоваяСтраница, ГруппаСтраницы, ГруппаКонтрагенты);
		КонецЕсли;
		
	Иначе
		
		// Если страница уже существует, просто перемещаем ее
		Если ГруппаКонтрагенты <> Неопределено Тогда
			Форма.Элементы.Переместить(СуществующаяСтраница, ГруппаСтраницы, ГруппаКонтрагенты);
		КонецЕсли;
		
	КонецЕсли;

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

 

Проверено на следующих конфигурациях и релизах:

  • Документооборот КОРП, релизы 2.1.36.3

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Адаптация типовых решений 1С:Предприятие 8 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

32330 руб.

29.06.2023    12293    35    15    

42

Банковские операции Адаптация типовых решений Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

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

9760 руб.

17.06.2025    3619    9    0    

8

Печатные формы Адаптация типовых решений Бухгалтер Пользователь 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Расширение позволяет вывести в табличном документе факсимиле печати и подписей и/или вывести произвольную картинку из прикреплённых файлов организации для 1С УТ 11.5, КА 2.5, ERP 2.5, УНФ 3, Розница 3. Вывод факсимиле возможен в табличные документы УПД, УКД, Счёт-фактура, ТОРГ-12 и другие. Возможно настроить вывод для любых типовых макетов (Акт сверки, М-15, ТТН), для этого потребуется отредактировать макет и разместить на нём картинки с соответствующими именами, при выводе на печать в размещённые картинки будут выводиться факсимиле из прикреплённых рисунков. Редактирование осуществляется через типовой механизм в пользовательском интерфейсе.

6000 руб.

07.02.2023    13185    117    23    

73

Разработка Адаптация типовых решений Учетные задачи Производство готовой продукции (работ, услуг) Розничная торговля 1С:Управление торговлей 10 Россия Платные (руб)

Доработка для 1С:Управление торговлей 10.3 (релиз 10.3.88.3) добавляет поддержку маркировки новых категорий товаров согласно постановлениям Правительства РФ 2025–2026 гг. Конфигурация УТ 10.3 снята с поддержки — новые маркируемые категории в типовую поставку больше не попадают. Доработка закрывает этот пробел: новые виды номенклатуры, обмен с ГИС МТ «Честный Знак». Поставляется в виде файла .cf

14640 руб.

23.04.2026    706    1    6    

4

Адаптация типовых решений 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Расширение для вывода информации об остатках и ценах номенклатуры в форме списка и выбора номенклатуры. (УТ 11, КА 2, ERP). Позволяет получать информацию о ценах, остатках и доступности в разрезе складов и характеристик номенклатуры, информацию по документам резерва.

7930 руб.

16.10.2025    1372    2    0    

2

Адаптация типовых решений 1С 8.3 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Беларусь Россия Платные (руб)

Расширение "Дополнительные документы" предназначено для создания дополнительных документов различного назначения, как форм для внесения данных так и печатных форм в расширяемой конфигурации пользовательскими средствами, без работы в конфигураторе и внесения изменений в структуру данных. Тестировалось для "1С:БП", "1С:УНФ","1С:КА"

21859 руб.

29.12.2025    1407    1    8    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Oncomm 19.03.26 16:29 Сейчас в теме
Добрый день!
А можете описать пример с вашего видео более подробно, последовательность требуемых действий из вашего перечня и код к ним для автоматического расчета реквизита.
2. NightBreez 101 20.03.26 09:35 Сейчас в теме
(1) Создаем действие "Дата начала при изменении", листинг:

	// Получаем список дополнительных реквизитов формы
	Список = Форма.Свойства_ОписаниеДополнительныхРеквизитов;
	
	// Получаем значение ДатаНачала
	ДатаНачала = Неопределено;
	Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ДатаНачала");
	
	Если ЗначениеЗаполнено(Свойство) Тогда
		
		НайденныеСтроки = Список.НайтиСтроки(Новый Структура("Свойство", Свойство));
		
		Если НайденныеСтроки.Количество() > 0 Тогда
			
			ПолеДополнительногоРеквизита = НайденныеСтроки[0];
			ДатаНачала = Форма[ПолеДополнительногоРеквизита.ИмяРеквизитаЗначение];
			
		КонецЕсли;
		
	КонецЕсли;
	
	// Получаем значение ДатаОкончания
	ДатаОкончания = Неопределено;
	Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ДатаОкончания");
	
	Если ЗначениеЗаполнено(Свойство) Тогда
		
		НайденныеСтроки = Список.НайтиСтроки(Новый Структура("Свойство", Свойство));
		
		Если НайденныеСтроки.Количество() > 0 Тогда
			
			ПолеДополнительногоРеквизита = НайденныеСтроки[0];
			ДатаОкончания = Форма[ПолеДополнительногоРеквизита.ИмяРеквизитаЗначение];
			
		КонецЕсли;
		
	КонецЕсли;
	
	// Проверяем, что обе даты заполнены
	Если ЗначениеЗаполнено(ДатаНачала) И ЗначениеЗаполнено(ДатаОкончания) Тогда
		
		// Вычисляем количество дней между датами
		РазницаВСекундах = ДатаОкончания - ДатаНачала;
		КоличествоДней = Окр(РазницаВСекундах / 86400, 0, РежимОкругления.Окр15как20);
		
		// Устанавливаем значение в реквизит Длительность
		Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "Длительность");
		
		Если ЗначениеЗаполнено(Свойство) Тогда
			
			НайденныеСтроки = Список.НайтиСтроки(Новый Структура("Свойство", Свойство));
			
			Если НайденныеСтроки.Количество() > 0 Тогда
				
				ПолеДополнительногоРеквизита = НайденныеСтроки[0];
				Форма[ПолеДополнительногоРеквизита.ИмяРеквизитаЗначение] = КоличествоДней;
				
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЕсли;
Показать


Создаем действие "Дата окончания при изменении", листиг:

	// Получаем список дополнительных реквизитов формы
	Список = Форма.Свойства_ОписаниеДополнительныхРеквизитов;
	
	// Получаем значение ДатаНачала
	ДатаНачала = Неопределено;
	Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ДатаНачала");
	
	Если ЗначениеЗаполнено(Свойство) Тогда
		
		НайденныеСтроки = Список.НайтиСтроки(Новый Структура("Свойство", Свойство));
		
		Если НайденныеСтроки.Количество() > 0 Тогда
			
			ПолеДополнительногоРеквизита = НайденныеСтроки[0];
			ДатаНачала = Форма[ПолеДополнительногоРеквизита.ИмяРеквизитаЗначение];
			
		КонецЕсли;
		
	КонецЕсли;
	
	// Получаем значение ДатаОкончания
	ДатаОкончания = Неопределено;
	Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ДатаОкончания");
	
	Если ЗначениеЗаполнено(Свойство) Тогда
		
		НайденныеСтроки = Список.НайтиСтроки(Новый Структура("Свойство", Свойство));
		
		Если НайденныеСтроки.Количество() > 0 Тогда
			
			ПолеДополнительногоРеквизита = НайденныеСтроки[0];
			ДатаОкончания = Форма[ПолеДополнительногоРеквизита.ИмяРеквизитаЗначение];
			
		КонецЕсли;
		
	КонецЕсли;
	
	// Проверяем, что обе даты заполнены
	Если ЗначениеЗаполнено(ДатаНачала) И ЗначениеЗаполнено(ДатаОкончания) Тогда
		
		// Вычисляем количество дней между датами
		РазницаВСекундах = ДатаОкончания - ДатаНачала;
		КоличествоДней = Окр(РазницаВСекундах / 86400, 0, РежимОкругления.Окр15как20);
		
		// Устанавливаем значение в реквизит Длительность
		Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "Длительность");
		
		Если ЗначениеЗаполнено(Свойство) Тогда
			
			НайденныеСтроки = Список.НайтиСтроки(Новый Структура("Свойство", Свойство));
			
			Если НайденныеСтроки.Количество() > 0 Тогда
				
				ПолеДополнительногоРеквизита = НайденныеСтроки[0];
				Форма[ПолеДополнительногоРеквизита.ИмяРеквизитаЗначение] = КоличествоДней;
				
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЕсли;
Показать


И создаем действие при создании на сервере, которое перемещает реквизиты на отдельную вкладку "Данные командировки":

// Получаем ссылки на необходимые элементы формы
	ГруппаСтраницы = Форма.Элементы.Найти("ГруппаСтраницы");
	ГруппаКонтрагенты = Форма.Элементы.Найти("ГруппаКонтрагенты");
	
	// Проверяем существование родительской группы
	Если ГруппаСтраницы = Неопределено Тогда
		ВызватьИсключение "Не найдена группа ""ГруппаСтраницы"" на форме";
	КонецЕсли;
	
	// Проверяем, не существует ли уже такой элемент
	СуществующаяСтраница = Форма.Элементы.Найти("ДанныеКомандировки");
	
	Если СуществующаяСтраница = Неопределено Тогда
		
		// Добавляем новую страницу
		НоваяСтраница = Форма.Элементы.Вставить("ДанныеКомандировки", Тип("ГруппаФормы"), ГруппаСтраницы);
		
		// Устанавливаем вид группы как Страница
		НоваяСтраница.Вид = ВидГруппыФормы.Страница;
		
		// Устанавливаем заголовок страницы
		НоваяСтраница.Заголовок = "Данные командировки";
		
		// Если найден элемент ГруппаКонтрагенты, перемещаем новую страницу перед ним
		Если ГруппаКонтрагенты <> Неопределено Тогда
			Форма.Элементы.Переместить(НоваяСтраница, ГруппаСтраницы, ГруппаКонтрагенты);
		КонецЕсли;
		
	Иначе
		
		// Если страница уже существует, просто перемещаем ее
		Если ГруппаКонтрагенты <> Неопределено Тогда
			Форма.Элементы.Переместить(СуществующаяСтраница, ГруппаСтраницы, ГруппаКонтрагенты);
		КонецЕсли;
		
	КонецЕсли;

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


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