Здравствуйте. Помогите разобраться, самостоятельно дошел до некоторых моментов, но не хватает логического завершения. Суть:
Необходимо перенести внешнюю печатную форму с обычных на управляемые формы. Разбирался долгое время сам, было бы не сложно, если бы был нужен один только макет. Но мне нужно, чтобы пользователь на форме выбирал организацию, ответственного из нее и эти данные уже подставлялись в макет для печати. В чем сложность?
Я НЕ могу добавить через расширение реквизиты в документ, чтобы в дальнейшем их пихать на форму, так как расширение работает коряво и банально не дает сохранить конфигурацию с добавленными реквизитами - вылетает конфигуратор.
Соответственно, есть возможность выбрать описанные ранее реквизиты на форме, хорошо, написал код, работает, выбирается.
Теперь нужно на эту форму добавить макет, который был в старой конфигурации и заполнялся умными людьми. На этом месте начинается заморочка.
Мне удалось получить ЗАПОЛНЕННЫЙ макет в модуле объекта обработки, но так как это выполняется на сервере, там мне не получится указать ответственного (нужно, чтобы его выбирал пользователь).
Также удалось получить сам макет при нажатии на кнопку на форме, но когда я пытаюсь вставить код заполнения макета в модуль формы, который работал в модуле объекта, начинает вылазить бесконечный ряд ошибок, исправляя которые, ты либо ломаешь что-то другое в коде, либо не получается исправить вовсе.
Собственно, вопросы, я так понимаю, что мне нужно получить заполненный макет в модуле объекта и каким-то чудом передать его на форму, где пользователь сможет выбрать ответственного, отсюда:
1. Как передать заполненный макет на форму и отобразить его?
2. Как в этот макет из модуля формы запихнуть ответственного?
Если нужны будут какие-то куски кода, напишу, а то и так много текста
1) через значение, возвращаемое функцией
2) сначала все нужное спросить, потом вызвать функцию заполнения макета, в параметрах передать выбранные значения.
сначала все нужное спросить, потом вызвать функцию заполнения макета, в параметрах передать выбранные значения.
Ну, я так понимаю, что наиболее простым вариантом будет из модуля формы передать в модуль объекта этого ответственного. Можете подсказать, каким образом это сделать? Какой код написать для этого?
Замечал не раз, что люди пользуются РеквизитФормыВЗначение() и благодаря ему то и получал макет на форме, но как он в точности работает понимания не сложилось
В общем, подскажите, пожалуйста, как это дело провернуть?
(7) Попробовал сделать по аналогии, дополнил сведениями о внешней обработке и командами, ВПФ заработала, макет отрисовало, значение ответственного подставило. Но не заполнился сам макет.
Я подставил функцию заполнения макета вместо Печать(ПараметрыПечати). Сейчас проблема в том, что для корректного заполнения используются значения (СсылкаНаОбъект, ОбъектыПечати, МассивОбъектов, ПараметрыПечати). Их назначение и формирование для меня тайна.
Как я понял, СсылкаНаОбъект - это сам документ откуда открывается впф, ОбъектыПечати - не понял, МассивОбъектов - массив из документов на печать, ПараметрыПечати - это наши параметры.
Но вот как их заполнять в модуле формы? В модуле объекта программа словно из воздуха берет эти значения. А указать просто так их в функции не даст, требует определения этих значений.
Пробовал задать пустые значения - выводит макет без отрисовки, оно и понятно, ведь ссылка на документ пустая.
Сейчас проблема в том, что для корректного заполнения используются значения (СсылкаНаОбъект, ОбъектыПечати, МассивОбъектов, ПараметрыПечати). Их назначение и формирование для меня тайна.
Это если функция печати находится в "Модуле менеджера" , если у вас функция печати в "Модуле объекта", то всё должно работать .
Документ = Ссылка.ПолучитьОбъект().Печать();
(13) Вернулся к задаче. В модуле формы после получения данных об ответственном, я так понял необходимо вызвать функцию печати из модуля объекта. Ту, где как раз происходит заполнение макета?
Делаю это при помощи:
&НаСервере
Функция ПечатьНаСервере()
ОБ = РеквизитФормыВЗначение("Объект"); //это ссылка на объект?
ПараметрыПечати = новый Структура; // объявляем новую структуру
ПараметрыПечати.Вставить("ФИООтветственного",Объект.Ответственный); // передаем в структуру ответственного
//ПараметрыПечати.Вставить("Ссылка",Объект.Ссылка); И т.д.
ОбъектыПечати = Новый СписокЗначений; // создаю список значений для передачи в функцию печати
МассивОбъектов = Новый Массив; // то же самое для массива.
ТабДок = ОБ.ПечатьОтветственного(Объект.РеквизитСсылка,ОбъектыПечати,МассивОбъектов,ПараметрыПечати); //попытка вызвать функцию печати, ссылка не работает, выводит пустой макет
Возврат ТабДок;
КонецФункции
Показать
Сама функция печати вызывается в модуле объекта как:
Функция ПечатьОтветственного(СсылкаНаОбъект, ОбъектыПечати, МассивОбъектов, ПараметрыПечати) Экспорт
Я НЕ могу добавить через расширение реквизиты в документ, чтобы в дальнейшем их пихать на форму, так как расширение работает коряво и банально не дает сохранить конфигурацию с добавленными реквизитами - вылетает конфигуратор.
Хочу сказать, что вероятно это проблема с вашей базой, сколько делал подобное - свободно добавлялось и все работает и довольно давно
Скорее всего да, но ничего не попишешь, надо искать альтернативные пути решения,
- странный подход, ИМХО, надо искать решение проблемы, потому как поиск альтернативы может породить новую, и надо будет искать альтернативу для альтернативы?)))
Решением (вылет конфигуратора при добавлении реквизитов) может быть банальная смена платформы...
(16) Ну как пример решения - вот ВПФ с открытием формы перед печатью https://infostart.ru/public/309488/, реквизиты, если не получается сохранить в расширении можно сохранить и использовать для печати в дополнительных реквизитах или сведениях...