Хранение табличного документа на клиенте между вызовами функции
Добрый день!
Имеется следующая схема:
Из внешней обработки печатаем ценники. По нажатию на кнопку, формируется табличный документ. Далее записываем его во временное хранилище, чтобы при повторной печати не дергать серверную процедуру, а получить уже готовый макет для печати. Схема работает, но поставили задачу ускорить вывод на печать. Пробовал хранить в переменной на клиенте, пробовал через хранилище значений. Хранилище оказалось пока быстрее.
Подскажите, какие есть ещё варианты хранения макета на клиенте?
Имеется следующая схема:
Из внешней обработки печатаем ценники. По нажатию на кнопку, формируется табличный документ. Далее записываем его во временное хранилище, чтобы при повторной печати не дергать серверную процедуру, а получить уже готовый макет для печати. Схема работает, но поставили задачу ускорить вывод на печать. Пробовал хранить в переменной на клиенте, пробовал через хранилище значений. Хранилище оказалось пока быстрее.
Подскажите, какие есть ещё варианты хранения макета на клиенте?
По теме из базы знаний
- Структура подчиненности с хронологией документов и кнопками проведения и удаления
- Универсальные инструменты 1С
- Гарри Поттер и подкапотное пространство веб-клиента
- Обработка для адаптивного переноса данных между базами через XML
- Запуск фонового задания с прогрессом во внешней обработке независимо от места вызова на Библиотеке стандартных подсистем
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3)
Замер делал, дольше всего происходит извлечение из временного хранилища. Делал 100 повторений в цикле для статистики.
На счет того, что хранилище быстрее я погорячился, но вопрос про дополнительный варианты хранения табличного документа актуален. Что ещё можно попробовать?
1) Хранилище значений
2) Переменная
3) ... ?
(1)Стоит выяснить в какие моменты тормозит. Сделать замер производительности, и уже по результатам смотреть.
Замер делал, дольше всего происходит извлечение из временного хранилища. Делал 100 повторений в цикле для статистики.
На счет того, что хранилище быстрее я погорячился, но вопрос про дополнительный варианты хранения табличного документа актуален. Что ещё можно попробовать?
1) Хранилище значений
2) Переменная
3) ... ?
Текст процедуры |
---|
Нач = ТекущаяУниверсальнаяДатаВМиллисекундах();
Для СЧ = 1 По 100 Цикл
БылаПечать = Ложь;
Если ПредШК = Штрихкод И ПредМаг = Магазин И ПредЦенник = БазовыйЦенник И ТекущаяДата() - ПредДата < 30 И ПредЭтикетка <> Неопределено
И ПредНом = Номенклатура И ПредХар = Характеристика Тогда
Таб = ПолучитьИзВременногоХранилища(ПредЭтикетка);
//
//Таб = ТабДокПрошлойПечати;
//
Иначе
Таб = ПечатьНаСервере(Штрихкод, Магазин, БазовыйЦенник, Номенклатура, Характеристика, БыстраяПечать);
БылаПечать = Истина;
КонецЕсли;
Если Таб <> Неопределено Тогда
Таб.ИмяПараметровПечати = "ПечатьЦенника из обработки для обработки быстрой печати";
//Если СразуНаПринтер Тогда
// Таб.Напечатать();
//Иначе
// Таб.Показать();
//КонецЕсли;
КонецЕсли;
ПредШК = Штрихкод; ПредМаг = Магазин; ПредЦенник = БазовыйЦенник; ПредДата = ТекущаяДата();
ПредНом = Номенклатура; ПредХар = Характеристика;
Если БылаПечать Тогда
ПредЭтикетка = ПоместитьВоВременноеХранилище(Таб, ЭтаФорма.УникальныйИдентификатор);
//
//ПредЭтикетка = "";
//ТабДокПрошлойПечати = Таб;
//
КонецЕсли;
КонецЦикла;
Кон = ТекущаяУниверсальнаяДатаВМиллисекундах();
Потрачено = Окр((Кон-Нач)/1000, 3);
Элементы.Декорация2.Заголовок = СтрШаблон("%1 с.", Потрачено);
Показать |
Прикрепленные файлы:
(5)Зачем вам его хранить на клиенте?
Вот вы сформировали на сервере табличный документ в ПечатьНаСервере - и поместите его там же во временное хранилище, без возвращения на клиент.
UPD. Вы можете сделать таблицу значений в реквизитах формы, с колонками - Штрихкод, Магазин, Ценник, и др. и ТабДок.
В нем просто хранить табдок как есть, без помещения во временное хранилище.
Перед печатью проверять - есть ли в таблице уже подготовленный, и если нет то формировать табличный документ и добавлять в таблицу строку.
Получится такой вот кэш ценников.
Вот вы сформировали на сервере табличный документ в ПечатьНаСервере - и поместите его там же во временное хранилище, без возвращения на клиент.
UPD. Вы можете сделать таблицу значений в реквизитах формы, с колонками - Штрихкод, Магазин, Ценник, и др. и ТабДок.
В нем просто хранить табдок как есть, без помещения во временное хранилище.
Перед печатью проверять - есть ли в таблице уже подготовленный, и если нет то формировать табличный документ и добавлять в таблицу строку.
Получится такой вот кэш ценников.
(7) ТаблицаЗначений как вариант, надо будет глянуть как быстро работает. А при реальном тестировании через переменную возникла ошибка.
Недопустимая операция для реквизита формы
{ВнешняяОбработка.ПечатьЦенников.Форма.Форма.Форма(516)}: Таб.Показать();
Первый вызов печать отрабатывает. А при повторном вызове - ошибка. Если подождать 30 сек. то опять выводит на печать.
Явно завязано на кэше, но вот почему ТабличныйДокмуент сформированный на сервере стал на 30сек. реквизитом формы непонятно.
Недопустимая операция для реквизита формы
{ВнешняяОбработка.ПечатьЦенников.Форма.Форма.Форма(516)}: Таб.Показать();
Первый вызов печать отрабатывает. А при повторном вызове - ошибка. Если подождать 30 сек. то опять выводит на печать.
Явно завязано на кэше, но вот почему ТабличныйДокмуент сформированный на сервере стал на 30сек. реквизитом формы непонятно.
Дёргай лучше сервер, чем клиент. Зачем перекидывать весь сформированные макет? Запихни его в "ОбщиеМакеты". А потом открывай форму (или это обработка) печати прямой ссылкой на него. С временным хранилищем лучше не играться.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот