Почему 1С печатает неверное количество экземпляров и как это исправить?

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

Многие технические специалисты и пользователи столкнулись с крайне неприятной ситуацией: при попытке напечатать документ (например, УПД или накладную) (поможет обработка пакетной печати с настройкой копий) из программы «1С:Предприятие 8.3», система игнорирует указанное количество копий. Вы можете выставить в настройках «2 экземпляра», а принтер выдаст один, или наоборот — при заказе одной копии печатается две. Проанализируем ситуацию и выясним, почему стандартные методы очистки кэша здесь не помогают и как обойти этот баг программными и пользовательскими средствами.

Выясняем причину: системная ошибка платформы

Рассмотрим природу возникновения этой ошибки. Проблема не связана с конкретной конфигурацией («Розница», «Бухгалтерия» или «ERP»), а является критическим багом самой платформы. Основной очаг проблемы зафиксирован в ветках 8.3.24 и 8.3.25 (в частности, в релизах 8.3.25.1374, 8.3.25.1394 и соседних).

Разберем по шагам внутренний механизм возникновения сбоя:

  1. При открытии табличного документа ТабличныйДокумент платформа обращается к сохраненным настройкам пользователя.
  2. Если пользователь хотя бы раз зашел в «Предварительный просмотр» или открыл «Параметры страницы» и нажал «ОК», 1С сохраняет эти параметры в профиле (в системном хранилище настроек).
  3. В некоторых версиях платформы механизм записи параметров работает некорректно: значение количества экземпляров «залипает».
  4. При последующей печати, даже если вы меняете число в диалоговом окне, платформа подставляет «залипшее» значение из сохраненных настроек, игнорируя текущий ввод пользователя.

Официально проблема зарегистрирована под идентификаторами ID 20174083 и ID 60013344. Согласно данным разработчиков, исправление вошло в состав ветки 8.3.26. Если же обновление до этой версии пока невозможно, рассмотрим альтернативные варианты решения.

Способ 1: Использование системного диалога печати (Ctrl + P)

Проанализируем наиболее простой «ручной» способ обхода. Когда мы нажимаем на кнопку с иконкой принтера в 1С, зачастую срабатывает внутренний менеджер печати платформы, который и содержит ошибку. Однако в операционной системе Windows есть собственный механизм обработки очереди печати.

Посмотрим на алгоритм действий:

  1. Откройте печатную форму документа.
  2. Вместо нажатия на кнопку «Печать» на форме, используйте системный диалог печати с помощью комбинации клавиш Ctrl + P.
  3. В открывшемся системном окне настроек принтера укажите нужное количество копий.
  4. Нажмите «Печать».

Этот метод работает, так как при вызове системного диалога параметры количества экземпляров передаются напрямую драйверу принтера, минуя проблемный участок кода платформы 1С.

Способ 2: Очистка пользовательских настроек печати

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

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


// Пример очистки настроек печати для конкретной формы
ХранилищеСистемныхНастроек.Удалить("Общее/НастройкиПечатиТабличныхДокументов", "", ИмяПользователя);

После такой очистки важно не заходить в «Предварительный просмотр», пока платформа не будет обновлена на исправленный релиз.

Способ 3: Программная корректировка вывода на печать

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

Проанализируем пример кода:


ТабДок = Новый ТабличныйДокумент;
// ... формирование документа ...
ТабДок.КоличествоЭкземпляров = НужноеКоличество;
// Используем Ложь, чтобы не вызывать диалог, который может подменить количество
ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);

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

Дополнительные рекомендации и сопутствующие проблемы

Стоит отметить, что в версиях 8.3.25.1374 и выше были замечены и другие странности. Например, проблемы с полнотекстовым поиском или исчезновение картинок в некоторых формах. Если вы наблюдаете комплекс таких проблем, рекомендуем:

  1. Выполнить обновление до релизов 8.3.26.XXXX или выше, где эти ошибки официально исправлены.
  2. Если обновление на 8.3.26 невозможно, попробуйте откатиться на стабильные релизы ветки 8.3.23 (если конфигурация поддерживает такую версию платформы).
  3. В качестве временной меры для системных администраторов: проверьте, какой драйвер используется на принтере. Иногда замена драйвера с PCL6 на Universal Print Driver или PS (PostScript) меняет способ взаимодействия с 1С и «лечит» проблему количества копий.

Подводя итог, можно сказать, что данная проблема является классическим примером «регрессии» в новых версиях платформы. Мы совместно разобрали основные способы борьбы с ней: от простых горячих клавиш до программного вмешательства. Наиболее надежным решением остается мониторинг багборда 1С и своевременная установка исправленных патчей и релизов.

← На главную