Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
06 мая 2024, 01:49

Печать на управляемых формах

Автор art93, 03 авг 2015, 14:15

0 Пользователей и 1 гость просматривают эту тему.

art93

Создал с нуля документ и форму, макет.
Код для печати.Прописанный в Модуле менеджера. Подскажите ещё что нужно прописать и где?
(один из вопросов Нужно ли добавлять ПодменюПечати в форме?)
Заранее спасибо

Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
   
        КомандаПечати = КомандыПечати.Добавить();
        КомандаПечати.Идентификатор = "ПФ_ЗаказНаСопровождение";
        КомандаПечати.Представление = НСтр("ru = 'Заказ на сопровождение'");
        КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
        КомандаПечати.Порядок = 10;
       
КонецПроцедуры

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

Функция СформироватьПечатнуюФормуЗаказНаСопровождение(МассивОбъектов, ОбъектыПечати, КомплектыПечати)
   
    УстановитьПривилегированныйРежим(Истина);
   
    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЗаказНаСопровождение_ПФ_ЗаказНаСопровождение";       
    Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.ЗаказНаСопровождение.ПФ_ЗаказНаСопровождение");
    НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
   
    Область = Макет.ПолучитьОбласть("Шапка");
    сслыкаНаДок = МассивОбъектов[0];
    Контрагент= сслыкаНаДок.Контрагент;
    КонтактноеЛицоКонтрагента= сслыкаНаДок.КонтактноеЛицоКонтрагента;
    Номер = сслыкаНаДок.Номер;
    Дата  = Формат(Дата,"ДФ=dd.MM.yyyy");
    Автор   = сслыкаНаДок.Ответственный.Наименование;
    ДатаПередачи = Формат(сслыкаНаДок.ДатаПередачиИсполнителю,"ДФ=dd.MM.yyyy");
    ТабличныйДокумент.Вывести(Область);

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

vitasw

Не очень понятна суть вопроса. Задание на разработку вроде мы вам не давали и ответить на вопрос нужно добавлять меню или нет - так же ответить не сможем. Это вам виднее - необходимо это меню или нет.

cska-fanat-kz

прогоните Конструктор печати и увидите что и где создастся...
команда Печать
текст формирования табдока в модуле менеджера и т.д.

при желании сгенерированное потом можно будет переделать под свое...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

art93

Суть вопроса вот в чём:
У меня есть документ ЗаказНаСопровождение. Форма документа у него. И макет. https://cloud.mail.ru/public/99cx/CWVTkbi3W
Нужно чтоб в форме печатался макет. Вот что я уже написал видно выше.
Подскажите пожалуйста всё ли правильно в написанном коде и что ещё нужно для реализации печати.
Заранее спасибо!

mashencev_anton

Цитата: art93 от 03 авг 2015, 14:24
Суть вопроса вот в чём:
У меня есть документ ЗаказНаСопровождение. Форма документа у него. И макет. https://cloud.mail.ru/public/99cx/CWVTkbi3W
Нужно чтоб в форме печатался макет. Вот что я уже написал видно выше.
Подскажите пожалуйста всё ли правильно в написанном коде и что ещё нужно для реализации печати.
Заранее спасибо!

Подготовительные действия

На первом этапе нужно внедрить подсистему в те формы, в которых предполагается использовать команды печати, и в модули менеджеров объектов:

1. В формах каждого объекта, где необходимо разместить команду печати, в процедуре ПриСозданииНаСервере добавить следующий код:

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

По умолчанию команды печати располагаются в командной панели формы, но размещение можно переопределить, указав второй параметр в вызове УправлениеПечатью.ПриСозданииНаСервере:

Копировать в буфер обмена
    УправлениеПечатью.ПриСозданииНаСервере(ЭтотОбъект, Элементы.ГруппаКомандПечати);
Динамическое создание команд печати на форме может замедлять ее открытие, поэтому размещать команды печати рекомендуется в статической группе команд вида Подменю.

2. В формах объекта, куда размещается команда печати (кроме форм списков), добавить код подключаемого обработчика команды:

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

3. В формах списка объекта, куда размещается команда печати, добавить код подключаемого обработчика команды:

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


P.S. Взято  с ИТС

cska-fanat-kz

это если совсем строго "по научному" делать.

более простой вариант: переделать то что вам насоздает конструктор печати.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

art93

Делал так, но выдаёт ошибку, поэтому подумал что не в ту сторону думаю.
Вот какая ошибка выдаётся:

{ОбщийМодуль.СтандартныеПодсистемыПовтИсп.Модуль(396)}: Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных().

Для объекта метаданных "Документ.ЗаказНаСопровождение"
не найден идентификатор
в справочнике "Идентификаторы объектов метаданных".

Для разработчика: возможно требуется обновить вспомогательные данные,
которые влияют на работу программы. Для выполнения обновления можно:
- воспользоваться внешней обработкой
  "Инструменты разработчика: Обновление вспомогательных данных",
- либо запустить программу с параметром командной строки 1С:Предприятия 8
  "/С ЗапуститьОбновлениеИнформационнойБазы",
- либо увеличить номер версии конфигурации, чтобы при очередном запуске
  выполнились процедуры обновления данных информационной базы.
      ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(

Добавлено: 03 авг 2015, 14:36


Надо именно строго "по научному". Я начинающий программист пишу программу внутренней автоматизации для компании франчайзи. Меня проверяют, чтоб всё было по стандартам.

mashencev_anton

Цитата: art93 от 03 авг 2015, 14:34
Делал так, но выдаёт ошибку, поэтому подумал что не в ту сторону думаю.
Вот какая ошибка выдаётся:

{ОбщийМодуль.СтандартныеПодсистемыПовтИсп.Модуль(396)}: Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных().

Для объекта метаданных "Документ.ЗаказНаСопровождение"
не найден идентификатор
в справочнике "Идентификаторы объектов метаданных".

Для разработчика: возможно требуется обновить вспомогательные данные,
которые влияют на работу программы. Для выполнения обновления можно:
- воспользоваться внешней обработкой
  "Инструменты разработчика: Обновление вспомогательных данных",
- либо запустить программу с параметром командной строки 1С:Предприятия 8
  "/С ЗапуститьОбновлениеИнформационнойБазы",
- либо увеличить номер версии конфигурации, чтобы при очередном запуске
  выполнились процедуры обновления данных информационной базы.
      ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(

Добавлено: 03 авг 2015, 14:36


Надо именно строго "по научному". Я начинающий программист пишу программу внутренней автоматизации для компании франчайзи. Меня проверяют, чтоб всё было по стандартам.
в Режиме предприятия заходите в РС ВерсииПодсистем и меняете версию нужной подсистемы перезагружаете и будет счастье.....Наверное))

art93

Проблема решается обработкой "ИнструментыРазработчикаОбновлениеВспомогательныхДанных"

mashencev_anton

Цитата: art93 от 03 авг 2015, 15:01
Проблема решается обработкой "ИнструментыРазработчикаОбновлениеВспомогательныхДанных"
и такой вариант тоже подходит)))). Ну что макет на печать выходит??

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск