Этюды по программированию. Хитрости создания расширений для конфигураций на БСП. Часть 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

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

См. также

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

Синтакс-помощник БСП - cправочник по библиотекам стандартных подсистем и электронных документов. В состав справочника входит описание экспортных процедур и функций, размещенных в областях кода ПрограммныйИнтерфейс БСП и БЭД.

1800 руб.

21.11.2024    3640    16    15    

18

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

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

12000 руб.

02.02.2019    37106    44    22    

41

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

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

12000 руб.

19.04.2021    23258    64    44    

57

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

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

12000 руб.

22.05.2011    98649    115    108    

189

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

Расскажу, как использовать полезный функционал - инструментарий разработчика «1С:Библиотека стандартных подсистем» (БСП) в своих объектах метаданных. Статья будет полезна как шпаргалка при написании собственных объектов метаданных.

27.12.2024    3434    PROSTO-1C    15    

43

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

Синтакс-помощник БСП - справочник по Библиотеке Стандартных Подсистем, профессиональный инструмент разработчика с интуитивно понятным интерфейсом. Читайте в статье как использовать все возможности справочника и сделать работу с БСП более комфортной и эффективной.

11.12.2024    3901    gorenski    0    

8

БСП (Библиотека стандартных подсистем) Менеджеры внешних отчетов Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление холдингом Абонемент ($m)

За последние лет 5 несколько раз сталкиваюсь с проблемой на разных проектах (в конфигурациях 1С:ERP, 1С:ERP УХ и многих других, основанных на БСП), когда много пользователей (около 30 тысяч) в информационной базе, время добавления доступа для пользователей занимает значительное время. Открытие списка занимает от 10 до 15 секунд, и каждое изменение списка еще примерно столько же.

1 стартмани

10.12.2024    993    Iaskeliainen    2    

7
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. echo77 1913 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 2943 05.02.19 12:59 Сейчас в теме
(5) Нет. В расширении вы можете настроить для затянутой роли права доступа только на объекты расширения. Другие не затрагиваются.
7. TerveRus 06.02.19 11:54 Сейчас в теме
Режим совместимости вручную меняли?
Если я включу возможность изменения конфигурации, то и так могу документы-справочники добавить. В чем тогда смысл расширения?
Когда уже в типовой режим совместимости уберут??
8. milkers 2943 06.02.19 12:41 Сейчас в теме
(7)
Режим совместимости вручную меняли?


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

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

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

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

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