Единый семинар «1С» для бухгалтеров и руководителей

Добавление команд печати в конфигурациях на БСП 2.4.3 (в частности, в самописных документах в Бухгалтерии 3.0 после релиза 3.0.52.35)

Печать - Печатные формы документов

В статье https://infostart.ru/public/237013/ пользователя nick max рассматривался список действий для подключения команд печати в Бухгалтерии 3.0, работающей на БСП 2.3.6. В новом релизе Бухгалтерии 3.0.52.35 от 15.09.2017г. стала использоваться БСП 2.4.3, из-за чего произошли изменения в процедурах общих модулей, связанных с механизмом печати, и в процедурах их вызова в формах документов и в формах списков. Рассмотрим их.

В статье //infostart.ru/public/237013/ пользователя nick max  рассматривался список действий для подключения команд печати в Бухгалтерии 3.0, работающей на БСП 2.3.6.
В новом релизе Бухгалтерии 3.0.52.35 от 15.09.2017г. стала использоваться БСП 2.4.3, из-за чего произошли изменения в процедурах общих модулей, связанных с механизмом печати, и в процедурах их вызова в формах документов и в формах списков.
Рассмотрим их.

1. В процедуре ПриСозданииНаСервере изменился код с:

&НаСервере 
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) 
         УправлениеПечатью.ПриСозданииНаСервере(ЭтаФорма, Элементы.ГруппаПечать)
КонецПроцедуры 

на:

&НаСервере 
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
           // СтандартныеПодсистемы.ПодключаемыеКоманды
           ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
           // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры

Замечание: Подменю ГруппаПечать на форме теперь не нужно создавать и передавать в параметр.

2. В Форме Документа вместо процедуры

&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуПечати(Команда)
          УправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати(Команда, ЭтаФорма, Объект)
КонецПроцедуры  

теперь целых три:

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте 
Процедура Подключаемый_ВыполнитьКоманду(Команда)
          ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры 

&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат)
          ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры 

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
          ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры 
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

 

а в Формы Списка вместо:

(помним, что Объект заменяется на Элементы.Список)

&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуПечати(Команда)
         УправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати(Команда, ЭтаФорма, Элементы.Список)
КонецПроцедуры

будет четыре:

&НаСервере
Процедура НастройкиДинамическогоСписка()
         Отчеты.РеестрДокументов.НастройкиДинамическогоСписка(ЭтотОбъект);
КонецПроцедуры

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте 
Процедура Подключаемый_ВыполнитьКоманду(Команда)
         Если Команда.Имя = "ПодменюПечатьОбычное_Реестр" Тогда 
             НастройкиДинамическогоСписка();
         КонецЕсли;
         ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список);
КонецПроцедуры

&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат)
          ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.Список, Результат);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
          ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

 

3. И то, чего нет в указанной статье:

В общем модуле УправлениеПечатьюПереопределяемый, в процедуре ПриОпределенииОбъектовСКомандамиПечати  нужно добавить свои созданные документы, для которых нужна печать:

Процедура ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов) Экспорт
               ....
               СписокОбъектов.Добавить(Документы.ФормированиеЗаписейРаздела7ДекларацииНДС);
               ////////////////////Свои документы
               СписокОбъектов.Добавить(Документы.МойДокумент1);
               СписокОбъектов.Добавить(Документы.МойДокумент2);
               ....
КонецПроцедуры 

 

В Модуле Менеджера всё остается без изменений.

(для полноты приведен урезанный код примера Модуля Менеджера из указанной статьи //infostart.ru/public/237013/ )

Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт 
                  КомандаПечати = КомандыПечати.Добавить();
                  КомандаПечати.Идентификатор = "Акт";
                  КомандаПечати.Представление = "Дополнительный акт";
                  КомандаПечати.Обработчик    = "УправлениеПечатьюБПКлиент.ВыполнитьКомандуПечати";
                  КомандаПечати.СписокФорм    = "ФормаСписка,ФормаДокумента";
КонецПроцедуры 

Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт 
                ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина;
                Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "Акт") Тогда  УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "Акт", "Акт",
                               СформироватьНесколькоАктов(МассивОбъектов),"Документ.Приказ.Акт");
                КонецЕсли;
КонецПроцедуры 

Функция   СформироватьНесколькоАктов(МассивОбъектов)
            ТабДокумент = Новый ТабличныйДокумент;
            Для каждого Ссылка из МассивОбъектов Цикл
                       ТабДокументОбъекта = СформироватьАкт(Ссылка);
                       Если ТабДокумент.ВысотаТаблицы > 0 И ТабДокументОбъекта.ВысотаТаблицы > 0 Тогда 
                                   ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц()
                       КонецЕсли;
                       ТабДокумент.Вывести(ТабДокументОбъекта)
           КонецЦикла;
           Возврат ТабДокумент
КонецФункции 

Функция  СформироватьАкт(Ссылка)
             ТабДокумент = Новый ТабличныйДокумент;
             // подготовка ТабДокумента
             Возврат ТабДокумент
КонецФункции 

 

 

См. также

Лучшие комментарии
2. Владимир Литвиненко (VladimirL) 590 18.09.17 13:42 Сейчас в теме
Насколько понимаю эта информация относится в целом к БСП 2.4.3 https://its.1c.ru/db/bsp243doc#content:9323:hdoc , не только к Бухгалтерии 3.0.52.35. А значит справедлива для предстоящих обновлений всех типовых конфигураций. Сравните с документацией по БСП 2.3.6 https://its.1c.ru/db/bsp23doc#content:1728:hdoc.

Было бы хорошо изменить заголовок публикации. Тема касается большего количества пользователей, чем может заинтересовать заголовок.
Остальные комментарии
1. Дмитрий Конаков (dkonakov) 5 18.09.17 13:07 Сейчас в теме
Спасибо, очень вовремя написанная статья!
2. Владимир Литвиненко (VladimirL) 590 18.09.17 13:42 Сейчас в теме
Насколько понимаю эта информация относится в целом к БСП 2.4.3 https://its.1c.ru/db/bsp243doc#content:9323:hdoc , не только к Бухгалтерии 3.0.52.35. А значит справедлива для предстоящих обновлений всех типовых конфигураций. Сравните с документацией по БСП 2.3.6 https://its.1c.ru/db/bsp23doc#content:1728:hdoc.

Было бы хорошо изменить заголовок публикации. Тема касается большего количества пользователей, чем может заинтересовать заголовок.
3. Дмитрий Конаков (dkonakov) 5 18.09.17 13:47 Сейчас в теме
(2) Первыми столкнулись именно пользователи БП 3.0.
4. Андрей Романовский (and_r) 18.09.17 20:13 Сейчас в теме
Большое спасибо за статью! Уже голову сломал как вернуть печать, все сделал кроме общего модуля
portal2011; +1 Ответить
5. Бубузяка (Бубузяка) 62 20.09.17 09:14 Сейчас в теме
1. Что касается БП 3.0, то эта статья для тех кто не знает, что это можно прочитать в файле "UpdateSSLhtm" в каталоге, куда устанавливается БСП 2.4. Скачайте БСП 2.4 и получите порядок обновления этой подсистемы и прочих, которые поменялись в 2.4. К тому же 1С поставляет обработку, которая модифицирует код старой версии БСП в объектах, подключенных к БСП при внедрении.

2. Порядок внедрения БСП изложен в документации https://its.1c.ru/db/bsp244doc/ в картинках и кусках кода для вставки, если делать по шагам, то проблем не возникает.
user705522_constantin_h; berezdetsky; h00k; the1; +4 Ответить
6. vicmos victor (vicmos) 40 25.09.17 23:16 Сейчас в теме
Большое спасибо за помощь!!!!!!!!
7. shumvlesu 26.09.17 17:34 Сейчас в теме
&НаКлиенте 
Процедура Подключаемый_ВыполнитьКоманду(Команда)
         Если Команда.Имя = "ПодменюПечатьОбычное_Реестр" Тогда 
             НастройкиДинамическогоСписка();
         КонецЕсли;
         ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список);
КонецПроцедуры


У меня ругалось на ВыполнитьКоманду пока не глянул в параметры этой процедуры. Элементы.Список должен содержать поле - Ссылка. Версия БСП - 2.4.2.25
8. Павел Королев (Korolev) 50 28.09.17 10:17 Сейчас в теме
Благодарю за публикацию. Пригодилась! :)
9. Бойков Илья (l2qweit) 28.09.17 15:09 Сейчас в теме
Огромное человеческое спасибо !!! особенно за.

В общем модуле УправлениеПечатьюПереопределяемый, в процедуре ПриОпределенииОбъектовСКомандамиПечати нужно добавить свои созданные документы, для которых нужна печать:
10. Николай (nipil) 03.10.17 18:32 Сейчас в теме
Есть косяк именно в бухгалтерии 3.0.52.*.
Для подключенных "Дополнительных отчетов и обработок" в "ФормеСписка" для документов пропала кнопка - "Отчеты...".
Причем в БСП все нормально работает.
Глубоко не копал. Тестовую конфигурацию вылечил:

...."Включить возможность изменения"
Документы.ПлатежныеПоручения.ФормаСписка
ГруппаКоманднаяПанель добавил ПодменюПечать.

Сейчас пытаюсь написать дополнительную обработку которая по кнопке "Печать " восстановит кнопку "Отчеты...". (Опять зубы через задницу лечить...)
11. Николай (nipil) 04.10.17 19:22 Сейчас в теме
Решил расширением конфигурации.
Общий модуль - Подключаемые команды
&После("ВывестиКоманды")
Процедура рПП_ВывестиКоманды(Форма, Команды, ПараметрыРазмещения)
	Если Форма.Имяформы = "Документ.ПлатежноеПоручение.Форма.ФормаСписка" Тогда
		// Сменим родителя ПодменюОтчеты
			ЭлементПодменюОтчеты = Форма.Элементы.Найти("ПодменюОтчеты");
			ЭлементГруппаКоманднаяПанель = Форма.Элементы.Найти("ГруппаКоманднаяПанель");
			Форма.Элементы.Переместить(ЭлементПодменюОтчеты,ЭлементГруппаКоманднаяПанель);
	КонецЕсли;
КонецПроцедуры
Показать
12. Катя Котова (Dunda) 46 06.10.17 15:16 Сейчас в теме
ОООООООО спасибо огромное! Методом тыка нашла лишние процедуры, теперь по вашей статье попробую до конца доделать
13. Алексей Марков (Alex_1974) 25 09.10.17 13:28 Сейчас в теме
Присоединяюсь к благодарившим, очень вовремя, просто спасли!!!
14. Peter Metelkin (iiceberg) 79 18.10.17 10:18 Сейчас в теме
Добавлю свои 5 копеек.
Когда добавляете (переписываете) под БСП 2.4 свои объекты, по мимо действий указанных в статье, по крайней мере для ERP 2.4, необходимо проделать еще несколько манипуляций, что бы вся эта магия от 1С версии 2.4 заработала.
А конкретно надо сделать следующее:
Для Добавления команд Отчеты, ввод на основании надо указать БСП, что для этого объекта надо использовать механизм "стандартных подсистем". Делаем следующее:
- для отчетов: Общий модуль "ВариантыОтчетовПереопределяемый" процедура "ОпределитьОбъектыСКомандамиОтчетов" добавляем свой объект в массив.

- для Ввода на основании: Общий модуль "СозданиеНаОснованииПереопределяемый" процедура "ПриОпределенииОбъектовСКомандамиСозданияНаОсновании" добавляем свой объект в массив.

для печати, заполнения и проч. видимо тоже есть процедуры, но я их не искал и не использовал из-за ненадобности (пока еще) =).

надеюсь сэкономил полчаса работы.
bugtester; +1 Ответить
15. _ Ya, Ti, On, Ona, Vmeste celaya strana (agent00mouse) 156 26.10.17 10:02 Сейчас в теме
Обе статьи актуальны, т.к. есть и самописаные конфы, созданные ещё во времена динозавров.
16. Ёк Макарёк (Shaldryn) 01.11.17 12:16 Сейчас в теме
Статья пригодилась, спасибо, как раз делали переход с КА 2.2 на 2.4
правда я так понял команда печати для формы регистра сведений это не прокатит, там идет сравнение типов, на этом все и рушится, по старой схеме раньше работало все...
17. Сергей Кондратьев (serg0776) 20 16.11.17 10:16 Сейчас в теме
т.е. при следующем обновлении эта процедура затрется ПриОпределенииОбъектовСКомандамиПечати
И так отслеживать это постоянно.
19. Алексей (aldan) 19 22.11.17 14:46 Сейчас в теме
(17) Меня тоже это печалит. Уже несколько раз добавлял свои документы после обновления. Не возникло идей, каким образом можно избавиться от редактирования "ПриОпределенииОбъектовСКомандамиПечати" чтобы после обновления не пропадали печатные печатные формы в "своих" документах?
18. Сергей Кондратьев (serg0776) 20 16.11.17 10:29 Сейчас в теме
Такое ощущение, что студенты писали код
Как будто нельзя через Метаданные это сделать!
Супер универсальность.
т.е. если завтра у разработчиков будет новый объект, и если они забыли про этот модуль то печати не будет в этом объекте. КЛАСС.

Функция УниверсальнаяСтруктураОписанияОбъектовПодключаемыхКоманд() Экспорт
	
	//:::Справочники
	ИменаСправочников = Новый Массив;
	ИменаСправочников.Добавить("Банки");
	ИменаСправочников.Добавить("БанковскиеСчета");
	ИменаСправочников.Добавить("ВидыНалогов");
	ИменаСправочников.Добавить("ВидыСкидокНаценок");
	ИменаСправочников.Добавить("ВидыЦен");
	ИменаСправочников.Добавить("ВидыЦенКонтрагентов");
	ИменаСправочников.Добавить("ВнеоборотныеАктивы");
	ИменаСправочников.Добавить("ДоговорыКонтрагентов");
	ИменаСправочников.Добавить("Кассы");
	ИменаСправочников.Добавить("КассыККМ");
	ИменаСправочников.Добавить("Комиссии");
	ИменаСправочников.Добавить("КлючевыеРесурсы");
	ИменаСправочников.Добавить("КонтактныеЛица");
	ИменаСправочников.Добавить("Контрагенты");
	ИменаСправочников.Добавить("НаправленияДеятельности");
	ИменаСправочников.Добавить("Номенклатура");
	ИменаСправочников.Добавить("КатегорииНоменклатуры");
	ИменаСправочников.Добавить("НомераГТД");
	ИменаСправочников.Добавить("Организации");
	ИменаСправочников.Добавить("ПартииНоменклатуры");
	ИменаСправочников.Добавить("СценарииПланирования");
	ИменаСправочников.Добавить("ПравилаОбменаСПодключаемымОборудованиемOffline");
	ИменаСправочников.Добавить("Проекты");
	ИменаСправочников.Добавить("Сотрудники");
	ИменаСправочников.Добавить("Спецификации");
	ИменаСправочников.Добавить("СтатьиДвиженияДенежныхСредств");
	ИменаСправочников.Добавить("СтруктурныеЕдиницы");
	ИменаСправочников.Добавить("ФизическиеЛица");
	ИменаСправочников.Добавить("ХарактеристикиНоменклатуры");
	ИменаСправочников.Добавить("Ячейки");
	
	//:::Документы
	ИменаДокументов = Новый Массив;
	ИменаДокументов.Добавить("АвансовыйОтчет");
	ИменаДокументов.Добавить("АктВыполненныхРабот");
	ИменаДокументов.Добавить("АмортизацияВА");
	ИменаДокументов.Добавить("Бюджет");
	ИменаДокументов.Добавить("ВводНачальныхОстатков");
	ИменаДокументов.Добавить("Взаимозачет");
	ИменаДокументов.Добавить("ВыработкаВА");
	ИменаДокументов.Добавить("Доверенность");
	ИменаДокументов.Добавить("ДополнительныеРасходы");
	ИменаДокументов.Добавить("ЗаданиеНаРаботу");
	ИменаДокументов.Добавить("ЗаказНаПроизводство");
	ИменаДокументов.Добавить("ЗаказПокупателя");
	ИменаДокументов.Добавить("ЗаказПоставщику");
	ИменаДокументов.Добавить("ЗакрытиеМесяца");
	ИменаДокументов.Добавить("ИзменениеПараметровВА");
	ИменаДокументов.Добавить("ИнвентаризацияЗапасов");
	ИменаДокументов.Добавить("КадровоеПеремещение");
	ИменаДокументов.Добавить("КорректировкаРеализации");
	ИменаДокументов.Добавить("КорректировкаРегистров");
	ИменаДокументов.Добавить("МаршрутныйЛист");
	ИменаДокументов.Добавить("НачислениеЗарплаты");
	ИменаДокументов.Добавить("НачислениеНалогов");
	ИменаДокументов.Добавить("НачисленияПоКредитамИЗаймам");
	ИменаДокументов.Добавить("Операция");
	ИменаДокументов.Добавить("ОперацияПоПлатежнымКартам");
	ИменаДокументов.Добавить("ОприходованиеЗапасов");
	ИменаДокументов.Добавить("ОтчетКомиссионера");
	ИменаДокументов.Добавить("ОтчетКомитенту");
	ИменаДокументов.Добавить("ОтчетОПереработке");
	ИменаДокументов.Добавить("ОтчетОРозничныхПродажах");
	ИменаДокументов.Добавить("ОтчетПереработчика");
	ИменаДокументов.Добавить("ПередачаВА");
	ИменаДокументов.Добавить("ПеремещениеДС");
	ИменаДокументов.Добавить("ПеремещениеДСПлан");
	ИменаДокументов.Добавить("ПеремещениеЗапасов");
	ИменаДокументов.Добавить("ПеремещениеПоЯчейкам");
	ИменаДокументов.Добавить("ПереоценкаВРозницеСуммовойУчет");
	ИменаДокументов.Добавить("ПересортицаЗапасов");
	ИменаДокументов.Добавить("ПланПродаж");
	ИменаДокументов.Добавить("ПлатежнаяВедомость");
	ИменаДокументов.Добавить("ПлатежноеПоручение");
	ИменаДокументов.Добавить("ПоступлениеВКассу");
	ИменаДокументов.Добавить("ПоступлениеДСПлан");
	ИменаДокументов.Добавить("ПоступлениеНаСчет");
	ИменаДокументов.Добавить("ПриемИПередачаВРемонт");
	ИменаДокументов.Добавить("ПриемНаРаботу");
	ИменаДокументов.Добавить("ПринятиеКУчетуВА");
	ИменаДокументов.Добавить("ПриходнаяНакладная");
	ИменаДокументов.Добавить("ПриходныйОрдер");
	ИменаДокументов.Добавить("ПрочиеРасходы");
	ИменаДокументов.Добавить("РаспределениеЗатрат");
	ИменаДокументов.Добавить("РасходДСПлан");
	ИменаДокументов.Добавить("РасходИзКассы");
	ИменаДокументов.Добавить("РасходнаяНакладная");
	ИменаДокументов.Добавить("РасходныйОрдер");
	ИменаДокументов.Добавить("РасходСоСчета");
	ИменаДокументов.Добавить("РезервированиеЗапасов");
	ИменаДокументов.Добавить("СборкаЗапасов");
	ИменаДокументов.Добавить("СведенияОЗастрахованныхЛицахСЗВ_М");
	ИменаДокументов.Добавить("СверкаВзаиморасчетов");
	ИменаДокументов.Добавить("СдельныйНаряд");
	ИменаДокументов.Добавить("Событие");
	ИменаДокументов.Добавить("СписаниеВА");
	ИменаДокументов.Добавить("СписаниеЗапасов");
	ИменаДокументов.Добавить("СправкаНДФЛ");
	ИменаДокументов.Добавить("СчетНаОплату");
	ИменаДокументов.Добавить("СчетНаОплатуПоставщика");
	ИменаДокументов.Добавить("СчетФактура");
	ИменаДокументов.Добавить("СчетФактураПолученный");
	ИменаДокументов.Добавить("Табель");
	ИменаДокументов.Добавить("Увольнение");
	ИменаДокументов.Добавить("УчетВремени");
	ИменаДокументов.Добавить("ЧекККМ");
	ИменаДокументов.Добавить("ЧекККМВозврат");
	
	СтруктураОписания = Новый Структура;
	СтруктураОписания.Вставить("Справочники", ИменаСправочников);
	СтруктураОписания.Вставить("Документы", ИменаДокументов);
	
	Возврат СтруктураОписания;
	
КонецФункции 
Показать
20. Олег Козиков (kosikov_oleg) 27.11.17 10:59 Сейчас в теме
Спасибо! Очень своевременно.
21. Константин Хоров (user705522_constantin_h) 1 27.11.17 11:53 Сейчас в теме
Спасибо! Хорошая статья.
Оставьте свое сообщение