1С 8.3 Заполнить таблицу значений на основе строки
Данные > Примеры кода 1С > 1С 8.3 Таблица значений
Перейти в раздел примеры кода 1С 8.3:
Позволяет в коде не используя макеты заполнить ТЗ на основе текстовой таблицы с отступами в 1С 8.3:
// Возвращает таблицу значений на основе текста (формат в примере использования).
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/11
//
// Параметры:
// Текст - Строка
//
// Возвращаемое значение:
// ТаблицаЗначений
//
// Пример:
// Содержимое =
// "Фамилия |Имя |Отчество
// |
// |Смирнов |Александр |Владимирович
// |Иванова |Мария |Петровна
// |Кузнецов |Дмитрий |Александрович";
//
// Таблица = ТаблицаЗначенийИзСтроки(Содержимое);
// //Таблица будет содержать 3 колонки Фамилия, Имя, Отчество и 3 строки
//
Функция ТаблицаЗначенийИзСтроки(Знач Текст) Экспорт
Таблица = Новый ТаблицаЗначений();
ЗаполнитьТаблицуЗначенийИзСтроки(Текст, Таблица, Истина);
Возврат Таблица;
КонецФункции
// Заполнить таблицу значений из строки (формат в примере использования)
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/11
//
// Параметры:
// Текст - Строка
// Таблица - ТаблицаЗначений, Неопределено - Таблица или переменная, в которую она будет помещена
// ДополнятьКолонками - Булево - Нужно ли дополнять колонками таблицу
//
// Пример:
// Содержимое =
// "Фамилия |Имя |Отчество
// |
// |Смирнов |Александр |Владимирович
// |Иванова |Мария |Петровна
// |Кузнецов |Дмитрий |Александрович";
//
// Таблица = Новый ТаблицаЗначений();
// Таблица.Колонки.Добавить("Фамилия");
// Таблица.Колонки.Добавить("Имя");
//
// ЗаполнитьТаблицуЗначенийИзСтроки(Содержимое, Таблица, Истина);
// //Таблица будет содержать 3 колонки Фамилия, Имя, Отчество и 3 строки
//
Процедура ЗаполнитьТаблицуЗначенийИзСтроки(Знач Текст, Знач Таблица = Неопределено, Знач ДополнятьКолонками = Ложь) Экспорт
Если Таблица = Неопределено Тогда
Таблица = Новый ТаблицаЗначений();
КонецЕсли;
ЧислоСтрок = СтрЧислоСтрок(Текст);
ИменаКолонок = Новый Массив; // Массив из Строка
Разделитель = " |";
Для НомерСтроки = 1 По ЧислоСтрок Цикл
СтрокаТекста = СтрПолучитьСтроку(Текст, НомерСтроки);
Если ПустаяСтрока(СтрокаТекста) Тогда
Продолжить;
КонецЕсли;
ЧастиСтроки = СтрРазделить(СтрокаТекста, Разделитель, Истина);
ЗаполненыКолонки = ЗначениеЗаполнено(ИменаКолонок);
Если ЗаполненыКолонки Тогда
СтрокаТаблицы = Таблица.Добавить();
КонецЕсли;
Для ИндексЧасти = 0 По ЧастиСтроки.Количество() - 1 Цикл
ЧастьСтроки = СокрЛП(ЧастиСтроки[ИндексЧасти]);
Если ПустаяСтрока(ЧастьСтроки) Тогда
Продолжить;
КонецЕсли;
Если ЗаполненыКолонки Тогда
СтрокаТаблицы[ИменаКолонок[ИндексЧасти]] = ЧастьСтроки;
Иначе
ИменаКолонок.Добавить(ЧастьСтроки);
Если ДополнятьКолонками И Таблица.Колонки.Найти(ЧастьСтроки) = Неопределено Тогда
Таблица.Колонки.Добавить(ЧастьСтроки, Новый ОписаниеТипов("Строка"));
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
// MIT License
// Copyright (c) 2024 SeiOkami
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files
// (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify,
// merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/11
//
// Параметры:
// Текст - Строка
//
// Возвращаемое значение:
// ТаблицаЗначений
//
// Пример:
// Содержимое =
// "Фамилия |Имя |Отчество
// |
// |Смирнов |Александр |Владимирович
// |Иванова |Мария |Петровна
// |Кузнецов |Дмитрий |Александрович";
//
// Таблица = ТаблицаЗначенийИзСтроки(Содержимое);
// //Таблица будет содержать 3 колонки Фамилия, Имя, Отчество и 3 строки
//
Функция ТаблицаЗначенийИзСтроки(Знач Текст) Экспорт
Таблица = Новый ТаблицаЗначений();
ЗаполнитьТаблицуЗначенийИзСтроки(Текст, Таблица, Истина);
Возврат Таблица;
КонецФункции
// Заполнить таблицу значений из строки (формат в примере использования)
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/11
//
// Параметры:
// Текст - Строка
// Таблица - ТаблицаЗначений, Неопределено - Таблица или переменная, в которую она будет помещена
// ДополнятьКолонками - Булево - Нужно ли дополнять колонками таблицу
//
// Пример:
// Содержимое =
// "Фамилия |Имя |Отчество
// |
// |Смирнов |Александр |Владимирович
// |Иванова |Мария |Петровна
// |Кузнецов |Дмитрий |Александрович";
//
// Таблица = Новый ТаблицаЗначений();
// Таблица.Колонки.Добавить("Фамилия");
// Таблица.Колонки.Добавить("Имя");
//
// ЗаполнитьТаблицуЗначенийИзСтроки(Содержимое, Таблица, Истина);
// //Таблица будет содержать 3 колонки Фамилия, Имя, Отчество и 3 строки
//
Процедура ЗаполнитьТаблицуЗначенийИзСтроки(Знач Текст, Знач Таблица = Неопределено, Знач ДополнятьКолонками = Ложь) Экспорт
Если Таблица = Неопределено Тогда
Таблица = Новый ТаблицаЗначений();
КонецЕсли;
ЧислоСтрок = СтрЧислоСтрок(Текст);
ИменаКолонок = Новый Массив; // Массив из Строка
Разделитель = " |";
Для НомерСтроки = 1 По ЧислоСтрок Цикл
СтрокаТекста = СтрПолучитьСтроку(Текст, НомерСтроки);
Если ПустаяСтрока(СтрокаТекста) Тогда
Продолжить;
КонецЕсли;
ЧастиСтроки = СтрРазделить(СтрокаТекста, Разделитель, Истина);
ЗаполненыКолонки = ЗначениеЗаполнено(ИменаКолонок);
Если ЗаполненыКолонки Тогда
СтрокаТаблицы = Таблица.Добавить();
КонецЕсли;
Для ИндексЧасти = 0 По ЧастиСтроки.Количество() - 1 Цикл
ЧастьСтроки = СокрЛП(ЧастиСтроки[ИндексЧасти]);
Если ПустаяСтрока(ЧастьСтроки) Тогда
Продолжить;
КонецЕсли;
Если ЗаполненыКолонки Тогда
СтрокаТаблицы[ИменаКолонок[ИндексЧасти]] = ЧастьСтроки;
Иначе
ИменаКолонок.Добавить(ЧастьСтроки);
Если ДополнятьКолонками И Таблица.Колонки.Найти(ЧастьСтроки) = Неопределено Тогда
Таблица.Колонки.Добавить(ЧастьСтроки, Новый ОписаниеТипов("Строка"));
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
// MIT License
// Copyright (c) 2024 SeiOkami
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files
// (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify,
// merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
Результат:
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник