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

Публикация № 1439097

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

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

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


Версия БСП: 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» кнопка появится здесь:

 

 

Скачать файлы

Наименование Файл Версия Размер
Шаблон-заготовка

.epf 7,03Kb
3
.epf 7,03Kb 3 Скачать
Готовая обработка заполнения

.epf 10,78Kb
3
.epf 10,78Kb 3 Скачать

Специальные предложения

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

Плюс не описан метод
ДобавитьКоманду(ТаблицаКоманд, "Рассчитать премию", "РассчитатьПремию", "ОткрытиеФормы", Ложь, "");
frkbvfnjh; Turbokey; DrAku1a; Drivingblind; dabu-dabu; cleaner_it; +6 Ответить
2. kondrp 1214 12.05.21 10:40 Сейчас в теме
(1)
Принято. Добавлю в описание.
3. webester 35 12.05.21 11:32 Сейчас в теме
Найти бы инструкцию по добавлению команды "движения документа" из стандартных подключаемых я вроде добавил все как на ИТС но меню так и не появилось
4. kondrp 1214 12.05.21 11:45 Сейчас в теме
7. webester 35 15.05.21 09:26 Сейчас в теме
(4)Именно с нее и начал. Может я конечно криворук...
5. maxx 929 12.05.21 13:41 Сейчас в теме
Так и не понял вид обработки какой, в коде указано ЗаполнениеОбьекта а потом в статье говорится ОткрытиеФормы
6. SlavaKron 12.05.21 14:15 Сейчас в теме
ОткрытиеФормы – в терминах БСП это тип команды . В данном случае обработка имеет вид ЗаполнениеОбьекта с командой типа ОткрытиеФормы.
triviumfan; kondrp; +2 Ответить
Оставьте свое сообщение

См. также

БСП: Дополнительная обработка (Регламенты), примеры от простого к сложному Промо

Практика программирования БСП (Библиотека стандартных подсистем) v8 1cv8.cf Абонемент ($m)

Очень много попадается странных решений, которые можно решить через БСП:Дополнительные отчеты и обработки. Я бы вообще БСП из-за этой подсистемы переименовал в «Большое Спасибо Программистам». Поработаем с подсистемой в части написания регламентных заданий.

1 стартмани

10.05.2018    49840    dsdred    44    

Подсистема сложносочиненного версионирования

БСП (Библиотека стандартных подсистем) v8 1cv8.cf Россия Абонемент ($m)

Статья описывает мою личную боль при работе в Управление холдингом, редакция 3.0, и может не совпадать с вашими ощущениями. Прощу учитывать, что это лишь мысленный эксперимент. В качестве эксперимента поставил себе задачу: "Как отслеживать изменения, для объектов, которые состоят из нескольких других объектов?".

1 стартмани

04.05.2021    499    johnnyshut23    0    

История данных и БСП

БСП (Библиотека стандартных подсистем) v8 1cv8.cf Абонемент ($m)

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

1 стартмани

09.06.2020    4624    zeegin    17    

Использование подсистемы БСП "Заполнение объектов"

Практика программирования Универсальные функции БСП (Библиотека стандартных подсистем) v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

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

1 стартмани

23.11.2018    27666    ids79    25    

БСП: Дополнительная обработка (Регламенты) + Расширения, примеры от сложного к универсальному

Практика программирования БСП (Библиотека стандартных подсистем) v8 v8::УФ 1cv8.cf Абонемент ($m)

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

2 стартмани

21.05.2018    19748    dsdred    17    

Внешняя печатная форма с использованием БСП и вызовом клиентского метода

Универсальные печатные формы БСП (Библиотека стандартных подсистем) v8 1cv8.cf Россия Абонемент ($m)

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

1 стартмани

02.11.2017    24161    Andrew189100    15