Шаблоны внешних обработок (БСП, управляемые формы)

01.03.20

Разработка - Инструментарий разработчика

Набор из шаблонов для создания внешних обработок вида: Внешняя печатная форма, Отчет на СКД, Схема СКД для сегмента, Внешняя обработка (Самостоятельная, Заполнение объектов, Создание связанных объектов). Предварительно наполнены базовым функционалом и некоторыми механизмами для отладки.

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

Наименование Файл Версия Размер
Шаблоны внешних обработок (БСП, Управляемые формы):
.zip 38,08Kb
124
.zip 38,08Kb 124 Скачать

И сразу лирическое отступление

Бывало у вас такое, что вот скачиваешь нужную вроде бы обработку, а она встречает тебя парой полей ввода и кнопкой "Сделать". Нажимаешь, 1С что-то подзадумалась и все. Что произошло? Какие объекты были поправлены и как? Были ли проблемы? Может там в коде все обернуто в Попытки без сообщений об Исключениях, а все грандиозная работа обернута в одну транзакцию, которая в конце была отменена. В большинстве случаев, какая-то информация будет предоставлена через Сообщить(), реже - какой-то лог на форме. 

Или тебе очень хочется, чтобы обработка была добавлена в справочник и выполнялась как регламентное задание. Но создатель такой вариант даже не рассматривал. Тебе надо - пиши СведенияОВнешнейОбработке, добавляй команду, перетягивай исполняемый код в модуль объекта, если он в форме весь описан.

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

С другой - за день тебе может потребоваться написать несколько обработок, отчетов или печатных форм (особенно программисты "всей 1С" в компании в одном лице меня поймут). Каждую наполнять такими сомнительными плюшками "просто чтобы было" - времени нет практически никогда. Ну и да, лень писать одно и то же снова и снова - оно сжирает время, которое должно быть потрачено на описание логики обработки. Конечно, у всех есть какие-то свои шаблоны для такого, да и в интернете есть куча готовых для вставки кусков кода - нагуглил-вставил, но большинство, как правило, ограничивается вынужденным минимумом.

Собственно, данными шаблонами и попытаемся закрыть эти моменты.

Что это за шаблоны

Они с параметрами регистрации 

Тут ничего сверхъестественного, но есть пара удобств.

  1. Версию обработки можно написать в комментарии к ней. В формате %Версия=N.N.N.N% За парсинг этого отвечает процедура в модуле объекта ПолучитьВерсиюОбработки()
  2. Имя обработки берется из Синонима. По аналогии с версией, за это отвечает процедура ПолучитьИмяОбработки()
  3. Есть процедура ПолучитьИдентификаторОбработки() - возвращает Имя обработки. Присутствует только в шаблоне Внешней обработки, используется для формирования идентификаторов команд и имени файла лога для сохранения по умолчанию.
  4. Для внешней обработки и внешней печатной формы наполнение команд вынесено в отдельную функцию ПолучитьМассивКоманд() Для удобства, а еще это важно для печ.формы, потому что используется на форме (выбор команды для исполнения) при отладке.

Сами команды при этом наполняются ничуть не проще и не сложнее. Вот пример

 

Функция ПолучитьМассивКоманд() Экспорт
	МассивКоманд = Новый Массив;
	// --------------------------------------------------------------------
	МассивКоманд.Добавить(СтруктураКоманды(
		"ПФ_MXL_ИмяМакета", "Внешняя ВПФ печатная форма",	// Идентификатор, Представление
		"ВызовСерверногоМетода", 							// Использование 
		Истина, "ПечатьMXL"));								// ПоказыватьОповещение, Модификатор	
	// --------------------------------------------------------------------	
	МассивКоманд.Добавить(СтруктураКоманды(
		"ПФ_MXL_ИмяМакета_НаКлиенте", "Внешняя ВПФ печатная форма (клиентский вызов)",	// Идентификатор, Представление
		"ВызовКлиентскогоМетода", 							// Использование 
		Истина, "ПечатьMXL"));								// ПоказыватьОповещение, Модификатор	
	// --------------------------------------------------------------------	
	Возврат МассивКоманд;		
КонецФункции

Функция ПолучитьМассивКоманд(ИмяОбъекта = "") Экспорт
	Если ПустаяСтрока(ИмяОбъекта) Тогда
		ИмяОбъекта = ПолучитьИмяОбработки();
	КонецЕсли;
	
	МассивКоманд = Новый Массив;
	ИдентификаторОбработки = ПолучитьИдентификаторОбработки();
	// --------------------------------------------------------------------
	МассивКоманд.Добавить(СтруктураКоманды(
		ИдентификаторОбработки, ИмяОбъекта,				// Идентификатор команды, Представление команды
		"ОткрытиеФормы", 									// Использование 
		Ложь, ""));											// ПоказыватьОповещение, Модификатор	
	// --------------------------------------------------------------------	
	МассивКоманд.Добавить(СтруктураКоманды(
		ИдентификаторОбработки + "_Клиент", ИмяОбъекта + " (На клиенте)",	// Идентификатор команды, Представление команды
		"ВызовКлиентскогоМетода", 							// Использование 
		Ложь, ""));											// ПоказыватьОповещение, Модификатор	
	// --------------------------------------------------------------------	
	МассивКоманд.Добавить(СтруктураКоманды(
		ИдентификаторОбработки + "_АВТО", ИмяОбъекта + " (АВТО)",	// Идентификатор команды, Представление команды
		"ВызовСерверногоМетода", 							// Использование 
		Ложь, ""));											// ПоказыватьОповещение, Модификатор	
	// --------------------------------------------------------------------	
	Возврат МассивКоманд;
КонецФункции

 

  1. Если мы говорим об отчете на СКД, заходить в модуль обработки нам вообще не нужно. Указываем Имя обработки, Синоним и версию через Комментарий (опционально). Если нет никакой особенной логики, которую нужно описать ПриКомпоновкеРезультата или чего-то еще - нам там делать нечего. Все параметры регистрации будут заполнены. Ну может только указать исполнение в безопасном режиме (по умолчанию везде - Ложь) или Информацию.

Если же логика какая-то есть, особенно, когда мы используем общую ФормуОтчета - есть целая область, которая так и называется Общая_форма_ФормаОтчета. И уже там, без создания собственной формы, мы можем вытворять с СКД всякое. Как минимум - задать вычисляемые параметры для отчета.

Есть инструменты для дебага
  1. Для внешней печ.формы - есть форма обработки, в которой можно указать на нужный объект и выполнить любую из добавленных команд печати. Исполнение, естественно, можно ковырять в отладке, а результат увидеть тут же ТабДоке. При этом, каких-либо дополнительных действий, чтобы это работало, от разработчика не потребуется. Ну можно задать типы для переменной формы СсылкаНаОбъект, чтобы упростить выбор объекта для проверки, например.
  2. Для внешней обработки есть сразу несколько инструментов
    1. Лог - в виде реквизита обработки ЛогТекст, тип Строка. Для работы с логом в модуле обработки есть

 

Процедура Лог(Текст, Уровень = 0, Отделить = Ложь, Очистить = Ложь)

 

Где Уровень - это условный отступ при записи строки в лог.

- Ну чтобы было удобнее читать

- Когда мы обрабатываем какой-то объект и хотим логгировать разные последовательные этапы.

Отделить - вставить пустую строку перед добавляемой.

Очистить - очистит весь текущий лог и добавит строку.

На форме обработки эти процедуры также есть, для вызова &НаКлиенте - она абсолютно такая же, для вызова &НаСервере - у нее только изменено имя - ЛогС().

  1. Таблица проблемных объектов - как табличная часть обработки. Состоит из двух колонок - Объект (Любая ссылка) и Ошибка (Строка). 

Заполняется из модуля или формы процедурой 

Процедура ДобавитьПроблемныйОбъект(ОбъектСсылка, ТекстОшибки)

Сама таблица представлена на странице Лог, на таблице повешен обработчик Выбора, который открывает объект в строке. Процедура существует только для того, чтобы писать одну строку кода, а не две\три.

  1. Таблица созданных объектовкак табличная часть обработки. Состоит из одной колонки - Объект (Любая ссылка). Ее заполнение

 

Процедура ДобавитьСозданныйОбъект(ОбъектСсылка)

В остальном - все то же самое, что и для проблемных объектов.

  1. Сохранение строки лога в файл. Есть и на сервере, и на клиенте. И на форме в виде кнопки. Только выбор места сохранения я не описывал - мне... лень. Это еще ни разу не потребовалось, всегда достаточно указания пути в коде. Процедуры
// В модуле
Процедура СохранитьЛогВФайл(Каталог, ИмяФайла = "", Дописывать = Истина, Датировать = Истина, ФорматДаты = "ДФ=dd.MM.yyyy-HH.mm") Экспорт

// На форме
Процедура СохранитьЛогВФайл(Каталог, ИмяФайла = "", Дописывать = Истина, Датировать = Истина, ФорматДаты = "ДФ=dd.MM.yyyy-HH.mm", ВыбиратьКонтекст = Ложь)

Каталог - папка для сохранения файла лога. Если путь не найден - будет создан (в попытке).

ИмяФайла - когда не указано, берется ЛОГ_+Имя обработки

Дописывать - строка лога допишется в конец файла. Если Ложь - текст файла будет очищен перед записью.

Датировать - к имени файла будет добавлен суффикс в виде, который указан в переменной ФорматДаты.

ВыбиратьКонтекст (модуль формы) - если Истина, на клиенте будет показан диалог с тремя кнопками "На клиенте", "На сервере" и "Отмена" - это вопрос, в каком контексте выполнить сохранения лога.

Базовый скелет кода
  1. Для ВПФ - это полностью функциональная процедура печати, в которой остается только разделить логику формирования от разных команд (если требуется) и сформировать ТабДок.
  2. Для Внешней обработки - Форма, на которой есть вышеописанные механизмы дебага и ряд процедур для удобства:

 

&НаКлиенте
Функция ПроверкаЗаполнения_Клиент(ТекстОшибки)

&НаСервере
Функция ПроверкаЗаполнения_Сервер(ТекстОшибки)

&НаСервере
Функция Получить(ИмяРеквизита)

&НаСервере
Процедура Обновить(ИмяРеквизита, НовоеЗначение)

// Заготовки, которые уже вызываются из событий формы ПриСозданииНаСервере и ПриОткрытии
&НаСервере
Процедура УстановитьПараметрыСписка()

&НаСервере
Процедура УстановитьДоступность()

&НаКлиенте
Процедура ОбновитьОформление()

 А также пара экспортных процедур в модуле обработки

Процедура УстановитьПометкуУдаления(Объект, НовоеЗначение, ВключаяПодчиненные = Истина) Экспорт

Процедура СохранитьИзмененияОбъекта(Объект, Загрузка = Ложь, ПроводитьДокумент = Ложь) Экспорт

 

  1. Для Внешней обработки с видами: Создание связанных объектов и Заполнение объектов - заготовки процедур ВыполнитьКоманду (на форме и в модуле). Для этого КлиентскийВызов и СерверныйВызов ветвится на две процедуры. Собственно, это все актуально и для просто Обработки, которая выполняется в Клиентском или Серверном вызове.

 

ЗаполнениеОбъектов(ИдентификаторКоманды, МассивОбъектов, КонтекстнаяПеременная);
	
СозданиеСвязанныхОбъектов(ИдентификаторКоманды, МассивОбъектов, КонтекстнаяПеременная);

// То есть код процедуры выглядит примерно так
Процедура ВыполнитьКоманду(ИдентификаторКоманды, МассивОбъектов = неопределено, КонтекстнаяПеременная = неопределено) Экспорт
	Лог("Начало обработки на сервере: " + ТекущаяДата(),,, Истина);
	
	ЗаполнениеОбъектов(ИдентификаторКоманды, МассивОбъектов, КонтекстнаяПеременная);
	//СозданиеСвязанныхОбъектов(ИдентификаторКоманды, МассивОбъектов, КонтекстнаяПеременная);

	Лог("Окончание обработки на сервере: " + ТекущаяДата(),, Истина);
	
	СохранитьЛогВФайл("C:\",, Истина, Ложь);
КонецПроцедуры

 

  1. Для СКД - местами поднастроен макет. Ничего такого, на чем стоит заострять внимание. Вся суть шаблона - в модуле обработки, где можно понавешать выполнение процедур из общей формы отчета.

 

Процедура ОпределитьНастройкиФормы(ЭтаФорма, КлючВарианта, Настройки) Экспорт
	Настройки.События.ПриСозданииНаСервере 							= Истина;
	Настройки.События.ПередЗагрузкойВариантаНаСервере 				= Истина;
	Настройки.События.ПриЗагрузкеВариантаНаСервере 					= Истина;
	Настройки.События.ПриЗагрузкеПользовательскихНастроекНаСервере 	= Истина;
	
	//Настройки.События.ПередЗагрузкойНастроекВКомпоновщик 			= Ложь;
	//Настройки.События.ПередЗаполнениемПанелиБыстрыхНастроек 		= Ложь;
	//Настройки.События.ПослеЗаполненияПанелиБыстрыхНастроек 			= Ложь;
	//Настройки.События.ПриОпределенииИспользуемыхТаблиц 				= Ложь;
	//Настройки.События.ПриОпределенииПараметровВыбора 				= Ложь;
	//Настройки.События.ПриОпределенииСвойствЭлементовФормыНастрое 	= Ложь;
КонецПроцедуры

 

  1. Еще есть отчет-шаблон для добавления его как схемы запроса формирования сегмента (На примере сегмента партнеров в УТ-11). Но это такое.
 

Лирическое послесловие

Ни в коем случае не говорю "это все обязательно должно быть в ваших обработках". Это удобства, которые удовлетворяют моим рабочим потребностям и вкусам. Да, мне непривычно их отсутствие, когда что-то где-то скачиваю. И да, я прекрасно понимаю, какое это уныние - писать один и тот же код снова и снова. Даже копировать его откуда-то и адаптировать под текущую разработку. Я хочу проблему решать, а не писать процедуры для отладки потому, что задача сложная и могут быть проблемы при эксплуатации. У меня голова занята умными мыслями, а я в пятидесятый раз копирую и заполняю ПараметрыРегистрации.

Так и появляются шаблоны-заготовки. Просто сколько ни скачиваю чьи-либо узкоспециализированные обработки - такое ощущение, что они всегда сделаны через Файл-Создать-Внешняя обработка. Некоторые даже форму не рисуют, просто код в модуле и в конце Main(); И мне от этого грустно.

Естественно, это все не является какой-то грандиозной разработкой, поэтому можно просто скачать без рекламы и СМС. Ознакомиться, переделать под себя или взять куски, указать на косяк, предложить сделать по другому.

Тестировалось

  • На УТ 11.4.11.55, БСП 3.0.3.164, Режим совместимости 8.3.12
  • На самописке, БСП 2.3.6.92, Режим совместимости 8.3.9
  • На платформах: 8.3.14.1630, 8.3.15.1830

 

обработка шаблон БСП заготовки велосипеды

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

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

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    126109    683    389    

736

Infostart PrintWizard - создание и редактирование печатных форм в 1С 8.3

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

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 руб.

06.10.2023    8202    24    6    

44

Infostart УДиФ: Управление данными и формами 1С

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

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

10000 руб.

10.11.2023    4578    12    2    

38

SALE! %

PowerTools

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

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

3600 2280 руб.

14.01.2013    178791    1084    0    

862

Бустер Конвертации данных 3 (Infostart Toolkit)

Инструментарий разработчика 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 руб.

07.10.2021    15055    3    12    

37

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99733    239    97    

298

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28384    4    10    

16

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18469    6    8    

40
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. dock 44 11.06.20 14:54 Сейчас в теме
парсер замудрить для "%Версия=N.N.N.N%" - это уж точно не лень было всё подготовить :)
я пока остановился на прямом "переносе" версии из комментария.
Автору почет и уважение!
2. Skurikhin 22.06.20 10:54 Сейчас в теме
СПАСИБО!
просто большое и человеческое )
3. asoiko 03.12.20 10:20 Сейчас в теме
Друг, иди сюда обниму. Красавец!
4. nkolentcev 16.02.21 10:39 Сейчас в теме
И сколько слов хороших добрых так часто хочется сказать!
Оставьте свое сообщение