Молочников Олег Spb. 2019
Хитрости создания расширений для конфигураций на БСП. Часть 1.
Вторая часть статьи здесь: //infostart.ru/1c/articles/1044424/
Третья часть статьи здесь: //infostart.ru/1c/articles/2240529/
Рассмотрим пример создания расширения от начала и до конца на примере создания расширения: Подсистема "Входной контроль" для ERP 2.5, КА 2.5, УТ 11.5
Для начала создадим в расширении подсистему, которая будет отображаться в интерфейсе и назовем ее, к примеру, “Входной контроль”. Далее следует вполне рутинная работа по программированию документов, справочников, обработок и других объектов нашей системы.
И вот тут начинаются наши особенности. Первое, что нам нужно сделать, это добавить две роли, на чтение и запись наших объектов, для того, чтоб к ним могли иметь доступ пользователи без полных прав:

Если мы оставим, как есть, то наша подсистема не будет доступна пользователям с полными правами, несмотря на наличие любых других прав. Чтобы этого избежать, достаточно включить в расширение роль “полные права” и дать ей права на наши объекты.
Создание на основании
Далее по логике системы документ “Акт входного контроля ” может вводиться на основании документа “Приобретение товаров услуг”. Необходимо, чтоб в списке документов, которые можно создать на основании Приобретение товаров услуг” был и наш документ.
Затянем в нашу конфигурацию модуль : “СозданиеНаОснованииПереопределяемый” и добавим примерно следующий код, только для ваших объектов.
&После("ПриОпределенииОбъектовСКомандамиСозданияНаОсновании")
// Определяет список объектов конфигурации, в модулях менеджеров которых предусмотрена процедура
// ДобавитьКомандыСозданияНаОсновании, формирующая команды создания на основании объектов.
// Синтаксис процедуры ДобавитьКомандыСозданияНаОсновании см. в документации.
//
// Параметры:
// Объекты - Массив - объекты метаданных (ОбъектМетаданных) с командами создания на основании.
//
// Пример:
// Объекты.Добавить(Метаданные.Справочники.Организации);
//
Процедура ВК_ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты) Экспорт
Объекты.Добавить(Метаданные.Документы.мо_АктВходногоКонтроля);
Объекты.Добавить(Метаданные.Документы.мо_АктОНепрохождениеВходногоКонтроля);
КонецПроцедуры
Наша функция не переписывает системную процедуру, а только вызывается после нее и слегка дорабатывает результат, включая его в наши объекты, так что это не скажется на обновлениях.
В модуле менеджера документа надо добавить примерно следующий код:
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область СлужебныеПроцедурыИФункции
// Определяет список команд создания на основании.
//
// Параметры:
// КомандыСозданияНаОсновании - ТаблицаЗначений - Таблица с командами создания на основании. Для изменения.
// См. описание 1 параметра процедуры СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании().
// Параметры - Структура - Вспомогательные параметры. Для чтения.
// См. описание 2 параметра процедуры СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании().
//
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
КонецПроцедуры
// Добавляет команду создания документа "Упаковочный лист".
//
// Параметры:
// КомандыСозданияНаОсновании - ТаблицаЗначений - Таблица с командами создания на основании. Для изменения.
// См. описание 1 параметра процедуры СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании().
//
Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт
Если ПравоДоступа("Добавление", Метаданные.Документы.мо_АктВходногоКонтроля) Тогда
КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить();
КомандаСоздатьНаОсновании.Менеджер = Метаданные.Документы.мо_АктВходногоКонтроля.ПолноеИмя();
КомандаСоздатьНаОсновании.Представление = ОбщегоНазначенияУТ.ПредставлениеОбъекта(Метаданные.Документы.мо_АктВходногоКонтроля);
КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить";
Возврат КомандаСоздатьНаОсновании;
КонецЕсли;
Возврат Неопределено;
КонецФункции
// Определяет список команд отчетов.
//
// Параметры:
// КомандыОтчетов - ТаблицаЗначений - Таблица с командами отчетов. Для изменения.
// См. описание 1 параметра процедуры ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов().
// Параметры - Структура - Вспомогательные параметры. Для чтения.
// См. описание 2 параметра процедуры ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов().
//
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
Вступайте в нашу телеграмм-группу Инфостарт