В новой платформе пропала кнопка "Печать". Имитируем БСП

«Приятным» сюрпризом для многих пользователей 1С стало то, что при обновлении платформы (начиная с 8.3.15) полностью поменялся интерфейс. Можно долго спорить о целесообразности этого новшества, но самым главным минусом стало то, что пропали стандартные кнопки на панели инструментов. Разработчики предполагают повсеместное использование БСП, но что делать тем, кто давно и успешно использует самописные конфигурации, в которых формирование печатной формы происходит по ТабДок.Показать(), и не желает их «утяжелять»? Добавим общую форму с нужными нам кнопками.

Сразу оговорюсь, что целиком и полностью поддерживаю продвижение БСП. Идея хороша, но за универсальность приходится расплачиваться объемами кода, в котором не так-то просто разобраться. Я честно пытался пройтись отладчиком по процедуре печати, но после "стопятьсотой" процедуры решил, что буду делать свою форму, с минимумом нужных мне функций. Что же для этого потребуется? (Конечно же сохранить копию базы и все эксперименты вести исключительно в ней!)

Постараюсь объяснять все подробно, т.к. рассчитываю на читателя, не особо продвинутого в 1С. Гуру моя информация не интересна, они используют стандартные подсистемы. Имейте ввиду, что реквизит ТабДок у вас может называться иначе.

Первым делом переносим из любой типовой конфигурации общую форму ПечатьДокументов (я воспользовался конфигурацией Бухгалтерия Предприятия 3.0). Делается это в Конфигураторе. Для начала выгружаете конфигурацию донора (Конфигурация — Сохранить конфигурацию в файл), а затем загружаете в своей базе (Конфигурация — Сравнить, объединить с конфигурацией из файла). В окне с выбором необходимых модулей снимаем ВСЕ флажки. Раскрываем дерево, находим общую форму ПечатьДокументов (далее буду называть ее сокращенно ПД) и помечаем ее. Соглашаемся с изменениями и сохраняем свою конфигурацию.

Далее из модуля формы ПД удаляем все. Потом напишем собственные процедуры.

На самой форме оставляем только самое необходимое. На мой взгляд, достаточно кнопок: Печать, предварительный просмотр, выбор количества копий и запрет редактирования. Из реквизитов нам потребуются только Копий и ТекущаяПечатнаяФорма. Из Команд — ПереключитьРедактирование и сама команда Печать.

Настройки печатной формы

В модуле располагаем следующие процедуры:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

ТекущаяПечатнаяФорма = Параметры.ТабличныйДокумент;
ЭтаФорма.Заголовок = Параметры.ЗаголовокФормы;
Копий =  ТекущаяПечатнаяФорма.КоличествоЭкземпляров;
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПереключитьРедактирование(Неопределено)
КонецПроцедуры

&НаКлиенте
Процедура КопийПриИзменении(Элемент)
ТекущаяПечатнаяФорма.КоличествоЭкземпляров = Копий;

КонецПроцедуры

&НаКлиенте
Процедура ПереключитьРедактирование(Команда)
Элементы.ТекущаяПечатнаяФорма.Редактирование = НЕ Элементы.ТекущаяПечатнаяФорма.Редактирование;
ПереключитьПометкуКнопкиРедактирование();
КонецПроцедуры

&НаКлиенте
Процедура ПереключитьПометкуКнопкиРедактирование()

Элементы.КнопкаРедактирование.Пометка = НЕ Элементы.КнопкаРедактирование.Пометка;

КонецПроцедуры


&НаКлиенте
Процедура Печать(Команда)
ТекущаяПечатнаяФорма.Напечатать(РежимИспользованияДиалогаПечати.Использовать);
КонецПроцедуры

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

В процедуре ПриОткрытии() я переключаю режим редактирования на Истина. Если вам не требуется редактировать по-умолчанию, можете вообще убрать эту процедуру, а режимы переключать вручную кнопкой.

Далее все понятно: при изменении на форме количества копий, соответственно меняются параметры печати табличного документа, при нажатии на кнопку Редактирование, ее значения меняются на противоположные, меняя заодно и пиктограмму. Ну, и главная процедура Печать(), которая и распечатает нам всю красоту с предварительным выводом диалогового окна.

Затем создадим в Общих модулях новую процедуру. Эта процедура должна работать только на клиенте, поэтому смотрите свойства модуля, в котором создаете процедуру. Можно для верности предварить процедуру директивой #Если Клиент Тогда
У меня модуль называется ОбработкиКлиента, у вас будет другое название, не перепутайте.

#Если Клиент Тогда
Процедура ПолучитьПечатнуюФорму(ТабДок,ТекстЗаголовка) Экспорт
КоллекцияПечатныхФормСтруктура = Новый Структура;
КоллекцияПечатныхФормСтруктура.Вставить("ТабличныйДокумент"    , ТабДок);
КоллекцияПечатныхФормСтруктура.Вставить("ЗаголовокФормы"     , ТекстЗаголовка);
ОткрытьФорму("ОбщаяФорма.ПечатьДокументов",КоллекцияПечатныхФормСтруктура);

КонецПроцедуры
#КонецЕсли

Здесь мы формируем структуру и отправляем в общую форму ПД.
Подготовительные работы закончены. Теперь ищем место, где выводится наш табличный документ. Для примера, у меня есть документ Доверенность. В нем команда ПечатьДоверенности, модуль которой выглядит следующим образом:

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ТабДок = Новый ТабличныйДокумент;
Печать(ТабДок, ПараметрКоманды);
ТабДок.ОтображатьСетку = Ложь;
ТабДок.Защита = Ложь;
ТабДок.ТолькоПросмотр = Ложь;
ТабДок.ОтображатьЗаголовки = Ложь;
ТабДок.АвтоМасштаб = Истина;
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
ТабДок.Показать("Печать: Доверенность М-2 " + ПараметрКоманды);

КонецПроцедуры

&НаСервере
Процедура Печать(ТабДок, ПараметрКоманды)
ТабДок.ИмяПараметровПечати = "ПечатьДоверенности_"+Строка(ПараметрыСеанса.ТекущийПользователь);
Документы.Доверенность.ПечатьДоверенности(ТабДок, ПараметрКоманды);
КонецПроцедуры

Осталось заменить строчку
 

 ТабДок.Показать("Печать: Доверенность М-2 " + ПараметрКоманды);

на

 ОбработкиКлиента.ПолучитьПечатнуюФорму(ТабДок,"Печать: Доверенность М-2 " + ПараметрКоманды);

Как видите, название у новой формы останется прежним, а вставлять новый код просто: копируем левую часть до запятой и вставляем в нужные места нашей базы, где есть ТабДок.Показать().

Осталось только сохранить конфигурацию и проверить, как все работает.

30 Comments

  1. Vlan

    (1) Я понимаю, что БСП не взялась из ниоткуда. Были на то причины. Возможно, это связано и с персональными данными, хотя я больше склоняюсь, что сложность из-за универсальности. Только речь идет о уже работающей конфигурации. Если раньше персональные данные не разглашались, то дополнительная кнопка никак на это повлиять не может.

    Reply ↓
  2. Vlan

    (3) Ход мысли такой:

    1) Там, где БСП есть, пусть работает, ее эмулировать не надо.

    2) Там, где БСП нет, пропала возможность быстрой печати по одной кнопке. Нужно нажать справа кнопку меню, в ней Файл, далее Печать. Это очень неудобно пользователю. Можно воспользоваться горячими клавишами, но люди все разные: одни их помнят, другим надо напоминать каждый час. Мне было проще сделать кнопку, которая сразу перед глазами Внедрять БСП в работающую годами систему не вижу необходимости..

    Reply ↓
  3. sikvel2012

    (1). Попахивает бредом

    Reply ↓
  4. rusmil

    (6) А как связан вывод формы на печать и закон о персональных данных? Можете привести пример?

    Reply ↓
  5. WalterMort

    (7) Ну… злоумышленник не смог подделать персональные данные в печатной форме, потому что не осилил БСП…

    Reply ↓
  6. Vlan

    (8) Самое смешное, что БСП даже позволяет редактировать макеты и пресылать файлы по электронке, а я эту возможность убрал. Я таки соблюдаю закон 152-ФЗ? 🙂

    Reply ↓
  7. sikvel2012

    (6)приходили, проверяли, только ни кто не проверяет бсп

    И защита перс данных это не их подделка в печатной форме, а немного другое, читайте закон

    И если у вас все подряд имеют к ним доступ и могут выводить на печать то никакая бсп вас от штрафа не спасет

    Reply ↓
  8. _alex1974

    Злоумышленник сфотографирует экран на смартфон.

    Кстати, 90% пользователей именно так делают скриншоты для общения с поддержкой.

    Reply ↓
  9. VmvLer

    (11) я ничего про «нас» не писал, так что ваши фантазии попахивают непорядочностью и манипуляцией.

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

    Тот же ЗУП фиксирует любые попытки доступа к пер. данным — печать, просмотр, открытие карточек.

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

    Я считаю, что такое решение задачи и будет нарушением закона.

    Если вы так не считаете, то обоснуйте без фантазий у кого что болит?

    Reply ↓
  10. VmvLer

    (10) При наличии прав да, но если в ИБ проходной двор и все с правами админа, то это совсем другая история и на БСП пенять нет смысла.

    Reply ↓
  11. Vlan

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

    Reply ↓
  12. VmvLer

    (15) Аппеляцию «вам же все все твердят…» отставьте для телешоу, там этот тип манипуляций прокатывает.

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

    И даже если будет, то хорошая система зафиксирует эти факты.

    Когда же «прикрутичвать» свои печ.формы и процедуры печати, то очень просто обойти и права доступа,

    и протоколирование доступа к тем или иным данным. Ваша обработка как раз это и делает — кладет болт на правила и регламент.

    Посему я и против подобных поделок — это прошлый век.

    Reply ↓
  13. Vlan

    (16) Ну, я тоже против кардинального перекроя платформы, однако разработчикам это не интересно. Так что у нас 1:1

    В описании русским по белому написано, что предназначено для собственных разработок, которые изначально строились не по правилам. Кто хочет хорошо — напишет новую конфигурацию (Подумаешь! Ерунда какая!), кого устраивает плохо, все равно сделает по-своему.

    Reply ↓
  14. sikvel2012

    (13) вот и славно, это ближе к истине, так как изночально вы говорили о их модификации перед печатью

    В тоже время, как сказали ниже ограничивать доступ к перс. данным нужно правами, и если пользователь видит их значит он имеет на это право

    Бсп это унификация не болен

    Reply ↓
  15. dhurricane

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

    Reply ↓
  16. Vlan

    (19) Не спорю. Я оставил то, что хотелось бы иметь перед глазами, не рыская по меню.

    Reply ↓
  17. dhurricane

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

    Reply ↓
  18. Vlan

    (21) Можно и так. Только хотелось имитации БСП, чтобы пользователь сразу видел знакомые кнопки.

    Reply ↓
  19. HanterVol

    ИМХО. если в самописной конфигурации есть печатные формы, формирующиеся из формы документа/справочника по «Таб.Показать()», то нужно выбрать время и переписать их, а не заниматься садомазохизмом.

    Reply ↓
  20. Vlan

    (23) Так они и переписаны теперь. Все элегантно и удобно. 🙂

    Reply ↓
  21. dajen

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

    Reply ↓
  22. 7OH

    А не проще ли тогда уж на 8.3.16 пересесть ?

    Там у ТабДок есть уже меню и в нём печать.

    Reply ↓
  23. Vlan

    (27) Меню везде есть. Или я что-то не знаю? Попробую новые платформы на досуге, что там еще придумали.

    Reply ↓
  24. freeze_9096

    Спасибо Вам добрый человек! Так гораздо удобнее!

    Reply ↓
  25. Vlan

    (29) Очень рад, что кому-то пригодилось.

    Reply ↓
  26. dajen

    (26) о, господи, оно еще и шутить пытается)

    Reply ↓
  27. GROOVY

    Там есть кнопочка с тремя точечками. В каждой форме. Все.

    Reply ↓
  28. Vlan

    (32) Я в курсе. См. (4)

    Reply ↓
  29. Terve!R

    (3) Умное БСП скрывает кнопки от злоумышленников? Что за бред?

    приведите пример, как БСП защищает от мошенников, иначе это все пустое балабольство на пустом месте.

    Reply ↓
  30. ssfedkin

    Спасибо что опередили! Тоже хотел сделать что-то подобное для небольшой самописки.

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *