|
Создание колонок ТаблицыЗначений без лишней писанины | ☑ | ||
---|---|---|---|---|
0
CMblCL
29.04.16
✎
12:42
|
Есть ли встроенная функция или, возможно, функция в одной из типовых конфигураций, которая позволяет создать колонки, например в ТаблицеЗначений, без лишней писанины.
То есть вместо: Таблица = Новый ТаблицаЗначений; Таблица.Колонки.Добавить("Колонка1"); Таблица.Колонки.Добавить("Колонка2"); Таблица.Колонки.Добавить("Колонка3"); Таблица.Колонки.Добавить("Колонка4"); Таблица.Колонки.Добавить("Колонка5"); Таблица.Колонки.Добавить("Колонка6"); Таблица.Колонки.Добавить("Колонка7"); Таблица.Колонки.Добавить("Колонка8"); Таблица.Колонки.Добавить("Колонка9"); Таблица.Колонки.Добавить("Колонка10"); Таблица.Колонки.Добавить("Колонка11"); Таблица.Колонки.Добавить("Колонка12"); Таблица.Колонки.Добавить("Колонка13"); Таблица.Колонки.Добавить("Колонка14"); Таблица.Колонки.Добавить("Колонка15"); Таблица.Колонки.Добавить("Колонка16"); Таблица.Колонки.Добавить("Колонка17"); Таблица.Колонки.Добавить("Колонка18"); Таблица.Колонки.Добавить("Колонка19"); Таблица.Колонки.Добавить("Колонка20"); Что-то типа: Таблица = Новый ДеревоЗначений; Колонки = "Колонка1, Колонка2, Колонка3, Колонка4, Колонка5, Колонка6, Колонка7, Колонка8, Колонка9, Колонка10 |Колонка11, Колонка12, Колонка13, Колонка14, Колонка15, Колонка16, Колонка17, Колонка18, Колонка19, Колонка20"; СоздатьКолонки(Таблица, Колонки); Предвидя ответы типа "Напиши сам, ты что не программист?", я уже написал подобную процедуру. Я хочу узнать есть ли подобный функционал впринципе. //Создает колонки в таблице, если они не существуют //Колонки: Строка вида "НазваниеКолонки1, НазваниеКолонки2, НазваниеКолонки3" //Таблица: Таблица любого типа, у которой есть свойство "Колонки" Процедура СоздатьКолонки(Таблица, Знач Колонки = "") Экспорт Колонки = СтрЗаменить(Колонки, Символы.ПС, ""); Колонки = СтрЗаменить(Колонки, ",", Символы.ПС); Если ПустаяСтрока(Колонки) Тогда Возврат КонецЕсли; МассивКолонок = Новый Массив; Для Сч = 1 По СтрЧислоСтрок(Колонки) Цикл МассивКолонок.Добавить(СокрЛП(СтрПолучитьСтроку(Колонки, Сч))); КонецЦикла; Для Каждого Колонка Из МассивКолонок Цикл Если Таблица.Колонки.Найти(Колонка) = Неопределено Тогда Таблица.Колонки.Добавить(Колонка); КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
1
drcrasher
29.04.16
✎
12:45
|
а если нужно типизировать колонки?
|
|||
2
Тролль главный
29.04.16
✎
12:46
|
(0) а нахрена МассивКолонок вообще?
|
|||
3
aleks_default
29.04.16
✎
12:46
|
Не помню когда последний раз вручную создавал таблицу значений, и тем более колонки. Обычно таблица всегда уже есть(как выгрузка из запроса, например), можно скопировать существующую.
|
|||
4
Тролль главный
29.04.16
✎
12:48
|
+(3) в обработках это табличные части
|
|||
5
CMblCL
29.04.16
✎
12:50
|
(1) Если нужно типизировать колонки, задавать ширину или представление, то тут уж проще добавлять по одной. Но как часто это бывает нужно?
|
|||
6
Тролль главный
29.04.16
✎
12:53
|
(5) в запросы совать можно только типизированные
|
|||
7
CMblCL
29.04.16
✎
12:54
|
(2) И правда не нужен, всё можно делать в 1м цикле.
|
|||
8
aleks_default
29.04.16
✎
12:54
|
Таблица значений, с нетипизированными колонками использует большое количество памяти. Поэтому в экзамене на специалиста, например, выгрузка результата запроса в таблицу без необходимости = -1 балл.
И тем более нафига большое количество колонок в таблице? Обычно обхожусь меньше десятка. Имхо это признак гов*нокода. |
|||
9
Repey
29.04.16
✎
13:06
|
(8) А разве выгрузка результата запроса в таблицу значений дает нетипизированные колонки?
Смутно помнится, что когда-то проделывал такой финт ушами, как выполнение запроса "выбрать первые 1 .." с полями нужных типов, потом выгружал в ТЗ, потом ее чистил, набивал нужными данными - и обратно в запрос. Работало. А теперь мне такой способ создания таблиц с типизированными полями почему-то не нравится. |
|||
10
1Сергей
29.04.16
✎
13:08
|
(9) запрос делает составные поля. Конкретный тип значения + NULL
|
|||
11
CMblCL
29.04.16
✎
13:12
|
(8) Естественно без гов*нокода тут не обошлось. База много раз переписанная, встречаются ТЗ с 22 колонками во многих местах и каждый раз эта простыня.
|
|||
12
mingw
29.04.16
✎
13:12
|
(0) Зачем столько колонок? Что мешает в одну колонку сохранять СЗ, ТЗ, массив или структуру? В ячейки. В каждой строке.
|
|||
13
CMblCL
29.04.16
✎
13:23
|
(12) Я не совсем понимаю что вы имеете ввиду.
Но в любом случае не избежать точно такого же количества колонок\строк. |
|||
14
Ёпрст
29.04.16
✎
13:36
|
Процедура СоздатьКолонки(Таблица, Знач Колонки = "") Экспорт
Для Каждого Колонка Из СтрРазделить(Колонки,",",Ложь) Цикл Если Таблица.Колонки.Найти(Колонка) = Неопределено Тогда Таблица.Колонки.Добавить(Колонка); КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
15
Новиков
29.04.16
✎
13:37
|
(0) Есть правда не явно и без типов, заточено под ЗначениеВСтрокуВнутр.
РеквизитЗначение = ТаблицаИзСтроки(ЗначениеРеквизита); |
|||
16
1Сергей
29.04.16
✎
13:38
|
(14) что-то я прохлопал функцию СтрРазделить
Давно такая появилась? |
|||
17
trad
29.04.16
✎
13:39
|
||||
18
1Сергей
29.04.16
✎
13:41
|
ого. отстаём, отстаём
|
|||
19
CMblCL
29.04.16
✎
13:48
|
(14) Спасибо за пример, но СтрРазделить() реализовано в версии 8.3.6.1977.
Мне это не подойдет, так как версия 8.2.19.130 в режиме совместимости с 8.1. |
|||
20
aleks_default
29.04.16
✎
13:53
|
(9)неправильно выразился
Таблица значений, а тем более с нетипизированными колонками, использует большое количество памяти. |
|||
21
Ёпрст
29.04.16
✎
14:02
|
можно еще извратом, через значениевстрокувнутр и обратно.
|
|||
22
Новиков
29.04.16
✎
14:07
|
(21) я в (15) как раз таки и привел строчку для гугленья в типовой. Туда если заглянуть, там элегантно обходится момент, когда поднять из внутр не удалось.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |