Оперативная отладка и изменение кода, добавление регламентных и HTTP-методов, аналоги констант

10.11.23

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

Статья посвящена доработкам, призванным уменьшить количество обновлений конфигурации. Будет полезна организациям, где тех. задания возникают на лету, базы огромные, работает более 1000 пользователей, и частое отключение базы нежелательно. А динамика приводит к краху базы. Доработка позволяет оперативно менять, отлаживать код без изменения конфигурации. Оперативно добавлять регламентные задания, оперативно добавлять методы HTTP-сервисов. Аналог констант - оперативное создание.

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

Наименование Файл Версия Размер
Оперативная отладка и изменение кода, оперативное добавление регламентных и HTTP-методов:
.cfe 15,56Kb
2
.cfe 15,56Kb 2 Скачать

Статья посвящена доработкам, призванным уменьшить количество обновлений конфигурации. Будет полезна для организаций, где тех. задания возникают на лету, базы огромные, работает более 1000 пользователей. Частое отключение базы нежелательно. А динамика часто приводит к краху базы. Доработка позволяет оперативно менять, отлаживать код без изменения конфигурации. Оперативно добавлять регламентные задания, оперативно добавлять методы HTTP-сервисов (можно и Веб, но тут не используется). И второй пункт ХранимыеЗначения – аналог констант в базе с возможностью хранить произвольные значения с произвольным именем.

Перед этим конфигурацию придется минимально доработать:

Для регламентного и сервисов нужно соответственно создать РАЗОВО универсальное регламентное и универсальный HTTP- сервис.

Для отладки или изменяемого кода нужно добавить РАЗОВО несколько строк в нужный блок программы.

Принцип работы – имеется справочник алгоритмов, в котором есть текстовое поле с исполняемым кодом. Идентифицируется по наименованию элемента. В алгоритм можно передать через структуру какие-то данные и получить через эту же структуру новые или обработанные  данные – полученные по результату работы алгоритма. Ограничение на код алгоритма стандартные – нельзя использовать операторы Функция, Процедура, Возврат. Если у вас что-то очень сложное -  поместите свой исполняемый код в обработку без всяких ограничений и вызовите обработку из алгоритма. Таким образом можно к примеру легко сделать рассылку отчета. Вся сложность заключается в том, что нужно заранее описать в конфигураторе передаваемые и получаемые данные. Здесь представлен самый универсальный вариант. Можно в принципе получить и выполнить код алгоритма напрямую - контекст будет ему виден, данные передавать не надо. 

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

HTTP –сервис имеет универсальный метод Execute, В качестве тела запроса передается структура с Ключом -Наименование алгоритма, и с допПараметрами – данными. ДопПараметры будут и в ответе сервиса. Метод по ключу находит алгоритм, передает в него допПараметр, алгоритм возвращает в допПараметре результат выполнения. Сервис возвращает допПараметр в ответе.

Ошибки отладки видно в Журнале регистрации

Реализация:
 

Справочник Алгоритмы

 

 

Описание, ТекстПрограммы – строковое неограниченное

Активный – булево, признак что алгоритм рабочий.

Ответственный, Автор – информационные поля, можно прицепить справочник пользователи, здесь строка.

ДатаАктивации – дата, информационное поле.

В модуль менеджера справочника добавляем Процедуру:

Процедура ВыполнитьАлгоритм(Ключ, ДопПараметры="") Экспорт
	// Ключ, наименование алгоритма
	//Доппараметры - структура(данные любые) которую можно передать в алгоритм- сюда же нужно положить результат выполнения если возвращается какое-то значение
	УстановитьПривилегированныйРежим(Истина);
	ЗапросАлгоритмы = Новый Запрос;
	ЗапросАлгоритмы.УстановитьПараметр("ИмяАлг", Ключ);
	
	
	ЗапросАлгоритмы.Текст = 
	"ВЫБРАТЬ ПЕРВЫЕ 1
	|	Алгоритмы.Ссылка КАК Ссылка,
	|	Алгоритмы.ТекстПрограммы КАК ТекстПрограммы,
	|	Алгоритмы.Код КАК Код
	|ИЗ
	|	Справочник.Алгоритмы КАК Алгоритмы
	|ГДЕ
	|	НЕ Алгоритмы.ЭтоГруппа
	|	И Алгоритмы.Наименование = &ИмяАлг
	|	И Алгоритмы.Активный
	|	И НЕ Алгоритмы.ПометкаУдаления
	|
	|УПОРЯДОЧИТЬ ПО
	|	Код УБЫВ
	|АВТОУПОРЯДОЧИВАНИЕ";
	ВыборкаАлг = ЗапросАлгоритмы.Выполнить().Выбрать();
	
	Если ВыборкаАлг.Следующий() Тогда
		
		Код = ВыборкаАлг.Код;
		
		Попытка
			Выполнить ВыборкаАлг.ТекстПрограммы;
		Исключение
			стрОшибки	=ОписаниеОшибки();
			ЗаписьЖурналаРегистрации("Ошибка алгоритма", , , стрОшибки); 
			Сообщить("---Ошибка АЛГОРИТМа Ключ - " + Ключ+": "+стрОшибки);	
			ДопПараметры	=Новый Структура("Ошибка","!!!ошибка алгоритма: "+стрОшибки );
		КонецПопытки;
	Иначе
		стрОшибки	="нет алгоритма по ключу - "+Ключ;
		ЗаписьЖурналаРегистрации("Ошибка алгоритма", УровеньЖурналаРегистрации.Ошибка, , , стрОшибки); 
		Сообщить(стрОшибки);	
		ДопПараметры	=Новый Структура("Ошибка",стрОшибки );
	КонецЕсли;
	
	
	УстановитьПривилегированныйРежим(Ложь);
		
КонецПроцедуры

Пример использования  отладки кода:

Функция ПолучитьОстатки (ДанОп)
	
	допПараметры	=Новый Структура("ДанОп", даноп);
	ВыполнитьАлгоритм("ОстаткиДляЧегото", допПараметры);
//В алгоритме ОстаткиДляЧегото на спискаНоменклатуры (переменная данОП) вычисляются 
//остатки и помещаются в тз. Эта тз добавляется в структуру допПараметры под параметром рез.

	Если допПараметры.Свойство("Рез") Тогда
		Возврат допПараметры.Рез;
	КонецЕсли;
//Если алгоритма нет или в нем ошибка выполняется типовой код
//…. 
//….
Возврат тзОстатки;
КонецФункции

 

Реализация HTTP-Сервиса:

Добавляем сервис

 

 

 

В модуль сервиса добавляем процедуры:

Функция GetclientsPost(Запрос)
	
Если  Запрос.ОтносительныйURL = "/Execute" Тогда
		
		ПолученныеДанные =  Десериализовать(Запрос.ПолучитьТелоКакСтроку());

		Результат = ОтветНаHTTP(ПолученныеДанные);
		Ответ = Новый HTTPСервисОтвет(200);
		Ответ.УстановитьТелоИзСтроки(Результат);
		Возврат Ответ;
	Иначе
		Ответ = Новый HTTPСервисОтвет(200);
		Возврат Ответ;
	КонецЕсли;
	
КонецФункции

Функция Десериализовать(XMLСтруктура) Экспорт 
	
	ЧтениеXMLДанных = Новый ЧтениеXML;
	ЧтениеXMLДанных.УстановитьСтроку(XMLСтруктура);
	ТЗ = СериализаторXDTO.ПрочитатьXML(ЧтениеXMLДанных);
	ЧтениеXMLДанных.Закрыть();
	Возврат ТЗ;
	
КонецФункции
Функция Сериализовать(Структура) Экспорт 
	
	ДеревоВОбъекте = СериализаторXDTO.ЗаписатьXDTO(Структура);
	МойXML = Новый ЗаписьXML;
	МойXML.УстановитьСтроку();
	ФабрикаXDTO.ЗаписатьXML(МойXML,ДеревоВОбъекте);
	Возврат МойXML.Закрыть();
	
КонецФункции

Функция ОтветНаHTTP(ПолученныеДанные) Экспорт
	Ответ="";
	Если ПолученныеДанные.Свойство("Ключ") Тогда	
		Ответ	=ВыполнениеПоАлгоритму(ПолученныеДанные);			
	Иначе
		Ответ	="Запрос не определен";
	КонецЕсли;

	Возврат Сериализовать(Ответ);
	
КонецФункции

Функция ВыполнениеПоАлгоритму(ДанОп)
	//Выполенние произвольного алагоритма по справочнику Алгоритмы
	//Должно быть свойство ключ и допПараметры(тудасюдаха- будет передано В и вернется ИЗ алгоритма)
	Если данОп.свойство("Ключ") Тогда
		допПараметры	=?(данОп.свойство("допПараметры"), ДанОп.допПараметры, "");
		Справочники.Алгоритмы.ВыполнитьАлгоритм(данОп.Ключ, допПараметры);
		
		Возврат (Новый Структура("Успешно, допПараметры", Истина, допПараметры));
	КонецЕсли;
		
	Возврат Новый структура("Успешно,допПараметры", ложь, ДанОп.допПараметры);	
КонецФункции

По коду – при вызове метод сервиса uni/Execute, метод проверяет полученную структуру запроса, здесь должно быть 2 параметра – Ключ (имя алгоритма) и допПараметр (вложенная структура с данными). Алгоритм может переопределить эту переменную или добавить свои данные. Эта структура возвращаются в качестве ответа.

Пример вызова вебсервиса, код обработки:

&НаКлиенте
Процедура Команда1(Команда)
	ответ	=СделатьHTTPЗапрос(Новый Структура("Ключ, допПараметры", "СложитьСтр", Новый Структура("Текст1, текст2","раз", "два")));
	Сообщить(Ответ);
КонецПроцедуры

&НаСервере
//Вход для запроса Execute
//структура с параметрами Ключ и Допппараметры
Функция СделатьHTTPЗапрос(Структура) Экспорт
	// Вставить содержимое обработчика.
	ТестовыйРежим = ПараметрыСеанса.ТестовыйРежим;
	НастрБазы	=Константы.ТестоваяБаза.Получить();
	Запрос = Сериализовать(Структура);
	
	Пользователь = "Admin";
	Пароль = "1";
	СоединениеHTTP = Новый HTTPСоединение("192.168.1.1", , Пользователь, Пароль);
	HTTPЗапрос = Новый HTTPЗапрос("TabUPS/hs/uni/Execute");
	
	HTTPЗапрос.УстановитьТелоИзСтроки(Запрос);
	
	Попытка
		HTTPОтвет = СоединениеHTTP.ОтправитьДляОбработки(HTTPЗапрос);
		Ответ = HTTPОтвет.ПолучитьТелоКакСтроку();
		Возврат Десериализовать(Ответ);
	Исключение
		Сообщить(ОписаниеОшибки());
	КонецПопытки;
КонецФункции


&НаСервере
Функция Десериализовать(XMLСтруктура)
	ЧтениеXMLДанных = Новый ЧтениеXML;
	ЧтениеXMLДанных.УстановитьСтроку(XMLСтруктура);
	ТЗ = СериализаторXDTO.ПрочитатьXML(ЧтениеXMLДанных);
	ЧтениеXMLДанных.Закрыть();
	Возврат ТЗ;
КонецФункции

&НаСервере
Функция Сериализовать(Объект)
	ДеревоВОбъекте = СериализаторXDTO.ЗаписатьXDTO(Объект);
	МойXML = Новый ЗаписьXML;
	МойXML.УстановитьСтроку();
	ФабрикаXDTO.ЗаписатьXML(МойXML, ДеревоВОбъекте);
	Возврат МойXML.Закрыть();
КонецФункции

Итого если в основной базе будет алгоритм с именем «СложитьСтр»

 

 

В ответе сервиса вы получите структуру с 3 параметрами: п1, п2, рез.

Реализация регламентного (НЕТ в Расширении!!!).

Добавляем универсальное регламентное

 

 

В качестве процедуры:

Процедура УниверсальноеРегламентное(КлючРЗ="", Парам1="", Парам2="", Парам3="") Экспорт
	
	Если не СокрЛП(КлючРЗ) ="" Тогда //это регламентное из алгоритма
		
		Справочники.Алгоритмы.ВыполнитьАлгоритм(КлючРЗ, Новый Структура("Парам1, Парам2, Парам3", Парам1, Парам2, Парам3));	
	КонецЕсли;

КонецПроцедуры

Итого при создании регламентного в пользовательском режиме вам нужно указать первым параметром название алгоритма. Здесь прошито еще 3 параметра. Вы можете указать свои данные для регламентного – например, подразделение. Алгоритм видит эти параметры как ДопПараметры.Парам1, ДопПараметры.Парам2, ДопПараметры.Парам3

Вид созданного задания:

 

 

Здесь – АвтоФормирование это наименование алгоритма который будет выполняться из справочника Алгоритмы. Второй параметр произвольный – данные которые вы передаете в алгоритм. Здесь подразделение по которому нужно формировать чтото…

 

Второй механизм проще – аналог констант, регистр сведений ХранимыеЗначения. Периодический. Состав данных определите сами

 

 

 

Имя – Строка 20
ТипЗначения – Строка 100
Имя и типЗначения просто составной ключ для поиска нужного значения. В качестве типаЗначения используется тип данных  для возврата пустого значения - если нет записи. В другом варианте сюда заносил подсистему к которой относится переменная – упрощает редактирование пользователю, особенно когда значений уже поднакопилось.
Значение - Составной тип данных: Строка, Число, и т.д.….

В модуль менеджера добавляем функцию:

