1с переменная не определена формированиепечатныхформ
Здравствуйте! На основании одной из тем в разделе программирования я решила дать немного подробный инструктаж по изготовлению внешних печатных форм для типовых конфигураций.
Если вам нужен макет счета или типового документа, то его можно скопировать из типовой в свою обработку методом: Ctrl+C (Копировать) Ctrl+V(вставить)
По части регистрации внешней печатной формы приведем пример
Внимание: Работаем в модуле объекта!
По печатным формам можно так же в поисковике пробить: Технология создания внешних печатных форм.
Для самого простого варианта, если не нужны никакие настройки на форме, то форму можно вообще не создавать и обработка будет работать из дополнительных Отчетов и Обработок.
Я все таки хочу пояснить немного технологию изготовления собственных макетов
В управляемых формах введена переменная: МассивОбъектов - она введена для того, чтобы мы могли распечатать одновременно несколько документов и они попадут на печать)
В функцию печати для управляемых форм передаем как минимум две переменные:
Функция должна называться как угодно, только не Печать() - так как процедура с именем Печать() уже определена в типовых. Причем как вспомогательная процедура из данных высшего уровня.
1. В типовых сейчас(как бухгалтерия 3.0 или УТ11) в родных макетах немного другие понятия в параметрах запроса, в отличие от Бухгалтерии2.0, как:
Для Родных форм
Для внешних печатных форм
Для бухгалтерии 3.0 и в том же духе
При чем этой переменной можно пользоваться как для самодельной печатной формы внутри конфигурации, так и для внешней печатной формы.
Приведем пример запроса из бух2.0
и сделаем тот же запрос в бух.3.0
В обычных формах мы выполнили запрос и приступаем к заполнению документа, на управляемых формах мы сразу же врезаемся в Цикл.
И тут выскакивает ошибка: Неверное Значение аргумента!
Ошибка выскакивает, так как мы пытаемся идти по полю, которого в запросе не существует. В запросе данного поля нет, для устранения ошибки необходимо добавить в запрос Поле: Ссылка
Далее в цикле начинаем заполнять данные. Привожу образец из бухгалтерии 2.0:
По сравнению с бухгалтерией 2.0 в бухгалтерии 3.0 все модули поменялись, теперь пример будет таким:
Пример для Управленияторговлей Ред11:
В функцию СведенияОЮрФизЛице() необходимо передавать поля с псевдонимом, какой вы ему присвоили. То есть если в запросе было: ВЫБРАТЬ Организация КАК Поставщик, то именно Поле с именем Поставщик должно фигурировать в переменной Шапка результата запроса.
Далее хочу сказать про функцию ФорматСумм();
Бухгалтерия3.0 и Торговля11
Для ERP2.0 больше функций.
Вывод ответственных лиц.. уже есть разница у бухгалтерии 3.0 и Торговле 11, так как в бухгалтерии 3.0 ответственные лица - это регистр сведений, а в управленииТорговлей11 - это справочник. Так же и функционал вывода тоже раскинут по разным модулям
Функция СформироватьСуммуПрописью() тоже в различных конфигурациях находится в разных модулях
Вывод данных физических лиц:
Вывод штрихкода на печать для торговли и ERP2.0
Вывод номера на печать
Я поработаю над функцией Формирования печатной формы. Примерно опишу как я делала свою самодельную печатную форму.
Приведу пример рисования печатной формы
Создаём макет типа: ТабличныйДокумент.Перед нами откроется таблица типа в Экселе
Далее для создания областей выделяем область ячеек(например слева выделяем несколько номеров ячеек), Далее идем в меню:
Пишем Имя, например: Заголовок и жмём ОК.
Для данного варианта есть ещё альтернативный пример, выделяя область, жмем комбинации клавиш (Ctrl+Shift+N) - эта комбинация вызывает ту же команду: НазначитьИмя)
Так мы можем создавать области, которые обычно в стандартных макетах помечаются именами вверху и слева..
Правда если это одна область, тогда
Если область создана и слева и вверху, и у вас на нужной ячейке получается пересечение двух областей, тогда получаем сразу две области:
Если вас не устраивают ячейки в виде таблицы, вы можете выбрать нужное количество ячеек и через Меню: Таблица/Ячейки/Объединить.
Если перестарались, то там же: Таблица/Ячейки/РазбитьЯчейку.
Если вы создали область например слева у вас область, в которую объединено две строки с номерами ячеек и вам их мало, вы бы хотели побольше заголовок? Необязательно пересоздавать область, просто встаньте на одну из цифр ячеек в области, щелкните по ней правой кнопкой мыши и выберите команду: Раздвинуть. И у вас в области будет не две, а на три строки высота)))
То же самое касается ячеек в верхней части макета, их точно так же в случае надобности можно разбивать.
Для данных таблиц лучше создавать две области: Область Шапка(с названиями колонок) и область Строка(с параметрами для заполнения
Создаем ОбластьШапки, выделяем ячейки и щелкаем правой кнопкой Мыши, в контекстном меню ВЫбираем: Свойства
В свойствах есть такие функции, как: Границасверху,ГраницаСнизу,ГраницаСлева,ГраницаСправа и Обвести..
Для начала, если вам нужна просто колонка для наименования, то много строк там ни к чему. Выбираем колонку в области, выделяем все ячейки колонки и с помощью праволй кнопки мыши в контекстном меню выбираем "Объединить"
У вас получится пустая колонка для размещения текста.
далее в свойствах(так же вызываем через контекстное меню) выбираем нужный функционал
1.ВкладкаОсновные.Текст - там пишем имя колонки, например:Наименование
Заполнение: Текст \\оставляем как есть
Использование:Ячейка\\оставляем как есть
Далее есть такакое свойство, как горизонтальное положение и вертикальное положение - выставив вместо АВТО положение ЦЕНТР - вы сделайте наименование колонки в центре.
В Оформлении вы можете сделать побольше шрифт и изменить его свойства.
Границы. Границы вы можете сами задать как вам удобно.Можете по колонке брать и обводить, где поставите границу, там и будет черная черта при выходе таблицы в пользовательстком режиме.
Заполнение ставится: Текст - Только для ТекстовыхЗаписей или если хотите в пользовательском режиме внести какой комментарий вручную .
Для заполнения из результатов запроса и прочих переменных, необходимо свойство заполнения присвоить значение: Параметр.
Это чаще всего требуется при заполнении области Строка, а так же при заполнении Даты, Номера Документа, вывод дванных кладовщика, Руководителя, Бухгалтера..
Тогда мы можем спокойно заполнять макет так:
Живой пример из обработки:
Привожу пример для УТ11
Главное правило, следить за перемнными, чтобы не было перменных с одинаковым названием. Если вы уже один раз получили значение перменной, то потом чтобы ею воспользоваться, не надо её получать второй раз. Главное не потерять из виду.
(8)ВыполнитьКомандуПечати - у меня есть и в УправленииПечатью и в управленииПечатьюКлиент.
Если я ее вызываю из управленияПечатью - припроверке - ошибок не дает, но при выполнении - выдает ошибку
: Метод объекта не обнаружен (ВыполнитьКомандуПечати)
УправлениеПечатью.ВыполнитьКомандуПечати("Документ.СчетФактураВыданный", "ПФ_MXL_СчетФактура981", МассивОбъектов, ,);
на всех остальных , если ызываю из других модулей - при проверке сразу выдает ошибку.
: Переменная не определена (УправлениеПечатьюКлиент)
<<?>>УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Документ.СчетФактураВыданный", "ПФ_MXL_СчетФактура981", МассивОбъектов, ,); (Проверка: Сервер)
Я делаю это в модуле формы, на клиенте.
10. user705522_constantin_h 35 04.12.19 10:16 Сейчас в теме : Переменная не определена (УправлениеПечатьюКлиент)<<?>>УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Документ.СчетФактураВыданный", "ПФ_MXL_СчетФактура981", МассивОбъектов, ,); (Проверка: Сервер)ВнешняяОбработка.ФормированиеПечатныхФорм.Форма.Форма.Форма(1605,2)>
Такая ошибка говорит о том, что нет модуля УправлениеПечатьюКлиент.
: Метод объекта не обнаружен (ВыполнитьКомандуПечати)УправлениеПечатью.ВыполнитьКомандуПечати("Документ.СчетФактураВыданный", "ПФ_MXL_СчетФактура981", МассивОбъектов, ,);ВнешняяОбработка.ФормированиеПечатныхФорм.Форма.Форма.Форма(1605)>
Проверьте, является ли процедура ВыполнитьКомандуПечати экспортной. 12. user705522_constantin_h 35 04.12.19 10:42 Сейчас в теме (11)В отладчике смотрите. Поставьте на УправлениеПечатью.ВыполнитьКомандуПечати по F12 должен быть предложен переход или в общий модуль или в процедуру этого модуля. У вас всё так? Если модуль есть, процедура есть, процедура экспортная, всё должно работать. Лучше через УправлениеПечатьюКлиент.ВыполнитьКомандуПечати, у меня так работает.
Да я вообще не пойму. Ставлю на клиенте – при проверке выдает ошибку
: Переменная не определена (УправлениеПечатьюКлиент)
<<?>>УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Документ.СчетФактураВыданный", "ПФ_MXL_СчетФактура981", МассивОбъектов, ,); (Проверка: Сервер).
В УправлениеПечатьюКлиент - есть ВыполнитьКомандуПечати
В УправлениеПечатью нет ВыполнитьКомандуПечати.
.
При проверке выдает ошибку
: Переменная не определена (УправлениеПечатьюКлиент)
<<?>>УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Документ.СчетФактураВыданный", "ПФ_MXL_СчетФактура981", МассивОбъектов, ,); (Проверка: Сервер)
Мне не нравиться вот это теперь - ВнешняяОбработка.ФормированиеПечатныхФорм.Форма.Форма.Форма(1409,2)> . Может быть где то в форме еще надо прописать?
&НаКлиентеПроцедура ПечатьСчетФактура(МассивОбъектов)
в каком модуле находится эта процедура?
В форме (в модуле). Но я так понимаю - что что то должно быть в описании внешней обработки ,
вот здесь скорее всего
Поразбираюсь.
не писала на управляемых формах. Только начинаю. Здрствуйте все. Расскажу, как у меня получилось .
- такой способ
Так - формируется один табличный документ. И на экране - он показывается один. Но - туту такая проблемп - АКТ и СЧЕТ - Портрет, а СЧЕТ-ФАКТУРА - Ландшафт. И так не получается. Может кто то что-то подскажет?
В процессе написания внешней печатной формы для 1С:ERP Управление предприятием 2 (2.4.6.230), которая, в соответствии с параметрами введенными пользователем в форму, вызываемую при нажатии на соответствующий пункт подменю печати , выводит нужное количество бирок на печать, мною было потрачено много времени на то, чтобы табличный документ, созданный в модуле внешней печатной формы, затем открывался при помощи общей формы печати документов.
Проблема, как мы понимаем, заключается в том, что сначала: нам нужно вызвать на клиенте внешнюю печатную форму, после того как пользователь введет параметры передать их в общую форму печати документов, которая, в свою очередь, должна вызвать процедуру модуля внешней печатной формы - передав в неё нужные параметры, которые пользователь ввел при вызове формы внешней печатной форме на клиенте. Последовательность действий определена и понятна, но тут нужно учитывать креатив создателей общей формы печати документов, единственная переменная, которая может быть передана по всем интересующим звеньям – это массив объектов печати. Сначала я решил не возиться с передачей при помощи массива, а передать параметры через хранилище настроек, но доступ к хранилищам оказался очень ограничен по ролям пользователей, поэтому пришлось вернуться к массиву.
Итак, описание процедур и функций внешней печатной формы:
- В модуле обработки создаем обязательные процедуры необходимые для регистрации обработки в базе:
- Создаем реквизит внешней печатной формы «СтруктураПараметровПечати» с типом «Произвольный». Я использовал его в процессе отладки печати для передачи параметров формы на клиенте в серверные процедуры модуля обработки. Реквизит не обязательный. Создаем форму для отображения пользователю, данная форма позволит пользователю ввести нужные параметры. В модуле формы создаем обязательные процедуры необходимые для получения объектов печати при вызове обработки, когда она будет подключена к базе.
ОбъектыНазначения – это массив, в который платформа помещает объекты печати.
- В модуле формы: создаем процедуры которые будут отображать табличный документ. При отладке при помощи метода «Показать» табличного документа. Для отображения табличного документа при помощи общей формы вызываем форму печати документов и передаем в неё параметры поместив их в массив «ОбъектыНазначения» элемента структуры «ПараметрыИсточника». Кроме того, необходимо в параметры открытия общей формы поместить элемент с ключом «ИсточникДанных» и в качестве значения поместить ссылку на элемент справочника - «ДополнительныеОтчетыИОбработки», который будет создан при подключении печатной формы к базе. Это необходимо для того чтобы общая форма при создании на сервере вызвала модуль внешней печатной формы и создала табличный документ.
- В модуле внешней печатной формы создаем обязательную процедуру: «Печать», которая будет вызвана из процедуры общей формы печать документов – «ПриСозданииНаСервере».
В процедуре печати получаем массив, в котором передавали параметры печати, параметры - помещаем в нужную переменную. Элемент массива, который хранил нужные нам параметры, удаляем. Я прописал удаление перед каждым вызовом общих процедур, для того чтобы убедиться в том, что внутри общих процедур переменная хранящая массив и переданная в процедуру печати модуля внешней печатной формы не перезаполняется из переменной общей формы печати документов.
Читайте также: