Фоновая обработка больших данных в 1С с прогресс баром

Пару лет назад уже сталкивался с подобной задачей (Фоновая обработка больших данных в 1С). Чуть погуглил, что изменилось за это время. А фактически ничего. До сих пор для того чтобы показать обычный прогресс бар, приходится использовать велосипеды. Временные хранилища, для того чтобы передать в клиента результат работы фоновой функции/процедуры как нельзя было использовать, так и сейчас нельзя. Прогресс бар, как нельзя было использовать без костылей…так и сейчас нельзя. Ну я конечно не смотрел что в БСП, т.к. зачастую приходится делать дописки где БСП или нет, или она древняя

Общая «шаблонная» схема использования фонового выполнения функций в 1С можно организаовать следующим образом:

  1. Запускаем фоновое задание
  2. На клиенте запускаем периодическое задание которое отлавливает вывод «сообщить» на сервере
  3. В фоновом задании при помощи «сообщить» выводим всякую служебную информацию. Если нужно в «клиент» передать данные — записываем временный файл в формате например json, и имя его, опять же при помощи «Сообщить» передаём на клиент.
  4. По окончании фонового задания, закрываем выполнение периодического задания

Запуск фонового задания:

Процедура или функция фонового задания обязательно должна находиться в общем модуле:

Периодическая проверка и «отлов» серверного вывода «Сообщить»:

В результате будет что-то вроде:

Фоновая обработка больших данных в 1С

1С: Ускорение поиска в массиве структур

Задача: есть два массива структур. Один 500 записей, второй — порядка 900 тыс. Нужно для каждой из 500 записей, найти соответствующую запись из второй структуры.

  • Массив «субабоненты», заполнен структурами вида «то,лс,ипу,окпу,нс,улица,дом,квартира»
  • Массив «реестр_замен», заполнен структурами вида «лс,нп,улица,дом,квартира,ипу,дата_установки»

Решение 1: ищем и сопоставляем в «лоб»

Замеряем время выполнения…и устаём ждать.. Поиск и сопоставление длится по крайне мере несколько часов..

Решение 2:

А зачем нам в массиве субабонентов держать те данные, которых нет? Правильно, не зачем. Поэтому из массива «реестр_замен», сначала вычленим список л/с, и положим его в отдельный массив. И далее при заполнении из файла массива субабонентов, нужно штатно (функция Найти) проверять нужна такая строчка или нет в результирующем массиве? Функция «Найти» скажем работает ОЧЕНЬ быстро.

В итоге, в массиве «субабоненты» у нас ровно то количество записей, которое в «реестр_замен «, а вовсе не 900тыс.

И дальше пробуем снова сопоставить:

Скрипт выполнился уже в приемлемые примерно 400 секунд

Чтение большого файла csv в 1С

Куда ни глянь, в интернете чаще всего предлагается обработка и чтение большого файла csv в 1С при помощи загрузки в «текстовыйДокумент». Примерно так:

Что в корне не верно, при обработке большого csv файла, так как в этом случае весь файл вычитывается предварительно в память. А она не безразмерная в большинстве случаев. Правильный же способ обработки — построчное чтение файла. Примерно так:

Работа с безопасным хранилищем в 1С

До недавнего времени (еще несколько лет назад) для хранения данных учётных записей в 1С единственной защитой было — показывать поле с паролем со «звездочками». Сам же пароль хранился в практически открытом виде в реквизитах формы. Ну.. возможно это и не безопасно.. Новая методика хранения чувствительных данных в 1С призвана эту безопасность увеличить. Работа с безопасным хранилищем в 1с, Поэтому в БСП были внедрены функции общего назначения «ПрочитатьДанныеИзБезопасногоХранилища» и «ЗаписатьДанныеВБезопасноеХранилище».

Например запишу данные:

Прочитаю данные:

В чём разница между хранением в реквизитах и новой методикой:

  • Имея доступ к объекту метаданных, пользователь может прочитать содержимое реквизита с паролем, что невозможно при использовании безопасного хранилища. Для исключения случаев несанкционированного доступа к безопасному хранилищу получение и запись данных (паролей) возможна только в привилегированном режиме.
  • Данные в безопасном хранилище хранятся в закрытом виде и тем самым исключаются случаи непредумышленной «засветки» паролей.
  • Безопасное хранилище исключено из планов обмена, что предотвращает утечку паролей из информационной базы при обмене данными.
работа с безопасным хранилищем в 1с

Другие статьи по теме 1С

Выгрузить табличную часть в Excel

Задача: выгрузить табличную часть формы в файл формата XLSX. К сожалению на прямую это не сделать, но зато мы можем воспользоваться функционалом компонента ПостроительОтчета, который в свою очередь понимает на входе таблицу значений. В итоге нам остаётся лишь выгрузить табличную часть в таблицу значений, которую в свою оочередь скормить построителю отчетов. На выходе будет ТабличныйДокумент, который уже штатно может сохраняться в т.ч. и в формат xlsx. Код получается примерно такой::

Пользователь нажимает кнопку «Экспорт в эксель», на сервере формируется файл и передаётся на клиент. На клиенте он открывается приложением по умолчанию для данного формата файла. Код получился кросс платформенный, что в наше время очень актуально.

1 2 3 43