Как распечатать или выгрузить полный список документов в 1С:Управление торговлей 11.5?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При работе с информационной базой 1С:Управление торговлей 11.5, как и в других конфигурациях на платформе 1С:Предприятие 8.3, часто возникает необходимость распечатать или выгрузить полный список документов, отобранных по определенным критериям. Стандартный функционал "Печать" - "Список", доступный в формах списков, часто отображает только видимую часть данных на экране, что не всегда достаточно для полноценного анализа или формирования отчетов. В этой статье мы подробно разберем, как можно получить полный список документов, включая все необходимые поля, используя как типовые средства программы, так и возможности программной разработки.

Мы рассмотрим две основные стратегии решения данной задачи. Первая — это использование встроенного функционала "Вывести список", который позволяет пользователю без специальных навыков получить данные в удобном для печати или экспорта формате. Вторая — программный подход, который дает разработчикам полную гибкость в формировании и выводе данных, что особенно полезно для сложных отчетов или специфических требований к выборке.

Решение 1: Использование стандартного функционала "Вывести список"

Это наиболее простой и доступный способ для большинства пользователей, не требующий специальных знаний в программировании. Функционал "Вывести список" позволяет выгрузить данные из любой табличной части или списка документов в табличный документ, который затем можно распечатать или сохранить в различных форматах (Excel, PDF и т.д.).

Рассмотрим пошаговую инструкцию по использованию этой функции:

  1. Откройте список документов: Прежде всего, нам необходимо перейти в нужный список документов. Например, для документов "Реализация товаров и услуг" мы перейдем в раздел Продажи и выберем Документы продажи (все). В открывшемся списке мы можем применить необходимые отборы по дате, контрагенту, складу или другим параметрам, чтобы сформировать интересующую нас выборку.
  2. Найдите кнопку "Еще": В верхней командной панели формы списка документов мы обратим внимание на кнопку с названием Еще (иногда она может быть представлена в виде троеточия или выпадающего списка). Нажимаем на нее, чтобы открыть дополнительные опции.
  3. Выберите "Вывести список...": В открывшемся контекстном меню находим пункт Вывести список... и нажимаем на него. Если этот пункт отсутствует, возможно, у пользователя недостаточно прав, или конфигурация была существенно доработана, скрывая этот функционал. В таком случае стоит обратиться к системному администратору или программисту.
  4. Настройте поля для вывода: После выбора пункта "Вывести список" перед нами появится окно настроек. Здесь мы увидим список всех доступных полей документа и связанных с ним данных. Мы можем отметить галочками те поля, которые хотим видеть в итоговом списке. Например, для "Реализации товаров и услуг" нам могут понадобиться Номер, Дата, Контрагент, СуммаДокумента, Статус, Договор, Организация и другие. Важно отметить, что этот механизм позволяет выбрать гораздо больше полей, чем отображается в текущей форме списка.
  5. Сформируйте итоговый документ: После выбора необходимых полей нажимаем кнопку ОК. Система сформирует табличный документ, который будет содержать весь список документов, удовлетворяющий установленным отборам, с выбранными нами полями.
  6. Распечатайте или сохраните: Полученный табличный документ можно непосредственно распечатать, нажав кнопку Печать, или сохранить в различных форматах (например, Excel, PDF, HTML, TXT) с помощью кнопки Сохранить. Это позволяет легко экспортировать данные для дальнейшей обработки или архивирования.

Преимущества этого метода очевидны: он прост в использовании, не требует доработок конфигурации и доступен рядовым пользователям. Ограничения могут быть связаны с тем, что для очень сложных запросов с несколькими уровнями вложенности или специфической логикой расчета этот инструмент может быть недостаточен. Однако для большинства стандартных задач вывода списков документов он является оптимальным решением.

Решение 2: Программное формирование табличного документа

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

Основой для программного решения является использование объектов Запрос для выборки данных и ТабличныйДокумент для их представления и вывода. Мы рассмотрим шаги по созданию такого решения.

Пошаговое описание программного решения

  1. Создание объекта "Запрос": Первым шагом является создание объекта Запрос. Этот объект позволяет нам формулировать запросы к данным информационной базы на языке запросов 1С, который очень похож на SQL. Мы определяем, какие таблицы или регистры нам нужны, какие поля из них выбрать, как связать эти таблицы и какие условия отбора применить.
  2. Формирование текста запроса: Текст запроса пишется на языке запросов 1С. В нем мы указываем оператор ВЫБРАТЬ для определения полей, которые хотим получить, оператор ИЗ для указания источника данных (например, Документ.РеализацияТоваровУслуг) и оператор ГДЕ для установки условий отбора.
  3. Установка параметров запроса: Если в запросе используются параметры (например, период, по которому нужно отобрать документы), мы устанавливаем их значения с помощью метода УстановитьПараметр() объекта Запрос. Это позволяет сделать запрос гибким и повторно используемым.
  4. Выполнение запроса: После того как текст запроса сформирован и параметры установлены, мы выполняем запрос с помощью метода Выполнить(). Результатом выполнения запроса является объект РезультатЗапроса, который содержит выбранные данные.
  5. Обработка результата запроса: Полученные данные мы можем выгрузить, например, в ТаблицаЗначений с помощью метода Выгрузить(). Это удобно для дальнейшей итерации и обработки. Альтернативно, мы можем использовать обход результата запроса через метод Выбрать().
  6. Создание объекта "ТабличныйДокумент": Для визуального представления данных мы создаем объект ТабличныйДокумент. Этот объект является универсальным средством для формирования печатных форм, отчетов и вывода табличных данных в 1С.
  7. Заполнение ТабличногоДокумента: Это самый трудоемкий, но и наиболее гибкий этап. Мы пошагово заполняем ячейки ТабличногоДокумента данными из результата запроса. Мы можем задавать заголовки колонок, форматировать текст (шрифт, размер, цвет), устанавливать границы ячеек, объединять ячейки, вставлять рисунки и выполнять другие операции для создания профессионального вида отчета. Мы будем итерировать по строкам полученной ТаблицаЗначений или ВыборкеИзРезультатаЗапроса и для каждой строки добавлять новую строку в ТабличныйДокумент, заполняя ее ячейки соответствующими значениями.
  8. Вывод на печать или сохранение: После полного формирования ТабличногоДокумента мы можем вызвать его метод Показать() для отображения на экране, метод Напечатать() для прямой печати или метод Записать() для сохранения в файл (например, Excel или PDF).

Пример кода для запроса документов "Реализация товаров и услуг"

Представим, что нам нужно получить номер, дату, контрагента, сумму и статус документов "Реализация товаров и услуг" за определенный период. Вот как будет выглядеть текст запроса:


// Создаем новый объект запроса
Запрос = Новый Запрос;

// Определяем текст запроса
Запрос.Текст =
   "ВЫБРАТЬ
   |    РеализацияТоваровУслуг.Ссылка,
   |    РеализацияТоваровУслуг.Номер,
   |    РеализацияТоваровУслуг.Дата,
   |    РеализацияТоваровУслуг.Контрагент,
   |    РеализацияТоваровУслуг.СуммаДокумента,
   |    РеализацияТоваровУслуг.Статус
   |ИЗ
   |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
   |ГДЕ
   |    РеализацияТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода
   |УПОРЯДОЧИТЬ ПО
   |    РеализацияТоваровУслуг.Дата ВОЗР, РеализацияТоваровУслуг.Номер ВОЗР";

// Устанавливаем параметры запроса (примерные значения для демонстрации)
// В реальной обработке эти значения будут браться из полей формы
МояДатаНачала = НачалоДня(ТекущаяДата() - 30 * 24 * 3600); // 30 дней назад
МояДатаКонца = КонецДня(ТекущаяДата()); // Сегодня

Запрос.УстановитьПараметр("НачалоПериода", МояДатаНачала);
Запрос.УстановитьПараметр("КонецПериода", МояДатаКонца);

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

// Выгружаем результат в таблицу значений для удобства дальнейшей обработки
ТаблицаРезультат = РезультатЗапроса.Выгрузить();

// Теперь ТаблицаРезультат содержит данные, которые мы можем использовать
// для формирования ТабличногоДокумента

В этом примере мы выбираем основные реквизиты документа РеализацияТоваровУслуг: Ссылка (уникальный идентификатор), Номер, Дата, ссылку на Контрагента, СуммуДокумента и Статус. Условие ГДЕ РеализацияТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода позволяет нам гибко устанавливать временной интервал для отбора. Параметры &НачалоПериода и &КонецПериода должны быть установлены перед выполнением запроса.

Пример кода для формирования и вывода ТабличногоДокумента

После того как мы получили данные в ТаблицаРезультат, следующим шагом будет создание и заполнение ТабличногоДокумента. Мы подробно рассмотрим, как это сделать, чтобы отчет выглядел аккуратно и содержал всю необходимую информацию.


// Создаем новый ТабличныйДокумент
ТабДок = Новый ТабличныйДокумент;
ТабДок.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СПИСКА_РЕАЛИЗАЦИЙ"; // Можно задать имя для сохранения настроек печати

// Задаем основные параметры страницы
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет; // Или Альбом

// Определяем начальную строку для заголовков
ТекущаяСтрокаДокумента = 1;

// Формируем заголовки колонок
НомерКолонки = 1;
Для Каждого Колонка Из ТаблицаРезультат.Колонки Цикл
    // Вставляем текст заголовка в ячейку
    ТабДок.Области.ПолучитьОбласть(ТекущаяСтрокаДокумента, НомерКолонки).Текст = Колонка.Заголовок;
    НомерКолонки = НомерКолонки + 1;
КонецЦикла;

// Форматируем область заголовков
ОбластьЗаголовков = ТабДок.Области.ПолучитьОбласть(ТекущаяСтрокаДокумента, 1, ТекущаяСтрокаДокумента, ТаблицаРезультат.Колонки.Количество());
ОбластьЗаголовков.Шрифт.Жирный = Истина;
ОбластьЗаголовков.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
ОбластьЗаголовков.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
ОбластьЗаголовков.Обвести(ЛинияСтиль.Тонкая); // Добавляем границы к заголовкам

// Увеличиваем текущую строку для данных
ТекущаяСтрокаДокумента = ТекущаяСтрокаДокумента + 1;

// Обходим каждую строку полученной ТаблицыЗначений и выводим в ТабличныйДокумент
Для Каждого СтрокаТЗ Из ТаблицаРезультат Цикл
    НомерКолонки = 1;
    Для Каждого Колонка Из ТаблицаРезультат.Колонки Цикл
        ЗначениеПоля = СтрокаТЗ[Колонка.Имя];

        // Обработка особых типов данных для вывода
        Если ТипЗнч(ЗначениеПоля) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
            ТабДок.Области.ПолучитьОбласть(ТекущаяСтрокаДокумента, НомерКолонки).Текст = Строка(ЗначениеПоля.Номер);
        ИначеЕсли ТипЗнч(ЗначениеПоля) = Тип("СправочникСсылка.Контрагенты") Тогда
            ТабДок.Области.ПолучитьОбласть(ТекущаяСтрокаДокумента, НомерКолонки).Текст = Строка(ЗначениеПоля.Наименование);
        ИначеЕсли ТипЗнч(ЗначениеПоля) = Тип("ПеречислениеСсылка.СтатусыРеализацииТоваровУслуг") Тогда
            ТабДок.Области.ПолучитьОбласть(ТекущаяСтрокаДокумента, НомерКолонки).Текст = Строка(ЗначениеПоля.Представление());
        ИначеЕсли ТипЗнч(ЗначениеПоля) = Тип("Дата") Тогда
            ТабДок.Области.ПолучитьОбласть(ТекущаяСтрокаДокумента, НомерКолонки).Текст = Формат(ЗначениеПоля, "ДФ=dd.MM.yyyy");
        ИначеЕсли ТипЗнч(ЗначениеПоля) = Тип("Число") Тогда
            ТабДок.Области.ПолучитьОбласть(ТекущаяСтрокаДокумента, НомерКолонки).Текст = Формат(ЗначениеПоля, "ЧЦ=15; ЧДЦ=2");
            ТабДок.Области.ПолучитьОбласть(ТекущаяСтрокаДокумента, НомерКолонки).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право; // Выравнивание чисел
        Иначе
            ТабДок.Области.ПолучитьОбласть(ТекущаяСтрокаДокумента, НомерКолонки).Текст = Строка(ЗначениеПоля);
        КонецЕсли;

        НомерКолонки = НомерКолонки + 1;
    КонецЦикла;

    // Добавляем границы для текущей строки данных
    ТабДок.Области.ПолучитьОбласть(ТекущаяСтрокаДокумента, 1, ТекущаяСтрокаДокумента, ТаблицаРезультат.Колонки.Количество()).Обвести(ЛинияСтиль.Тонкая);
    ТекущаяСтрокаДокумента = ТекущаяСтрокаДокумента + 1;
КонецЦикла;

// Регулируем автоматическую ширину колонок для лучшей читаемости
ТабДок.АвтоМасштаб = Истина;
ТабДок.ПараметрыСтраницы.Масштаб = 100; // Сброс масштаба, если был изменен

// Устанавливаем ширину колонок (примерно, можно доработать)
Для ИндКолонки = 1 По ТаблицаРезультат.Колонки.Количество() Цикл
    Если ТаблицаРезультат.Колонки[ИндКолонки-1].Имя = "Дата" Тогда
        ТабДок.УстановитьШиринуКолонки(ИндКолонки, 12);
    ИначеЕсли ТаблицаРезультат.Колонки[ИндКолонки-1].Имя = "Номер" Тогда
        ТабДок.УстановитьШиринуКолонки(ИндКолонки, 10);
    ИначеЕсли ТаблицаРезультат.Колонки[ИндКолонки-1].Имя = "Контрагент" Тогда
        ТабДок.УстановитьШиринуКолонки(ИндКолонки, 30);
    ИначеЕсли ТаблицаРезультат.Колонки[ИндКолонки-1].Имя = "СуммаДокумента" Тогда
        ТабДок.УстановитьШиринуКолонки(ИндКолонки, 15);
    Иначе
        ТабДок.УстановитьШиринуКолонки(ИндКолонки, 20); // Ширина по умолчанию
    КонецЕсли;
КонецЦикла;


// Показываем сформированный табличный документ
ТабДок.Показать();

// Можно также сразу напечатать:
// ТабДок.Напечатать();

// Или сохранить в файл:
// ТабДок.Записать("C:\Temp\СписокРеализаций.xlsx", ТипФайлаТабличногоДокумента.XLSX);

Мы создаем объект ТабличныйДокумент и последовательно заполняем его. Сначала мы выводим заголовки колонок, используя информацию из метаданных ТаблицаРезультат. Мы можем применять к областям ТабличногоДокумента различные свойства, такие как Шрифт.Жирный, ГоризонтальноеПоложение, ВертикальноеПоложение для форматирования. Затем мы итерируем по каждой строке нашей ТаблицаРезультат. Для каждого поля в строке мы определяем его тип и выводим соответствующим образом. Например, для ссылочных типов (СправочникСсылка.Контрагенты) мы выводим Наименование, а для ДокументСсылка — Номер. Числовые и датовые значения форматируем для лучшего вида. В конце мы вызываем метод Показать(), чтобы отобразить сформированный отчет на экране.

Важно: При работе с ТабличнымДокументом мы должны тщательно управлять координатами ячеек (строка, колонка) и размерами областей, чтобы получить желаемый макет. Можно использовать также шаблоны (макеты), созданные в конфигураторе, для более сложного и стандартизированного оформления. Этот подход значительно упрощает процесс заполнения табличного документа, так как мы работаем не напрямую с координатами, а с именованными областями макета.

Помимо прямого вывода данных, в программном решении мы имеем возможность выполнять дополнительные вычисления, агрегации, применять условное форматирование к ячейкам (например, выделять просроченные документы красным цветом) и интегрировать данные из нескольких источников в один отчет. Это делает программный подход чрезвычайно мощным инструментом для решения нестандартных задач.

Выбор подходящего решения

Выбор между типовым функционалом "Вывести список" и программным формированием ТабличногоДокумента зависит от конкретных требований:

  1. Если вам нужно быстро получить простой список документов с основными полями, и вы не являетесь разработчиком, то "Вывести список" — ваш выбор. Это быстро, просто и не требует никаких доработок.
  2. Если у вас есть специфические требования к отбору данных, сложная логика расчетов, необходимость объединять данные из разных источников, или требуется автоматическая генерация отчета, то программное решение будет более подходящим. Оно дает полную гибкость, но требует знаний в разработке на 1С.

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

← На главную