Сериализация больших таблиц значений в 1С8

Публикация № 153446 25.09.12

Разработка - Универсальные функции

Рассмотрена специфика и предложена конкретная методика сериализации в файл больших таблиц значений
Введение в проблему

В моей задаче необходимо было сохранять таблицу значений в файл. Но при большой нагрузке на сервер приложений таблица не сериализировалась через ЗначениеВСтрокуВнутр.

Методика, предложенная в http://kb.mista.ru/2/doku.php?id=1c:v8:howto:serializacija_tablicyznachenij_v_xml, не работает в 1с81 (8.1.15.14), видимо,  в более ранних версиях платформы это не возможно.

Если упаковать таблицу значений в хранилище значений, то методика работает:
ХЗ = Новый ХранилищеЗначений(ТЗ);

Однако, проблема заключалась в том, что при критической нагрузке и в хранилище значений 1С не могла упаковать таблицу значений, выдавала ошибку о нехватке памяти.

Решение

Решение нужно было написать быстро, и скорость чтения таблиц не должна была бы сильно пострадать. Скорость записи была не принципиальна.

Решено было таблицу пробовать выгружать обычным методом, а если ЗначениеВСтрокуВнутр выдаст ошибку, выгружать построчно.

Соответственно, при восстановлении таблицы проверялся формат файла, и в зависимости от формата использовалась та или иная распаковка.


 

Код по упаковке в модуле САП:

 

Функция ТЗВТекст(ТЗ) Экспорт

       Попытка

             Т = Новый ТекстовыйДокумент();

             Т.УстановитьТекст(ЗначениеВСтрокуВнутр(ТЗ));

             Возврат Т;

       Исключение

             Возврат ТЗВТекстЧерезСтроки(ТЗ);

       КонецПопытки;

КонецФункции

 

Функция ТЗИзТекста(ТекстовыйДокумент) Экспорт

      

       Если ТекстовыйДокумент.ПолучитьСтроку(1) = "LINE_FORMAT" Тогда

             Возврат ТЗИзТекстаЧерезСтроки(ТекстовыйДокумент);

       КонецЕсли;

      

       Возврат ЗначениеИЗСтрокиВнутр(ТекстовыйДокумент.ПолучитьТекст());

КонецФункции

 

Функция ТЗВТекстЧерезСтроки(ТЗ) Экспорт

       Т = Новый ТекстовыйДокумент();

       МассивКолонок = Новый Массив();

       ВсегоКолонок = ТЗ.Колонки.Количество()-1;

       Для Инд = 0 По ВсегоКолонок Цикл

             МассивКолонок.Добавить(0);

       КонецЦикла;

      

       Т.ДобавитьСтроку("LINE_FORMAT");

      

       ТЗ2 = ТЗ.СкопироватьКолонки();

      

       РезСтрока = ЗначениеВСтрокуВнутр(ТЗ2);

       РезСтрока = ЭкранироватьСимволы(РезСтрока);

       Т.ДобавитьСтроку(РезСтрока);

 

      

       Для Каждого Строка ИЗ ТЗ Цикл

             Для Инд = 0 По ВсегоКолонок Цикл

                    МассивКолонок[Инд] = Строка[Инд];

             КонецЦикла;

             РезСтрока = ЗначениеВСтрокуВнутр(МассивКолонок);

             РезСтрока = ЭкранироватьСимволы(РезСтрока);

             Т.ДобавитьСтроку(РезСтрока);

       КонецЦикла;

       Возврат Т;

КонецФункции

 

Функция ТЗИзТекстаЧерезСтроки(ТекстовыйДокумент) Экспорт

       ИсхСтрока = РазЭкранироватьСимволы(ТекстовыйДокумент.ПолучитьСтроку(2));

       ТЗ = ЗначениеИзСтрокиВнутр(ИсхСтрока);

       ВсегоКолонок = ТЗ.Колонки.Количество()-1;

       Для Инд = 3 По ТекстовыйДокумент.КоличествоСтрок() Цикл

             ИсхСтрока = РазЭкранироватьСимволы(ТекстовыйДокумент.ПолучитьСтроку(Инд));

             Массив = ЗначениеИзСтрокиВнутр(ИсхСтрока);

             НСтр = ТЗ.Добавить();

             Для КолИнд = 0 По ВсегоКолонок Цикл

                    НСтр[КолИнд] = Массив[КолИнд];

             КонецЦикла;

       КонецЦикла;

      

       Возврат ТЗ;

      

КонецФункции

 

Функция ЭкранироватьСимволы(Строка)

       Р = СтрЗаменить(Строка, "\", "\\");

       Р = СтрЗаменить(Р, Символы.ПС, "\n");

       Р = СтрЗаменить(Р, Символы.ВК, "\r");

       Р = СтрЗаменить(Р, Символы.Таб, "\t");

      

       Возврат Р;

КонецФункции

 

Функция РазЭкранироватьСимволы(Строка)

       Р = СтрЗаменить(Строка, "\\", "\");

       Р = СтрЗаменить(Р, "\n", Символы.ПС);

       Р = СтрЗаменить(Р, "\r", Символы.ВК);

       Р = СтрЗаменить(Р, "\t", Символы.Таб);

       Возврат Р;

КонецФункции

 

Пример использования кода:

Функция СохранитьРасчет(ИмяФайла, Таблица) Экспорт

       Попытка

             Значение = ЗначениеВСтрокуВнутр(Таблица);

             Т = Новый ТекстовыйДокумент();

             Т.УстановитьТекст(Значение);

             Т.Записать(ИмяФайла, "UTF-8");

            

             Возврат ИмяФайла;

       Исключение

             ОписаниеОшибки = ОписаниеОшибки();

             Сообщить("Не смогли преобразовать таблицу для сохранения в файл: " + ИмяФайла +  "  " + ОписаниеОшибки + ". Будем записывать в другом формате.", СтатусСообщения.Важное);

            

             Т = САП.ТЗВТекст(Таблица);

             Т.Записать(ИмяФайла, "UTF-8");

       КонецПопытки;

      

КонецФункции

 

 

Функция ВосстановитьРасчет(ИмяФайла) Экспорт

       Попытка

             Т = Новый ТекстовыйДокумент();

             Т.Прочитать(ИмяФайла, "UTF-8");

             Значение = САП.ТЗИзТекста(Т);

       Исключение

             Возврат Неопределено;

       КонецПопытки;

       Возврат Значение;

      

КонецФункции

Пример тестирования функции:

 

ТЗ = новый ТаблицаЗначений;

  ТЗ.Колонки.Добавить("Кол1");

  ТЗ.Колонки.Добавить("Кол2");

 

  Стр = ТЗ.Добавить();

  Стр.Кол1 = 1;

  Стр.Кол2 = "1";

 

  Стр = ТЗ.Добавить();

  Стр.Кол1 = 2;

  Стр.Кол2 = "2";

 

 

 

  ТД = САП.ТЗВТекстЧерезСтроки(ТЗ);

  Сообщить(ТД.ПолучитьТекст());

  ТЗ = САП.ТЗИзТекстаЧерезСтроки(ТД);

  ТЗ.ВыбратьСтроку();


 

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. khaoos 239 26.09.12 05:16 Сейчас в теме
А какова разница по скорости упаковки/распаковки обычного метода и построчного на больших таблицах? Если не очень существенная, то я бы не давал шанса обычному методу вывалить ошибку о нехватке памяти (если эта ошибка конечно не быстро вываливается). Или все же имеет смысл разделять использование методов в зависимости от ситуации?
2. ander_ 26.09.12 07:40 Сейчас в теме
(1) khaoos, осмелюсь предположить, что разница в скорости будет в несколько раз.
3. fixin 4181 26.09.12 08:01 Сейчас в теме
(2) не замерял, но думаю, что стандартный метод работает гораздо быстрее
4. orefkov 1151 26.09.12 09:22 Сейчас в теме
Имхо, чем выгружать построчно, да еще перебирая все колонки в цикле, можно используя метод Скопировать ТаблицыЗначений, выдергивать по 1000 строк в другую ТЗ, и сохранять ее.
artbear; fixin; +2 Ответить
5. fixin 4181 26.09.12 11:28 Сейчас в теме
(4) да, согласен, будет работать быстрее, но мне нужно было сделать затычку для защиты от переполнения памяти. Переделывать уже не буду.
Оставьте свое сообщение

См. также

Выполнение длительных операций в фоновых заданиях

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Как программно запустить длительные операции в фоновых заданиях без блокировки пользовательского интерфейса.

19.01.2023    1675    programmer_2019    6    

24

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    4776    quazare    8    

94

Выгрузка данных в Excel с добавлением формул (нюансы формирования формул)

Загрузка и выгрузка в Excel Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Итак, я здесь описываю выгрузку отчета в Excel с добавлением пустых колонок для заполнения внутри самого Excel + колонки с формулами для выполнения расчетов на базе выгруженного и введенного руками в Excel. На самом деле публикация появилась по причине моих проблем, возникших при написании формул. Все остальное вроде штатно, но вдруг кому пригодится.

30.05.2022    2757    Zlohobbit    5    

19

Хитрости СКД. Часть 3

СКД Универсальные функции Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

Столкнулся с тем, что мне приходится писать гору отчетов. Во многих приходится использовать повторяющиеся приемы. Решил написать шпаргалку, которая, надеюсь пригодится не только мне. В этой статье: Объединение ячеек в отчете только на определенном уровне иерархии, Постобработка итогов в табличном документе, Скрытие колонок в зависимости от количества месяцев в периоде.

28.05.2022    6281    milkers    11    

86

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

Базовые принципы работы с регламентными заданиями подсистем БСП

Универсальные функции БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В очередной публикации рассмотрим некоторые базовые приемы работы с регламентными заданиями в рамках библиотеки стандартных подсистем

22.05.2022    7482    quazare    24    

52

Модули общего назначения - готовые полезные функции и процедуры конфигураций на БСП

Универсальные функции БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данной статье я рассматриваю несколько полезных "классических" функций и процедур для работы с данными, которые уже встроены в БСП и готовы к использованию.

25.04.2022    9032    quazare    11    

126

Вывод табличных документов с разной ориентацией страниц в один pdf файл

Универсальные функции Платформа 1С v8.3 Россия Бесплатно (free)

Привожу код для вывода нескольких табличных документов c разной ориентацией страниц в один файл pdf.

06.04.2022    2438    sdjoker    5    

28

Полезный код для программистов 1С (часть 3). Подготовка печатных форм + подсистема Управление печатью (БСП)

БСП (Библиотека стандартных подсистем) Универсальные функции Платформа 1С v8.3 Бесплатно (free)

Мы все любим 1С, не так ли? Вот дает 1С прекрасный механизм возможности модификации макетов печатных форм в БСП. А из всех рекомендаций это получение макета и заполнение параметров областей. И вы спросите: "А что не так... ты печатные формы накодить не можешь без указаний сверху?". Да вот в том то и дело, что я могу все. А вот пользователям от такого механизма пользы 0, если из всех доступных изменений остаются только шрифты, да текст произвольный накинуть. А ведь можно больше, надо только соблюдать несколько правил при подготовке печатных форм...

07.03.2022    8777    vandalsvq    0    

56

Убираем параметры из отбора СКД

Универсальные функции СКД Платформа 1С v8.3 Система компоновки данных Бесплатно (free)

Заметка о некоторых технических нюансах параметров данных и отборов СКД.

17.02.2022    4853    Yashazz    29    

31

Работа с 1С:Аналитика Промо

Онлайн-курс предусматривает изучение возможностей системы “1С:Аналитика”, которая работает как составная часть платформы “1С:Предприятие” и обеспечивает оперативный просмотр и анализ необходимых данных.

4500 рублей

Конвертируем печатную форму pdf в картинку (jpg, gif, png и прочие) на сервере

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Была поставлена интересная задача конвертировать печатную форму в файл картинку. По условию задачи клиенту на почту нужно присылать только файл картинку (jpg, gif).

22.12.2021    5605    John_d    25    

46

Несколько простых приемов для удобной работы в конфигураторе

Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Простая и удобная среда разработки 1С:Предприятия позволяет практически любому человеку начать работать под капотом 1С - в конфигураторе. Время идет, новички становятся программистами, специалистами, а об удобных приемах работы узнают годами, по ходу своего карьерного пути. А здорово было бы, если бы все знали удобные приемы в начале своего пути? Эти несколько приемов будут полезны новичкам, так как они затрагивают ту область работы, с которой приходится сталкиваться в начале карьеры.

12.11.2021    12088    acces969    95    

138

Простейший способ учета изменений управляемых форм объектов 1С

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Описание методологии, позволяющей контролировать список изменений форм + вспомогательные функции программного изменения форм. Пригодятся при внесении изменений в расширениях, если есть необходимость видеть и контролировать все сделанные с формой изменения.

02.11.2021    1959    avalakh    12    

20

Функции для преобразования справочников и документов в соответствие и обратно

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Функции для преобразования справочников и документов в соответствие и обратно. Предназначены для передачи данных между одинаковыми и не очень конфигурациями или как очередной вариант сохранения (архивирования) объектов перед редактированием с последующим восстановлением.

01.11.2021    1709    avalakh    5    

19

Программно свернуть/развернуть узел динамического списка (с основной таблицей). Жирная точка над всеми "i".

Работа с интерфейсом Универсальные функции Платформа 1С v8.3 Бесплатно (free)

Какой пользователь не мечтал поменьше тыркать кнопкой? Особенно в малюсенькие +/- в "древесных" динамических списках. Если вас тоже озадачили, чтобы, при выборе узла дерева сами развернулись все его вложенные элементы , а при выборе другого узла - так же автоматом свернулась ранее развернутая ветка (причем эти узлы могут находится в разных "отношениях" друг с другом)... То вам - сюда.

08.10.2021    3540    e-9    13    

21

1СПАРК РИСКИ. Сервис оценки благонадежности контрагентов. Промо

СПАРК помогает предотвратить мошенничество со стороны компаний и предпринимателей, благодаря актуальным сведениям о компаниях и системе выявления факторов риска.Сервис позволяет управлять налоговыми рисками и комплексно оценивать благонадежность контрагентов.

Взаимодействие с api Честный знак (Молочная продукция)

WEB-интеграция Универсальные функции Обмен с ГосИС Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Обзор основных примеров взаимодействия с Честным знаком по api для нетиповых конфигураций.

30.08.2021    13570    user5300    68    

54

Из Word в табличный документ

Универсальные функции Платформа 1С v8.3 Платформа 1C v8.2 Бесплатно (free)

Быстро и просто: текст, списки, таблицы. Готовый код

18.08.2021    3992    Yashazz    6    

61

Префиксация объектов - полезный типовой функционал БСП

Универсальные функции БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Россия Бухгалтерский учет Управленческий учет Бесплатно (free)

В данной публикации предлагаю рассмотреть основные типовые возможности библиотеки стандартных подсистем (БСП), касаемые префиксации объектов конфигураций.

21.06.2021    10185    quazare    4    

61

Своя функция &Вместо &ИзменениеИКонтроль

Универсальные функции Платформа 1С v8.3 Россия Бесплатно (free)

Как добавить контроль в расширения, если не доверяешь аннотации &ИзменениеИКонтроль.

06.06.2021    15269    AntonProgma    171    

19

Предотвращение многократного вызова "ПриПолученииДанных" во время поиска в табличном поле в обычных формах

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

Долго искал решение: как при выводе строк заполнить значениями колонки, которые созданы программно, чтобы, не было тормозов при стандартном поиске. И с минимальными изменениями (легко контролируемыми, при обновлении).

07.04.2021    3403    Vlad_CK    9    

25

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

Генератор QR кодов для 1С без компонент через HTTP API

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

Самый простой, на мой взгляд, способ получить QR код для 1СV8. Без внешних компонент, как говорится, бесплатно, без смс и регистрации))

17.12.2020    8732    shell_maxim    28    

30

Сохранение настроек

Универсальные функции БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Делюсь еще одним не самым очевидным способом хранения настроек в базах на БСП без доработки конфигурации. Весь код в статье.

22.11.2020    9112    ixijixi    8    

66

Сохранение настроенного запроса набора данных СКД

Универсальные функции Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

Как сохранить запрос набора данных СКД в том виде, каким он будет выполнен системой для открытия в консоли запросов с диска ИТС.

09.11.2020    2311    Serge R    0    

20

Произвольные колонтитулы и повтор шапки таблицы в табличном документе (функция)

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

Пример рекурсивной функции, при помощи которой в табличный документ можно выводить верхний или нижний колонтитулы с произвольным содержимым, а также делать повтор шапки таблицы (или таблиц, если их несколько).

07.10.2020    12391    ellavs    6    

34

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

Лайфхаки для разработчиков 1С. Часть 1

Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Россия Бесплатно (free)

Собрали 20 лайфхаков, которые используют наши программисты при работе с 1С. Формы, контрагенты, СКД, процедуры, глюки платформы и многое другое. В этой статье публикуем первую часть.

30.09.2020    9392    Neti    47    

68

Самый простой парсинг и обработка веб-страниц в 1С

WEB-интеграция Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим самый простой парсинг веб-страниц средствами платформы 1С и еще некоторые полезные приемы работы с веб-страницами.

07.08.2020    23602    Infostart    30    

145

Полезные встроенные функции для работы с печатными формами и не только на УТ 11.4 и БП 3.0 (сравнение)

Универсальные функции Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Бесплатно (free)

В данном обзоре приведу примеры встроенных используемых функций для работы с печатными формами на примерах конфигураций Управление торговлей 11.4 и Бухгалтерия 3.0.

10.07.2020    14214    quazare    7    

79

Вывод дерева в табличный документ СКД

Универсальные функции Платформа 1С v8.3 Система компоновки данных Бесплатно (free)

Вывод содержимого элемента формы "ДанныеФормыДерево" в табличный документ средствами СКД.

09.07.2020    6739    Yashazz    12    

25

Распознавание и загрузка документов в 1С Промо

Универсальная программа-обработка для распознавания любых сканов или фото первичных документов в 1С (счета-фактуры, УПД, ТТН, акты и тд). Точность распознания до 98%.

от 11 рублей

Форма выбора (подбор) в управляемых формах

Универсальные функции Работа с интерфейсом Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Бесплатно (free)

Разбор небольших примеров того, как правильно открывать форму выбора (подбора) в управляемых формах, не прибегая к модальным окнам.

08.05.2020    164929    user5300    37    

275

Получаем уровень группировки ячейки табличного документа

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

Табличные документы отчетов часто формируются с разными уровнями группировок и иногда требуется определить номер уровня ячейки. Предлагаю свои функции, которые позволяют определить, как горизонтальный, так и вертикальный уровень группировки любой ячейки табличного документа.

23.03.2020    8190    maxx    16    

57

Поблочная обработка таблицы. Обзор решений

Универсальные функции Запросы СКД Платформа 1С v8.3 Бесплатно (free)

8 способов реализации повседневной актуальной задачи, готовый код

25.02.2020    3256    Yashazz    21    

21

Сравнение адресов: случай из практики

Математика и алгоритмы Универсальные функции Платформа 1С v8.3 Россия Бесплатно (free)

Как с учетом обстоятельств сравнить два небрежно записанных адреса и решить, означают ли они одно и то же. Программный код написан для режима совместимости с 8.2.

04.01.2020    5203    AnatolPopov    7    

22

Видеокурс-практикум: как подготовить и написать ТЗ, ЗНР, ЧТЗ. Промо

В курсе обобщен опыт работы аналитика на проектах в течение пяти лет, в нескольких фирмах. Подходы к написанию документов унифицированы и по возможности не привязаны к конфигурациям 1С.

3 500 рублей

Сходство Джаро - Винклера. Нечеткое сравнение строк

Универсальные функции Платформа 1С v8.3 Россия Бесплатно (free)

В области информатики и статистики сходство Джаро - Винклера представляет собой меру схожести строк для измерения расстояния между двумя последовательностями символов. В публикации рассмотрены некоторые особенности алгоритма, и представлен вариант его реализации на языке 1С.

25.12.2019    10965    brooho    21    

168

Автоматическое создание связанного объекта в базе 1С: Документооборот через бесшовную интеграцию

Универсальные функции Механизмы типовых конфигураций Платформа 1С v8.3 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Бесплатно (free)

При настройке бесшовной интеграции с базой документооборота часто возникает задача - пользователи просят автоматически создавать связанный объект в базе документооборота по некоторому условию. В данной публикации я хочу поделиться своим решением данной задачи.

23.12.2019    5937    pavelpribytkin96    3    

39

Разбор любого JSON-объекта в соответствующую структуру

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Данная публикация предназначена разработчикам 1С, которым приходиться разбирать данные формата JSON. Выложенный пример кода создает объект типа Структура, полностью повторяющий структуру данных формата JSON.

13.11.2019    35138    user665435_al.windstorm    16    

27