БСП. Подключаемые команды. Команды заполнения

20.08.21

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

Статья посвящена использованию подсистемы "Подключаемые команды" библиотеки стандартных подсистем. Доходчиво и подробно описан пошаговый алгоритм создания, а также подключения внешней обработки для заполнения документа. Содержит шаблон-заготовку и готовую к использованию обработку заполнения документа.

Скачать исходный код

Наименование Файл Версия Размер
Шаблон-заготовка
.epf 7,03Kb
15
.epf 7,03Kb 15 Скачать
Готовая обработка заполнения
.epf 10,78Kb
28
.epf 10,78Kb 28 Скачать


Версия БСП: 3.1.4
Подсистема: Подключаемые команды
Раздел ИТС: Библиотека стандартных подсистем 3.1.4. Документация -> Глава 3. Настройка и использование подсистем при разработке конфигурации -> Подключаемые команды
 

Как понятно из названия статьи, подсистема “Подключаемые команды” является частью библиотеки стандартных подсистем (далее БСП). 
В каждом прикладном решении есть объекты входящие в эту подсистему. Следовательно, для этих объектов можно подключать дополнительные команды.
И именно слово “подключать” подойдет здесь лучше всего. Сейчас коротко объясню почему:

 

 

Ближе к делу...

В качестве примера я использовал заполнение документа “Премия" типового прикладного решения “1С:Зарплата и управление персоналом 3”.
Допустим, нам нужно реализовать такой алгоритм расчета премии, который сложно выполнить с помощью типового расчета.
Для этой цели отлично подойдет подключаемая команда заполнения.

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

 

Итак, приступим …
В первую очередь в модуле объекта нужно заполнить функцию СведенияОВнешнейОбработке.

Функция СведенияОВнешнейОбработке() Экспорт

 

В параметрах регистрации укажем “ЗаполнениеОбъекта”. Это в дальнейшем повлияет на расположение кнопки на форме объекта назначения. (все варианты см. ИТС).

  ПараметрыРегистрации = Новый Структура;
  ПараметрыРегистрации.Вставить("Вид", ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта()); 
  ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);

 

Определим объекты, к которым мы подключаем нашу обработку. В нашем случае это один документ “Премия”

  МассивНазначений = Новый Массив();
  МассивНазначений.Добавить("Документ.Премия");

 

Заполним остальные поля параметров регистрации 

  ПараметрыРегистрации.Вставить("Наименование", "Расчет премии (нетиповой)");
  ПараметрыРегистрации.Вставить("Версия", "1.0"); //"1.0"
  ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
  ПараметрыРегистрации.Вставить("Информация", "Свой вариант расчета премии");
  ПараметрыРегистрации.Вставить("ВерсияБСП", ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("3.1.4.1"));

 

Добавим команду открытия обработки, которая в дальнейшем появится в документе «Премия». «Вид использования» выбираем «ОткрытиеФормы». 

  ДобавитьКоманду(ТаблицаКоманд, "Рассчитать премию", "РассчитатьПремию", "ОткрытиеФормы", Ложь, "");

Описание других видов использования: 

 

 

Теперь наша обработка технически готова к добавлению в состав дополнительных отчетов и обработок типового прикладного решения!

Осталось добавить механизм расчета премии и сохранения результатов расчета.

 

Немного подробнее о механизме открытия формы обработки…
При добавлении команды в таблицу команд мы указали вид команды «ОткрытиеФормы». Это значит, что при выполнении команды «Рассчитать премию» будет открыта основная форма нашей обработки.
В этой форме перечислены ключевые параметры, в которые БСП будет записывать данные необходимые для выполнения обработки.

Для вида использования «ОткрытиеФормы» существуют следующие параметры:

 
  • ДополнительнаяОбработкаСсылка – ссылка на элемент справочника «ДополнительныеОтчетыИОбработки».
  • ИдентификаторКоманды – идентификатор, заданный для команды при добавлении в таблицу команд в модуле объекта.
  • ОбъектыНазначения – массив ссылок объектов назначений. Если обработка вызывается из формы объекта, то в массиве будет одна запись. Если обработка вызывается из формы списка, то в массиве будет столько записей сколько выбрано строк.

Кроме того, в данном случае можно обратиться к контексту формы объекта-владельца. Это делается через конструкцию «ВладелецФормы.Объект» в процедуре формы «ПриОткрытии». Конструкция «ВладелецФормы.Объект» дает возможность считывать необходимые данные из объекта-владельца, а также записать в объект результаты расчета премии.

Переходим к расчету премии…
Для получения актуальных данных документа «Премия» будем использовать конструкцию «ВладелецФормы.Объект» в процедуре «ПриОткрытии». 

ЗаполнитьРеквизитыФормыНаСервере(ВладелецФормы.Объект);


Процедура «ЗаполнитьРеквизитыФормыНаСервере» считывает актуальные значения реквизитов объекта владельца и через модуль объекта записывает их в реквизиты обработки.

&НаСервере
Процедура ЗаполнитьРеквизитыФормыНаСервере(знач ДанныеЗаполнения)
	// Заполняем данные шапки
	НачалоПериода 	= ДанныеЗаполнения.ПериодРегистрации;
	КонецПериода  	= КонецМесяца(ДанныеЗаполнения.ПериодРегистрации);
	ДанныеШапки 	= Новый Структура("НачалоПериода, КонецПериода", НачалоПериода, КонецПериода);
	
	// Получаем начисления 
	Начисления = ДанныеЗаполнения.Начисления.Выгрузить();
	
	// Реквизиты обработки заполняем в модуле объекта
	ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
	ОбработкаОбъект.ЗаполнитьШапку(ДанныеШапки);
	ОбработкаОбъект.ЗаполнитьНачисленияОбработки(Начисления);
	
	ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект");
КонецПроцедуры	

 

На форме добавлены две команды «РассчитатьПремию» и «ПеренестиВДокумент».

По команде «РассчитатьПремию» вызывается процедура модуля объекта с расчетом.
Здесь записан самый примитивный расчет, ибо цель статьи показать работу подключаемой обработки, а не разбирать ньюансы расчета сумм премии.
 

Процедура РассчитатьПремию() Экспорт
	// Для примера увеличим премию на 10%
	Для каждого СтрокаРасчетаПремии Из РасчетПремии Цикл
	    СтрокаРасчетаПремии.НовыйРезультат = СтрокаРасчетаПремии.Результат + Окр(СтрокаРасчетаПремии.Результат*10/100, 15, 2);
	КонецЦикла; 
КонецПроцедуры

 

По команде «ПеренестиВДокумент» вызывается процедура «ПеренестиВДокументОтвет»:

  • Выполняется цикл по табличной части «РасчетПремии» обработки. 
  • Для каждой строки выполняется поиск строки в табличной части «Начисления» документа владельца. Если строка найдена, тогда колонка «Результат» обработки переносится в колонку «Результат» документа.

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

&НаКлиенте
Процедура ПеренестиДанныеВДокументОтвет(Знач Результат, Знач ПараметрыКоманды) Экспорт
	Если Результат = КодВозвратаДиалога.Нет Тогда
		Возврат;
	КонецЕсли;
	
	НачисленияДокумента = ВладелецФормы.Объект.Начисления;
	
	Для каждого СтрокаРасчетаПремии Из Объект.РасчетПремии Цикл
		ПараметрыПоиска = Новый Структура("Сотрудник", СтрокаРасчетаПремии.Сотрудник);
		
		СтрокиНачислений = НачисленияДокумента.НайтиСтроки(ПараметрыПоиска);

		Если СтрокиНачислений.Количество() > 0 Тогда
			СтрокаНачислений = СтрокиНачислений[0];
			СтрокаНачислений.Результат = СтрокаРасчетаПремии.НовыйРезультат;
		КонецЕсли;
	КонецЦикла; 
	
	ВладелецФормы.Модифицированность = Истина;
	
	ЭтаФорма.Закрыть();
КонецПроцедуры	

 

Итоги…

Теперь обработку можно добавить в список дополнительных отчетов и обработок прикладного решения и проверить как она функционирует.

В разных типовых прикладных решениях кнопка заполнения на форме может отображаться в разных местах. Для «1С:Зарплата и управление персоналом 3» кнопка появится здесь:

 

 

БСП подключаемые команды команда заполнения заполнение пошаговый рецепт

См. также

БСП. Добавляем отчет в меню Отчеты

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

Добавим новый отчет в меню нового документа средствами БСП.

02.04.2024    3137    John_d    10    

89

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

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

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

01.03.2024    1691    dimanich70    8    

14

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

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

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

12.02.2024    785    FilippovRI    0    

15

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

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

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

07.02.2024    2615    YA_418728146    11    

43

1С:БСП Дополнительные реквизиты и сведения

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

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

19.01.2024    6304    PROSTO-1C    5    

46

Бесплатный митап 9 февраля «Библиотеки и фреймворки на 1С и всё, что с этим связано»

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

Митап посвящен вопросам создания, использования и поддержке переиспользуемого кода при разработке решений на платформе 1С:Предприятие 8.

15.01.2024    3885    0    Infostart    0    

21
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ixijixi 1796 12.05.21 09:21 Сейчас в теме
Раз уж рассказываете про БСП, тогда уж и пользуйтесь методами БСП
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("3.1.4.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();

Плюс не описан метод
ДобавитьКоманду(ТаблицаКоманд, "Рассчитать премию", "РассчитатьПремию", "ОткрытиеФормы", Ложь, "");
movled; Serg O.; Lacoste4life; SagittariusA; Torin99; ong1990; frkbvfnjh; Turbokey; DrAku1a; Drivingblind; dabu-dabu; cleaner_it; +12 Ответить
2. kondrp 1156 12.05.21 10:40 Сейчас в теме
(1)
Принято. Добавлю в описание.
15. dehro 5 02.02.24 17:13 Сейчас в теме
(1)
        ВерсияБСП = СтандартныеПодсистемыСервер.ВерсияБиблиотеки();
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(ВерсияБСП);
   


))
3. webester 26 12.05.21 11:32 Сейчас в теме
Найти бы инструкцию по добавлению команды "движения документа" из стандартных подключаемых я вроде добавил все как на ИТС но меню так и не появилось
4. kondrp 1156 12.05.21 11:45 Сейчас в теме
7. webester 26 15.05.21 09:26 Сейчас в теме
(4)Именно с нее и начал. Может я конечно криворук...
5. maxx 991 12.05.21 13:41 Сейчас в теме
Так и не понял вид обработки какой, в коде указано ЗаполнениеОбьекта а потом в статье говорится ОткрытиеФормы
6. SlavaKron 12.05.21 14:15 Сейчас в теме
ОткрытиеФормы – в терминах БСП это тип команды . В данном случае обработка имеет вид ЗаполнениеОбьекта с командой типа ОткрытиеФормы.
SagittariusA; triviumfan; kondrp; +3 Ответить
8. Serg O. 225 24.03.23 12:56 Сейчас в теме
Хоть один раз напишите всё целиком... по кусочкам вечно собирать надо информацию
более полная статья см. https://infostart.ru/public/525648/

Вот у меня "как шаблон" нечто такое

Функция СведенияОВнешнейОбработке() Экспорт
    ВерсияБСП = СтандартныеПодсистемыСервер.ВерсияБиблиотеки(); // "3.1.5.274";   см. ОбновлениеИнформационнойБазыБСП.ПриДобавленииПодсистемы
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(ВерсияБСП);// 3.1.х
	
	// .ВидОбработки 
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка(); 
	ПараметрыРегистрации.Версия = "1.0.3.0324";// +++ OS - 24.03.202 3 года 
	ПараметрыРегистрации.БезопасныйРежим = Ложь;
	ПараметрыРегистрации.Наименование = "Название Обработки";
	ПараметрыРегистрации.Информация = "подробное описание,
| + 24.03.2023 - что нового
| по основной задаче ... для ....";    
	
//  ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг");
	
	Команда1 = ПараметрыРегистрации.Команды.Добавить();
     Команда1.Идентификатор = "ИмяОбработкиБезПробеловИСкобок"; // без Пробелов, скобок, тире и спец.символов
     Команда1.Представление = ПараметрыРегистрации.Наименование;  
	// .ТипКоманды
   	Команда1.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
	Команда1.ПоказыватьОповещение = Истина;  
    Команда1.Модификатор = "";
	
    Возврат ПараметрыРегистрации;
КонецФункции
Показать
9. asoft65 23.04.23 11:46 Сейчас в теме
Коллеги, а как добавить команду в меню "Ввести на основании" ? Очень надо. Можно пример. Времени в обрез у меня. Очень надо.
10. kondrp 1156 23.04.23 13:26 Сейчас в теме
(9) Если есть доступ к ИТС, то посмотри по этой ссылке
11. asoft65 26.04.23 09:16 Сейчас в теме
(10) Спасибо, но увы не помогло с УНФ 1.6.
Там сработало только добавление новой команды в Расширение. Но вот незадача - новая строка стала последней в списке....Как ее приподнять? В свойствах команды в палитре свойств никакого "порядка" нет.

Подскажите пожалуйста.
Прикрепленные файлы:
12. asoft65 26.04.23 09:22 Сейчас в теме
Через отладчик увидел, что в самый последний момент, перед добавлением на форму УНФ проверяет список команд, при этом кэширует имена подменю и встречая уже обработанное, отбрасывает его. А и у 1С и у меня имяПоменю - Ввод на основании. Вот такие грустные дела. Брать в расширение еще и этот код, как-то не хочется, мало ли на что повлияет.
13. asoft65 26.04.23 10:34 Сейчас в теме
В УНФ 1.6 работала только команда, а в УНФ 3.0 напротив, работает только код и результат точно наоборот - теперь Новая строка первая в списке и порядок 6 и 4, которые пробовал, никак на это обстоятельство не влияют. К тому же, теперь с моим расширением, всего и делающим то добавление пункта меню, вот так в модуле менеджера документа ПриходнаяНакладная:

Функция ДобавитьКомандыСозданияНаОсновании(Команды, НастройкиФормы) Экспорт
	ДобавитьКомандуСоздатьНаОсновании(Команды);	
КонецФункции

Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт
	
	КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить();
	КомандаСоздатьНаОсновании.Менеджер = Метаданные.Документы.РасходнаяНакладная.ПолноеИмя();
	КомандаСоздатьНаОсновании.Представление = ОбщегоНазначения.ПредставлениеОбъекта(Метаданные.Документы.РасходнаяНакладная) + " (выдача колес)";
	КомандаСоздатьНаОсновании.Порядок = 6;  // тут пробовал и 4 - никакого эффекта
	КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить";
	
	Возврат КомандаСоздатьНаОсновании;
	
КонецФункции
Показать


Все, как написано у 1С в документации, пропадает кнопка "Создать на основании" в форме списка, а в форме элемента она есть и новая запись гордо на 1-м месте стоит.

Подскажите пожалуйста что не так с Формой списка и как можно опустить немного вниз свою добавленную строку и можно ли это вообще сделать?
14. rintik 19 27.04.23 08:21 Сейчас в теме
Наверное еще можно добавить описание разрешений. Бывает заполнение из внешнего файла не работает с неполными правами.
ПараметрыРегистрации.Вставить("Разрешения", Новый Массив);
ПараметрыРегистрации.Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса("Excel.Application", "00024500-0000-0000-C000-000000000046"));
ПараметрыРегистрации.Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(Истина, Истина));
Оставьте свое сообщение