Обучение написанию запросов — это фундамент разработки на платформе 1С. Для специалиста, который уже имеет опыт аналитика или владеет базовыми навыками программирования (например, на Pascal), важно не просто заучить синтаксис, но и понять реляционную логику и специфику виртуальных таблиц. Разберем по шагам, как выстроить процесс обучения, какие задачи давать и каких ошибок следует избегать.
Рассмотрим подход, при котором в качестве учебного полигона используются тиражные решения 1С. Проанализируем совет по изучению конфигурации Зарплата и Управление Персоналом (ЗУП). Запросы в этой системе считаются одними из самых сложных и структурированных. Однако для новичка, работающего всего месяц, это может стать шоковой терапией.
Вместо этого разберем более мягкий вход через демонстрационные базы Управление нашей фирмой (УНФ) или Управление торговлей (УТ). Выясним причину их эффективности: в них уже заполнены справочники, проведены документы и сформированы движения по регистрам. Это позволяет ученику видеть результат своего запроса на реальных данных, а не на пустых таблицах.
Посмотрим на современный способ подготовки учебного материала — использование ИИ. Основная проблема здесь заключается в том, что нейросети часто привязываются к несуществующим структурам метаданных. Чтобы этого избежать, проанализируем следующую стратегию:
Номенклатура и регистра Продажи) в текстовом виде.Такой подход позволяет создавать бесконечное количество "осмысленных" задач, привязанных к конкретной базе данных, с которой работает ученик.
Для программиста с бэкграундом аналитика бессмысленные задачи на "просто выборку" будут скучными. Разберем примеры задач, которые имитируют реальные потребности бизнеса:
1. Работа с ценами и срезами данных. Попросим ученика получить последние установленные цены для всего списка товаров. Здесь мы сталкиваемся с понятием СрезПоследних. Типовая задача: "Вывести актуальную цену на сегодня для всей номенклатуры, входящей в категорию Обувь".
2. Анализ дефицита товаров. Проанализируем ситуацию, когда нужно сопоставить остатки на складах с потребностями (заказами). Это отличная тренировка на ЛЕВОЕ СОЕДИНЕНИЕ. Ученик должен понять, почему при соединении справочника с регистром остатков могут появиться NULL, и как их правильно обработать функцией ЕСТЬNULL.
Пример кода для разбора:
ВЫБРАТЬ
СпрНоменклатура.Ссылка КАК Товар,
ЕСТЬNULL(ТоварыНаСкладахОстатки.В НаличииОстаток, 0) КАК Остаток
ИЗ
Справочник.Номенклатура КАК СпрНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&Период) КАК ТоварыНаСкладахОстатки
ПО СпрНоменклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
ГДЕ
СпрНоменклатура.ЭтоГруппа = ЛОЖЬ
Выясним, какие ошибки чаще всего допускают начинающие, и превратим их в учебные задачи. Одной из самых критичных ошибок является запрос в цикле. Мы можем предложить ученику написать код, который получает данные для каждой строки документа отдельно, а затем попросим его переписать этот механизм, используя ВременныеТаблицы и передачу списка ссылок в запрос.
Рассмотрим подробнее работу с условиями в соединениях. Попросим ученика выполнить задачу: "Вывести всех контрагентов и суммы их покупок за прошлый месяц, но только по конкретному менеджеру". Если условие по менеджеру будет поставлено в секции ГДЕ, левое соединение превратится во внутреннее, и клиенты без покупок исчезнут из отчета. Разберем по шагам, почему условие по правой таблице в левом соединении должно находиться в параметрах виртуальной таблицы или в секции ПО.
Поскольку наш обучающийся — аналитик, используем его сильные стороны. Прежде чем открывать КонструкторЗапросов, попробуем нарисовать схему данных на бумаге. Проанализируем связи между объектами:
Визуализация помогает понять, почему в результате запроса могут возникать дубли или почему данные "сдваиваются" при неправильной группировке по нескольким табличным частям.
Для закрепления материала обязательно внедрим в процесс обучения использование Консоли запросов. Посмотрим на функционал анализа плана выполнения запроса. Даже если новичок пока не понимает все детали SQL-плана, он должен привыкать видеть разницу в "весе" запроса при использовании индексированных полей и при поиске по неиндексированным строковым реквизитам.
Также разберем по шагам использование оператора ИТОГИ. Это специфичная для 1С конструкция, которая позволяет получать иерархические отчеты одной выборкой. Попросим ученика построить дерево продаж: "Регион - Город - Магазин - Сумма", используя итоги, и сравним это с обычной группировкой.
В завершение обучения предложим задачу на Объединение. Например, собрать данные о поступлении денежных средств из разных источников: ПриходныйКассовыйОрдер и ПоступлениеНаРасчетныйСчет. Это научит соблюдать типизацию полей и понимать, как платформа работает с разнородными данными в одной выборке.