Конструирование запросов, заглушки, поддержка однотипных решений

06.04.17

Разработка - Запросы

Написав множество обменов и выгрузок (список в конце статьи) между разными базами через com, я столкнулся с необходимостью поддерживать их все. Более того, я поддерживаю все релизы обменивающихся конфигураций в одной обработке, а, как известно, 1С постоянно добавляет/удаляет/переименовывает объекты и реквизиты. Для упрощения этой задачи, и чтобы мои модули не превратились в сплошные Если ЕстьРеквизитТабЧастиДокумента("Номенклатура", В8.Метаданные.Документы.РеализацияТоваровУслуг, "ВидыЗапасов") Тогда … и был придуман описанный механизм. Данная методика не претендует на универсальность или суперполезность, однако мне она сильно помогла.

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

Методика позволяет большинство изменений выполнять  в Схеме СКД и в макете, а сами запросы получать одной строчкой:

Запрос=В8.NewObject("Запрос");                            
Запрос.Текст=ПолучитьТекстЗапросаИзСКД("ПредварительныйПросмотр",ЭлементСписка.Значение,В8,Запрос);
Если Запрос.Текст="" Тогда
  Продолжить;
КонецЕсли;
УстановитьОбщиеПараметрыЗапроса(Запрос);
Результат = Запрос.Выполнить();

Для хранения запросов и правил их конструирования я выбрал СКД.

 Всё в схеме и макете

В моих обработках есть определённые действия (этапы) «Получение данных», «Предварительный просмотр», «Создание документов». И эти этапы подразделяются на подэтапы. По названию этих этапов и подэтапов обработка будет понимать, какие запросы нужно ей конструировать (т.е. это как бы адрес запроса). Название этапов я расположил в корневых элементах дерева наборов данных с видом «объединение», а подэтапов под ними (по иерархии) с тем же видом. 

Схема

Дальше я создаю элементы с видом «Запрос», такой элемент должен быть либо один без условий, либо несколько, с непересекающимися условиями (т.е. чтобы в итоги выбран был только один подобный элемент в рамках одного этапа и подэтапа).

Условия я записываю в поля и проставляю флаг «Условие».

В тексте запроса я использую конструкции вида Заглушка_ХХХХХХ, такие конструкции при соблюдении определённого условия будут заменены на текст запроса либо на пустую строку (если условие не выполнено). Эти запросы (и условия) записываются ниже (не по иерархии) в элементах  дерева набора данных с видом «Запрос» и названием Заглушка_ ХХХХХХ (Префикс  Заглушка_ обязателен, по нему обработка определяет, что это именно заглушка). Условия для заглушек указываются там же где и условия для запросов (в полях с флагом «условие»). В запросах «Заглушек» могут быть использованы другие «заглушки», тогда их запросы должны бать расположены ниже.

Для хранения условий я использую макет, в котором названия областей состоят из названия этапа и подэтапа (например, ПредварительныйПросмотр_ВыгружатьРеализации)

If

Ещё я использую общие условия (параметры запросов), их я указываю в полях подэтапа с флагом «Группа» чтобы не путать их с условиями которые могут случайно перейти из подчинённых запросов (особенности редактора СКД)

general

Код получения запроса выглядит так (для конфигураций 7.7. немного другая функция)

Функция ПолучитьТекстЗапросаИзСКД(Раздел,Элемент,В8,Запрос)
	ОбработкаОбъект=РеквизитФормыВЗначение("Объект");
	ПараметрыСКД=ПолучитьПараметрыСКД(Раздел,Элемент,В8,ОбработкаОбъект);
	СКД=ОбработкаОбъект.ПолучитьМакет("Запросы");
	СКД_Ветка_1 = СКД.НаборыДанных[Раздел];
	Если СКД_Ветка_1.Элементы.Найти(Элемент)=Неопределено Тогда
		Возврат "";
	КонецЕсли;
	
	СКД_Ветка_2=СКД_Ветка_1.Элементы[Элемент];
	Для Каждого ПолеПараметров Из СКД_Ветка_2.Поля Цикл
		Если ПолеПараметров.ОграничениеИспользования.Группировка Тогда	
			Запрос.УстановитьПараметр(ПолеПараметров.ПутьКДанным,Объект[ПолеПараметров.ПутьКДанным]);
			ПараметрыСКД.Вставить(ПолеПараметров.ПутьКДанным,Объект[ПолеПараметров.ПутьКДанным]);
		КонецЕсли;
	КонецЦикла;
	
	
	ТекстЗапроса="";
	Для Каждого ЭлементВетки  Из  СКД_Ветка_2.Элементы  Цикл
		Если ЭлементВетки.Поля.Количество()=0 Тогда
			ТекстЗапроса=ТекстЗапроса+ЭлементВетки.Запрос;
			Продолжить;
		КонецЕсли; 
		ПропуститьЧасть=Ложь;
		Заглушка=Ложь;
		Если Не Найти(ЭлементВетки.Имя,"Заглушка") =0 Тогда
			Заглушка=Истина;
		КонецЕсли;
		
		
		Для Каждого Поле Из ЭлементВетки.Поля Цикл
			Если Не Поле.ОграничениеИспользования.Условие=ПараметрыСКД[Поле.ПутьКДанным] Тогда	
				ПропуститьЧасть=Истина;	
				Если Заглушка Тогда
					ТекстЗапроса=СтрЗаменить(ТекстЗапроса,ЭлементВетки.Имя,"");
				КонецЕсли;
				
				Прервать;
			КонецЕсли;	
		КонецЦикла;
		Если ПропуститьЧасть Тогда
			Продолжить;
		КонецЕсли;
		Если Заглушка Тогда
			ТекстЗапроса=СтрЗаменить(ТекстЗапроса,ЭлементВетки.Имя,ЭлементВетки.Запрос);
		Иначе
			ТекстЗапроса=ТекстЗапроса+ЭлементВетки.Запрос;		
		КонецЕсли;
	КонецЦикла;
	Возврат ТекстЗапроса;
КонецФункции

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

Например, 1С переименовала документ "СписаниеТоваров" в "СписаниеНедостачТоваров", тогда я просто добавляю две заглушки с двумя запросами (как будто у меня одновременно есть и "СписаниеТоваров" и "СписаниеНедостачТоваров")

ex1

 и добавляю два условия в макет. 

ex2

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

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

Название/ссылка на разработку

 Версия

  Многофункциональная выгрузка из 1С УТ11 в БП3 (сопоставление номенклатуры, складов, контрагентов)+ Свёртка по НДС

 223

  Многофункциональная выгрузка из 1С УТ11 в БП2 (сопоставление номенклатуры, складов, контрагентов)+ Свёртка по НДС

 166

  Многофункциональная выгрузка из 1С УТ10 в БП3 (сопоставление номенклатуры, складов, контрагентов)+ Свёртка по НДС

 142

  Многофункциональная выгрузка из 1С УТ10 в БП2 (сопоставление номенклатуры, складов, контрагентов)+ Свёртка по НДС

 77

  Многофункциональная выгрузка из 1С Розница2 в БП3 (соответствия товаров, контрагентов, складов,статейДДС)+ Свёртка по НДС   

 42

  Многофункциональная выгрузка из 1С УПП1.3 в БП 2 (соответствия товаров, контрагентов, складов, статей ДДС)+ Свёртка по НДС

 38

  Многофункциональная выгрузка из 1С УТ10 в КА 1 (соответствия товаров, контрагентов, складов, статей ДДС)+ Свёртка по НДС

 1

  Многофункциональная выгрузка из 1С УНФ в БП 2 (соответствия товаров, контрагентов, складов, статей ДДС)+ Свёртка по НДС  

 24

  Многофункциональная выгрузка из 1С УНФ в БП 3 (соответствия товаров, контрагентов, складов, статей ДДС)+ Свёртка по НДС  

 51

  Многофункциональная выгрузка из 1С-Рарус: Управление рестораном в БП2  

 1

  Многофункциональная выгрузка из 1С ДАЛИОН УНО в КА 1 (соответствия товаров, контрагентов, складов, статей ДДС)+ Свёртка по НДС

 19

  Многофункциональная выгрузка из 1С ТиС и АТБ 3.5 в БП 3 (соответствия товаров, контрагентов, складов, статей ДДС) 

 13

  Многофункциональная выгрузка из 1С УТ11 в КА 2 (соответствия товаров, контрагентов, складов, статей ДДС)+ Свёртка по НДС

 16

  Многофункциональная выгрузка из 1С КА1 в БП 3 (соответствия товаров, контрагентов, складов, статей ДДС)  

 23

  Многофункциональная выгрузка из 1С КА2 в БП 3 (соответствия товаров, контрагентов, складов, статей ДДС)  

21

  Многофункциональная выгрузка из 1С АльфаАвто в БП3 (соответствия товаров, контрагентов, складов, статей ДДС)+ Свёртка по НДС

10

Приветствуются комментарии.

Вступайте в нашу телеграмм-группу Инфостарт

Конструирование Запрос Заглушка Динамически поддержка

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Инструментарий разработчика Роли и права Запросы СКД Разработчик Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    286342    1611    423    

1220

Кадровый учет Интеграция Запросы Журналы и реестры данных 1С:Предприятие 8 1C:Бухгалтерия 1С:Зарплата и Управление Персоналом 2.5 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1C:ERP Россия Управленческий учет Платные (руб)

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

18300 руб.

17.06.2026    896    2    0    

2

Инструментарий разработчика Запросы Разработчик 1С 8.3 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Структура запроса. Обработка визуально показывает, из какого количества подзапросов состоит запрос.

2 стартмани

06.07.2026    5013    65    XSlava    20    

47

Запросы Разработчик 1С 8.3 Россия Бесплатно (free)

Визуальный «Конструктор запроса» 1С, встроенный прямо в VS Code, — аналог конструктора из Конфигуратора и EDT, но без запуска платформы. Расширение читает конфигурацию, выгруженную в файлы, позволяет собрать запрос мышью и генерирует корректный текст на языке запросов 1С (SDBL). Открывает уже существующий текст запроса из кода для правки и — что особенно ценно — сохраняет комментарии при цикле «открыть - править - сохранить». Подходит тем, кто пишет код 1С в VS Code, держит под рукой множество проектов и не хочет ради одного запроса запускать тяжёлый Конфигуратор или EDT.

26.06.2026    10739    Alex_YAM    7    

34

Нейросети Инструментарий разработчика Запросы Разработчик 1С:Предприятие 8 Абонемент ($m)

Консоль запросов 1.0: добавлен ИИ-помощник (запрос в DeepSeek), который помогает быстрее получать каркас Запроса 1С Сформулируйте простое описание; нажмите кнопку – получите результат прямо в консоли. Где дальше его можно дорабатывать и тестировать. 28.5.2026 Добавил "Консоль запросов 2.0" (запрос в DeepSeek + Claude) 4.10.2026 Обновил "Консоль запросов 2.0"

3 стартмани

20.05.2026    9632    46    German4739    72    

28

WEB-интеграция Запросы Разработчик 1С 8.3 Абонемент ($m)

Post1C - это внешняя обработка, которая превращает 1С в полноценный инструмент для тестирования REST API. Всё управление сосредоточено в одном окне: настройка запроса, выполнение, просмотр ответа и генерация кода - без переключения между формами. Аналог Postman, но работающий в привычной среде 1С.

1 стартмани

02.04.2026    4737    106    priem_nv    28    

71

Инструментарий разработчика Запросы Разработчик 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

QueryConsole1C — расширение, включающее консоль запросов с поддержкой исполняемых представлений — аналогов виртуальных таблиц, основанных на методах программного интерфейса ЗУП. Оно позволяет выполнять запросы с учётом встроенной бизнес-логики, отлаживать алгоритмы получения данных и автоматически генерировать код на встроенном языке 1С.

1 стартмани

16.05.2025    13738    168    zup_dev    32    

87
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Ibrogim 2012 06.04.17 11:55 Сейчас в теме
Жду комментариев и конструктивной критики )
jONES1979; +1 – Ответить
2. v3rter 06.04.17 12:48 Сейчас в теме
Отличная идея конструктора условий! ) Может лучше "Подстановка" вместо "Заглушки"?
4. Ibrogim 2012 06.04.17 14:21 Сейчас в теме
(2) Спасибо, Думаю, что не принципиально )
3. haizman 06.04.17 13:07 Сейчас в теме
Предлагаю многофункциональный вариант "Подзаглушка".
Идея отличная ! И еще нужно думать о спасении души.
Для отправки сообщения требуется регистрация/авторизация