Функция ПолучитьХран(Ключ, ТипЗнач="", Дата="") Экспорт
	УстановитьПривилегированныйРежим(Истина);
	Запрос	= Новый Запрос;
	Запрос.УстановитьПараметр("Ключ"				, Ключ);
	Запрос.УстановитьПараметр("Дата"	,?(Дата="", Дата('00010101'), Дата));
	Запрос.УстановитьПараметр("ТипЗнач"	,ТипЗнач);

	
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ХранимыеЗначенияСрезПоследних.Период КАК Период,
	|	ХранимыеЗначенияСрезПоследних.Имя КАК Имя,
	|	ХранимыеЗначенияСрезПоследних.ТипЗначения КАК ТипЗначения,
	|	ХранимыеЗначенияСрезПоследних.Значение КАК Значение,
	|	ХранимыеЗначенияСрезПоследних.Комментарий КАК Комментарий
	|ИЗ
	|	РегистрСведений.ХранимыеЗначения.СрезПоследних(
	|			&Дата,
	|			ТипЗначения = &ТипЗнач
	|				И имя = &Ключ) КАК ХранимыеЗначенияСрезПоследних";
	Выборка = Запрос.Выполнить().Выбрать();
	
	Если Выборка.Следующий() Тогда
		Возврат Выборка.Значение;
	ИначеЕсли ТипЗнач	="Дата" Тогда
		Возврат Дата("00010101");
	ИначеЕсли ТипЗнач	="Булево" Тогда
		Возврат Дата(Ложь);
	ИначеЕсли ТипЗнач	="Строка" Тогда
		Возврат "";
	Иначе
		Возврат Неопределено;
	КонецЕсли;
	
	
	УстановитьПривилегированныйРежим(Ложь);

КонецФункции

Теперь из любого места конфигурации можем вызвать ее:

стрП	=РегистрыСведений.ХранимыеЗначения.ПолучитьХран("ПолноеРедакт", "Строка");

В качестве значения может быть либо ссылка либо к примеру список кодов справочников через запятую. Их после получения придется обработать – но зато его может редактировать пользователь. Если очень надо через ЗначениеВСтрокуВнутр можно сохранять массивы, списки, таблицы значений и т.д.. 

По  практике постоянно использую Хранимые, HTTPсервис и Регламентное. 

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

Код тестировался на платформе 1С:Предприятие 8.3 (8.3.15.1830) на управляемых формах. В рабочей базе работает под обычными формами.

Оперативное изменение

См. также

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

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

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

10000 руб.

02.09.2020    127157    689    389    

740

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

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

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

18000 руб.

06.10.2023    8428    25    6    

46

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

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

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

10000 руб.

10.11.2023    4751    12    2    

38

SALE! %

PowerTools

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

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

3600 2280 руб.

14.01.2013    178953    1085    0    

863

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

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

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

15000 руб.

07.10.2021    15123    3    12    

38

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

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

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

5000 руб.

07.02.2018    99896    240    97    

298

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

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

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

2040 руб.

27.12.2017    28433    4    10    

16

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

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

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

3000 руб.

27.08.2019    18528    6    8    

40
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Константин С. 668 10.11.23 15:35 Сейчас в теме
в принципе да. хоть очередной велосипед)
ps:
https://brom.itworks.group/
SerVer1C; +1 Ответить
2. SerVer1C 764 10.11.23 16:09 Сейчас в теме
(1) Не встречал раньше Бром. Интересное решение!
3. sytkosa 119 10.11.23 23:11 Сейчас в теме
(1) Сделайте статью на infostart про БРОМ+. Я думаю это будет интересно сообществу
4. Константин С. 668 11.11.23 13:05 Сейчас в теме
(3) мопед не мой))) а статьи есть в наличии, из них сам узнал.
5. anosin 29 12.11.23 08:01 Сейчас в теме
6. nuctoh 31 12.11.23 11:26 Сейчас в теме
Был опыт алгоритмов. Тормоза решались получением алгоритмов через модули ПовтИсп. В целом жизнеспособно, но поиск ошибок и отладка превратились со временем в сущий ад. Проблема, решаемая алгоритмами точно так же просто решается с помощью расширения со всеми плюсами в виде возможности отладки.
7. A_kryl 161 13.11.23 06:20 Сейчас в теме
Как вы расширение без динамики обновляете?
8. dhurricane 13.11.23 11:39 Сейчас в теме
(7) Есть ощущение, что у расширений другой алгоритм динамического обновления. По крайней мере, пока не наблюдал проблем с ним ни разу, а использую регулярно.
Оставьте свое сообщение