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

13.01.24

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

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

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

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

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

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

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

//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С:УТ 11.4/11.5 КА, ERP 2.4/2.5

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

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

12000 руб.

19.04.2021    20575    56    35    

51

Настраиваемый управленческий баланс V4.20 (Управляемые и обычные формы)

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

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

12000 руб.

22.05.2011    96615    114    108    

187

Excel Studio for 1C V2.11

Загрузка и выгрузка в Excel Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Система позволяет сделать быстрый перенос ваших наработок в Excel в любую конфигурация 1С. Ускорит в разы запуск проекта, если есть много важных наработок в Excel. На любом предприятие есть огромное количество расчетов,  сделанных в Excel.  В качестве примера можно назвать предварительные расчеты рентабельности выполнения заказов, оптимальный уровень закупок, модели бюджетирования и  т.д.  Многие из этих расчетов имеет смысл интегрировать с 1С. Я предлагаю вам профессиональный инструмент внедренца, который может проделать эту работу в несколько кликов мышки

2400 руб.

16.11.2016    29521    2    10    

32

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    1117    dimanich70    6    

13

Заполнение поля адреса в своей обработке [БСП]

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

Небольшая шпаргалка по функциям БСП касательно адреса. Так скажем, еще один способ помимо https://infostart.ru/1c/articles/1060970/

12.02.2024    638    FilippovRI    0    

14

Расширяем возможности дополнительных обработок и настраиваем их отладку

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

Уже не одна веб-страница исписана знаниями о дополнительных обработках, как создать, как подключить. Есть масса вариантов, как их можно отладить. Я разобрался в кишках работы библиотеки и покажу, как можно расширить возможности дополнительных отчетов, а также покажу удобный способ отладки.

07.02.2024    2259    YA_418728146    11    

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


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

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

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

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

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