Работа с запросами в 1С:Предприятие — неотъемлемая часть жизни разработчика, аналитика или даже опытного пользователя. Каждый день приходится писать, тестировать и дорабатывать SQL-подобные конструкции, которые потом хочется сохранить для повторного использования. Но как это сделать правильно, чтобы не потерять часы работы и не перепечатывать код заново?
Многие новички просто копируют текст запроса в блокнот или Excel, но такой подход чреват ошибками и неудобством. В этой статье разберём 5 проверенных способов сохранения запросов — от базовых до продвинутых, включая автоматизацию и интеграцию с внешними системами. Особое внимание уделим нюансам работы в разных версиях платформы (1С 8.2 и 1С 8.3), а также типичным ошибкам, которые портят сохранённые данные.
Если вы регулярно работаете с отчётами, обработками или конфигуратором, эти методы сэкономят вам десятки часов в год. А для программистов 1С мы добавили бонус: как сохранить запрос так, чтобы его могли использовать коллеги без доступа к конфигуратору.
1. Сохранение запроса через буфер обмена: быстрый, но ненадёжный способ
Самый простой метод — скопировать текст запроса в буфер обмена (Ctrl+C) и вставить его в любой текстовый редактор. Этот способ подходит для разовых операций, но имеет критические недостатки:
- 📋 Потеря форматирования: при вставке в Notepad или Word отступы и перenosы могут «сломаться», что усложнит чтение кода.
- 🔄 Нет версиирования: если вы измените запрос и сохраните поверх старого, восстановить предыдущую версию будет невозможно.
- 🖥️ Привязка к устройству: файлы на локальном компьютере недоступны коллегам.
Чтобы минимизировать риски, используйте специализированные редакторы кода вроде Notepad++ или VS Code с плагином для 1С. Они сохраняют отступы и подсвечивают синтаксис. Например, в VS Code можно установить расширение 1C-Enterprise Script, которое распознаёт конструкции языка 1С.
Важный нюанс: если запрос содержит динамические параметры (например, Параметры.ДатаНачала), при копировании их значения «запекаются» в текст. Чтобы этого избежать, замените параметры на заполнители вроде #ДАТА_НАЧАЛА# перед сохранением.
Для временного хранения запросов используйте OneNote или Google Keep — они синхронизируются между устройствами и поддерживают форматирование.
2. Экспорт запроса в файл: надёжнее, но требует дисциплины
Более надёжный способ — сохранение запроса в отдельный файл с расширением .txt или .1cql (неофициальный стандарт для запросов 1С). Для этого:
- Откройте окно конструктора запроса в конфигураторе (
Файл → Новый → Запрос). - Напишите или вставьте свой запрос.
- Нажмите
Файл → Сохранить каки выберите папку. - Укажите имя файла с расширением
.1cql(например,ОтчетПоПродажам.1cql).
Преимущества метода:
- 📁 Структурированное хранение: файлы можно группировать по проектам или задачам.
- 🔍 Поиск по содержимому: современные файловые менеджеры (например, Total Commander) умеют искать текст внутри файлов.
- 🔄 Версионирование: папку с запросами можно добавить в Git или облачное хранилище.
Однако здесь есть подводные камни. Например, если в запросе используются временные таблицы или переменные сеанса, при загрузке в другой сеанс они могут не сработать. Всегда проверяйте сохранённый запрос в «чистой» базе перед использованием.
Если запрос содержит ссылки на объекты метаданных (например, 1. Совпадают ли имена справочников в целевой базе. 2. Нет ли опечаток в названиях полей. 3. Доступны ли права на чтение этих объектов текущему пользователю.Что делать если запрос не выполняется после загрузки из файла?
Справочник.Номенклатура), а при загрузке выдаёт ошибку"Не найден объект", проверьте:
3. Использование расширений конфигурации: для командной работы
Если вы работаете в команде или поддерживаете несколько баз, сохранение запросов в расширении конфигурации станет спасением. Этот метод позволяет:
- 🔗 Синхронизировать изменения между базами через механизм расширений.
- 🛠️ Редактировать запросы централизованно, не затрагивая основную конфигурацию.
- 🔒 Контролировать доступ к запросам через права 1С.
Алгоритм действий:
- Откройте конфигуратор и перейдите в
Конфигурация → Расширения. - Создайте новое расширение (например,
ХранилищеЗапросов). - Добавьте в него новый объект
Запрос(Добавить → Запрос). - Вставьте текст запроса и сохраните.
Критическая особенность: запросы в расширениях не поддерживают динамическое выполнение через метод Execute без дополнительного кода. Чтобы запустить такой запрос, придётся написать небольшую обработку, которая будет его загружать и выполнять.
| Способ сохранения | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| Буфер обмена | Мгновенно, не требует подготовки | Ненадёжно, теряется форматирование | Для разовых операций |
| Файл.1cql | Структурированное хранение, поиск | Нужно следить за актуальностью | Для личного использования |
| Расширение конфигурации | Командная работа, контроль версий | Требует настройки, не выполняется напрямую | Для проектов с несколькими базами |
4. Хранение запросов в справочниках: нестандартный, но эффективный подход
Мало кто знает, что запросы можно сохранять прямо в справочниках 1С. Для этого:
- Создайте новый справочник (например,
ХранилищеЗапросов) с реквизитом типаСтрока неограниченной длины. - Добавьте в справочник элементы — каждый элемент будет хранить один запрос.
- Для удобства добавьте реквизиты
Категория(например, «Отчёты», «Обработки») иОписание.
Преимущества метода:
- 🔍 Поиск и фильтрация: можно быстро найти запрос по категории или ключевым словам.
- 🔒 Права доступа: ограничьте редактирование справочника для обычных пользователей.
- 📊 Интеграция с отчётами: запросы можно динамически подгружать в обработки.
Пример кода для загрузки запроса из справочника:
Запрос = Справочники.ХранилищеЗапросов.НайтиПоНаименованию("ОтчетПоДебиторке");
Если Не Запрос.Пустая Тогда
ТекстЗапроса = Запрос.ТекстЗапроса;
Результат = Запросы.Выполнить(ТекстЗапроса);
КонецЕсли;
Такой подход особенно удобен для регламентных отчётов, которые запускаются по расписанию. Однако помните: если структура справочника изменится, все обработки, использующие его, могут перестать работать.
Создать справочник с реквизитом"ТекстЗапроса" (тип: Строка неограниченной длины)
Добавить реквизиты"Категория" и"Описание" для удобства поиска
Настроить права доступа (только администраторы могут редактировать)
Создать обработку для быстрой вставки запросов из справочника в конструктор-->
5. Автоматизация через внешние хранилища: для продвинутых пользователей
Если вам нужно хранить сотни запросов с историей изменений, обычные файлы или справочники не подойдут. В этом случае стоит рассмотреть внешние хранилища:
- 📂 Git-репозитории: идеально для командной работы. Каждый запрос — отдельный файл, изменения отслеживаются автоматически.
- ☁️ Облачные сервисы (Google Drive, Yandex Disk): удобно для доступа с разных устройств.
- 🗄️ Специализированные системы вроде 1C:Fresh или 1C:EDT: поддерживают интеграцию с 1С «из коробки».
Пример структуры Git-репозитория для запросов:
/Запросы
/Отчёты
- ПродажиПоПериодам.1cql
- ДебиторскаяЗадолженность.1cql
/Обработки
- МассовоеИзменениеЦен.1cql
/Сервисные
- ОчисткаПометокУдаления.1cql
Важно: при работе с Git настройте файл .gitignore, чтобы исключить временные файлы 1С (например, .cf или .epf). Также полезно добавить в репозиторий README.md с описанием структуры и правил именования файлов.
Использование Git для запросов 1С требует дисциплины: каждый коммит должен содержать осмысленное описание изменений (например,"Добавлен фильтр по контрагентам в запрос Дебиторка").
6. Типичные ошибки и как их избежать
Даже опытные разработчики 1С иногда сталкиваются с проблемами при сохранении запросов. Вот самые распространённые ошибки и способы их предотвращения:
- 🔄 Потеря связей между таблицами: если запрос использует временные таблицы, при копировании их имена могут дублироваться. Всегда проверяйте уникальность имён таблиц в новом сеансе.
- 🔐 Проблемы с правами: сохранённый в расширении запрос может не выполняться у пользователя с ограниченными правами. Тестируйте запросы под разными ролями.
- 📅 Устаревшие данные: если запрос жёстко привязан к текущей дате (
ТЕКУЩАЯДАТА), при повторном использовании он вернёт неактуальные результаты. Заменяйте такие конструкции на параметры.
Особенно опасна ошибка с неявными преобразованиями типов. Например, если в сохранённом запросе есть условие ГДЕ Дата ="01.01.2023", а в новой базе даты хранятся в другом формате, запрос вернёт пустой результат. Чтобы избежать этого, всегда используйте явное приведение типов:
ГДЕ Дата = ДАТАВРЕМЯ(2023, 1, 1)
Проверенный лайфхак: перед сохранением сложного запроса выполните его в режиме Объяснить план выполнения (F5 в конструкторе запросов). Это поможет выявить потенциальные проблемы с производительностью или логикой, которые могут проявиться позже.
Для проверки запросов на разных версиях платформы используйте бесплатный инструмент 1C:Syntax Checker (доступен на Infostart). Он анализирует запрос на совместимость с 1С 8.2 и 1С 8.3.
⚠️ Внимание: Если вы сохраняете запросы, содержащие конфиденциальные данные (например, зарплатные отчёты), убедитесь, что файлы или справочники защищены от несанкционированного доступа. В 1С 8.3.20+ для этого можно использовать механизм Политики безопасности.
FAQ: Ответы на частые вопросы
Можно ли сохранить запрос с параметрами так, чтобы они не подставлялись автоматически?
Да, для этого замените параметры на заполнители вручную. Например, вместо ГДЕ Дата >= &ДатаНачала используйте ГДЕ Дата >= #ДАТА_НАЧАЛА#. При загрузке запроса вам потребуется вручную заменить #ДАТА_НАЧАЛА# на актуальное значение или параметр.
Как сохранить запрос вместе с его планом выполнения?
План выполнения нельзя сохранить напрямую, но можно экспортировать его в файл:
- Выполните запрос в конструкторе.
- Нажмите
F5(Объяснить план выполнения). - Скопируйте текст плана в буфер обмена.
- Сохраните его в тот же файл, что и запрос (например, в комментарии).
Для автоматизации используйте обработку "Анализ производительности запросов" с Infostart.
Можно ли сохранить запрос так, чтобы его мог выполнить пользователь без прав на конфигуратор?
Да, для этого:
- Создайте внешнюю обработку с формой, где пользователь сможет ввести параметры.
- Поместите текст запроса в модуль обработки.
- Сохраните обработку в файл (
.epf) и передайте пользователю.
Пользователь сможет открыть обработку через Файл → Открыть в 1С и выполнить запрос без доступа к конфигуратору.
Как перенести сохранённые запросы при переходе на новую версию 1С?
Способ зависит от метода хранения:
- Если запросы в файлах — просто скопируйте их в новую папку.
- Если в расширении конфигурации — перенесите расширение через
Файл → Сохранить расширение в файл. - Если в справочнике — используйте универсальный формат обмена данными (
XMLилиJSON) для выгрузки/загрузки.
Для сложных миграций воспользуйтесь инструментом 1C:EDT (Eclipse Development Tools), который поддерживает рефакторинг кода.
Что делать, если сохранённый запрос перестал работать после обновления 1С?
Причины могут быть разными:
- Изменилась структура метаданных (например, переименован справочник).
- Платформа 1С перестала поддерживать устаревший синтаксис (например, оператор
ВвместоIN). - Обновились права доступа к объектам.
Проверьте журнал регистрации (Администрирование → Журнал регистрации) на наличие ошибок. Если проблема в синтаксисе, используйте Конвертацию запросов (доступна в 1C:EDT или через обработки с Infostart).