Часто в процессе работы с конфигурациями на платформе 1С:Предприятие (в частности, в КА 2 или ERP) возникает необходимость напечатать не весь документ целиком, а только конкретные позиции, выбранные пользователем. Давайте разберем, как грамотно реализовать этот функционал, соблюдая стандарты разработки и обеспечивая удобство для конечного пользователя.
С технической точки зрения попытка «протащить» массив выделенных строк из формы в механизм типовой печати является сложной задачей. Типовая подсистема печати (БСП) ориентирована на работу со ссылками на объекты ДокументСсылка. Если мы будем пытаться манипулировать данными в обход системы, мы столкнемся с проблемами целостности данных и сложностями при обновлении конфигурации.
Рассмотрим два основных подхода к решению:
Булево (например, Печатать).Данный метод признан наиболее удобным, так как он делает выбор пользователя явным, сохраняемым и прозрачным. Разберем шаги реализации:
Булево. Назовите его, например, Печатать.
// Пример логики запроса при формировании печатной формы
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Док.Номенклатура,
| Док.Количество,
| Док.Цена
|ИЗ
| Документ.НашДокумент.Товары КАК Док
|ГДЕ
| Док.Ссылка = &Ссылка
| И Док.Печатать = ИСТИНА";
Запрос.УстановитьПараметр("Ссылка", СсылкаНаДокумент);
В ходе обсуждения часто предлагается метод удаления строк из объекта в транзакции с последующим откатом (ОткатТранзакции). Мы настоятельно рекомендуем избегать этого метода по ряду причин:
Часто программисты задаются вопросом: нужно ли записывать документ при печати? В типовых конфигурациях 1С действует жесткое правило: если документ был изменен (например, пользователь проставил галочки в колонке «Печатать»), система предложит его записать.
Это не прихоть платформы, а стандарт обеспечения целостности данных. Если пользователь отметил строки для печати, эти данные должны быть сохранены в базе, иначе печатная форма будет неактуальна. Таким образом, принудительная запись документа перед печатью — это защита от ошибок и возможных махинаций при складских операциях.
Если бизнес-логика клиента сложнее (например, нужно печатать только те строки, которые обеспечены на складе), рассмотрите следующие дополнения:
Булево используйте Перечисление, чтобы классифицировать строки (например, «К печати», «Отложено», «Отменено»).Команды для вызова печати, чтобы сохранить типовую логику работы БСП, просто переопределив источник данных для формирования макета.Подводя итог, можно сказать, что решение с добавлением колонки Печатать является наиболее профессиональным и легко поддерживаемым в будущем при обновлениях типовой конфигурации.