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

20.08.21

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Шаблон-заготовка
.epf 7,03Kb
19
19 Скачать (1 SM) Купить за 1 850 руб.
Готовая обработка заполнения
.epf 10,78Kb
32
32 Скачать (1 SM) Купить за 1 850 руб.


Версия БСП: 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)

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

10.09.2024    1113    MadRave    1    

13

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

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

06.09.2024    928    n_mezentsev    10    

7

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

Добавим дополнительные свойства в новый документ средствами БСП

02.09.2024    3621    John_d    10    

52

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

Всё больше организаций выбирает для серверов под 1С операционные системы Linux. Одним из отличий систем Windows и Linux является отсутствие COM объектов, которые зачастую использовались для формирования печатных форм офисных документов (Word). Конечно, можно выполнять печать и на клиенте, но есть риск импортозамещения. В работе у меня случались проблемы с зависанием процесса Word, поэтому я не люблю его использовать.

29.07.2024    4685    PROSTO-1C    12    

49

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

Описание возможности печати произвольного QR-кода в текстовом (не фискальном) документе ККМ с помощью типовых функций БПО.

22.07.2024    710    KirillZ44    6    

9
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ixijixi 1903 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 7 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 995 12.05.21 13:41 Сейчас в теме
Так и не понял вид обработки какой, в коде указано ЗаполнениеОбьекта а потом в статье говорится ОткрытиеФормы
6. SlavaKron 12.05.21 14:15 Сейчас в теме
ОткрытиеФормы – в терминах БСП это тип команды . В данном случае обработка имеет вид ЗаполнениеОбьекта с командой типа ОткрытиеФормы.
SagittariusA; triviumfan; kondrp; +3 Ответить
8. Serg O. 291 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"));
ПараметрыРегистрации.Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(Истина, Истина));
Оставьте свое сообщение