Зачастую перед разработчиками встает задача обеспечить операторов возможностью быстрой печати большого количества документов за один клик. В современных типовых конфигурациях этот функционал реализован через Библиотеку стандартных подсистем (БСП), однако в старых решениях, таких как Управление торговлей 10.3, подобные механизмы могут отсутствовать или быть недостаточно гибкими для нужд бизнеса. В этом руководстве мы разберем, как реализовать этот процесс, а также рассмотрим, как сделать его работу максимально эффективной.
Если вы работаете в системе с обычными формами, одним из способов решения является доработка формы списка документов. Рассмотрим основные этапы этого процесса:
РежимВыделения в значение Множественный. Это позволит пользователям выбирать несколько строк одновременно.Рассмотрим пример кода, который позволяет запустить печать для всех выбранных пользователем элементов:
ТЗ = ЭлементыФормы.Список.ВыделенныеСтроки;
Инд = 0;
Для Каждого Стр Из ТЗ Цикл
Ссылка = ЭлементыФормы.Список.ДанныеСтроки(Стр).Ссылка;
Объект = Ссылка.ПолучитьОбъект();
Если Инд = 0 тогда
Форма = ПолучитьОбщуюФорму("ФормаВыбораПечатныхФорм", ЭтаФорма, Объект);
Если Форма.ОткрытьМодально() <> Истина Тогда
Возврат;
КонецЕсли;
Инд = 1;
КонецЕсли;
Для каждого СтрокаКнопки Из Форма.ЭлементыФормы.ДеревоМакетовПечати.ВыделенныеСтроки Цикл
Расшифровка = СтрокаКнопки.Расшифровка;
// Логика печати внешней формы или встроенного макета
Если ТипЗнч(Расшифровка) = Тип("Структура") Тогда
ТабДокумент = УниверсальныеМеханизмы.НапечататьВнешнююФорму(Объект.Ссылка, Расшифровка);
УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, 0, Форма.НаПринтер, ..., Объект.Ссылка, Расшифровка);
Иначе
Объект.Печать(Расшифровка, 0, Форма.НаПринтер);
КонецЕсли;
КонецЦикла;
КонецЦикла;
При реализации массовых операций важно помнить об оптимизации работы с базой данных. В приведенном выше примере происходит получение объекта внутри цикла, что создает значительную нагрузку при печати большого списка документов. Профессиональный подход требует следующей последовательности действий:
Такой подход радикально сокращает количество обращений к серверу 1С и СУБД, что критически важно для работы системы при высокой нагрузке.
УправлениеПечатьюЕсли конфигурация позволяет или вы проводите её модернизацию, всегда старайтесь использовать возможности Библиотеки стандартных подсистем. Метод УправлениеПечатьюКлиент.ВыполнитьКомандуПечати позволяет избежать написания собственных «костылей» и обеспечивает предсказуемое поведение системы.
Пример использования современного подхода:
СтруктураМассивовДокументов = ПолучитьСтруктуруОтмеченныхДляПечатиДокументов();
// Используем стандартный клиентский метод для пакетной печати
УправлениеПечатьюКлиент.ВыполнитьКомандуПечати(
МенеджерПечати,
ИмяМакеты,
СтруктураМассивовДокументов.МассивСчетовПечать,
ЭтаФорма,
Новый Структура
);
Помните, что создание удобных инструментов для пользователей — это основа успешного внедрения. Однако старайтесь соблюдать баланс между кастомизацией и сохранением типовых механизмов:
ОткрытьМодально() считаются устаревшими. Для реализации диалогов лучше использовать асинхронные методы (ОткрытьФорму с обработчиком оповещения), что обеспечит корректную работу в веб-клиенте.Следуя этим рекомендациям, вы сможете создать надежный и производительный инструмент для массовой печати документов, который будет удобен пользователям и прост в техническом обслуживании.