|
Имя колонки ТЗ задается программно | ☑ | ||
---|---|---|---|---|
0
Fomania
03.11.11
✎
14:17
|
Подскажите пожалуйста, как обратиться к ячейке таблицы и изменить значение, если мне нужно сделать действие такого типа:
СтрокаТаблицыЗначений.ИмяКолонки = СтрокаТаблицыЗначений.ИмяКолонки+Число; Но имя колонки мне неизвестно, я программно получаю имя колонки из файла - т.е. создается таблица с заранее неизвестным количеством колонок. Как потом к ним обращаться? Может нужно как-то через индекс это делать, но у меня не получилось. Пробовала примерно так: СтрокаТЗ.Установить(ИндексКолонки, Строка[ИндексКолонки]+Число); Очень надо, заранее спасибо! |
|||
1
Axel2009
03.11.11
✎
14:18
|
Строка["ИмяКолонки"] = Неопределено
|
|||
2
Starhan
03.11.11
✎
14:20
|
где логика.
Создаю неизвестное количество колонок, как потом к ним обращаться. У меня закономерный вопрос. Откуда ты знаешь к какой колонке ты хочешь обратиться? |
|||
3
izekia
03.11.11
✎
14:21
|
СтрокаТЗ.Установить(ИндексКолонки, Строка[ИндексКолонки]+Число);
это должно работать или проще СтрокаТЗ[ИндексКолонки] = СтрокаТЗ[ИндексКолонки] + Число |
|||
4
izekia
03.11.11
✎
14:21
|
скорее всего у тебя на этапе получения строки проблема
давай код |
|||
5
Reset
03.11.11
✎
14:23
|
(0)
1. Если известно имя колонки, то СтрокаТЗ[ИмяКолонки]=СтрокаТЗ[ИмяКолонки]+Число; 2. Если известен индекс колонки, то ИмяКолонки=ТЗ.Колонки[Индекс].Имя; и далее 1. |
|||
6
Starhan
03.11.11
✎
14:24
|
надо смортеть как создаешь колонки
|
|||
7
Reset
03.11.11
✎
14:26
|
+(5)(0) Через Установить():
СтрокаТЗ.Установить(ИндексКолонки, СтрокаТЗ.Получить(ИндексКолонки)+Число); |
|||
8
Starhan
03.11.11
✎
14:27
|
(3) ты думаешь ей надо просто к каждой колонке прибвавить полученное число?
я так понял число - это индекс колонки. О_о |
|||
9
izekia
03.11.11
✎
14:28
|
(8) я не телепат
(5) выдержка из сп: СтрокаТаблицыЗначений (ValueTableRow) Элементы коллекции: Произвольный Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются значения в колонке данной строки. Возможно обращение к значению колонки данной строки посредством оператора [...]. В качестве аргумента передается индекс колонки (нумерация с 0). |
|||
10
izekia
03.11.11
✎
14:28
|
так что (3) работает и не надо никакого имени
|
|||
11
Reset
03.11.11
✎
14:29
|
(9) ??
|
|||
12
Reset
03.11.11
✎
14:29
|
Через имя тоже работает.
Не понял, к чему это. |
|||
13
Starhan
03.11.11
✎
14:31
|
кароче
СтрокаТЗ.Установить(ИндексКолонки, Строка[ИндексКолонки]+Число); код рабочий если Индекс колонки число в пределах диапозона индексов а "Число" имеет тип слогаемый с со значением в Строка[ИндексКолонки] |
|||
14
Starhan
03.11.11
✎
14:33
|
(13) хотя вру хз чо такое строка
в (3) будет правильно :) |
|||
15
izekia
03.11.11
✎
14:40
|
(11) я в ответ на (5) вот на эту часть написал:
"2. Если известен индекс колонки, то ИмяКолонки=ТЗ.Колонки[Индекс].Имя; и далее 1. " |
|||
16
izekia
03.11.11
✎
14:41
|
+(15) лишняя операция
|
|||
17
Reset
03.11.11
✎
14:48
|
(16) :)
А копипаста зачем? Я где-то говорил, что нельзя через число? Где? :) Или научился копипастить и хвастаешься? Версия через числовой индекс уже была тебя в (3). Я просто привел другие варианты. В каких-то случаях они могут быть хуже, в каких-то лучше. Мне вообще нельзя писать что-то в темах, где ты что-то предложил? Твои ответы единственно верные и точные? Ты один такой профи и все должны молчать и завидовать? :)) |
|||
18
Fomania
03.11.11
✎
14:51
|
(4) Я выгружаю данные из текстового файла в таблицу. Если выгружать без отбора, получаются такие колонки: ИмяГостя (в гостинице), КодНачисления (за услуги), СуммаНачисления. Мне нужно получить таблицу, где каждый код начисления будет отдельной колонкой, а в ячейке ИмяГостя[КодНачисления] будут суммироваться суммы начисления.
ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("ИмяГостя"); ....//считываем файл СтрокаИзФайла = ПотокЧтенияСтрок.ПолучитьСтроку(Строка); //до этого момента все работает, строки из файла считываются СтрокаТЗ = ТЗ.Найти(СокрЛП(Сред(СтрокаИзФайла,22,30)),"ИмяГостя"); Если СтрокаТЗ = Неопределено Тогда СтрокаТЗ = ТЗ.Добавить(); СтрокаТЗ.ИмяГостя = СокрЛП(Сред(СтрокаИзФайла,22,30)); КонецЕсли; СтрокаТЗ = ТЗ.Найти(СокрЛП(Сред(СтрокаИзФайла,22,30)),"ИмяГостя"); КолонкаТЗ = ТЗ.Колонки.Найти(СокрЛП(Сред(СтрокаИзФайла,125,4))); Если КолонкаТЗ = Неопределено Тогда ТЗ.Колонки.Добавить(СокрЛП(Сред(СтрокаИзФайла,125,4)), Новый ОписаниеТипов("Число"), СокрЛП(Сред(СтрокаИзФайла,125,30)), 7); КонецЕсли; КолонкаТЗ = ТЗ.Колонки.Найти(СокрЛП(Сред(СтрокаИзФайла,125,4))); ИндексКолонки = ТЗ.Индекс(КолонкаТЗ); СтрокаТЗ.Установить(ИндексКолонки, Строка[ИндексКолонки]+Число(Сред(СтрокаИзФайла,156,13))); |
|||
19
Reset
03.11.11
✎
14:55
|
(18) Во все не врубался, конец можно заменить на:
|
|||
20
izekia
03.11.11
✎
14:56
|
(17) чтобы показать что у меня есть сп. Нет. Нигде.
Нет, хвастаюсь наличием сп. Можно. Нет. Да, но можно не молча, а еще и восхвалять)) |
|||
21
Reset
03.11.11
✎
14:57
|
(19) копирование-зло )
СтрокаТЗ[КолонкаТЗ.Имя]=СтрокаТЗ[КолонкаТЗ.Имя]+Число(Сред(СтрокаИзФайла,156,13))); |
|||
22
Starhan
03.11.11
✎
14:58
|
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("ИмяГостя"); ....//считываем файл СтрокаИзФайла = ПотокЧтенияСтрок.ПолучитьСтроку(Строка); //до этого момента все работает, строки из файла считываются СтрокаТЗ = ТЗ.Найти(СокрЛП(Сред(СтрокаИзФайла,22,30)),"ИмяГостя"); Если СтрокаТЗ = Неопределено Тогда СтрокаТЗ = ТЗ.Добавить(); СтрокаТЗ.ИмяГостя = СокрЛП(Сред(СтрокаИзФайла,22,30)); КонецЕсли; СтрокаТЗ = ТЗ.Найти(СокрЛП(Сред(СтрокаИзФайла,22,30)),"ИмяГостя"); //!!!Зачем ще раз искать строчку? КолонкаТЗ = ТЗ.Колонки.Найти(СокрЛП(Сред(СтрокаИзФайла,125,4))); Если КолонкаТЗ = Неопределено Тогда ТЗ.Колонки.Добавить(СокрЛП(Сред(СтрокаИзФайла,125,4)), Новый ОписаниеТипов("Число"), СокрЛП(Сред(СтрокаИзФайла,125,30)), 7); КонецЕсли; КолонкаТЗ = ТЗ.Колонки.Найти(СокрЛП(Сред(СтрокаИзФайла,125,4))); ИндексКолонки = ТЗ.Индекс(КолонкаТЗ); СтрокаТЗ.Установить(ИндексКолонки, Строка[ИндексКолонки]+Число(Сред(СтрокаИзФайла,156,13))); Зачем ще раз искать строчку? |
|||
23
Reset
03.11.11
✎
14:59
|
Короче, перепишите кусок кода девушке, мне работать надо :)
|
|||
24
izekia
03.11.11
✎
14:59
|
(18) вкратце:
ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("ИмяГостя"); ....//считываем файл СтрокаИзФайла = ПотокЧтенияСтрок.ПолучитьСтроку(Строка); //до этого момента все работает, строки из файла считываются СтрокаТЗ = ТЗ.Найти(СокрЛП(Сред(СтрокаИзФайла,22,30)),"ИмяГостя"); Если СтрокаТЗ = Неопределено Тогда СтрокаТЗ = ТЗ.Добавить(); СтрокаТЗ.ИмяГостя = СокрЛП(Сред(СтрокаИзФайла,22,30)); КонецЕсли; КолонкаТЗ = ТЗ.Колонки.Найти(СокрЛП(Сред(СтрокаИзФайла,125,4))); Если КолонкаТЗ = Неопределено Тогда КолонкаТЗ = ТЗ.Колонки.Добавить(СокрЛП(Сред(СтрокаИзФайла,125,4)), Новый ОписаниеТипов("Число"), СокрЛП(Сред(СтрокаИзФайла,125,30)), 7); КонецЕсли; СтрокаТЗ.Установить(КолонкаТЗ.Имя, Строка[КолонкаТЗ.Имя]+Число(Сред(СтрокаИзФайла,156,13))); |
|||
25
Fomania
03.11.11
✎
15:00
|
(22) Почему-то при попытке вывести строку методом Сообщить не удалось получить данные, хотя из Если она работает. хотя по идее и после КонецЕсли данные должны быть доступны
|
|||
26
Starhan
03.11.11
✎
15:03
|
(24) последняя строчка не правильно
|
|||
27
Reset
03.11.11
✎
15:03
|
(25) смотри, в (24) все уже более-менее прилично, только последнюю стороку взять из (21) - там ошибка с 1 параметром в "Установить", в остальном правильно (имхо)
|
|||
28
izekia
03.11.11
✎
15:04
|
(точно, копипаст - зло
|
|||
29
izekia
03.11.11
✎
15:04
|
читать последнюю как:
СтрокаТЗ[КолонкаТЗ.Имя] = Строка[КолонкаТЗ.Имя]+Число(Сред(СтрокаИзФайла,156,13))); |
|||
30
izekia
03.11.11
✎
15:05
|
(27) спасибо за восторженные отзывы)
|
|||
31
Starhan
03.11.11
✎
15:05
|
(29) опять ошибка. Строка нет такой переменной, есть СтрокаТЗ
|
|||
32
Reset
03.11.11
✎
15:06
|
Кстати "Строка" нигде не определено(может, До этого кода?), так что открытый вопрос, должно быть
... =Строка[ или ... =СтрокаТЗ[ |
|||
33
Reset
03.11.11
✎
15:06
|
(30) Заказывали восхвалять.
|
|||
34
izekia
03.11.11
✎
15:07
|
(31) да что же делать))
дайте ТС тоже поработать) |
|||
35
izekia
03.11.11
✎
15:07
|
(33) )))
|
|||
36
Fomania
03.11.11
✎
15:14
|
(27) с этой поправкой все заработало!
Спасибо всем огромное!!! |
|||
37
Reset
03.11.11
✎
15:14
|
По прежнему не вникая в задачу, провел еще дополнительный рефакторинг (после (24))
|
|||
38
Fomania
03.11.11
✎
15:15
|
(29) Только там = СтрокаТЗ[КолонкаТЗ.Имя] )
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |