Есть внешняя печатная форма (ВПФ).
Соответственно, зарегистрированная в Справочнике.ДополнительныеОтчетыИОбработки.
БСП: 3.0.1
ВПФ - не имеет формы. Весь функционал реализован в "Модуле объекта"
ВОПРОС: Можно ли организовать (и как) выполнение процедуры Печать фоново?
З.Ы. Конкретнее - Можно ли это организовать без формы, без общего модуля.
А из модуля объекта ВПФ
З.Ы.Ы. Наличие прогресс-бара - приветствуется...
Соответственно, зарегистрированная в Справочнике.ДополнительныеОтчетыИОбработки.
БСП: 3.0.1
ВПФ - не имеет формы. Весь функционал реализован в "Модуле объекта"
ВОПРОС: Можно ли организовать (и как) выполнение процедуры Печать фоново?
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
УказатьНаименованиеКомандыПечати(),
УказатьНаименованиеВнешнейПечатнойФормы(),
ПечатьФормы(МассивОбъектов));
КонецПроцедуры
ПоказатьЗ.Ы. Конкретнее - Можно ли это организовать без формы, без общего модуля.
А из модуля объекта ВПФ
З.Ы.Ы. Наличие прогресс-бара - приветствуется...
По теме из базы знаний
Найденные решения
(30) Вот "Рыба".
Возвращается табличный документ.
Я его просто показываю. При желании можете вывести в окно печати как другие печатные формы.
Возвращается табличный документ.
Я его просто показываю. При желании можете вывести в окно печати как другие печатные формы.
Прикрепленные файлы:
ВПФ_Фоном.epf
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Для печати нужен интерактивный вход пользователя, в серверном контексте он не используется, поэтому я, для себя, воспользовался консольной утилитой печати, примерный алгоритм настройки печати такой, (для клиент-серверного варианта):
1. Дать пользователю USR1CV8 право локального входа (можно временно, можно, оставить для дальнейших настроек)
2. Войти под пользователем USR1CV8 и установить ему нужный, для печати, принтер
3. Если требуются нестандартные размеры печати (как в моем случае) настроить дополнительные пользовательские размеры печати.
С предварительной подготовкой, все*.
* Найти / скачать / установить понравившуюся утилиту консольной печати (мой пример ниже)
Создать в конфигурации модуль с серверным контекстом, ниже, пример такого модуля ("ПечатьСервер"):
Для печати нужен интерактивный вход пользователя, в серверном контексте он не используется, поэтому я, для себя, воспользовался консольной утилитой печати, примерный алгоритм настройки печати такой, (для клиент-серверного варианта):
1. Дать пользователю USR1CV8 право локального входа (можно временно, можно, оставить для дальнейших настроек)
2. Войти под пользователем USR1CV8 и установить ему нужный, для печати, принтер
3. Если требуются нестандартные размеры печати (как в моем случае) настроить дополнительные пользовательские размеры печати.
С предварительной подготовкой, все*.
* Найти / скачать / установить понравившуюся утилиту консольной печати (мой пример ниже)
Создать в конфигурации модуль с серверным контекстом, ниже, пример такого модуля ("ПечатьСервер"):
Функция ПечатьЭтикеткиСервер(структура_ПараметрыПечати, массив_ИндексыПечатаемыхСтрок) Экспорт
тд_ТД = Новый ТабличныйДокумент;
//........................
ИмяПринтера = "print"; //Имя как в ОС видно пользователю USR1CV8
тд_ТД.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
тд_ТД.РазмерСтраницы ="Custom";
тд_ТД.ВысотаСтраницы = 60;
тд_ТД.ШиринаСтраницы = 100;
ДоступныйКаталог = КаталогВременныхФайлов();
ИмяФайлаПДФ = "111";
ИмяФайла = ?(Прав(ДоступныйКаталог,1) = "\", ДоступныйКаталог, ДоступныйКаталог + "\") + ИмяФайлаПДФ + ".pdf";
тд_ТД.Записать(тек_ИмяФайла, ТипФайлаТабличногоДокумента.PDF);
ИмяШаблонПечати = "100шx60в"; //Имя шаблона печати, которое, задавалось для принтера в его свойствах
строка_Приложение = """c:\Program Files (x86)\1cv8\cmd_pdf_to_printer\pdfprint.exe""" + " -printer" + " """ + ИмяПринтера + СтрЗаменить(""" -paper ""100шx60в"" -scale 100 ", "100шx60в", ИмяШаблонПечати) + ИмяФайла;
КодВозврата = Неопределено;
ЗапуститьПриложение(тек_Приложение, , Истина, КодВозврата);
строка_ИмяФайлаПринтера = ИмяФайла;
Возврат строка_ИмяФайлаПринтера;
КонецФункции
Показать
(2)
Для печати ВПФ пользователь должен выбрать пункт из меню "Печать", т.е. интерактивно войти...
З.Ы. Спасибо за информацию, но у меня уже есть ВПФ которая всё делает как мне надо, просто время её работы от 2 до 10 минут хотелось бы разрешить пользователю что нибудь делать ещё...
Для печати нужен интерактивный вход пользователя
Для печати ВПФ пользователь должен выбрать пункт из меню "Печать", т.е. интерактивно войти...
З.Ы. Спасибо за информацию, но у меня уже есть ВПФ которая всё делает как мне надо, просто время её работы от 2 до 10 минут хотелось бы разрешить пользователю что нибудь делать ещё...
(16)
Маэсто - прошу...
З.Ы. При условии существенного прироста быстродействия работа будет оплачена $m. Например - 30 $m.
Это не значит, что в коде нельзя ничего оптимизировать
Фильтр = Новый Структура;
Фильтр.Вставить("ДатаНачала", ДатаОбъекта);
Фильтр.Вставить("ДатаОкончания", ТекущаяДата());
МассивСобытий = Новый Массив;
МассивСобытий.Добавить("_$Data$_.New");
МассивСобытий.Добавить("_$Data$_.Update");
МассивСобытий.Добавить("_$Data$_.Post");
МассивСобытий.Добавить("_$Data$_.Unpost");
МассивСобытий.Добавить("_$Data$_.Delete");
Фильтр.Вставить("Событие",МассивСобытий);
Фильтр.Вставить("Метаданные",Ссылка.Метаданные());
Фильтр.Вставить("СтатусТранзакции",СтатусТранзакцииЗаписиЖурналаРегистрации.Зафиксирована);
СтрокаКолонокЖурналаРегистрации = "Дата,ИмяПользователя,ПредставлениеСобытия,Данные";
ТаблицаСобытий = Новый ТаблицаЗначений;
Попытка
ВыгрузитьЖурналРегистрации(ТаблицаСобытий,Фильтр,СтрокаКолонокЖурналаРегистрации);
исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
ПоказатьМаэсто - прошу...
З.Ы. При условии существенного прироста быстродействия работа будет оплачена $m. Например - 30 $m.
(18)
Для такого рода задачи (регулярноенаси чтение ЖР) я бы сделал хранение данных (дубль) в таком виде, чтобы это занимало до нескольких секунд.
И использовал регламентное задание, чтобы синхронизировать (догрузить) данные в "копию".
З.Ы. При условии существенного прироста быстродействия работа будет оплачена $m. Например - 30 $m.
Для такого рода задачи (регулярное
И использовал регламентное задание, чтобы синхронизировать (догрузить) данные в "копию".
(21)
Эта задача (с использованием данной ВПФ) решается крайне редко и нерегулярно...
Поэтому считаю, что дублирование информации из журнала регистрации в базу и использование регламентных заданий для этого, ничего не даст кроме увеличения объема хранимой информации и нагрузки на сервер регзаданием...
З.Ы. Можно переписать полностью весь отчет для выполнения его в фоне, но т.к. он (как писалось выше) редко используется, и появился данный вопрос:
МОЖНО ЛИ ЗАПУСТИТЬ ВПФ ФОНОВО????
Из подключаемой (для ВПФ "стандартной" команды) "ПЕЧАТЬ"...
Эта задача (с использованием данной ВПФ) решается крайне редко и нерегулярно...
Поэтому считаю, что дублирование информации из журнала регистрации в базу и использование регламентных заданий для этого, ничего не даст кроме увеличения объема хранимой информации и нагрузки на сервер регзаданием...
З.Ы. Можно переписать полностью весь отчет для выполнения его в фоне, но т.к. он (как писалось выше) редко используется, и появился данный вопрос:
МОЖНО ЛИ ЗАПУСТИТЬ ВПФ ФОНОВО????
Из подключаемой (для ВПФ "стандартной" команды) "ПЕЧАТЬ"...
(26)Если в конфигурации есть подсистема БСП Варианты отчетов, то как вариант - можно предложить переделать ВПФ на отчет.
Отчет по умолчанию умеет формироваться в фоновом режиме.
В отчете сделать СКД с внешним набором данных, добавить параметр для указания ссылок.
А далее в модуле объекта в ПриКомпоновкеРезультата формировать печатную форму стандартным образом, не используя СКД, параметры получать из настроек компоновки.
Отчет по умолчанию умеет формироваться в фоновом режиме.
В отчете сделать СКД с внешним набором данных, добавить параметр для указания ссылок.
А далее в модуле объекта в ПриКомпоновкеРезультата формировать печатную форму стандартным образом, не используя СКД, параметры получать из настроек компоновки.
(30) Вот "Рыба".
Возвращается табличный документ.
Я его просто показываю. При желании можете вывести в окно печати как другие печатные формы.
Возвращается табличный документ.
Я его просто показываю. При желании можете вывести в окно печати как другие печатные формы.
Прикрепленные файлы:
ВПФ_Фоном.epf
(28)
Поверьте - приведенный код "тот тормоз" который меня интересует, остальное: "такая мелочь"...
Так что замер производительности я не буду выкладывать...
Вопрос всё тот же: Как запустить выполнения кода из ВПФ фоново, без формы...
Из стандартной процедуры Печать.
Подзадача за которую вы не взялись - оптимизировать обработку журнала регистрации
Поверьте - приведенный код "тот тормоз" который меня интересует, остальное: "такая мелочь"...
Так что замер производительности я не буду выкладывать...
Вопрос всё тот же: Как запустить выполнения кода из ВПФ фоново, без формы...
Из стандартной процедуры Печать.
Подзадача за которую вы не взялись - оптимизировать обработку журнала регистрации
(1) А это решение вообще рабочее? Сталкивался с ЖР и часто зависания были, что рейд-диски на 100% загружены были, базы лагали, юзеры жаловались - и это стоило только обратиться к ЖР за большой период или со специфическими отборами. Журнал вроде lgd был.
наверное, поэтому мы используем внешний ЖР.
Полагаю, этой "печатной форме" категорически не рекомендуется запуск при параллельной работе/в разных сеансах.
наверное, поэтому мы используем внешний ЖР.
Полагаю, этой "печатной форме" категорически не рекомендуется запуск при параллельной работе/в разных сеансах.
Фоновое выполнение длительных операций
Для того чтобы длительные операции дополнительного объекта запускались в фоновом режиме, необходимо запустить выполнение команды в фоновом задании и после его завершения принять результат.
Программный интерфейс, помогающий запускать длительные операции в фоне, представлен следующими процедурами:
1. В общем модуле ДополнительныеОтчетыИОбработкиКлиент: процедуры ВыполнитьКомандуВФоне и ПараметрыВыполненияКомандыВФоне.
2. В общем модуле ДополнительныеОтчетыИОбработки: ВыполнитьКомандуИзФормыВнешнегоОбъекта и ВыполнитьКоманду.
Рассмотрим подключение по шагам.
Шаг 1. В форме дополнительной обработки добавить ключевые параметры:
● ДополнительнаяОбработкаСсылка типа СправочникСсылка.ДополнительныеОтчетыИОбработки для хранения ссылки внешнего объекта;
● ИдентификаторКоманды типа Строка для хранения идентификатора выполняемой команды.
Шаг 2. Запустить длительную операцию при помощи кода:
Шаг 3. Добавить процедуру для приемки результата:
Шаг 4. В модуле объекта добавить обработчик команды Вызов серверного метода по шаблону, приведенному в разделе Вариант запуска «Вызов серверного метода».
В демонстрационной базе БСП данная возможность представлена в обработках Демо: Управление полнотекстовым поиском, Демо: Загрузка номенклатуры из прайс-листа (профили безопасности), Демо: Обработка заполнения и Демо: Создание связанных объектов в справочнике Дополнительные отчеты и обработки.
Для того чтобы длительные операции дополнительного объекта запускались в фоновом режиме, необходимо запустить выполнение команды в фоновом задании и после его завершения принять результат.
Программный интерфейс, помогающий запускать длительные операции в фоне, представлен следующими процедурами:
1. В общем модуле ДополнительныеОтчетыИОбработкиКлиент: процедуры ВыполнитьКомандуВФоне и ПараметрыВыполненияКомандыВФоне.
2. В общем модуле ДополнительныеОтчетыИОбработки: ВыполнитьКомандуИзФормыВнешнегоОбъекта и ВыполнитьКоманду.
Рассмотрим подключение по шагам.
Шаг 1. В форме дополнительной обработки добавить ключевые параметры:
● ДополнительнаяОбработкаСсылка типа СправочникСсылка.ДополнительныеОтчетыИОбработки для хранения ссылки внешнего объекта;
● ИдентификаторКоманды типа Строка для хранения идентификатора выполняемой команды.
Шаг 2. Запустить длительную операцию при помощи кода:
ПараметрыКоманды = ДополнительныеОтчетыИОбработкиКлиент.ПараметрыВыполненияКомандыВФоне(Параметры.ДополнительнаяОбработкаСсылка);
ПараметрыКоманды.СопровождающийТекст = НСтр("ru = '<Вставить представление выполняемой команды...>'");
Обработчик = Новый ОписаниеОповещения("ПослеЗавершенияДлительнойОперации", ЭтотОбъект, СопровождающийТекст);
ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьКомандуВФоне(Параметры.ИдентификаторКоманды, ПараметрыКоманды, Обработчик);Шаг 3. Добавить процедуру для приемки результата:
&НаКлиенте
Процедура ПослеЗавершенияДлительнойОперации(Операция, СопровождающийТекст) Экспорт
// Обработка результата.
Если Операция.Статус = "Выполнено" Тогда
ПоказатьОповещениеПользователя(НСтр("ru = 'Успешное завершение'"), , СопровождающийТекст, БиблиотекаКартинок.Успешно32);
Иначе
ВызватьИсключение Операция.КраткоеПредставлениеОшибки;
КонецЕсли;
КонецПроцедуры
ПоказатьШаг 4. В модуле объекта добавить обработчик команды Вызов серверного метода по шаблону, приведенному в разделе Вариант запуска «Вызов серверного метода».
В демонстрационной базе БСП данная возможность представлена в обработках Демо: Управление полнотекстовым поиском, Демо: Загрузка номенклатуры из прайс-листа (профили безопасности), Демо: Обработка заполнения и Демо: Создание связанных объектов в справочнике Дополнительные отчеты и обработки.
(29) Спасибо.
Это я знаю, но по умолчанию ВПФ не имеет "формы"...
З.Ы. Вы меня почти убедили что решить "без привязки" к форме у пользователя нельзя, ещё правда есть форма из которой "вызывается" ВПФ, но можно ли на сервере в команде ВПФ "поймать" форму владелец и привязать к ней обработчик ожидания я пока не представляю как...
З.Ы.Ы. Вторая проблема - использование общего модуля, т.е. должен существовать "общий функционал" который выполнит фоново обработку из ВПФ.
Есть БСП, но как "привязать" ВПФ я пока не представляю...
Это я знаю, но по умолчанию ВПФ не имеет "формы"...
З.Ы. Вы меня почти убедили что решить "без привязки" к форме у пользователя нельзя, ещё правда есть форма из которой "вызывается" ВПФ, но можно ли на сервере в команде ВПФ "поймать" форму владелец и привязать к ней обработчик ожидания я пока не представляю как...
З.Ы.Ы. Вторая проблема - использование общего модуля, т.е. должен существовать "общий функционал" который выполнит фоново обработку из ВПФ.
Есть БСП, но как "привязать" ВПФ я пока не представляю...
(33)
Пришлось отключить "безопасный режим", т.к.
Пришлось отключить "безопасный режим", т.к.
Установлен безопасный режим. Выполнение операции запрещено
{ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(98)}: ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений());
{ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(131)}: ИмяОбработки = ПодключитьВнешнююОбработку(Ссылка);
{ОбщийМодуль.ДлительныеОперации.Модуль(625)}: Обработка = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки").ОбъектВнешнейОбработки(Ссылка);
{(1)}:ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки(Параметры[0],Параметры[1])
{ОбщийМодуль.ОбщегоНазначения.Модуль(4892)}: Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
{ОбщийМодуль.ДлительныеОперации.Модуль(719)}: ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыПроцедуры);
{ОбщийМодуль.ДлительныеОперации.Модуль(710)}: ВыполнитьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры);
по причине:
Ошибка подключения внешних метаданных
по причине:
Установлен безопасный режим. Выполнение операции запрещено
Показать{ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(98)}: ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений());
{ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(131)}: ИмяОбработки = ПодключитьВнешнююОбработку(Ссылка);
{ОбщийМодуль.ДлительныеОперации.Модуль(625)}: Обработка = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки").ОбъектВнешнейОбработки(Ссылка);
{(1)}:ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки(Параметры[0],Параметры[1])
{ОбщийМодуль.ОбщегоНазначения.Модуль(4892)}: Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
{ОбщийМодуль.ДлительныеОперации.Модуль(719)}: ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыПроцедуры);
{ОбщийМодуль.ДлительныеОперации.Модуль(710)}: ВыполнитьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры);
по причине:
Ошибка подключения внешних метаданных
по причине:
Установлен безопасный режим. Выполнение операции запрещено
(18) если в базе есть какая-то БСП, то внешние обработки/отчеты, можно запускать в фоновом режиме
если БСП нет, то необходимо доработать какой либо общий модуль - без этого ни как
по поводу прогресс бара, - а в каком окне вы планируете за ним наблюдать?
для этого нужна форма, в своей внешней обработке?
как бы действия такие
запускаете свою обработку в Фоне, получаете его ИД
запускаете форму с прогрессом баром, в ней по ИД фонового задания получаете его данные и показываете прогресс бар
(пока писал ответ,, в принципе уже все и насоветовали)
если БСП нет, то необходимо доработать какой либо общий модуль - без этого ни как
по поводу прогресс бара, - а в каком окне вы планируете за ним наблюдать?
для этого нужна форма, в своей внешней обработке?
как бы действия такие
запускаете свою обработку в Фоне, получаете его ИД
запускаете форму с прогрессом баром, в ней по ИД фонового задания получаете его данные и показываете прогресс бар
(пока писал ответ,, в принципе уже все и насоветовали)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот