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

10.11.23

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Оперативная отладка и изменение кода, оперативное добавление регламентных и HTTP-методов:
.cfe 15,56Kb
2
2 Скачать (10 SM) Купить за 4 550 руб.

Статья посвящена доработкам, призванным уменьшить количество обновлений конфигурации. Будет полезна для организаций, где тех. задания возникают на лету, базы огромные, работает более 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) на управляемых формах. В рабочей базе работает под обычными формами.

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

См. также

SALE! 15%

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

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

10000 руб.

02.09.2020    159416    872    399    

861

SALE! 15%

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 7140 руб.

20.08.2024    7769    55    22    

66

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

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

9360 руб.

17.05.2024    23433    68    45    

117

SALE! 15%

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

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

10000 8500 руб.

10.11.2023    10417    36    21    

61

SALE! 15%

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

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

22200 19980 руб.

06.10.2023    15398    35    7    

70

SALE! 35%

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

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

4800 3120 руб.

14.01.2013    187976    1138    0    

912

SALE! 15%

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

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

15000 12750 руб.

07.10.2021    17303    6    32    

42

Инструментарий разработчика Программист Платные (руб)

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

1800 руб.

21.02.2023    7694    8    35    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Константин С. 675 10.11.23 15:35 Сейчас в теме
в принципе да. хоть очередной велосипед)
ps:
https://brom.itworks.group/
SerVer1C; +1 Ответить
2. SerVer1C 815 10.11.23 16:09 Сейчас в теме
(1) Не встречал раньше Бром. Интересное решение!
3. sytkosa 119 10.11.23 23:11 Сейчас в теме
(1) Сделайте статью на infostart про БРОМ+. Я думаю это будет интересно сообществу
4. Константин С. 675 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 162 13.11.23 06:20 Сейчас в теме
Как вы расширение без динамики обновляете?
8. dhurricane 13.11.23 11:39 Сейчас в теме
(7) Есть ощущение, что у расширений другой алгоритм динамического обновления. По крайней мере, пока не наблюдал проблем с ним ни разу, а использую регулярно.
Оставьте свое сообщение