Грамотная корректирвка текстов запросов для обновлений

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

Некоторые программисты вносят изменения непосредственно в текст запроса, вставляя свои комментарии, чтобы было понятно, что это доработка.

Но мне больше нравится изменение текста запроса с помощью кода, ориентируясь на определенный участок в тексте запроса (маркер). Обычно достаточно вызова функции СтрЗаменить, но есть недостаток — если после обновления типовой конфигурации текст запроса изменился, то замена не сработает и об этом будет неизвестно пользователю, пока не проявятся результаты ошибки.

Поэтому обычно я использую несколько доработанную методику — замену текста запроса делаю с помощью функции:

Процедура ЗаменитьТекстЗапроса(ТекстЗапроса, Искать, Заменить, ИмяМодуля) Экспорт
	Если Найти(ТекстЗапроса, Искать) = 0 Тогда
		ВызватьИсключение "Не найден текст для замены: """ + Искать + """ в тексте запроса в модуле: " +  ИмяМодуля + Символы.ПС + "Конфигурация изменилась. Требуются доработки";
	КонецЕсли;
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, Искать, Заменить);
КонецПроцедуры

Вот как выглядит замена:

//ИскМаркер = "ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки";
//В УТ 11.5 новая таблица ЛЕВОЕ СОЕДИНЕНИЕ ВтДоступныеТовары КАК СвободныеОстатки
ИскМаркер = "ЛЕВОЕ СОЕДИНЕНИЕ ВтДоступныеТовары";
ЗаменитьТекстЗапроса(
Запрос.Текст, 
ИскМаркер,
"ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаВыгрузки КАК ТаблицаВыгрузки
|	ПО 
|		КодыТоваровПодключаемогоОборудованияOffline.Номенклатура = ТаблицаВыгрузки.Номенклатура
|		И КодыТоваровПодключаемогоОборудованияOffline.Характеристика = ТаблицаВыгрузки.Характеристика
|" + ИскМаркер, 
"ПодключаемоеОборудованиеOfflineВызовСервера");

Таким образом, если исходный маркер не найден, в процессе работы кода будет выдана ошибка и будет понятно, что нужно менять. Вот пример такой ошибки, который как раз встретился при обновлении с УТ 11.4 на УТ 11.5:

Обновляйте запросы грамотно!

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментария 2

  1. KSN:

    А использовать обьектную модель запроса не пробовал? Сложнее, но надежно.

    • Было бы надежнее, если бы 1С не тасовало запросы. А так одинаково надежно — сообщение об отсутствии маркера будет выдано.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *