Допустим, на повестке дня, по ТЗ, возник вопрос: «А как добавить в структуру подчиненности, то есть в отчет «Связанные документы», свои документы, добавленные через расширение?». Данная статья опишет, один из способов решения этого вопроса на примере стандартной конфигурации 1С:ERP 2.5 (релиз: 2.5.25.72).

По факту, у нас на руках есть уже заготовленное расширение, в котором есть стандартный документ «Заказ клиента» и наш документ «Корректировка заказа». Необходимо «прикрутить» наш документ в стандартный отчет «Связанные документы». Для интриги приведу конечный результат наших доработок.

Так выглядит отчет «Связанные документы», со стороны документа «Заказ клиента»:

Так выглядит отчет со стороны нашего добавленного документа через расширение:

Итак, поехали)

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

На форму документа «Корректировка заказа клиента» выведена общая команда «Связанные документы». Для этого добавим в наше расширение общую команду «СвязанныеДокументы».

В свойствах общей команды, в типе параметров команды добавим наш тип документа – ДокументСсылка.

После обновления конфигурации убедимся, что необходимая команда появилась на форме документа.

Форма Документа — раздел команды — глобальные команды.

Теперь в нашем расширении создаем свой критерий отбора.

В его состав включаем наш документ и ссылку на исходный документ (условно, на примере моего ТЗ). Тип реквизита — в моем случае является ссылкой на ЗаказКлиента.

На вкладке «Данные» укажем, что в тип данных входит необходимый документ «Заказ клиента». В моем случае:

Теперь перейдем к более сложной части и, наверное, более «спорной» – редактирование, через наше расширение, общего модуля.

Модуль, который мы будем редактировать — это: «СтруктураПодчиненностиСлужебный», модуль серверный.

Выбираем функцию «ИндексТиповСвязанныхОбъектов()», добавляем ее в расширение, с префиксом &ИзменениеИКонтроль.

Кратко прокомментирую код: в функцию мы добавляем наш критерий отбора, который обходим в цикле и возвращаем значение индекса при построении иерархии документов, в нашем отчете «Связанные документы».

Можно поступить еще проще и просто к индексу добавить наш тип документа:

Оба варианта, по моему мнению, имею право на существование.

Чтобы было легче, приведу оба примера текстом. Первый пример:

Функция Импро_ИндексТиповСвязанныхОбъектов()

	Индекс = Новый Соответствие;

	МетаданныеСвязанныхОбъектов = Метаданные.КритерииОтбора.СвязанныеДокументы;
	ТипыСвязанныхОбъектов = МетаданныеСвязанныхОбъектов.Тип.Типы();
	ТипПараметраКоманды = Метаданные.ОбщиеКоманды.СвязанныеДокументы.ТипПараметраКоманды;

	Для Каждого ТипСвязанногоОбъекта Из ТипыСвязанныхОбъектов Цикл

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

	КонецЦикла;
#Вставка
	МетаданныеСвязанныхОбъектов = Метаданные.КритерииОтбора.КоррЗак_СвязанныеДокументы;
	ТипыСвязанныхОбъектов = МетаданныеСвязанныхОбъектов.Тип.Типы();
	ТипПараметраКоманды = Метаданные.ОбщиеКоманды.СвязанныеДокументы.ТипПараметраКоманды;

	Для Каждого ТипСвязанногоОбъекта Из ТипыСвязанныхОбъектов Цикл 
		Если Не ТипПараметраКоманды.СодержитТип(ТипСвязанногоОбъекта) Тогда 
			Индекс.Вставить(ТипСвязанногоОбъекта, Истина);
		КонецЕсли;
	КонецЦикла;  
#КонецВставки

	Возврат Индекс;

КонецФункции


Второй пример:

&ИзменениеИКонтроль("ИндексТиповСвязанныхОбъектов")
Функция Импро_ИндексТиповСвязанныхОбъектов()

	Индекс = Новый Соответствие;

	МетаданныеСвязанныхОбъектов = Метаданные.КритерииОтбора.СвязанныеДокументы;
	ТипыСвязанныхОбъектов = МетаданныеСвязанныхОбъектов.Тип.Типы();
	ТипПараметраКоманды = Метаданные.ОбщиеКоманды.СвязанныеДокументы.ТипПараметраКоманды;

	Для Каждого ТипСвязанногоОбъекта Из ТипыСвязанныхОбъектов Цикл

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

	КонецЦикла;
#Вставка
	Индекс.Вставить(Тип("ДокументСсылка.КооректировкаЗаказаКлиента"), Истина);
#КонецВставки

	Возврат Индекс;

КонецФункции


Надеюсь, эта статья-инструкция помогла вам найти ответ на вопрос и облегчила выполнение ТЗ. Хорошего всем дня и интересных ТЗ!

Комментарии (0)