|   |   | 
| 
 | Имя колонки ТЗ задается программно | ☑ | ||
|---|---|---|---|---|
| 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) Только там = СтрокаТЗ[КолонкаТЗ.Имя] )     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |