Этюды по программированию. Хитрости создания расширений для конфигураций на БСП. Часть 1.

20.11.24

Разработка - БСП (Библиотека стандартных подсистем)

Некоторые нюансы, если вы захотите создавать свои расширения.

Молочников Олег Spb. 2019

Хитрости создания расширений для конфигураций на БСП. Часть 1.  

Вторая часть статьи  здесь: //infostart.ru/1c/articles/1044424/

Третья часть статьи  здесь: //infostart.ru/1c/articles/2240529/

Рассмотрим пример создания расширения от начала  и до конца на примере создания расширения: Подсистема "Входной контроль" для ERP 2.5, КА 2.5, УТ 11.5

Для начала создадим в расширении подсистему, которая будет отображаться в интерфейсе и назовем ее, к примеру, “Входной  контроль”.  Далее следует вполне рутинная работа по программированию документов, справочников, обработок и других объектов нашей системы.

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

//infostart.ru/upload/iblock/21c/21ca118dfaed593c731623b2cc77988b.png

Если мы оставим, как есть, то наша подсистема не будет доступна пользователям с полными правами, несмотря на наличие любых других прав. Чтобы этого избежать, достаточно включить в расширение роль “полные права” и дать ей права на наши объекты.

Создание на основании

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

Затянем в нашу конфигурацию модуль :  “СозданиеНаОснованииПереопределяемый” и добавим примерно следующий код, только для ваших объектов.

&После("ПриОпределенииОбъектовСКомандамиСозданияНаОсновании")

// Определяет список объектов конфигурации, в модулях менеджеров которых предусмотрена процедура

// ДобавитьКомандыСозданияНаОсновании, формирующая команды создания на основании объектов.

// Синтаксис процедуры ДобавитьКомандыСозданияНаОсновании см. в документации.

//

// Параметры:

//   Объекты - Массив - объекты метаданных (ОбъектМетаданных) с командами создания на основании.

//

// Пример:

//             Объекты.Добавить(Метаданные.Справочники.Организации);

//  

Процедура ВК_ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты) Экспорт

               Объекты.Добавить(Метаданные.Документы.мо_АктВходногоКонтроля);

               Объекты.Добавить(Метаданные.Документы.мо_АктОНепрохождениеВходногоКонтроля);

КонецПроцедуры

 

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

В модуле менеджера документа надо добавить примерно следующий код:

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область СлужебныеПроцедурыИФункции
// Определяет список команд создания на основании.
//
// Параметры:
//   КомандыСозданияНаОсновании - ТаблицаЗначений - Таблица с командами создания на основании. Для изменения.
//       См. описание 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

Другие разработки автора:

Подсистема штрихкодирования серий номенклатуры (УТ 11, КА, ERP)Подсистема штрихкодирования серий номенклатуры (УТ 11, КА, ERP)
Подсистема 'Входной контроль' для ERP ,КА , УТ 11
Подсистема 'Входной контроль' для ERP ,КА , УТ 11
Электронный обходной лист (расширение) для ERP, ЗУП, КА
Отправка электронных писем по задолженностям клиентов (ERP, УТ 11)Отправка электронных писем по задолженностям клиентов (ERP, УТ 11)
Excel Studio for 1CExcel Studio for 1C
Настраиваемый управленческий балансНастраиваемый управленческий баланс
Динамические отчеты СКД
Динамические отчеты СКД
Фоновая отправка уведомлений
Генератор кодаГенератор кода

 

Акция! Вы можете скачать архив всех моих разработок, которые я предлагаю за StartMone, по Специальной  цене:  //infostart.ru/public/960899/#archive

Молочников Олег Spb. 2024

Расширение БСП

См. также

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

Расширение "Входной контроль" в 1С:ERP, КА 2.5, УТ11.5 и предназначено для удобства отражения операций входного контроля и их результатов в учетной системе, а также фотофиксации брака.

12000 руб.

02.02.2019    36748    43    22    

41

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

Стандартные конфигурации ERP, КА, УТ 11 позволяют работать с штрихкодированием серий. Есть только одно суровое ограничение – на упаковке должна быть этикетка для номенклатуры и отдельно для серии. Во многих случаях это критически неудобно.

12000 руб.

19.04.2021    22804    64    44    

57

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

Настраиваемый управленческий баланс в 1С предназначен для всех конфигураций, тестирован на: “Управление торговлей”, “Управление производственным предприятием”, “Комплексная автоматизация”, "ERP","УТ11". Содержит конструкторские средства для изменения состава статей баланса и их иерархии, формирования запросов для получения данных по статьям, изменения настроек отчетов для удобного формирования отчетов расшифровки по каждой из статей. Предусмотрено ручное введение данных по статьям баланса в виде ведомостей по датам.

12000 руб.

22.05.2011    98296    115    108    

188

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Бесплатно (free)

В статье описан алгоритм для включения документа или справочника в систему БСП. Будет полезно программистам 1С, начинающим работать с БСП.

24.10.2024    1065    PROSTO-1C    0    

12

БСП (Библиотека стандартных подсистем) Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

В материале описан универсальный механизм работы с добавленными элементами на общую форму «ФормаОтчета». Думаю, облегчит работу многим разработчикам.

08.10.2024    975    PROSTO-1C    4    

10

БСП (Библиотека стандартных подсистем) Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

04.10.2024    1822    MadRave    11    

23

БСП (Библиотека стандартных подсистем) Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример отслеживания прогресса фонового выполнения дополнительной обработки с использованием программного интерфейса длительных операций БСП.

10.09.2024    1811    MadRave    1    

17

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

А что, если долгожданная реализация Паузы в 1С смутно напоминает старую, проверенную? А?!

06.09.2024    1250    n_mezentsev    10    

8
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. echo77 1906 04.02.19 18:43 Сейчас в теме
(0) Оформите, пожалуйста, код в виде блока код, чтобы раскрасить его автоматом и убрать лишние пустые строки
PLAstic; rpgshnik; kuzyara; wowik; +4 Ответить
2. German_Tagil 43 05.02.19 05:44 Сейчас в теме
ну что в копилку - должно пригодиться
3. Boyborodin 05.02.19 11:54 Сейчас в теме
4. Hans 3 05.02.19 11:58 Сейчас в теме
В чем ньюансы то? Напиши в самом начале что решает этот этюд.
5. Alien_job 190 05.02.19 12:31 Сейчас в теме
Вы включили полные права в зависимости расширения. При каждом обновлении они будут изменяться. Расширение гарантированно не будет работать после первого же обновления конфигурации?
6. milkers 2918 05.02.19 12:59 Сейчас в теме
(5) Нет. В расширении вы можете настроить для затянутой роли права доступа только на объекты расширения. Другие не затрагиваются.
7. TerveRus 06.02.19 11:54 Сейчас в теме
Режим совместимости вручную меняли?
Если я включу возможность изменения конфигурации, то и так могу документы-справочники добавить. В чем тогда смысл расширения?
Когда уже в типовой режим совместимости уберут??
8. milkers 2918 06.02.19 12:41 Сейчас в теме
(7)
Режим совместимости вручную меняли?


Режим совместимости нужен, чтоб возможности новых версий платформы не мешали работать старому коду. Режим совместимости Версия 8.3.12+ означает, что я использую в расширении возможности, которые появились с платформы 8.3.12. Во всех конфигурация которые рассчитаны на эту и более поздние версии платформы мое расширение будет работать, может быть только понадобиться поменять режим совместимости, чтобы он соответствовал конфигурации. Для более ранних конфигураций я сделал конфигурацию для объединения.

Если я включу возможность изменения конфигурации, то и так могу документы-справочники добавить. В чем тогда смысл расширения?

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

Когда уже в типовой режим совместимости уберут??

Никогда. Это удобный механизм контроля совместимости версий платформы, конфигураций, расширений.
user774630; +1 Ответить
Оставьте свое сообщение