ООО ЭкоЮнит
FAQSearchMemberlistUsergroupsFilesLog inRegisterГлавная
printer-friendly view
 
 
AuthorMessage
Sergey Gender:Male


Местный босс - администратор


Joined: 06 Jan 2005
Show/Hide

В некоторых случаях перед печатью документа требуется вручную указать какие-либо значения или параметры и передать в процедуру Печать() обработки. Для конфигураций линии УТ 10.3, БП 2.0 есть возможность передачи параметров, а также возможность без особых ухищрений вызвать форму обработки перед печатью с последующим выводом результата печати в штатное окно. В конфигурациях на основе Библиотеки стандартных процедур (Управление торговлей 11, Розница 2, УНФ, Бухгалтерия предприятия 3 и прочие) предусмотрены способы вызова команды печати в виде "ОткрытиеФормы" или "ВызовКлиентскогоМетода", но в этом случае вывод сформированного табличного документа необходимо реализовывать самостоятельно.

Рассмотрим один из способов передачи параметров для печати, не претендующий на оригинальность, так как используются штатные процедуры БСП.
В качестве примера выбрана печать простой накладной для УТ 11.0.9.15 - УТ 11.3 с возможностью выбора печати со скидками или без них.

Создадим внешнюю обработку с основной формой "Форма" и реквизитом, например, "ПечататьСкидки", значение которого требуется передать в процедуру Печать() модуля обработки.
Заготовка печатной формы.png


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

Ключевые параметры обработки.png Ключевой параметр.png


Далее определяем команду для печати или вывода печатной формы, навешиваем кнопку на форму.

Команда Печать.png


# Присваиваем команде обработчик действия (код следует поместить в модуль формы)
Code:
&НаСервереБезКонтекста
Функция ЕстьОбщийМодуль(НазваниеМодуля)
    Возврат Метаданные.ОбщиеМодули.Найти(НазваниеМодуля) <> Неопределено;
КонецФункции

&НаСервереБезКонтекста
Функция ПолучитьВерсиюБСП()
    Возврат СтандартныеПодсистемыСервер.ВерсияБиблиотеки();
КонецФункции

&НаКлиенте
Процедура ВыполнитьОткрытиеПечатнойФормы(Команда)

    ВыполняемаяКоманда = Параметры;

    СтандартнаяОбработка = Истина;
    //Проверка на релиз БСП для универсальности.
    //Общий модуль ДополнительныеОтчетыИОбработкиКлиентПереопределяемый существует в версии БСП выше 2.0.1.19
    Если ЕстьОбщийМодуль("ДополнительныеОтчетыИОбработкиКлиентПереопределяемый") Тогда
        Выполнить("ДополнительныеОтчетыИОбработкиКлиентПереопределяемый.ПередВыполнениемКомандыПечатиВнешнейПечатнойФормы(ВыполняемаяКоманда.ОбъектыНазначения, СтандартнаяОбработка);");
    КонецЕсли;

    Отказ = Ложь;
    //Проверка на релиз БСП для универсальности.
    //Если необходимо печатать из непроведённых документов, удалите этот фрагмент
    ВерсияБСП = ПолучитьВерсиюБСП();
    Если СравнитьВерсии(ВерсияБСП, "2.2.3") >= 0 Тогда
        Выполнить("СписокДокументов = ВыполняемаяКоманда.ОбъектыНазначения;
        |НепроведенныеДокументы = ОбщегоНазначенияВызовСервера.ПроверитьПроведенностьДокументов(СписокДокументов);
        |Если СтандартнаяОбработка И НепроведенныеДокументы.Количество() > 0 Тогда Отказ = Истина; КонецЕсли;
        |");
    Иначе
        Выполнить("Если СтандартнаяОбработка И Не УправлениеПечатьюКлиент.ПроверитьДокументыПроведены(ВыполняемаяКоманда.ОбъектыНазначения) Тогда Отказ = Истина; КонецЕсли;");
    КонецЕсли;

    Если Не Отказ Тогда

        //Определение и заполнение штатных параметров для общей формы ПечатьДокументов
        ПараметрыОткрытия = Новый Структура("ИсточникДанных, ПараметрыИсточника");
        ПараметрыОткрытия.ИсточникДанных     = ВыполняемаяКоманда.ДополнительнаяОбработкаСсылка;
        ПараметрыОткрытия.ПараметрыИсточника = Новый Структура("ИдентификаторКоманды, ОбъектыНазначения");
        ПараметрыОткрытия.ПараметрыИсточника.ИдентификаторКоманды = ВыполняемаяКоманда.ИдентификаторКоманды;

        //Здесь передаём наши значения в модуль обработки.
        //Структура для передачи параметров или значений в процедуру Печать обработки
        //В процедуре печати она будет доступна в качестве первого элемента массива МассивОбъектовНазначения
        ДополнительныеПараметры = Новый Структура();
        //Значения для передачи
        ДополнительныеПараметры.Вставить("ПечататьСкидки", ЭтаФорма.ПечататьСкидки);

        //Еще какие-то значения
        //ДополнительныеПараметры.Вставить("РеквизитФормы1", РеквизитФормы1);
        //ДополнительныеПараметры.Вставить("РеквизитФормы2", РеквизитФормы2);

        //В массиве ОбъектыНазначения будут содержаться ссылки на вызвавший форму объект (документ, справочник)
        // и наши значения из реквизитов формы или обработки
        ОбъектыНазначения = Новый СписокЗначений;
        ОбъектыНазначения.Добавить(ДополнительныеПараметры);

        //Ссылки на вызвавшие форму объекты
        Для каждого ОбъектНазначения Из ВыполняемаяКоманда.ОбъектыНазначения Цикл
            ОбъектыНазначения.Добавить(ОбъектНазначения);
        КонецЦикла; //Для каждого ОбъектНазначения Из
        ПараметрыОткрытия.ПараметрыИсточника.ОбъектыНазначения = ОбъектыНазначения;

        //Вывод сформированного табличного документа в штатную форму.
        ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия);
    КонецЕсли;
    ЭтаФорма.Закрыть();

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


# В модуле обработки создаём экспортную процедуру Печать(), с параметрами согласно стандартам БСП для печати с использованием серверной процедуры примерно такого вида
Code:
// Экспортная процедура печати, вызываемая из основной программы
//
// Параметры:
// ВХОДЯЩИЕ:
//  МассивОбъектовНазначения - Массив - список объектов ссылочного типа для печати документа
//                 Как правило, содержит один элемент с ссылкой на вызвавший форму объект (документ, справочник)
//
// ИСХОДЯЩИЕ:
//  КоллекцияПечатныхФорм - ТаблицаЗначений - таблица сформированных табличных документов.
//                 Как правило, содержит одну строку с именем текущей печатной формы
//  ОбъектыПечати - СписокЗначений - список объектов печати.
//  ПараметрыВывода - Структура - Параметры сформированных табличных документов. Содержит поля:
//                          ДоступнаПечатьПоКомплектно - булево - по умолчанию Ложь
//                          ПолучательЭлектронногоПисьма
//                          ОтправительЭлектронногоПисьма
//
Процедура Печать(МассивОбъектовНазначения, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

    ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина;

    //Получаем переданные из формы параметры для печати документа
    //Из формы МассивОбъектовНазначения передаётся как список значений, поэтому преобразуем его в массив
    Если ТипЗнч(МассивОбъектовНазначения) = Тип("СписокЗначений") Тогда
        МассивОбъектовНазначения = МассивОбъектовНазначения.ВыгрузитьЗначения();
    КонецЕсли;

    //Присваиваем значение по умолчанию нашему параметру, переданному из формы
    ПечататьСкидки = Истина;

    //Смотрим, что содержится в первом элементе массива МассивОбъектовНазначения
    //Если это структура, значит есть дополнительные параметры, почти как в прежних конфигурациях
    Если ТипЗнч(МассивОбъектовНазначения[0]) = Тип("Структура") Тогда
        ДополнительныеПараметры = МассивОбъектовНазначения[0];
        Если ДополнительныеПараметры.Свойство("ПечататьСкидки") Тогда
            ПечататьСкидки = ДополнительныеПараметры.ПечататьСкидки;
        КонецЕсли;
        //А теперь структуру из массива объектов можно удалить, больше она там не нужна
        МассивОбъектовНазначения.Удалить(0);
    КонецЕсли;

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

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


Реализация функции СформироватьПечатнуюФормуНакладная() зависит от конкретной задачи и здесь не рассматривается.

В экспортной функции СведенияОВнешнейОбработке() необходимо указать использование команды печати "ОткрытиеФормы" с модификатором "ПечатьMXL".
Подробнее смотрите статью Внешние обработки и отчеты 1С:Предприятие 8.2 или прилагаемый пример обработки.
Code:
    //Определяем команды для печати формы
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд,
        "Расходная накладная (с диалогом выбора)",  // Представление команды в пользовательском интерфейсе
        "РасходнаяНакладнаяСДиалогомВыбора",        // Уникальный идентификатор команды
        "ОткрытиеФормы",                            // Использование команды
        Истина,                                     // Показывать оповещение.
        "ПечатьMXL"                                 // Дополнительный модификатор команды.
    );


Если всё сделано правильно, после регистрации внешней печатной формы в справочнике "ДополнительныеОбработки" она будет доступна из формы списка или документа в меню "Дополнительные печатные формы". После выбора из списка ВПФ на экране появится форма обработки.

Диалог перед печатью.png


Результат печати (табличный документ) выводится в штатную общую форму БСП "Печать документов".

Всё описанное выше изложено и прокомментировано в прилагаемой обработке. Обработка не должна рассматриваться как законченная и готовая к употреблению.
Другой пример обработки можно скачать в теме Cпецификация на товар к договору с контрагентом - Бухгалтерия предприятия 3.0 или  ТоварныйЧек для УТ 11078 (с выбором товара).epf


Download Расходная накладная для УТ 11.0 с диалогом вы...оваров.epf (29.27 KB). Added/Updated Fri 19 May, 2017 11:17. Downloaded 534 Time(s).
This file for registered users. Пример обработки с открытием формы и передачей значений для формирования печатной формы. Для УТ 11.0.9.15 - УТ 11.3


_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, скайп, слать емайлы, пытаться писать в приват. Спасибо за понимание. Please do not PM, ICQ, Skype or email me for support help - you won't get any reply. If you have a question or issue, post it in the appropriate forum/topic. Thanks!
Back to topOffline View user's profile Visit poster's website Skype Name
cplusmax

Забанен


Joined: 19 Jun 2013
Show/Hide

Скачал обработку, при нажатии на кнопку печать появляется ошибка "Установлен безопасный режим выполнение операции запрещено" и печатная форма не появляется Sad
Back to top View user's profile
Sergey Gender:Male


Местный босс - администратор


Joined: 06 Jan 2005
Show/Hide

Версия УТ 11, текущие права пользователя, вид базы данных: файловая или клиент-серверная? Если не заморачиваться, то выкиньте из формы обработки процедуры ПриСозданииНаСервере() и ПриОткрытии(). В любом случае обработка просто пример.

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, скайп, слать емайлы, пытаться писать в приват. Спасибо за понимание. Please do not PM, ICQ, Skype or email me for support help - you won't get any reply. If you have a question or issue, post it in the appropriate forum/topic. Thanks!
Back to topOffline View user's profile Visit poster's website Skype Name
Mikhail

Заинтересовался


Joined: 28 Nov 2013
Show/Hide

Сергей, вопрос к вам. У меня есть внешняя обработка печати товарного чека для УТ 11.1. Мне нужно допилить его, чтобы там показывалась сдача. Для этого я приделал форму в которой получаю недостающие данные. Как мне по кнопке печать на новой форме запустить процедуру печати из модуля объекта? Возможно ли это?
Back to topOffline View user's profile
Sergey Gender:Male


Местный босс - администратор


Joined: 06 Jan 2005
Show/Hide

Так в самой теме и в обработке об этом же. Смотрите примеры кода.

Добавлено спустя 4 минуты 20 секунд:

Скачайте обработку и сделайте по образцу. Если не получится, 500 рублей на счет в сбере и будет вам готовый результат.

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, скайп, слать емайлы, пытаться писать в приват. Спасибо за понимание. Please do not PM, ICQ, Skype or email me for support help - you won't get any reply. If you have a question or issue, post it in the appropriate forum/topic. Thanks!
Back to topOffline View user's profile Visit poster's website Skype Name
Mikhail

Заинтересовался


Joined: 28 Nov 2013
Show/Hide

Sergey, спасибо огромное. Всё получилось. В дальнейшем более подробно проанализирую код.
Back to topOffline View user's profile
Sergey Gender:Male


Местный босс - администратор


Joined: 06 Jan 2005
Show/Hide

В теме Cпецификация на товар к договору с контрагентом - Бухгалтерия предприятия 3.0 добавил аналогичную печатную форму с выбором представителя покупателя и должности.

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, скайп, слать емайлы, пытаться писать в приват. Спасибо за понимание. Please do not PM, ICQ, Skype or email me for support help - you won't get any reply. If you have a question or issue, post it in the appropriate forum/topic. Thanks!
Back to topOffline View user's profile Visit poster's website Skype Name
Kirich Gender:Male

Забанен


Joined: 19 Dec 2013
Show/Hide

Использовал Ваш пример. Почему я не могу получить значения Реквизитов объекта в модуле объекта моей обработке?
Back to top This post has 1 review(s) View user's profile
Sergey Gender:Male


Местный босс - администратор


Joined: 06 Jan 2005
Show/Hide

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

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, скайп, слать емайлы, пытаться писать в приват. Спасибо за понимание. Please do not PM, ICQ, Skype or email me for support help - you won't get any reply. If you have a question or issue, post it in the appropriate forum/topic. Thanks!
Back to topOffline View user's profile Visit poster's website Skype Name
Alexander Runov Gender:Male

Забанен


Joined: 13 Feb 2014
Show/Hide

Спасибо большое за информацию. Сижу разбираюсь =).
Back to top View user's profile
Андрей_1982 Gender:Male

Забанен


Joined: 17 Jul 2014
Show/Hide

Спасибо за информацию! Сделал внешнюю печатную форму для ЗУП 3.0 - как передать параметр "ПроверкаПроведенияПередПечатью" в значение ложь, чтобы иметь возможность печатать из документа без его проведения
Back to top View user's profile
Sergey Gender:Male


Местный босс - администратор


Joined: 06 Jan 2005
Show/Hide

Кидаете на форму булев реквизит ПроверкаПроведенияПередПечатью, в модуле формы "Форма" перед фрагментом
Code:
    Отказ = Ложь;
    //Проверка на релиз БСП для универсальности. 
    //Если необходимо печатать из непроведённых документов, удалите этот фрагмент 

добавляете
Code:
    Если ПроверятьПроведенностьДокумента Тогда
        СтандартнаяОбработка = Истина;
    КонецЕсли; 


В конце процедуры ВыполнитьОткрытиеПечатнойФормы(Команда) можно написать
Code:
    Если Отказ Тогда
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Есть непроведённые документы!'"));
    КонецЕсли; 

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, скайп, слать емайлы, пытаться писать в приват. Спасибо за понимание. Please do not PM, ICQ, Skype or email me for support help - you won't get any reply. If you have a question or issue, post it in the appropriate forum/topic. Thanks!
Back to topOffline View user's profile Visit poster's website Skype Name
Андрей_1982 Gender:Male

Забанен


Joined: 17 Jul 2014
Show/Hide

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

Добавлено спустя 18 минут 11 секунд:

Вот, например простая внешняя печатная форма для ЗУП 3.0.16.32
cloud.mail.ru/pub.....%D0%B8.epf

Пробуем печатать по кнопке Печать из непроведенного документа
Back to top View user's profile
Павел2104 Gender:Male

Постоянный клиент


Joined: 27 Sep 2014
Show/Hide

Спасибо за подробное описание.
Back to topOffline View user's profile
Евгения2015 Gender:Female

Гостья


Joined: 12 Jan 2015
Show/Hide

Спасибо! Теперь вот сижу - разбираюсь)
Back to topOffline View user's profile
Display posts from previous:   

Summary Rating For >> Передача параметров / значений во внешнюю печатную форму для конфигураций на БСП (1С:Предприятие 8.2/8.3)
Average Rating: 5.00 :: Min Rating: 5 :: Max Rating: 5 :: Number of Ratings: 9
Choose Rating: 1   2   3   4   5  


Similar Topics
Topic Author Forum Replies Last Post
No new posts Товарный чек с гарантийным сертификатом (талоном) - внешняя печатная форма для Управление То...
Обработка (управляемое приложение, внешняя печатная форма)
Внешняя печатная форма товарного чека и гарантийного талона для документов чек ККМ, реализация товаров/услуг, расходный ордер на товары. Предназначена в основном для торговых организаций (магазинов, интернет-магазинов),
Sergey 1Сv8: Программирование, отчёты, обработки, статьи 94 Mon 23 Oct, 2017 13:50 View latest post
ИринаХ
No new posts Списание недостач товаров с ценами - внешняя печатная форма для Управление Торговлей 11
Обработка (управляемое приложение, внешняя печатная форма)
Внешняя печатная форма для документа Списание недостач товаров. Предназначена в основном для организаций розничной торговли, ведущих учет товаров по учетным ценам. Изменения в форме: в форму Акт о списании товаров
Sergey 1Сv8: Программирование, отчёты, обработки, статьи 0 Wed 11 Sep, 2013 11:41 View latest post
Sergey
No new posts Расчет предполагаемой прибыли по документу - внешняя печатная форма для Управление Торговлей 11
Обработка (управляемое приложение, внешняя печатная форма)
Предназначена для документов Реализация товаров/услуг и Заказ клиента. Выводит данные о расчетной прибыли и проценте наценки (эффективности затрат) по позициям номенклатуры и в общем по документу. Показатели прибыли и
Sergey 1Сv8: Программирование, отчёты, обработки, статьи 1 Fri 29 Aug, 2014 09:58 View latest post
Андрей_Нск
No new posts Товарный чек - внешняя печатная форма для Управление Торговлей 11, УНФ 1.2, Розница 2
Обработка (управляемое приложение, внешняя печатная форма)
Доработанная типовая форма товарного чека документа Чек ККМ. Содержит также форму для тестирования вывода на печать в режиме управляемого приложения. Для регистрации/обновления в справочнике Дополнительные обработки
Sergey 1Сv8: Программирование, отчёты, обработки, статьи 44 Tue 15 Aug, 2017 11:28 View latest post
Алекс_лип
No new posts Приходная накладная - внешняя печатная форма поступление товаров/услуг для Управление Торгов...
Обработка (обычное приложение, внешняя печатная форма)
Печатная форма для документа Поступление товаров/услуг. Изменения в форме: Вывод текущих остатков номенклатуры на складе, указанном в документе. Вывод прежней цены и даты последнего поступления номенклатуры (из регистра
Sergey 1Сv8: Программирование, отчёты, обработки, статьи 0 Sun 20 Apr, 2014 18:27 View latest post
Sergey






All times are UTC + 3 hours
Users browsing this topic:
Registered Users: None

Jump to:   
printer-friendly view
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum
/a
Username:

Password:

Log me on automatically each visit
  Яндекс.Метрика
CrackerTracker © 2004 - 2018 CBACK.de