ООО ЭкоЮнит
FAQПоискПользователиГруппыФайлыВходРегистрацияГлавная
Версия для печати
 
АвторСообщение
Sergey Пол:Муж.


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


Зарегистрирован: 06.01.2005
Показать/Спрятать

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

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

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


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

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


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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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


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

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


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

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


Скачать Расходная накладная для УТ 11.0 с диалогом вы...оваров.epf (27.8 KB). Добавлен/обновлён Пт 29 Авг, 2014 09:49. Скачано 229 раз(а).
Скачивание для зарегистрированных пользователей. Пример обработки с открытием формы и передачей значений для формирования печатной формы. Для УТ 11.0.9.15 - УТ 11.1.6


_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор 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!
ВверхНа форуме нет Профиль Сайт Имя в Skype
cplusmax

Забанен


Зарегистрирован: 19.06.2013
Показать/Спрятать

Скачал обработку, при нажатии на кнопку печать появляется ошибка "Установлен безопасный режим выполнение операции запрещено" и печатная форма не появляется Sad
Вверх Профиль
Sergey Пол:Муж.


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


Зарегистрирован: 06.01.2005
Показать/Спрятать

Версия УТ 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!
ВверхНа форуме нет Профиль Сайт Имя в Skype
Mikhail

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


Зарегистрирован: 28.11.2013
Показать/Спрятать

Сергей, вопрос к вам. У меня есть внешняя обработка печати товарного чека для УТ 11.1. Мне нужно допилить его, чтобы там показывалась сдача. Для этого я приделал форму в которой получаю недостающие данные. Как мне по кнопке печать на новой форме запустить процедуру печати из модуля объекта? Возможно ли это?
ВверхНа форуме нет Профиль
Sergey Пол:Муж.


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


Зарегистрирован: 06.01.2005
Показать/Спрятать

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

Добавлено спустя 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!
ВверхНа форуме нет Профиль Сайт Имя в Skype
Mikhail

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


Зарегистрирован: 28.11.2013
Показать/Спрятать

Sergey, спасибо огромное. Всё получилось. В дальнейшем более подробно проанализирую код.
ВверхНа форуме нет Профиль
Sergey Пол:Муж.


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


Зарегистрирован: 06.01.2005
Показать/Спрятать

В теме 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!
ВверхНа форуме нет Профиль Сайт Имя в Skype
Kirich Пол:Муж.

Забанен


Зарегистрирован: 19.12.2013
Показать/Спрятать

Использовал Ваш пример. Почему я не могу получить значения Реквизитов объекта в модуле объекта моей обработке?
Вверх Всего отзывов: 1 Профиль
Sergey Пол:Муж.


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


Зарегистрирован: 06.01.2005
Показать/Спрятать

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

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор 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!
ВверхНа форуме нет Профиль Сайт Имя в Skype
Alexander Runov Пол:Муж.

Гость


Зарегистрирован: 13.02.2014
Показать/Спрятать

Спасибо большое за информацию. Сижу разбираюсь =).
ВверхНа форуме нет Профиль
Андрей_1982 Пол:Муж.

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


Зарегистрирован: 17.07.2014
Показать/Спрятать

Спасибо за информацию! Сделал внешнюю печатную форму для ЗУП 3.0 - как передать параметр "ПроверкаПроведенияПередПечатью" в значение ложь, чтобы иметь возможность печатать из документа без его проведения
ВверхНа форуме нет Профиль
Sergey Пол:Муж.


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


Зарегистрирован: 06.01.2005
Показать/Спрятать

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

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


В конце процедуры ВыполнитьОткрытиеПечатнойФормы(Команда) можно написать
Код:
    Если Отказ Тогда
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("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!
ВверхНа форуме нет Профиль Сайт Имя в Skype
Андрей_1982 Пол:Муж.

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


Зарегистрирован: 17.07.2014
Показать/Спрятать

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

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

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

Пробуем печатать по кнопке Печать из непроведенного документа
ВверхНа форуме нет Профиль
Павел2104 Пол:Муж.

Участник


Зарегистрирован: 27.09.2014
Показать/Спрятать

Спасибо за подробное описание.
ВверхНа форуме нет Профиль
Показать сообщения:   

Общий рейтинг темы Передача параметров / значений во внешнюю печатную форму для конфигураций на БСП (1С:Предприятие 8.2/8.3)
Средний рейтинг: 5.00 :: Мин. рейтинг: 5 :: Макс. рейтинг: 5 :: Количество оценок: 2
Выберите вашу оценку: 1   2   3   4   5  


Похожие темы
Тема Автор Форум Ответов Посл. сообщение
Нет новых сообщений Списание недостач товаров с ценами - внешняя печатная форма для Управление Торговлей 11
Обработка (управляемое приложение, внешняя печатная форма)
Внешняя печатная форма для документа Списание недостач товаров. Предназначена в основном для организаций розничной торговли, ведущих учет товаров по учетным ценам. Изменения в форме: в форму Акт о списании товаров
Sergey 1Сv8: Программирование, отчёты, обработки, статьи 0 Ср 11 Сен, 2013 11:41 Посмотреть последнее сообщение
Sergey
Нет новых сообщений Расчет предполагаемой прибыли по документу - внешняя печатная форма для Управление Торговлей 11
Обработка (управляемое приложение, внешняя печатная форма)
Предназначена для документов Реализация товаров/услуг и Заказ клиента. Выводит данные о расчетной прибыли и проценте наценки (эффективности затрат) по позициям номенклатуры и в общем по документу. Показатели прибыли и
Sergey 1Сv8: Программирование, отчёты, обработки, статьи 1 Пт 29 Авг, 2014 09:58 Посмотреть последнее сообщение
Андрей_Нск
Нет новых сообщений Товарный чек с гарантийным сертификатом - внешняя печатная форма для Управление Торговлей 11
Обработка (управляемое приложение, внешняя печатная форма)
Внешняя печатная форма товарного чека для документов Чек ККМ, Реализация товаров/услуг. Предназначена в основном для торговых организаций (магазинов, интернет-магазинов), осуществляющих розничную продажу товаров с
Sergey 1Сv8: Программирование, отчёты, обработки, статьи 14 Сб 04 Окт, 2014 12:15 Посмотреть последнее сообщение
Павел2104
Нет новых сообщений Товарный чек - внешняя печатная форма для Управление Торговлей 11, УНФ 1.2, Розница 2
Обработка (управляемое приложение, внешняя печатная форма)
Доработанная типовая форма товарного чека документа Чек ККМ. Содержит также форму для тестирования вывода на печать в режиме управляемого приложения. Для регистрации/обновления в справочнике Дополнительные обработки
Sergey 1Сv8: Программирование, отчёты, обработки, статьи 7 Пн 14 Июл, 2014 13:11 Посмотреть последнее сообщение
Алекс755
Нет новых сообщений Приходная накладная - внешняя печатная форма поступление товаров/услуг для Управление Торгов...
Обработка (обычное приложение, внешняя печатная форма)
Печатная форма для документа Поступление товаров/услуг. Изменения в форме: Вывод текущих остатков номенклатуры на складе, указанном в документе. Вывод прежней цены и даты последнего поступления номенклатуры (из регистра
Sergey 1Сv8: Программирование, отчёты, обработки, статьи 0 Вс 20 Апр, 2014 18:27 Посмотреть последнее сообщение
Sergey






Часовой пояс: UTC + 3 часа
Просматривают тему: гостей: 1
Зарегистрированные пользователи: Нет

Перейти:   
Версия для печати
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы

Имя:

Пароль:

Запомнить
  Яндекс.Метрика
CrackerTracker © 2004 - 2014 CBACK.de