Диалоговое окно из внешней печатной формы в управляемом приложении
По теме из базы знаний
Найденные решения
(24) Полагаю, мне удалось найти подходящее решение.
Итак, описание регистрации сохраняется. Форму диалога также нужно будет рисовать. А вот процедуру печати необходимо перенести из модуля объекта обработки в модуль формы:
Итак, описание регистрации сохраняется. Форму диалога также нужно будет рисовать. А вот процедуру печати необходимо перенести из модуля объекта обработки в модуль формы:
&НаКлиенте
Процедура КомандаПечати(Команда)
ПользовательскиеЗначения = Новый Структура;
ПользовательскиеЗначения.Вставить("ТекстСообщения", Объект.ТекстСообщения);
МассивОбъектов = ОбъектыНазначения.ВыгрузитьЗначения();
РезультатПечати = Печать(ИдентификаторКоманды, МассивОбъектов, ПользовательскиеЗначения);
УправлениеПечатьюКлиент.ПечатьДокументов(
РезультатПечати.КоллекцияПечатныхФорм,
РезультатПечати.ОбъектыПечати,
ЭтотОбъект.ВладелецФормы);
ЭтотОбъект.Закрыть();
КонецПроцедуры
&НаСервереБезКонтекста
Функция Печать(ИменаМакетов, МассивОбъектов, ПользовательскиеПараметры)
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм(ИменаМакетов);
ОбъектыПечати = Новый СписокЗначений;
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "ПечатьСДиалогом");
Если ПечатнаяФорма <> Неопределено Тогда
ПечатнаяФорма.ТабличныйДокумент = СформироватьПечатнуюФормуСДиалогом(МассивОбъектов, ОбъектыПечати, ПользовательскиеПараметры);
ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Печать с диалогом'");
КонецЕсли;
Результат = Новый Структура("КоллекцияПечатныхФорм,ОбъектыПечати");
Результат.КоллекцияПечатныхФорм = ОбщегоНазначения.ТаблицаЗначенийВМассив(КоллекцияПечатныхФорм);
Результат.ОбъектыПечати = ОбъектыПечати;
Возврат Результат;
КонецФункции
&НаСервереБезКонтекста
Функция СформироватьПечатнуюФормуСДиалогом(МассивОбъектов, ОбъектыПечати, ПользовательскиеПараметры)
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.Область(1,1).Текст = "Это внешняя печтаная форма с диалогом.";
ТабДокумент.Область(2,1).Текст = "Пользовательский текст: " + ПользовательскиеПараметры.ТекстСообщения;
Возврат ТабДокумент;
КонецФункции
ПоказатьПрикрепленные файлы:
ПечатьСДиалогом.epf
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(22) К сожалению, пока путного ничего не придумал. Мне не удалось найти стандартную функцию, передающую произвольную структуру параметров в менеджер печати обработки. Поэтому пока предлагаю такой костыль: сохранять в настройках обработки введенный пользователем текст.
Для этого в функции регистрации ВПФ добавляете команду печати с типом "Открытие формы":
Рисуете форму обработки с нужным интерфейсом. Режим открытия - блокировать окно владельца. Добавляете параметры формы: ДополнительнаяОбработкаСсылка типа ссылки на доп. обработки, ИдентификаторКоманды строкового типа и ОбъектыНазначения произвольного типа. Добавляете также реквизиты формы, соответствующие параметрам. При создании формы сохраняете параметры.
Добавляете на форму кнопку печати. В обработчике команды открываете печатную форму:
Перед открытием печатной формы всякий раз записываете в обработку введенный пользователем текст. Для этого используете предназначенный для хранения настроек реквизит справочника доп. обработок "ХранилищеНастроек":
Попробую еще посмотреть варианты решения это задачи. Возможно удастся найти более элегантное решение.
Для этого в функции регистрации ВПФ добавляете команду печати с типом "Открытие формы":
Команда = ПараметрыРегистрации.Команды.Добавить();
Команда.Представление = НСтр("ru = 'Печать с диалогом'");
Команда.Идентификатор = "ПечатьСДиалогом";
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы()
Рисуете форму обработки с нужным интерфейсом. Режим открытия - блокировать окно владельца. Добавляете параметры формы: ДополнительнаяОбработкаСсылка типа ссылки на доп. обработки, ИдентификаторКоманды строкового типа и ОбъектыНазначения произвольного типа. Добавляете также реквизиты формы, соответствующие параметрам. При создании формы сохраняете параметры.
Добавляете на форму кнопку печати. В обработчике команды открываете печатную форму:
ВыполняемаяКоманда = Новый Структура;
ВыполняемаяКоманда.Вставить("Ссылка", ДополнительнаяОбработкаСсылка);
ВыполняемаяКоманда.Вставить("Идентификатор", ИдентификаторКоманды);
ПользовательскиеЗначения = Новый Структура;
ПользовательскиеЗначения.Вставить("ТекстСообщения", Объект.ТекстСообщения);
ЗаписатьВыбранныеЗначенияНаСервере(ДополнительнаяОбработкаСсылка, ПользовательскиеЗначения);
ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьОткрытиеПечатнойФормы(
ВыполняемаяКоманда,
ЭтотОбъект.ВладелецФормы,
ОбъектыНазначения.ВыгрузитьЗначения());
ЭтотОбъект.Закрыть();
ПоказатьПеред открытием печатной формы всякий раз записываете в обработку введенный пользователем текст. Для этого используете предназначенный для хранения настроек реквизит справочника доп. обработок "ХранилищеНастроек":
&НаСервереБезКонтекста
Процедура ЗаписатьВыбранныеЗначенияНаСервере(ДополнительнаяОбработкаСсылка, ПользовательскиеЗначения)
// Возможно потребуется установка привилегированного режима
ОбработкаОбъект = ДополнительнаяОбработкаСсылка.ПолучитьОбъект();
ОбработкаОбъект.ХранилищеНастроек = Новый ХранилищеЗначения(ПользовательскиеЗначения);
ОбработкаОбъект.Записать();
КонецПроцедуры
ПоказатьПопробую еще посмотреть варианты решения это задачи. Возможно удастся найти более элегантное решение.
Прикрепленные файлы:
ПечатьСДиалогом.epf
(24) Полагаю, мне удалось найти подходящее решение.
Итак, описание регистрации сохраняется. Форму диалога также нужно будет рисовать. А вот процедуру печати необходимо перенести из модуля объекта обработки в модуль формы:
Итак, описание регистрации сохраняется. Форму диалога также нужно будет рисовать. А вот процедуру печати необходимо перенести из модуля объекта обработки в модуль формы:
&НаКлиенте
Процедура КомандаПечати(Команда)
ПользовательскиеЗначения = Новый Структура;
ПользовательскиеЗначения.Вставить("ТекстСообщения", Объект.ТекстСообщения);
МассивОбъектов = ОбъектыНазначения.ВыгрузитьЗначения();
РезультатПечати = Печать(ИдентификаторКоманды, МассивОбъектов, ПользовательскиеЗначения);
УправлениеПечатьюКлиент.ПечатьДокументов(
РезультатПечати.КоллекцияПечатныхФорм,
РезультатПечати.ОбъектыПечати,
ЭтотОбъект.ВладелецФормы);
ЭтотОбъект.Закрыть();
КонецПроцедуры
&НаСервереБезКонтекста
Функция Печать(ИменаМакетов, МассивОбъектов, ПользовательскиеПараметры)
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм(ИменаМакетов);
ОбъектыПечати = Новый СписокЗначений;
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "ПечатьСДиалогом");
Если ПечатнаяФорма <> Неопределено Тогда
ПечатнаяФорма.ТабличныйДокумент = СформироватьПечатнуюФормуСДиалогом(МассивОбъектов, ОбъектыПечати, ПользовательскиеПараметры);
ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Печать с диалогом'");
КонецЕсли;
Результат = Новый Структура("КоллекцияПечатныхФорм,ОбъектыПечати");
Результат.КоллекцияПечатныхФорм = ОбщегоНазначения.ТаблицаЗначенийВМассив(КоллекцияПечатныхФорм);
Результат.ОбъектыПечати = ОбъектыПечати;
Возврат Результат;
КонецФункции
&НаСервереБезКонтекста
Функция СформироватьПечатнуюФормуСДиалогом(МассивОбъектов, ОбъектыПечати, ПользовательскиеПараметры)
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.Область(1,1).Текст = "Это внешняя печтаная форма с диалогом.";
ТабДокумент.Область(2,1).Текст = "Пользовательский текст: " + ПользовательскиеПараметры.ТекстСообщения;
Возврат ТабДокумент;
КонецФункции
ПоказатьПрикрепленные файлы:
ПечатьСДиалогом.epf
(6)
в зависимости от того, какая у Вас конфигурация.
В новых ЗУПах и ERP доп реквизиты хранятся в табличной части у документа, справочника и т.д. И тогда можно делать запрос к нужной ТЧ, чтобы имя доп реквизита было равно нужному значению, которое можно глянуть в поле для разработчиков формы доп реквизита.
А если конфигурация старая, то у Вас, скорее всего, доп реквизиты хранятся в регистрах. Как там запрос делать, я точно не скажу. Но отловить это точно можно)
Можете поэкспериментировать - будет полезно))
в зависимости от того, какая у Вас конфигурация.
В новых ЗУПах и ERP доп реквизиты хранятся в табличной части у документа, справочника и т.д. И тогда можно делать запрос к нужной ТЧ, чтобы имя доп реквизита было равно нужному значению, которое можно глянуть в поле для разработчиков формы доп реквизита.
А если конфигурация старая, то у Вас, скорее всего, доп реквизиты хранятся в регистрах. Как там запрос делать, я точно не скажу. Но отловить это точно можно)
Можете поэкспериментировать - будет полезно))
(7)
Мы, наверное, о разных вещах говорим.
У меня есть внешняя обработка, подключенная в качестве печатной формы к документу.
После того, как пользователь из документа начинает печатать эту фору, вызывается процедура Печать(...) из модуля ВПФ, естественно на сервере.
Как вывести какое-либо диалоговое окно с пользователем? Функция ВвестиЧисло() и ей подобные в серверной процедуре недоступны, вызвать процедуру НаКлиенте тоже нельзя. Как быть?
Мы, наверное, о разных вещах говорим.
У меня есть внешняя обработка, подключенная в качестве печатной формы к документу.
После того, как пользователь из документа начинает печатать эту фору, вызывается процедура Печать(...) из модуля ВПФ, естественно на сервере.
Как вывести какое-либо диалоговое окно с пользователем? Функция ВвестиЧисло() и ей подобные в серверной процедуре недоступны, вызвать процедуру НаКлиенте тоже нельзя. Как быть?
Прикрепленные файлы:

(8)
Нет, просто я Вам предлагаю посмотреть на другую концепцию. Вы говорите, что Вам нужно заполнять это поле для того, чтобы оно влияло на Вашу печатную форму, верно? А если Вы к документу добавите дополнительный реквизит. Соответственно, это будет то поле, которое в Вашей логике должно влиять на формирование ВПФ. То есть не вызывать окно, а будет доп реквизит, где это значение вводится. Тогда при печати Вы просто смотрите этот реквизит и он у Вас влияет на Вашу ВПФ как Вам угодно. И заодно будет повод поразмыслить о модальности, от которой Вы отказываетесь, когда не вызываете функции вроде ВвестиЧисло().
Нет, просто я Вам предлагаю посмотреть на другую концепцию. Вы говорите, что Вам нужно заполнять это поле для того, чтобы оно влияло на Вашу печатную форму, верно? А если Вы к документу добавите дополнительный реквизит. Соответственно, это будет то поле, которое в Вашей логике должно влиять на формирование ВПФ. То есть не вызывать окно, а будет доп реквизит, где это значение вводится. Тогда при печати Вы просто смотрите этот реквизит и он у Вас влияет на Вашу ВПФ как Вам угодно. И заодно будет повод поразмыслить о модальности, от которой Вы отказываетесь, когда не вызываете функции вроде ВвестиЧисло().
начнем с того, что у Вас формы нет, где как Видно из Видного можно было бы разместить реквизиты ))
реквизиты пользователь будет вводить для печати после просмотра ВПФ?
после этого планируется этот же макет выводить?
реквизиты пользователь будет вводить для печати после просмотра ВПФ?
после этого планируется этот же макет выводить?
(10) Вас там совсем отморозило в Сибири?
Про форму писали вы или дядя из Барнаула?
А вот когда форма то будет создана и открыта "не сложно", то появится возможность реквизиты то и разместить и увидеть...
Про форму писали вы или дядя из Барнаула?
Как это сделать?
это то не сложно, но дальше последует вопрос
это то не сложно, но дальше последует вопрос
А вот когда форма то будет создана и открыта "не сложно", то появится возможность реквизиты то и разместить и увидеть...
(14) Вот побазарить опять же хочется кому-то реально, не давая никакой полезной информации вообще , просто упоминая о возможных вопросах в будущем...
Автор просит помощи именно в создании и открытии формы , которая ПЕРЕД формированием печати будет получать данные и вставлять в запросы.
Это пояснинение специально для тех кто далеко от нас...
Автор просит помощи именно в создании и открытии формы , которая ПЕРЕД формированием печати будет получать данные и вставлять в запросы.
Это пояснинение специально для тех кто далеко от нас...
(17)
Да, именно, либо создать форму (но когда и как ее открыть), либо другой способ "перехватить" процедуры на сервере, чтобы использовать механизмы, доступные на Клиенте.
Менять конфу нельзя, вариант типа открывать обработку через файл-открыть, задавать там параметры и выбирать печатаемый док - сами понимаете неприемлемое решение...
Да, именно, либо создать форму (но когда и как ее открыть), либо другой способ "перехватить" процедуры на сервере, чтобы использовать механизмы, доступные на Клиенте.
Менять конфу нельзя, вариант типа открывать обработку через файл-открыть, задавать там параметры и выбирать печатаемый док - сами понимаете неприемлемое решение...
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот