Многие технические специалисты и пользователи столкнулись с крайне неприятной ситуацией: при попытке напечатать документ (например, УПД или накладную) (поможет обработка пакетной печати с настройкой копий) из программы «1С:Предприятие 8.3», система игнорирует указанное количество копий. Вы можете выставить в настройках «2 экземпляра», а принтер выдаст один, или наоборот — при заказе одной копии печатается две. Проанализируем ситуацию и выясним, почему стандартные методы очистки кэша здесь не помогают и как обойти этот баг программными и пользовательскими средствами.
Рассмотрим природу возникновения этой ошибки. Проблема не связана с конкретной конфигурацией («Розница», «Бухгалтерия» или «ERP»), а является критическим багом самой платформы. Основной очаг проблемы зафиксирован в ветках 8.3.24 и 8.3.25 (в частности, в релизах 8.3.25.1374, 8.3.25.1394 и соседних).
Разберем по шагам внутренний механизм возникновения сбоя:
ТабличныйДокумент платформа обращается к сохраненным настройкам пользователя.Официально проблема зарегистрирована под идентификаторами ID 20174083 и ID 60013344. Согласно данным разработчиков, исправление вошло в состав ветки 8.3.26. Если же обновление до этой версии пока невозможно, рассмотрим альтернативные варианты решения.
Проанализируем наиболее простой «ручной» способ обхода. Когда мы нажимаем на кнопку с иконкой принтера в 1С, зачастую срабатывает внутренний менеджер печати платформы, который и содержит ошибку. Однако в операционной системе Windows есть собственный механизм обработки очереди печати.
Посмотрим на алгоритм действий:
Этот метод работает, так как при вызове системного диалога параметры количества экземпляров передаются напрямую драйверу принтера, минуя проблемный участок кода платформы 1С.
Если проблема носит массовый характер, очистка локального кэша (удаление базы из списка) может не дать долгосрочного эффекта, так как настройки печати могут храниться в базе данных. Попробуем очистить настройки программно или через интерфейс.
Для конкретного пользователя можно попробовать удалить записи в справочнике «Сохраненные настройки» (если это предусмотрено конфигурацией) или очистить системное хранилище настроек для объекта ТабличныйДокумент. Рассмотрим пример того, как это могло бы выглядеть в коде для администратора:
// Пример очистки настроек печати для конкретной формы
ХранилищеСистемныхНастроек.Удалить("Общее/НастройкиПечатиТабличныхДокументов", "", ИмяПользователя);
После такой очистки важно не заходить в «Предварительный просмотр», пока платформа не будет обновлена на исправленный релиз.
Если вы являетесь разработчиком и хотите исправить поведение для пользователей без обновления платформы, можно вмешаться в процесс формирования печатной формы. Выясним, как это сделать. Вместо использования стандартного метода Напечатать() с выводом диалога, можно форсировать передачу параметров.
Проанализируем пример кода:
ТабДок = Новый ТабличныйДокумент;
// ... формирование документа ...
ТабДок.КоличествоЭкземпляров = НужноеКоличество;
// Используем Ложь, чтобы не вызывать диалог, который может подменить количество
ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
При использовании метода Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать) платформа с меньшей вероятностью обращается к «сломанным» сохраненным настройкам, используя параметры, заданные непосредственно в объекте ТабличныйДокумент.
Стоит отметить, что в версиях 8.3.25.1374 и выше были замечены и другие странности. Например, проблемы с полнотекстовым поиском или исчезновение картинок в некоторых формах. Если вы наблюдаете комплекс таких проблем, рекомендуем:
PCL6 на Universal Print Driver или PS (PostScript) меняет способ взаимодействия с 1С и «лечит» проблему количества копий.Подводя итог, можно сказать, что данная проблема является классическим примером «регрессии» в новых версиях платформы. Мы совместно разобрали основные способы борьбы с ней: от простых горячих клавиш до программного вмешательства. Наиболее надежным решением остается мониторинг багборда 1С и своевременная установка исправленных патчей и релизов.