В моей задаче необходимо было сохран автоматизацией ять таблицу значений в файл. Но при большой нагрузке на сервер приложений таблица не сериализировалась через ЗначениеВСтрокуВнутр.
Методика, предложенная в 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";
ТД = САП.ТЗВТекстЧерезСтроки(ТЗ);
Сообщить(ТД.ПолучитьТекст());
ТЗ = САП.ТЗИзТекстаЧерезСтроки(ТД);
ТЗ.ВыбратьСтроку();
Скриншоты

Форма проверки