Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 ноя 2024, 07:50

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

Автор AIFrame, 11 авг 2018, 14:24

0 Пользователей и 1 гость просматривают эту тему.

AIFrame

Оставлю здесь. Может кто откомментит.
// Преобразует табличный документ в таблицу значений
// Первый ряд - имена колонок
// Все колонки с типом "Строка"
Функция ТабДокВТаблицуЗначений(ТабДок) Экспорт
ТЧ = Новый ТаблицаЗначений;

ТекущийРяд = 1;
ТекущаяКолонка = 1;

СписокКолонок = Новый СписокЗначений;
Область = ТабДок.ПолучитьОбласть("R" + ТекущийРяд);
Пока Истина Цикл
ИмяКолонки = Область.Область("R1C" + ТекущаяКолонка).Текст;
ИмяКолонкиМетаданных = ПолучитьДопустимоеИмяДляМетаданных(ИмяКолонки);
Если НЕ ПустаяСтрока(ИмяКолонки) Тогда
СписокКолонок.Добавить(ИмяКолонкиМетаданных, ИмяКолонки);
Иначе
Прервать;
КонецЕсли;
ТекущаяКолонка = ТекущаяКолонка + 1;
КонецЦикла;

ВсегоКолонок = СписокКолонок.Количество();
Если ВсегоКолонок = 0 Тогда
Возврат неопределено;
КонецЕсли;

КС = Новый КвалификаторыСтроки(50);
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("Строка"));
ОписаниеСтроки = Новый ОписаниеТипов(МассивТипов,,,,КС);

СтруктураСтроки = Новый Структура;
Для Каждого Колонка ИЗ СписокКолонок Цикл
ТЧ.Колонки.Добавить(Колонка.Значение, ОписаниеСтроки, Колонка.Представление);
СтруктураСтроки.Вставить(Колонка.Значение, "");
КонецЦикла;

// Перебор строк

ЕстьСтрокаСДанными = Истина;
Пока ЕстьСтрокаСДанными Цикл
ТекущийРяд = ТекущийРяд + 1;
Область = ТабДок.ПолучитьОбласть("R" + ТекущийРяд);

ПустыхЗначений = 0;
Для ИНД = 1 ПО ВсегоКолонок Цикл
ЗначениеКолонки = СокрЛП(Область.Область("R1C" + ИНД).Текст);
Если ПустаяСтрока(ЗначениеКолонки) Тогда
ПустыхЗначений = ПустыхЗначений + 1;
КонецЕсли;
СтруктураСтроки[СписокКолонок[ИНД-1].Значение] = ЗначениеКолонки;
КонецЦикла;
Если ПустыхЗначений >= ВсегоКолонок Тогда
ЕстьСтрокаСДанными = Ложь;
Прервать;
КонецЕсли;
НоваяСтрока = ТЧ.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтруктураСтроки);
КонецЦикла;
Возврат ТЧ;
КонецФункции

Функция ПолучитьДопустимоеИмяДляМетаданных(СтрокаВхода) Экспорт
СтрокаВхода = СокрЛП(СтрокаВхода);
СтрокаВхода = ТРег(СтрокаВхода);
СтрокаВхода = СтрЗаменить(СтрокаВхода, " ", "");
СтрокаВхода = СтрЗаменить(СтрокаВхода, """", "");
НедопустимыеСимволы = ".,/\|!№%;:?*()-=+'`~";
Для ИНД = 1 ПО СтрДлина(НедопустимыеСимволы) Цикл
СимволЗамены = Сред(НедопустимыеСимволы, ИНД, 1);
СтрокаВхода = СтрЗаменить(СтрокаВхода, СимволЗамены, "");
КонецЦикла;
Возврат СтрокаВхода;
КонецФункции

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск