Как реализовать печать только выбранных строк в документе 1С?

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

Часто в процессе работы с конфигурациями на платформе 1С:Предприятие (в частности, в КА 2 или ERP) возникает необходимость напечатать не весь документ целиком, а только конкретные позиции, выбранные пользователем. Давайте разберем, как грамотно реализовать этот функционал, соблюдая стандарты разработки и обеспечивая удобство для конечного пользователя.

Анализ проблемы и выбор подхода

С технической точки зрения попытка «протащить» массив выделенных строк из формы в механизм типовой печати является сложной задачей. Типовая подсистема печати (БСП) ориентирована на работу со ссылками на объекты ДокументСсылка. Если мы будем пытаться манипулировать данными в обход системы, мы столкнемся с проблемами целостности данных и сложностями при обновлении конфигурации.

Рассмотрим два основных подхода к решению:

  1. Добавление признака (флага) в табличную часть. Это самый надежный и логически обоснованный метод. Мы добавляем в табличную часть документа реквизит типа Булево (например, Печатать).
  2. Использование формы подготовки данных. Создание промежуточного окна, в котором пользователь отмечает нужные строки перед формированием макета.

Реализация через добавление колонки с флагом

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

  1. Изменение метаданных: Добавьте в табличную часть документа новый реквизит с типом Булево. Назовите его, например, Печатать.
  2. Настройка интерфейса: Выведите этот реквизит на форму документа в виде флажка. Это позволит пользователю в один клик отмечать нужные позиции.
  3. Логика печати: В процедуре формирования печатной формы (в модуле менеджера или внешней печатной форме) добавьте фильтрацию:

// Пример логики запроса при формировании печатной формы
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |    Док.Номенклатура,
    |    Док.Количество,
    |    Док.Цена
    |ИЗ
    |    Документ.НашДокумент.Товары КАК Док
    |ГДЕ
    |    Док.Ссылка = &Ссылка
    |    И Док.Печатать = ИСТИНА";
Запрос.УстановитьПараметр("Ссылка", СсылкаНаДокумент);

Почему не стоит использовать «транзакционную печать»

В ходе обсуждения часто предлагается метод удаления строк из объекта в транзакции с последующим откатом (ОткатТранзакции). Мы настоятельно рекомендуем избегать этого метода по ряду причин:

Важный аспект: модифицированность документа

Часто программисты задаются вопросом: нужно ли записывать документ при печати? В типовых конфигурациях 1С действует жесткое правило: если документ был изменен (например, пользователь проставил галочки в колонке «Печатать»), система предложит его записать.

Это не прихоть платформы, а стандарт обеспечения целостности данных. Если пользователь отметил строки для печати, эти данные должны быть сохранены в базе, иначе печатная форма будет неактуальна. Таким образом, принудительная запись документа перед печатью — это защита от ошибок и возможных махинаций при складских операциях.

Рекомендации по доработке

Если бизнес-логика клиента сложнее (например, нужно печатать только те строки, которые обеспечены на складе), рассмотрите следующие дополнения:

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

← На главную