1с внешняя печатная форма с выбором параметров
Механизм создания печатных форм в управляемом приложении значительно отличается от создания в обычном приложении. В управляемом и в обычном приложении сначала нужно создать Внешнюю обработку. В управляемом приложении, кроме экспортной функции Печать() необходимо создать экспортную функцию СведенияОВнешнейОбработке(). Обе этих функции должны располагаться в модуле объекта обработки.
Экспортная функция "СведенияОВнешнейОбработке()"
- Вид - ПечатнаяФорма
- Назначение - массив объектов для которых предназначена обработка
- Наименование - имя для регистрации в справочнике внешних обработок
- Версия - для удобства версирования обработок (1.0, 1.1, и т.д.)
- БезопасныйРежим - в безопасном режиме не доступна COM технология, загрузка внешних компонент, доступ к файловой системе, доступ к Интернету.
- Информация - описание внешней обработки
- Команды - таблица значений содержит команды
- Представление - имя кнопки в меню печати
- Идентификатор - уникальный идентификатор команды
- Использование - ВызовСерверногоМетода или ВызовКлиентскогоМетода
- ПоказыватьОповещение - вывод оповещения при печати
- Модификатор - для печатных форм задаётся значение "ПечатьMXL"
Экспортная функция "Печать()"
Если параметр "Использование" установлен в значение "ВызовСерверногоМетода", то обязательная экспортная функция Печать() должна располагаться в модуле обработки и выполняться на стороне сервера.
Если параметр "Использование" установлен в значение "ВызовКлиентскогоМетода", то обязательная экспортная функция Печать() должна располагаться в модуле основной формы обработки и выполняться на стороне клиента.
- МассивОбъектов - массив ссылок на объекты печати
- КоллекцияПечатныхФорм - таблица значений сформированных документов для печати
- ОбъектыПечати - список значений, значение содержит ссылку на объект, а представление содержит имя области печати объекта
- ПараметрыВывода - дополнительные параметры для печати
Внешние обработки и отчеты в типовых конфигурациях подключаются в режиме 1С:Предприятие. Подключение печатных форм в управляемом приложении для различных типовых конфигурациях похоже.
Комментарии (0)
Иногда пользователям необходимо печатать отчет с определенными данными и такие данные могут меняться, поэтому было бы логичнее создать форму ввода параметров для печатной формы, чтобы не тревожить программиста по пустякам)) Вот хочу показать небольшой пример как я вывела на печатную форму свой параметр "Название печатной формы", вообще в параметры можно добавлять что угодно, но проще для меня вывести обычную строку для примера:).
Итак, что мы делаем:
1. Создаем новую внешнюю обработку и указываем сведения в модуле объекта:
Также в модуле объекта пишем две процедуры:
2. Переходим к созданию основной формы обработки, она нам понадобится только для исполнения процедур:
- Добавим параметры к форме, обязательно в свойствах параметров указать "Ключевой параметр", после этого параметры выделятся жирным шрифтом
- В модуле основной формы пишем следующий код:
- Создаем еще одну форму, и назовем ее "ФормаВвода", разместим на ней реквизит "НазваниеПечатнойФормы":
- И на команду "Печать" добавим следующий код:
Данная печатная форма тестировалась в конфигурации 1с Бухгалтерия предприятия 3.0 (8.3.10.2561).
Специальные предложения
А теперь получилось. В заблуждение ввело то, что название формы совпало с названием параметра:
РегистрационныеДанные.Вставить("Вид", "ПечатнаяФорма");
Обратите на это внимание.
У меня из-за этой строки
ОбъектыНазначения.Добавить(Результат);
вылезла ошибка
"Метод объекта не обнаружен (Метаданные)".
Это лишняя строка, её можно просто убрать.
За примеры кода огромное спасибо.
"МассивОбъектов" внешней печатной формы хранит ссылки на объекты печати.
Теперь он хранит дополнительные параметры формы ввода.
Как теперь получить в модуле объекта "Массив объектов" т.е. и новые параметры формы ввода и массив объектов печсати ))) ?!
В основной форме добавляем в параметры формы "ОбъектыНазначенияМассив":
В форме ввода добавляем процедуру "ПриСозданииНаСервере" в которой принимаем "ОбъектыНазначенияМассив" :
Далее передаем все параметры формы ввода и наш массив ссылок в процедуру печати модуля объекта.
(11) Не совсем понял как можно в параметры засунуть массив: мне выдает: Тип "Массив" не может использоваться в данных формы
(11) Как вы это сделали, никак не получается получить параметры в модуле объекта, тем более без отладки
Можете пояснить как это сделать? Тоже не понял как
(14) Например, так:
В процедуру ПечатьЗавершение после строки
ОбъектыНазначения = Новый Массив;
добавить свои передаваемые параметры:
ДополнительныеПараметры = Новый Структура;
//Значения для передачи
ДополнительныеПараметры.Вставить("МойПараметр1", ЗначениеМоегоПараметра1);
ДополнительныеПараметры.Вставить("МойПараметр2", ЗначениеМоегоПараметра2);
А в модуле обработки в процедуре ПечатьМакета это будет первый элемент массива МассивОбъектов
В этой статье ( МассивОбъектов[0].НазваниеПечатнойФормы;) это в строке:
ОбластьМакета.Параметры.НазваниеПечатнойФормы = МассивОбъектов[0].НазваниеПечатнойФормы;
У меня уже была процедура заполнения макета с использованием «изначального» первого элемента этого массива, чтобы сделать "быстро и тупо", сделала так:
МойПарам1 = МассивОбъектов[0]. МойПараметр1;
МассивОбъектов.Удалить(0);
(16) Спасибо огромное мил человку, наконецто получилось! Без отладки не понимал как формировались параметры
Здравствуйте, не понимаю в какой момент происходит формирование печатной формы в модуле объекта обработки, в какой момент алгоритм туда заходит, объясните кто-нибудь пожалуйста, ?
Что мог сделать не так, что не выходит форма с параметрами, а сразу выходит печатная форма. Все сделал точно по статье.
Просмотры 32563
Загрузки 132
Рейтинг 63
Создание 23.03.18 20:58
Обновление 01.04.18 12:17
№ Публикации 804832
Конфигурация Конфигурации 1cv8
Операционная система Не имеет значения
Страна Россия
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)
Код открыт Да
Курс представляет собой отработанные и проверенные личным опытом основателей Школы инструменты решения вопросов с подчиненными, коллегами, заказчиком и руководством.
См. также
Запуск фонового задания во внешней обработке без регистрации в справочнике "Дополнительные отчеты и обработки"
Описал, как показать прогресс выполнения длительной операции во внешней обработке, и при этом не регистрировать обработку в справочнике "ДополнительныеОтчетыИОбработки". Проверял на БСП версии "3.1.2.264".
1 стартмани
09.03.2020 9469 VinnieThePOOH 6
Акт о передаче в производство (вводе в эксплуатацию) малоценных предметов к документу Требование-накладная
Дополнительная печатная форма "Акт о передаче в производство (вводе в эксплуатацию) малоценных предметов " к документу "Требование накладная". БП 3.0
1 стартмани
27.02.2019 5387 4 xxl_1 0
Сортировка метаданных с учетом объектов на замке
Порой одна конфигурация находится на поддержке нескольких поставщиков (со своими префиксами). Зачастую при обновлении отдельных поставок происходит "перемешивание" объектов с различными префиксами. Работать с такой конфигурацией не очень удобно, но есть способ для сортировки метаданных (в том числе объектов на замке), а также быстрого восстановления сортировки, если случайно очередное обновление было выполнено с взятием порядка метаданных из файла (которое устанавливается по умолчанию).
1 стартмани
16.08.2018 4440 Olenevod 1
Заполнение документа Word без ComОбъект
Идея написать публикацию пришла после прочтения очередного рассказа о том, как файл Word заполнялся через COM-объект в клиент-серверном варианте. При этом падал Сервер 1С. Зачем в принципе использовать файлы Word как шаблоны? Ну, допустим, в организации используется некая внутренняя отчетность, выполнения в корпоративном стиле, и переделать ее на привычные табличные документы нет возможности.
1 стартмани
08.07.2018 19165 nbeliaev 32
Создание мульти-базовых отчетов. Все, что вы хотели об этом знать
В статье описано создание отчета по данным из клиент-серверных баз кластера 1С. Подключение к базам осуществляется через com-соединение. В качестве примера создается отчет «Права доступа мульти-базовый», который оформлен в виде внешнего отчета с двумя вариантами выполнения. Для построения собственного отчета на базе описанного достаточно будет изменить функции «ПолучитьТекстЗапроса», в модуле объекта отчета и построить свой макет запроса. Также описан код вызова отчета путем нажатия кнопки с передачей параметров в макет запроса и форму отчета. Описание примера отчета показывает, что создание отчетов по нескольким базам данных в 1С, не является сверхсложной задачей и достигается простыми методами
1 стартмани
23.03.2018 11158 IVC_goal 3
«Танкистам» 8.2 (ч.2)
продолжении освоения 8.2 здесь только текст. Файл с текстом и картинками добавлен ниже
В некоторых случаях перед печатью документа требуется вручную указать какие-либо значения или параметры и передать в процедуру Печать() обработки. Для конфигураций линии УТ 10.3, БП 2.0 есть возможность передачи параметров, а также возможность без особых ухищрений вызвать форму обработки перед печатью с последующим выводом результата печати в штатное окно. В конфигурациях на основе Библиотеки стандартных процедур (Управление торговлей 11, Розница 2, УНФ, Бухгалтерия предприятия 3 и прочие) предусмотрены способы вызова команды печати в виде "ОткрытиеФормы" или "ВызовКлиентскогоМетода", но в этом случае вывод сформированного табличного документа необходимо реализовывать самостоятельно.
Рассмотрим один из способов передачи параметров для печати, не претендующий на оригинальность, так как используются штатные процедуры БСП.
В качестве примера выбрана печать простой накладной для УТ 11.0.9.15 - УТ 11.3 с возможностью печати со скидками или без них.
Создадим внешнюю обработку с основной формой "Форма" и реквизитом, например, "ПечататьСкидки", значение которого требуется передать в процедуру Печать() модуля обработки.
На вкладке "Параметры" укажем ключевые параметры "ДополнительнаяОбработкаСсылка" тип "СправочникСсылка.ДополнительныеОтчетыИОбработки", "ИдентификаторКоманды" тип "Строка", "ИмяФормы" тип "Строка", "ОбъектыНазначения" тип "Произвольный" (см. скриншот). Эти параметры передаются в обработку из конфигурации, а именно из диалога выбора внешних печатных форм, ключевыми в нашем случае они сделаны для упрощения обработки.
Далее определяем команду для печати или вывода печатной формы, навешиваем кнопку на форму.
Присваиваем команде обработчик действия (код следует поместить в модуль формы)
В модуле обработки создаём экспортную процедуру Печать(), с параметрами согласно стандартам БСП для печати с использованием серверной процедуры примерно такого вида
Реализация функции СформироватьПечатнуюФормуНакладная() зависит от конкретной задачи и здесь не рассматривается.
В экспортной функции СведенияОВнешнейОбработке() необходимо указать использование команды печати "ОткрытиеФормы" с модификатором "ПечатьMXL".
Подробнее смотрите статью Внешние обработки и отчеты 1С:Предприятие 8.2 или прилагаемый пример обработки.
Если всё сделано правильно, после регистрации внешней печатной формы в справочнике "ДополнительныеОбработки" она будет доступна из формы списка или документа в меню "Дополнительные печатные формы". После выбора из списка ВПФ на экране появится форма обработки.
Всё описанное выше изложено и прокомментировано в прилагаемой обработке.
Специальные предложения
Бухгалтерия предприятия, редакция 3.0 (3.0.26.11)
Результат работы, ошибка:
(1) Добавил печатную форму с выбором для Бухгалтерии предприятия 3.0. Ссылку найдёте в описании. Учитесь.
Небольшие изменения в обработке для БСП недавних релизов.
А что за изменения, а то моя обработка вдруг перестала работать
выдает ошибку МЕТОД ОБЪЕКТА НЕ ОБНАРУЖЕН (МЕТАДАННЫЕ)
(7) Одноэсники через одного дятлы, точнее из трёх два дятла. И вот почему - что за обработка, какая конфигурация, типа протелепатируй, мне лень писать.
Короче, разбирайся сам как знаешь. Приложенная ВПФ нормально работает в Управление торговлей 11.0.9 - 11.1.4.
Большое спасибо за подсказанную методику по использованию общей формы ПечатьДокументов. У меня как раз с этим был затык, открытие формы для ввода параметров делается без проблем просто в описании сведений о внешней обработке
Поручик, спасибо большое за классную инструкцию. Хотелось бы уточнить:
1. Где можно почитать мануал про БСП, на ИТС разбирался с данной обработкой печати - ни хорошего примера, нифига не нашел.
2. Как отлаживать такую обработку?
(12) davdykin, (12) davdykin, найти то в закрытке на ИТС, но там паролик нужен. Отдельно то конфигурация БСП поставляется как демка, но она, как и вся документация больше разработчикам в крупных фирмах нужна, где есть корпоративные стандарты.
И это только для разработчиков новых конфигураций. Все равно подстраиваться приходится под то что есть.
Для конфигураций линии УТ 10.3, БП 2.0 есть возможность передачи параметров, а также возможность без особых ухищрений вызвать форму обработки перед печатью с последующим выводом результата печати в штатное окно.
вот только никто не использует :(
В отраслевом ВДГБ Ломбард столкнулся. Печатные формы реализованы в виде отчета в конфигурации. Чтоб не передавать параметры (или, вернее чтоб передать параметр-объект документа, для вызова его (ДокументОбъекта) методов:
А уже от нажатой кнопки и как параметра "галочки" зависит вариант печати. Такой вот "штатный" механизм передачи параметров.
Все верно. Кроме как таких "танцев с бубном" передать в обработку печати свое значение невозможно.
Почему в БСП процедура написана таким образом? Что мешает добавить еще один параметр для передачи произвольных значений в эту процедуру. Непонятно.
Если бы в процедуре печати была доступна ссылка на внешнюю обработку (справочник "ДополнительныеВнешниеОтчетыИОбработки"), то это облегчило бы жизнь.
Иногда бывает нужно печатать с доп.параметрами, но при этом не открывать предварительно диалоговое окно. Классический пример - печатная форма с какими-нибудь ответственными или должностями, которые меняются время от времени, но не часто. Вбивать их в макет - тупо, показывать каждый раз при печати тоже не айс.
Я использовал такой метод: сделал две команды печати, одна команда печатной формы - для настройки параметров печати, вторая команда - для печати с уже настроенными ранее параметрами.
Форма для настройки параметров открывается и сохраняет значения в реквизит "ХранилищеНастроек" справочника "ДополнительныеВнешниеОтчетыИОбработки".
Вторая команда (печать с готовыми настройками) при открытии имея ссылку на справочник "ДополнительныеВнешниеОтчетыИОбработки" читает сохраненные настройки и сразу уходит на печать не открывая форму.
Единственный недостаток такого метода - видимость двух команд печати в списке команд (с открытием формы и без). Победить можно, но это предмет отдельного поста, пожалуй.
При запуске печатной формы такие проблемы:
: Поле объекта не обнаружено (БезопасныйРежим)
ВнешняяОбработкаОбъект = ПолучитьОбъектВнешнейОбработки(ИсточникДанных, ПараметрыИсточника.БезопасныйРежим);
Подскажите пжл куда копать?
обработка - "Расходная накладная с диалогом выбора" (параметры в печатную форму передать нужно)
конфигурация - УТ11.0.6.9 платформа 8.3.5.1383
При выборе печатной формы с документа происходит открытие диалогового окна, после нажатия "печать" вываливается в данную ошибку.
А можно ли как-нибудь реализовать печать с выводом диалоговой формы при печати комплекта? Команда печати комплекта отличается от команды печати отдельной формы тем, что комплект подготавливается полностью серверной процедурой.
Имеется ввиду комплект, настраиваемый через форму "НастройкаПечатиКомплекта". Готовый комплект (список форм и их количество) печатаются модулем менеджера регистра НастройкаПечатиОбъектов (процедура СформироватьКомплектВнешнихПечатныхФорм). Я не знаю как вызвать форму (причем логично и удобней) один раз для всего комплекта. (это где то в БСП 2.1.9)
Работает ли подобный код в Бухгалтерии предприятия 3.0?
У меня возникает ошибка "Поле объекта не обнаружено(ИдентификаторКоманды)"
(29) С чего она у тебя возникает? Скачай обработку для БП 3.0 и сделай по образцу. Предварительно вкурись в матчасть.
Отличная статья. Можно еще ВызовКлиентскогоМетода вместо ОткрытиеФормы опробывать, все равно в итоге общая форма .печатьдокументов вызывается.
Разобрался. При вызове общей формы "ПечатьДокументов" в качестве "ПараметрыОткрытия.ИсточникДанных" передал Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию(Моя_ВПФ).
Очень интересная и разжеванная статья!
Подскажите как модуле формы обработки можно получить ссылку на документ? Мне необходимо вывести для пользователя некоторые реквизиты из документа.
Передо мной стояла аналогичная задача и я решил её таким же способом — посредством передачи параметра в первом элементе массива ОбъектыНазначения. Решение не очень красивое, но работает и альтернативы ему я не вижу. Жаль что 1С не предоставила удобного механизма решения этой задачи.
Добрый вечер!
Подскажите пожалуйста: у вас в форме обработки есть реквизит ТаблицаНоменклатуры, в которую попадает номенклатура из документа, и можно установить пометку. А как сделать так, чтоб в печатную форму попадала только помеченная номенклатура? У меня аналогичная задача. С обычными реквизитами все ок, а вот с тз что-то никак (((
Использовал Вызов клиентского метода. В форме обработки в процедуре Печать(ИдентификаторКоманды,ОбъектыНазначения) Экспорт
У меня была задача перед выполнением печати открыть форму внешней печатной формы,
там указать дополнительные параметры и потом только печатать.
Для этого в форме создала параметр "ОбъектыНазначения" тип Произвольный и обязательно галочку "Ключевой параметр"
иначе при открытии формы этот параметр не заполняется
Затем в процедуре НаКлиенте ПриОткрытииФормы добавила ваш текст
СтандартнаяОбработка = Истина;
//Проверка на релиз БСП для универсальности.
//Общий модуль ДополнительныеОтчетыИОбработкиКлиентПереопределяемый существует в версии БСП выше 2.0.1.19
Если ЕстьОбщийМодуль("ДополнительныеОтчетыИОбработкиКлиентПереопределяемый") Тогда
Выполнить("ДополнительныеОтчетыИОбработкиКлиентПереопределяемый.ПередВыполнениемКомандыПечатиВнешнейПечатнойФормы(ВыполняемаяКоманда.ОбъектыНазначения, СтандартнаяОбработка);");
Попытка
Для Каждого ОбъектНазначения Из Параметры.ОбъектыНазначения Цикл
Объект.ДокСпр = ОбъектНазначения;
Сообщить(ОбъектНазначения);
Сообщить(ТипЗнч(ОбъектНазначения));
КонецЦикла;
Исключение
КонецПопытки;
КонецЕсли;
потом в процедуры формы
&НаКлиенте
Процедура ПечатьТЧ(Команда)
ТабДок = Новый ТабличныйДокумент;
СтекОповещений = Новый Массив;
ПечатьФормыНаСервере(ТабДок);
ТабДок.ТолькоПросмотр = Истина;
ТабДок.Показать("Печать ТЧ");
КонецПроцедуры
КоллекцияПечатныхФорм = Новый ТаблицаЗначений;
КоллекцияПечатныхФорм.Колонки.Добавить("ТабличныйДокумент");
КоллекцияПечатныхФорм.Колонки.Добавить("ИмяМакета");
КоллекцияПечатныхФорм.Колонки.Добавить("ИмяВРЕГ");
КоллекцияПечатныхФорм.Колонки.Добавить("СинонимМакета");
КоллекцияПечатныхФорм.Колонки.Добавить("Экземпляров");
СтрокаП = КоллекцияПечатныхФорм.Добавить();
СтрокаП.ИмяМакета = "ПечатьТЧ";
СтрокаП.ИмяВРЕГ = ВРег("ПечатьТЧ");
СтрокаП.Экземпляров = 1;
СтрокаП.СинонимМакета = "Печать ТЧ";
ОбъектыПечати = Новый Структура;
ПараметрыВывода = Новый Структура;
ЭтотОбъектВПФ.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
ТабДок = КоллекцияПечатныхФорм[0].ТабличныйДокумент;
КОнецПРоцедуры
Плюс в модуле объекта
Функция СведенияОВнешнейОбработке() Экспорт
.
НоваяКоманда.Использование = "ОткрытиеФормы";
.
КонецФункции
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
.
КонецПроцедуры
Все благодаря Вашим подробным объяснениям получилось и открыть форму и в форме печать МассивОбъектов сохранить
Спасибо!
В статье будет широко рассмотрен вопрос создания внешней печатной формы под управляемым приложением с возможностью передачи параметров. Предложено два способа распечатать ВПФ и передать в нее нужные параметры.
В комментариях к предыдущей моей статье были просьбы описать создание внешней печатной формы с возможностью ввода параметров. В тех же комментариях была ссылка на статью, где предлагался один из методов решения проблемы. В этой статье будет рассмотрено два других способа создать печатную форму с возможностью ввода доп.параметров, расположены они будут по сложности, начиная с самого простого.
Статья отображает частное мнение автора по данному вопросу и не претендует на истину в последней инстанции. Поэтому если кто-то может предложить иные способы решения данной проблемы, можете писать их в комментах)
Видеоверсию данной статьи можете посмотреть тут: СчетНаОплатуПокупателюВнешний.e pf из предыдущей моей статьи. Добавим реквизит обработки: Комментарий, тип строка(100).
Добавим форму обработки, на которой разместим данный реквизит, разместим кнопку «Печать» и создадим команду формы «Печать»
Также у формы создадим параметр «ОбъектыНазначения» тип«Произвольный» (сделайте его ключевым)
Поясню, при открытии формы, в этот параметр будут записаны все объекты, для которых открывается данная печатная форма.
Теперь перейдем в модуль формы и создадим на сервере Функцию ПечатьСерверная .
&НаСервере
Функция ПечатьСерверная ()
КонецФункции
&НаКлиенте
Процедура Печать ( Команда )
В функции ПечатьСерверная , создадим переменную МассивДокументов , в которую запишем параметр ОбъектыНазаначения .
МассивДокументов = Параметры . ОбъектыНазначения ;
Получим объект обработки.
ЭтотОбъектОбработка = РеквизитФормыВЗначение ("Объект");
Теперь перейдем в модуль обработки. И внесем кое какие изменения в уже написанный код.
Первым шагом, в функции СведенияОВнешнейОбработке() , в вызове процедуре ДобавитьКоманду исправим четвертый параметр – Использование,на « ОткрытиеФормы ». Я не буду пояснять что значит данный параметр, кому непонятно можете посмотреть предыдущую статью (ссылка). Также я поменяю второй параметр, что бы удобнее было отличать формы.
ДобавитьКоманду ( Команды ,"Счет на оплату (внешняя печатная формас выводом формы)",
"СчетНаОплатуВнешний",
"ОткрытиеФормы",
Ложь,
"ПечатьMXL");
Теперь перейдем в процедуру Печать, сделаем функцией, и оставим только первый параметр МассивОбъектов
Функция Печать ( МассивОбъектов ) Экспорт
ПараметрыВывода . ДоступнаПечатьПоКомплектно = Истина ;
Если УправлениеПечатью . НужноПечататьМакет ( КоллекцияПечатныхФорм , "СчетНаОплатуВнешний") Тогда
ТаблицаСведенийСчетНаОплату = ПолучитьТаблицуСведенийСчетаНаОплату ( МассивОбъектов );
УправлениеПечатью . ВывестиТабличныйДокументВКоллекцию ( КоллекцияПечатныхФорм , "СчетНаОплатуВнешний", "Счет на оплату",
ПечатьСчетаНаОплату ( ТаблицаСведенийСчетНаОплату , ОбъектыПечати ),,"ПФ_MXL_СчетЗаказ");
КонецЕсли;
ОбщегоНазначенияБП . ЗаполнитьДополнительныеПараметрыПечати ( МассивОбъектов , КоллекцияПечатныхФорм , ОбъектыПечати , ПараметрыВывода );
КонецФункции
Смотрим на тело функции, тот код который там написан в нашем случае не применим. Поэтому мы вычистим ее, оставив только код, с помощью которого можно получить табличный документ это функция ПолучитьТаблицуСведенийСчетаНаОплатуи функция ПечатьСчетаНаОплату, функция ПечатьСчетаНаОплату возвращает табличный документ.
Должен получиться следующий код:
Функция Печать ( МассивОбъектов ) Экспорт
ТаблицаСведенийСчетНаОплату = ПолучитьТаблицуСведенийСчетаНаОплату ( МассивОбъектов );
ТабДок = ПечатьСчетаНаОплату ( ТаблицаСведенийСчетНаОплату , ОбъектыПечати );
Поскольку параметр объекты печати является списком значений,содержащим распечатываемые документ(справочники), то создадим данный список, и заполним его объектами из массива и возвратим табличный документ.
Функция Печать ( МассивОбъектов ) Экспорт
ТаблицаСведенийСчетНаОплату = ПолучитьТаблицуСведенийСчетаНаОплату ( МассивОбъектов );
ОбъектыПечати = Новый СписокЗначений ;
ОбъектыПечати . ЗагрузитьЗначения ( МассивОбъектов );
ТабДок = ПечатьСчетаНаОплату ( ТаблицаСведенийСчетНаОплату , ОбъектыПечати );
Возврат ТабДок ;
КонецФункции
Теперь изменим макет, добавив комментарий в подвал счета.
Осталось в функции ПечатьСчетаНаОплату у соответствующей области макета соответствующему параметру присвоить реквизит обработки Комментарий .
ОбластьМакета . Параметры . Комментарий = Комментарий ;
Обращаю ваше внимание, у других конфигураций и других объектов могу быть иные процедуры формирования табличного документа, чем те которые приведены в примере, в данной статья показан общий механизм.
Заканчиваем работу с модулем обработки и переходим в модуль формы. В функцию ПечатьСерверная()
В этой функции мы уже получили объект обработки, теперь вызовем экспортную функции объекта Печать() , которая возвращает табличный документ. В данную функцию мы передадим МассивОбъектов . Пусть функция ПечатьСерверная() возвращает табличный документ, который был создан функций Печать() .
ТабДок = ЭтотОбъектОбработка . Печать ( МассивДокументов );
Возврат ТабДок ;
КонецФункции
Вызовем функцию ПечатьСерверная на клиенте, и покажем сформированный табличный документ.
Сохраняем печатную форму и добавляем в дополнительные отчеты и обработки конфигурации.
Перейдем в документ, выберем данную печатную форму.
Выйдет форма, в которой мы заполним поле комментарий.
Нажимаем печать и выходит табличный документ.
Возможно многих и устроит подобный вариант выхода печатной формы. Кто же хочет, что бы выходила типовая форма.
То изучайте вторую и третью часть этой статьи.
Второй метод. Использованиедополнительных сведений документа.
У всех конфигурации, разработанных при использованииБСП, почти у каждого документа есть интерфейсдополнительных сведений, в которые пользователь может вносить любую информацию(причем даже тогда, когда документ закрыт на редактирование). В эти сведения можно записывать дополнительнуюинформацию, которая требуется в печатной форме. Сейчас мы в демо конфигурации1С Бухгалтерия предприятия 3.0 Базовая создадим новое дополнительное сведение для документа СчетНаОплатуПокупателю , назовемего КомментарийДополнительный , тип Строка(100).
Для этого заходим в список счетов на оплату покупателю инажимаем кнопку дополнительные сведения
Откроется форма Дополнительных сведений, пока она пустая,т.к. нет ни каких сведений привязанных к данному документу.
Что бы создать их заходим в Все действия – Изменить составдополнительных сведений.
Откроется форма дополнительных сведений, в которой нажимаемна кнопку Создать , после появится форма нового дополнительного сведения.
Пишем наименование КомментарийДополнительный, тип значениявыбираем строка. И записываем новое дополнительное сведение.
Все оно создано, и появится в списке дополнительных сведений документа Счет наоплату покупателю. Запишем в него какой-нибудь комментарий, и сохраним.
Теперь нам осталось узнать под каким именем данноедополнительное сведение сохранилось в плане видов характеристик « Дополнительные реквизиты и сведения ».
Зайдем в него через меню «Все функции».
Название выделенное на рисунке и есть полное название вновьсозданного дополнительного сведения «КомментарийДополнительный (Счет на оплатупокупателю)» . Запомните его илисохраните куда-нибудь.
Все. Все необходимые приготовления мы сделали, теперьперейдем к написанию обработки, которая будет подставлять в комментарийзначение данного дополнительного сведенья.
Как и в предыдущей части, за основу мы будем брать обработкуиз моей предыдущей статьи.
Исправим в процедуре сведения СведенияОВнешнейОбработке() наименование параметра регистрации и представление команды, что бы можно былоотличить нашу новую обработку.
Функция СведенияОВнешнейОбработке () экспорт
ПараметрыРегистрации = Новый Структура ;
ПараметрыРегистрации . Вставить ("Вид", "ПечатнаяФорма");
ПараметрыРегистрации . Вставить ("Назначение", ПолучитьНазначениеОбработки ());
ПараметрыРегистрации . Вставить ("Наименование", "Счет на оплату ВНЕШНИЙДОП СВЕДЕНИЯ");
ПараметрыРегистрации . Вставить ("Версия", "1.0");
ПараметрыРегистрации . Вставить ("Информация", "Счет на оплату (внешняяпечатная форма)");
ПараметрыРегистрации . Вставить ("БезопасныйРежим",Истина);
ДобавитьКоманду ( Команды ,"Счет на оплату (внешняя печатная формас исп. доп. сведений)",
"СчетНаОплатуВнешний",
"ВызовСерверногоМетода",
Ложь,
"ПечатьMXL");
ПараметрыРегистрации . Вставить ("Команды", Команды );
Возврат ПараметрыРегистрации ;
Теперь создадим функцию, которая получает по ссылке надокумент, и по ссылке на доп сведение значения. Кто не знает, поясню, чтозначения доп сведений в БСП хранятся в регистре сведений «ДополнительныеСведения»
Где в измерении Объект хранится ссылка на документ, визмерении Свойство – ссылка на план видов характеристик Дополнительные сведенияи реквизиты, а в ресурсе Значение – значение данного сведения для данногодокумента.
Посмотрите на состав регистра в нашем случае.
Поэтому создадим функцию в которую будем передавать массивдокументов и массив дополнительных сведений, а возвращать она будетсоответствующую выгрузку запроса.
Функция ПолучитьДопСведения ( Знач МассивДокументов , Знач МассивДопСведений )
Запрос = Новый Запрос ;
Запрос . Текст color: black;">
| ДополнительныеСведения.Объект КАК Документ,
| ДополнительныеСведения.Свойство КАК ДопСведение,
| ДополнительныеСведения.Значение
|ИЗ
| РегистрСведений.ДополнительныеСведения КАКДополнительныеСведения
|ГДЕ
| ДополнительныеСведения.Объект В(&Объект)
| И ДополнительныеСведения.СвойствоВ(&Свойство)" ;
Запрос . УстановитьПараметр ("Объект", МассивДокументов );
Запрос . УстановитьПараметр ("Свойство", МассивДопСведений );
Возврат запрос . Выполнить (). Выгрузить ();
Теперь, перейдем в процедуру печать . В этой процедуре впервых строках кода нам нужно создать массив доп сведений, и получить результатвыполнения вышеприведенной функции.
МассивДопСведений = Новый Массив ;
МассивДопСведений . Добавить ( ПланыВидовХарактеристик . ДополнительныеРеквизитыИСведения . НайтиПоНаименованию ("КомментарийДополнительный (Счет наоплату покупателю)
ТаблицаДопСвойств = ПолучитьДопСведения ( МассивОбъектов , МассивДопСведений );
Поскольку у нас только одно свойство, то и элемент массивабудет один. Если в задаче будет стоять использование нескольких свойств, тонужно соответственно несколько элементов массива. В сам элемент массива записываем ссылку наплан видов характеристик «Дополнительные реквизиты и сведения» , которую мы ищемпо названию, на которое я акцентировал внимание раньше.
Следующим шагом необходимо таблицу значений ТаблицаДопСвойств передать в функцию ПечатьСчетаНаОплату , где мы будем извлекать значения, иподставлять в нужные параметры табличного документа. Добавим у данной функции новый параметр.
Функция ПечатьСчетаНаОплату ( СведенияСчетаНаОплату , ОбъектыПечати , ТаблицаДопСвойств , СПечатью = Ложь) Экспорт
Если УправлениеПечатью . НужноПечататьМакет ( КоллекцияПечатныхФорм , "СчетНаОплатуВнешний") Тогда
ТаблицаСведенийСчетНаОплату = ПолучитьТаблицуСведенийСчетаНаОплату ( МассивОбъектов );
УправлениеПечатью . ВывестиТабличныйДокументВКоллекцию ( КоллекцияПечатныхФорм , "СчетНаОплатуВнешний", "Счет на оплату",
ПечатьСчетаНаОплату ( ТаблицаСведенийСчетНаОплату , ОбъектыПечати , ТаблицаДопСвойств ),,"ПФ_MXL_СчетЗаказ");
КонецЕсли;
Теперь добавим в макет новый параметр «Комментарий»
Найдем в процедуре ПечатьСчетаНаОплату место, где выводитсясоответствующая область в табличный документ, тут все индивидуально и в каждомслучае нужен свой подход. В нашем случае это будет область ПодвалСчета . Найдем вкоде, где она получается и рядом с типовым вводом параметров будем дописыватьобработку.
ОбластьМакета = Макет . ПолучитьОбласть ("ПодвалСчета");
ОбластьМакета . Параметры . ФИОРуководителя = СведенияОДокументе . РуководительФИО ;
ОбластьМакета . Параметры . ФИОБухгалтера = СведенияОДокументе . ГлавныйБухгалтерФИО ;
//Получим значение допсвойство для данного документа внесем изменения в этот участок кода
//конецизменений
ЗаполнитьЗначенияСвойств ( ОбластьМакета . Параметры , СведенияОДокументе );
Первым делом нам необходимо извлечь из таблицы значений ТаблицаДопСвойств значение для распечатываемого документа и нужного дополнительного свойства. Дляэтого получим ссылку на доп. свойства используя наименование, которое мы ужезнаем.
//Получимзначение доп свойства для данного документа
ДопСведение = ПланыВидовХарактеристик . ДополнительныеРеквизитыИСведения . НайтиПоНаименованию ("КомментарийДополнительный (Счет наоплату покупателю)");
//
После этого создаем структуру с полями Документ иДопСведение, в которую вставим ссылку на наш документ и ссылку на найденноедополнительное сведение.
НоваяСтруктура = Новый Структура ;
НоваяСтруктура . Вставить ("Документ", СведенияОДокументе . Документ );
НоваяСтруктура . Вставить ("ДопСведение", ДопСведение );
Ищем в таблице значений ТаблицаДопСвойств строки по данномуотбору.
МассивЗначения = ТаблицаДопСвойств . НайтиСтроки ( НоваяСтруктура );
Проверим, есть ли в полученном массиве записи, и если естьто возьмем первый элемент массива, который будет являться строкой таблицы значений, и получим содержимоеколонки «Значение». Запишем этосодержимое в параметр.
Если МассивЗначения . Количество () <> 0 тогда
ЗначениеДопСведения = МассивЗначения [0]. Значение ;
ОбластьМакета . Параметры . Комментарий = ЗначениеДопСведения ;
КонецЕсли;
Осталось сохранить обработку, добавить ее в дополнительныепечатные формы и посмотреть как выйдет наш счет.
Данным способом можно решить большинство задач где необходимо ввести дополнительные параметры во внешнюю печатную форму. Но если он вас чем-то не устраивает, остается третий способ интерактивным вызовом формы ПечатьДокументов и передачей в нее параметров. Он приведен в комментариях к моей предыдущей статье.
При запуске печатной формы из 1С Предприятия может потребоваться интерактивный выбор каких либо настроек для продолжения печати. Для решения этой задачи необходимо в печатную форму внедрить механизм вывода формы настроек, на которой будут расположены определенные настройки. В типовых конфигурациях, в управляемом приложении печатные формы программируются и подключаются по другому, чем в обычном приложении.
Внешняя печатная форма в управляемом приложении - это обработка, которая содержит в модуле обработки или в основной форме экспортную функцию Печать() и в модуле обработки экспортную функцию СведенияОВнешнейОбработке(). Базовый пример того как сделать внешнюю печатную форму для управляемого приложения. В базовую печатную форму необходимо внести ряд изменений, для того чтобы перед формированием выводилась дополнительная форма настроек.
Обработка для внешней печатной формы
Обработка содержит две формы: ФормаТестов, ФормаНастроек.
В функции СведенияОВнешнейОбработке() для свойства "Использование" нужно установить значение "ВызовКлиентскогоМетода". Это означает, что при запуске печатной формы из 1С Предприятия, будет автоматически запускаться экспортная функция Печать() ИЗ ОСНОВНОЙ ФОРМЫ ОБРАБОТКИ, при этом форма не открывается.
Форма тестов
Так как в свойствах команды было указано "ВызовКлиентскогоМетода", то экспортная функция Печать(), должна быть расположена в модуле основной формы обработки (в данном случае ФормаТестов), сама форма открыта не будет. Но для отладки, печатная форма будет запускаться через главное меню Файл->Открыть. Поэтому предусмотрим на форме тестов команду для вызова экспортной функции Печать().
Форма настроек
На форме настроек расположим несколько полей ввода. Зададим обработчик действия для кнопки "ПродолжитьПечать".
Еще нужно добавить 2 параметра формы: ИдентификаторКоманды, МассивОбъектов, которые передаются при открытии формы. Эти параметры должны быть с признаком Ключевой параметр.
В модуле объекта обработки, разместим экспортную функцию печать, которая занимается формированием табличного документа.
Комментарии (2)
Читайте также: