Молочников Олег 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 параметра процедуры ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов().
//
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
Возврат; //В дальнейшем будет добавлен код команд
КонецПроцедуры
#Область Печать
#КонецОбласти
#КонецОбласти
#КонецЕсли
Команды печати
Наш документ “Акт о непрохождении входного контроля” имеет печаную форму.
Необходимо, чтоб она выводилась на форме в командах печати.
Создайте на форме подменю печати:
В модуле формы создайте следующие процедуры:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат)
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
Убедитесь, что процедура ПриСозданииНаСервере вызывается при вызове формы.
Затянем в нашу конфигурацию модуль : “ УправлениеПечатьюПереопределяемый” и добавим примерно следующий код, только для ваших объектов:
&После("ПриОпределенииОбъектовСКомандамиПечати")
// Определяет объекты конфигурации, в модулях менеджеров которых размещена процедура ДобавитьКомандыПечати,
// формирующая список команд печати, предоставляемых этим объектом.
// Синтаксис процедуры ДобавитьКомандыПечати см. в документации к подсистеме.
//
// Параметры:
// СписокОбъектов - Массив - менеджеры объектов с процедурой ДобавитьКомандыПечати.
//
Процедура ВК_ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов) Экспорт
СписокОбъектов.Добавить(Документы.мо_АктОНепрохождениеВходногоКонтроля);
КонецПроцедуры
В модуле менеджера в область “Печать” надо прописать примерно следующий код:
#Область Печать
// Заполняет список команд печати.
//
// Параметры:
// КомандыПечати - ТаблицаЗначений - состав полей см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "Акт прохождения входного контроля";
КомандаПечати.Представление = НСтр("ru = 'Акт прохождения входного контроля'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Ложь;
КонецПроцедуры
// Сформировать печатные формы объектов
//
// ВХОДЯЩИЕ:
// ИменаМакетов - Строка - Имена макетов, перечисленные через запятую
// МассивОбъектов - Массив - Массив ссылок на объекты которые нужно распечатать
// ПараметрыПечати - Структура - Структура дополнительных параметров печати
//
// ИСХОДЯЩИЕ:
// КоллекцияПечатныхФорм - Таблица значений - Сформированные табличные документы
// ПараметрыВывода - Структура - Параметры сформированных табличных документов
//
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "Акт прохождения входного контроля") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "Акт прохождения входного контроля", НСтр("ru = 'Акт прохождения входного контроля'"), СформироватьПечатнуюФормуАктПрохожденияВходногоКонтроля(МассивОбъектов, ОбъектыПечати, ПараметрыПечати));
КонецЕсли;
ФормированиеПечатныхФорм.ЗаполнитьПараметрыОтправки(ПараметрыВывода.ПараметрыОтправки, МассивОбъектов, КоллекцияПечатныхФорм);
КонецПроцедуры
Функция СформироватьПечатнуюФормуАктПрохожденияВходногоКонтроля(МассивОбъектов, ОбъектыПечати, ПараметрыПечати = Неопределено)
//Ваш код
Возврат ТабДок;
КонецФункции
#КонецОбласти
Не забудьте снять галочку "Безопасный режим". Удачи!
Продолжение Часть 2: //infostart.ru/public/1044424/
Получившиеся расширение гарантированно будет работать на платформе 8.3 (тестировано на релизе 8.3.13.1644) 1С:ERP Управление предприятием 2 (3.1.8.216) и Управление торговлей, редакция 11 (11.4.6.188) Режим совместимости Версия 8.3.12 и выше.
Акция! Вы можете скачать архив всех моих разработок, которые я предлагаю за StartMone, по Специальной цене: //infostart.ru/public/960899/#archive
Другие разработки автора:
Акция! Вы можете скачать архив всех моих разработок, которые я предлагаю за StartMone, по Специальной цене: //infostart.ru/public/960899/#archive
Молочников Олег Spb. 2024