Работа с запросами в 1С:Предприятие — неотъемлемая часть аналитики, отчетности и интеграции систем. Однако часто возникает задача не просто получить данные через запрос, а выразить их в виде документа — будь то печатная форма, файл для обмена или структурированный отчет. Без правильного подхода это превращается в рутинную работу с копированием данных в Excel или ручным формированием PDF.

В этой статье мы разберем 4 ключевых метода преобразования запросов 1С в документы: от стандартных механизмов платформы до программных решений с использованием внешних компонент и BI-инструментов. Вы узнаете, как автоматизировать процесс, избежать ошибок при экспорте больших объемов данных и адаптировать вывод под требования бухгалтерии, логистики или клиентской отчетности. Особое внимание уделим нюансам работы с иерархическими данными (например, справочниками с подчиненными элементами) и динамическими отчетами, где структура документа зависит от параметров запроса.

Материал будет полезен как начинающим разработчикам 1С, так и опытным специалистам, которые хотят оптимизировать обмен данными между системами или создать гибкие шаблоны документов на основе запросов.

1. Стандартные механизмы 1С: экспорт запроса в табличный документ

Самый простой способ выразить запрос как документ — использовать встроенные инструменты платформы 1С:Предприятие 8.3. Для этого подходит объект ТабличныйДокумент, который позволяет визуализировать результаты запроса в виде таблицы с возможностью дальнейшего сохранения в Excel, PDF или печати.

Основные шаги:

  • 📌 Выполните запрос через Запрос.Выполнить и получите результат в виде РезультатЗапроса.
  • 📊 Создайте табличный документ и заполните его данными из результата запроса, используя метод Вывести.
  • 💾 Сохраните документ в нужном формате с помощью ТабличныйДокумент.Записать.

Пример кода для экспорта в Excel:

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Товары.Наименование КАК Товар,

| Товары.Артикул,

| Товары.Цена

|ИЗ

| Справочник.Товары КАК Товары";

Результат = Запрос.Выполнить;

Таблица = Результат.Выгрузить;

ТабличныйДокумент = Новый ТабличныйДокумент;

ТабличныйДокумент.Вывести(Таблица);

ТабличныйДокумент.Записать("C:\Отчеты\Товары.xlsx", ТипФайлаТабличногоДокумента.XLSX);

⚠️ Внимание: При экспорте больших таблиц (свыше 10 000 строк) стандартный механизм может тормозить. В этом случае рекомендуется использовать пакетную обработку или разбивать данные на части.
💡

Если вам нужно сохранить не только данные, но и форматирование (цвета, шрифты), предварительно настройте стили в табличном документе с помощью метода Область.УстановитьПараметрыСтиля.

2. Преобразование запроса в печатную форму документа 1С

Если цель — создать печатную форму (например, счет, накладную или акт) на основе данных запроса, то стандартный подход через ТабличныйДокумент может оказаться недостаточным. Здесь потребуется:

  1. Сформировать макет документа в конфигураторе (раздел Общие → Макеты).
  2. Привязать данные запроса к областям макета с помощью метода Заполнить.
  3. Вывести документ на печать или сохранить в PDF.

Пример для печатной формы счета:

Макет = Документы.Счет.ПолучитьМакет("ПечатнаяФорма");

ТаблицаДокумента = Макет.ПолучитьОбласть("ТаблицаТоваров");

// Заполняем шапку документа

Макет.Параметры.Заполнить(ДанныеЗапроса.Шапка);

// Заполняем табличную часть

Для Каждого Строка Из ДанныеЗапроса.Таблица Цикл

НоваяСтрока = ТаблицаДокумента.Добавить;

НоваяСтрока.Товар = Строка.Товар;

НоваяСтрока.Количество = Строка.Количество;

КонецЦикла;

// Выводим документ

ТабличныйДокумент = Новый ТабличныйДокумент;

Макет.Вывести(ТабличныйДокумент);

ТабличныйДокумент.Показать;

Для сложных документов (например, с несколькими табличными частями или динамическими блоками) удобно использовать внешние обработки, такие как "Универсальный отчет" или "Библиотека стандартных подсистем" (БСП). Они позволяют гибко настраивать вывод данных без глубокого программирования.

Как добавить логотип компании в печатную форму?

В макете документа создайте область типа"Картинка" и укажите путь к файлу логотипа (например, ЗначениеВРесурсе("Логотип")). Затем в коде заполнения макета передайте параметр с путем к изображению или встройте его непосредственно в макет через конфигуратор.

3. Экспорт запроса в XML/JSON для интеграции с внешними системами

Когда требуется передать данные запроса в другую систему (например, CRM, ERP или BI-платформу), удобнее использовать форматы XML или JSON. В 1С для этого предусмотрены методы ЗаписатьXML и ЗаписатьJSON.

Пример экспорта в JSON:

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Клиенты.Наименование КАК Имя,

| Клиенты.ИНН,

| Клиенты.Адрес

|ИЗ

| Справочник.Клиенты КАК Клиенты";

Результат = Запрос.Выполнить;

Таблица = Результат.Выгрузить;

ЗаписьJSON = Новый ЗаписьJSON;

ЗаписьJSON.УстановитьСтроку;

ЗаписьJSON.ЗаписатьНачалоОбъекта;

ЗаписьJSON.ЗаписатьКлюч("Клиенты");

ЗаписьJSON.ЗаписатьНачалоМассива;

Для Каждого Строка Из Таблица Цикл

ЗаписьJSON.ЗаписатьНачалоОбъекта;

ЗаписьJSON.ЗаписатьКлюч("Имя");

ЗаписьJSON.ЗаписатьЗначение(Строка.Имя);

ЗаписьJSON.ЗаписатьКлюч("ИНН");

ЗаписьJSON.ЗаписатьЗначение(Строка.ИНН);

ЗаписьJSON.ЗаписатьКонецОбъекта;

КонецЦикла;

ЗаписьJSON.ЗаписатьКонецМассива;

ЗаписьJSON.ЗаписатьКонецОбъекта;

JSONСтрока = ЗаписьJSON.Закрыть;

JSONСтрока.Записать("C:\Обмен\Клиенты.json");

Для XML логика аналогична, но используется класс ЗаписьXML. Главное отличие — необходимость явно указывать пространства имен и атрибуты, если они требуются для интеграции.

Формат Плюсы Минусы Когда использовать
JSON Компактность, простота парсинга Отсутствие поддержки схем (XSD) Обмен с веб-сервисами, мобильными приложениями
XML Поддержка схем, валидация Больший размер файла, сложнее для чтения Интеграция с 1С:EDT, государственными системами (например, ЭДО)
CSV Простота, совместимость Нет поддержки иерархических данных Экспорт в Excel для дальнейшей обработки
⚠️ Внимание: При обмене данными через JSON/XML убедитесь, что кодировка файла совпадает с ожидаемой внешней системой (обычно UTF-8). В противном случае возможны ошибки чтения символов (например, кириллицы).
📊 Какой формат вы чаще используете для обмена данными?
JSON
XML
CSV
Excel
Другой

4. Использование внешних компонент для продвинутого экспорта

Для задач, где стандартные механизмы 1С не справляются (например, экспорт в PDF с сложным форматированием или генерация Word-документов), приходят на помощь внешние компоненты. Наиболее популярные:

  • 📄 1C:Предприятие + Microsoft Word — через OLE или COM-объекты.
  • 📑 FastReport — для создания сложных отчетов с графиками и диаграммами.
  • 📈 OneScript.PDF — библиотека для генерации PDF из 1С.

Пример генерации Word-документа через OLE:

Word = Новый COMОбъект("Word.Application");

Word.Visible = Истина;

Документ = Word.Documents.Add;

// Добавляем заголовок

Абзац = Документ.Paragraphs.Add;

Абзац.Range.Text ="Отчет по продажам за" + ТекущаяДата;

Абзац.Range.Font.Bold = Истина;

Абзац.Range.Font.Size = 14;

// Добавляем таблицу с данными запроса

Таблица = Документ.Tables.Add(Документ.Range, РезультатЗапроса.Выгрузить.Количество, 3);

Для Сч = 1 По РезультатЗапроса.Выгрузить.Количество Цикл

Таблица.Cell(Сч, 1).Range.Text = РезультатЗапроса[Сч-1].Товар;

Таблица.Cell(Сч, 2).Range.Text = РезультатЗапроса[Сч-1].Количество;

Таблица.Cell(Сч, 3).Range.Text = РезультатЗапроса[Сч-1].Сумма;

КонецЦикла;

Документ.SaveAs("C:\Отчеты\Продажи.docx");

Word.Quit;

Для FastReport потребуется установить компоненту и подключить её в конфигураторе. Преимущество этого решения — визуальный редактор отчетов, где можно drag-and-drop’ом создавать шаблоны, а затем заполнять их данными из запроса.

Установить компоненту (например, FastReport) на сервер 1С|Настроить права доступа для пользователей|Проверить совместимость версии компоненты с платформой 1С|Создать резервную копию базы перед интеграцией-->

5. Автоматизация через Power Query и BI-инструменты

Если данные из 1С нужно визуализировать в Power BI, Tableau или Qlik, то запрос можно выгрузить в промежуточный формат (например, CSV или SQL-базу), а затем подключить его к BI-системе. Альтернативный вариант — использовать ODBC-соединение напрямую к базе 1С.

Пошаговая инструкция для Power Query:

  1. Экспортируйте данные запроса в CSV или Excel (как описано в разделе 1).
  2. В Power BI выберите Get Data → Text/CSV и укажите путь к файлу.
  3. Преобразуйте данные в Power Query Editor (например, разделите столбцы, измените типы данных).
  4. Постройте визуализации (диаграммы, сводные таблицы) на основе загруженных данных.

Для прямого подключения через ODBC:

  1. Настройте ODBC-драйвер для 1С (например, "1C:Enterprise 8 ODBC Driver").
  2. В Power BI выберите Get Data → ODBC и укажите строку подключения.
  3. Напишите SQL-запрос непосредственно в интерфейсе Power Query или импортируйте данные из таблиц 1С.

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

💡

Использование BI-инструментов оправдано, когда нужно не просто выгрузить данные, а построить интерактивные отчеты с фильтрами, дрель-даунами и визуализациями.

6. Обработка иерархических данных и динамических запросов

Особую сложность представляют запросы, возвращающие иерархические данные (например, справочники с подчиненными элементами или документы с табличными частями). Стандартный экспорт в Excel или JSON не всегда корректно обрабатывает такие структуры.

Решения для иерархических данных:

  • 🌳 Рекурсивные запросы — используйте оператор РЕКУРСИЯ в языке запросов 1С.
  • 📂 Вложенные объекты в JSON — формируйте структуру с учетом родительских и дочерних элементов.
  • 📊 Сводные таблицы в Excel — экспортируйте данные в плоском виде, а затем группируйте в Excel.

Пример рекурсивного запроса для справочника с иерархией:

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Категории.Ссылка КАК Ссылка,

| Категории.Наименование КАК Наименование,

| Категории.Родитель КАК Родитель

|ИЗ

| Справочник.КатегорииТоваров КАК Категории

|

|ОБЪЕДИНИТЬ ВСЕ

|

|ВЫБРАТЬ

| КатегорииРек.Ссылка КАК Ссылка,

| КатегорииРек.Наименование КАК Наименование,

| КатегорииРек.Родитель КАК Родитель

|ИЗ

| Справочник.КатегорииТоваров КАК КатегорииРек

|ГДЕ

| КатегорииРек.Родитель В (&СписокСсылок)";

СписокСсылок = Новый Массив;

СписокСсылок.Добавить(Категория.Родитель);

Запрос.УстановитьПараметр("СписокСсылок", СписокСсылок);

Результат = Запрос.Выполнить;

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

7. Оптимизация производительности при работе с большими данными

Экспорт больших объемов данных (десятки тысяч строк) может занимать много времени и нагружать сервер. Чтобы избежать этого:

  • Используйте пакетную обработку — разбивайте запрос на части (например, по 5 000 строк) и экспортируйте их последовательно.
  • 🗃️ Применяйте временные таблицы — для сложных запросов сначала сохраните данные во временную таблицу, а затем экспортируйте её.
  • 🕒 Настройте фоновые задания — для длительных операций используйте ФоновоеЗадание.

Пример пакетного экспорта:

Шаг = 5000;

Смещение = 0;

Пока Истина Цикл

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ ПЕРВЫЕ" + Шаг +" СМЕЩЕНИЕ" + Смещение +"

| Документ.Заказы.Номер КАК Номер,

| Документ.Заказы.Дата,

| Документ.Заказы.Сумма

|ИЗ

| Документ.Заказы КАК Документ.Заказы";

Результат = Запрос.Выполнить;

Если Результат.Пустой Тогда

Прервать;

КонецЕсли;

// Экспорт текущей порции данных

ЭкспортироватьВExcel(Результат.Выгрузить,"Заказы_Часть" + (Смещение / Шаг + 1) +".xlsx");

Смещение = Смещение + Шаг;

КонецЦикла;

⚠️ Внимание: При работе с временными таблицами не забывайте очищать их после использования, чтобы не забивать базу данных. Используйте метод УдалитьВременныеТаблицы.

8. Типичные ошибки и как их избежать

При преобразовании запросов в документы разработчики часто сталкиваются с следующими проблемами:

Ошибка Причина Решение
Пустой экспортный файл Неверный путь сохранения или отсутствие прав доступа Проверьте путь с помощью КаталогДокументов и права на запись
Потеря форматирования в Excel Не указаны стили при выводе в ТабличныйДокумент Настройте параметры стиля перед экспортом
Ошибка"Тип не поддерживается" при записи JSON Попытка сериализовать несериализуемый объект (например, ДвоичныеДанные) Преобразуйте данные в строковый формат (например, Base64Строка)
Медленный экспорт больших данных Обработка всего результата запроса в памяти Используйте пакетный экспорт или временные таблицы

Ещё одна частая ошибка — несовпадение кодировок при обмене с внешними системами. Например, если 1С работает в Windows-1251, а внешняя система ожидает UTF-8, то кириллические символы отобразятся кракозябрами. Решение:

ТекстUTF8 = СтрШаблон("%1", Текст);

ТекстUTF8 = СтрЗаменить(ТекстUTF8,"",""); // Удаляем BOM

ЗаписьJSON.УстановитьКодировкуТекста(КодировкаТекста.UTF8);

Также не забывайте про ограничения форматов:

- Excel (формат .xls) поддерживает максимум 65 536 строк.

- JSON не сохраняет типы данных (например, дата становится строкой).

💡

Всегда тестируйте экспорт на небольшом объеме данных перед обработкой полного массива. Это поможет выявить ошибки форматирования или потерю данных на раннем этапе.

FAQ: Частые вопросы по преобразованию запросов 1С в документы

Можно ли экспортировать запрос в Word без внешних компонент?

Да, но с ограничениями. Вы можете сгенерировать HTML-таблицу из данных запроса, а затем вставить её в Word через буфер обмена или сохранить как .html и открыть в Word. Однако для сложного форматирования (колонтитулы, стили) всё же потребуются COM-объекты или FastReport.

Как экспортировать запрос с картинками (например, фото товаров)?

Для экспорта изображений:

  1. Сохраните двоичные данные картинок во временную папку (метод Записать).
  2. В документе (Excel, Word) вставьте ссылки на эти файлы или используйте OLE-вставку.

Пример для Excel:

Картинка = Новый Картинка(ДвоичныеДанныеИз1С);

Картинка.Записать("C:\Temp\photo.jpg");

ТабличныйДокумент.Рисунки.Добавить(Картинка, 10, 10, 100, 100);

Почему при экспорте в PDF русские буквы отображаются как знаки вопроса?

Это проблема с кодировкой шрифта. Решения:

  • Укажите шрифт с поддержкой кириллицы (например, Arial или Times New Roman) в настройках экспорта.
  • Используйте библиотеки вроде iTextSharp (для.NET) или OneScript.PDF, где можно явно задать кодировку.
Как автоматизировать отправку сгенерированного документа по email?

Используйте встроенный объект Почта или COM-объект Outlook.Application:

Почта = Новый Почта;

Сообщение = Почта.СоздатьСообщение;

Сообщение.Адресат ="client@example.com";

Сообщение.Тема ="Отчет по продажам";

Сообщение.Текст ="Во вложении отчет.";

Сообщение.Вложения.Добавить("C:\Отчеты\Продажи.pdf");

Почта.Отправить(Сообщение);

Для массовой рассылки настройте фоновое задание с проверкой статуса отправки.

Можно ли экспортировать данные запроса напрямую в Google Sheets?

Да, но не напрямую из 1С. Варианты:

  1. Экспортируйте данные в CSV и загружайте в Google Sheets через Импорт данных.
  2. Используйте Google Apps Script для автоматической загрузки файлов с сервера.
  3. Настройте интеграцию через Zapier или Make (ex-Integromat).