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

«Приятным» сюрпризом для многих пользователей 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 не будет опубликован. Обязательные поля помечены *