Имя: Пароль:
1C
1C 7.7
v7: Программное формирование колонок табл.значений в цикле
, ,
0 Mister-X07
 
29.05.14
22:39
В выборке запроса формирую ТЗ:
...
пока запрос.группировка(1)=1 цикл
пока запрос.группировка(2)=1 цикл
....
перем=...
тз.НоваяКолонка();
тз.УстановитьЗначение(1,тз.КоличествоКолонок,перем);
...

Возникает ошибка - номер за пределами значений. Почему?
1 Mister-X07
 
29.05.14
22:39
поправка

тз.УстановитьЗначение(1,тз.КоличествоКолонок(),перем);
2 Mister-X07
 
29.05.14
22:41
в качестве перем надо понимать не служебное слово ))
3 Мигало
 
29.05.14
22:41
Строка то есть в тз ?
4 hhhh
 
29.05.14
22:43
а тз.НоваяСтрока()  ??
5 Mister-X07
 
29.05.14
22:48
да спасибо, значит надо так:

...
тз = создатьОбъект("ТаблицаЗначений");
тз.НоваяКолонка();
тз.новаяСтрока();

пока запрос.группировка(1)=1 цикл
пока запрос.группировка(2)=1 цикл
....
_перем=...
тз.НоваяКолонка();
тз.УстановитьЗначение(1,тз.КоличествоКолонок(),_перем);
...
6 Mister-X07
 
29.05.14
22:48
значит первая колонка будет служебная
7 kobzon
 
29.05.14
22:51
А об следующие строки снова будет спотыкаться?
8 Mister-X07
 
29.05.14
22:51
хм, а пробовал кто-то присваивать имена колонок через переменные в цикле/выборке или это не возможно - только через индексы создавать/обращаться к колонкам ТЗ?
9 Mister-X07
 
29.05.14
22:52
(7) хватит и одной строки
10 Мигало
 
29.05.14
22:53
(8) Возможно. Даже возможно иметь все колонки с одинаковым индетификатором
11 Mister-X07
 
29.05.14
22:54
(10) имена колонок нужны разные, потом по них искать нужные значения из строки нужно будет
12 Mister-X07
 
29.05.14
22:55
+ как?
13 kobzon
 
29.05.14
22:55
Имена какие? к1, к2, к3?
14 Mister-X07
 
29.05.14
22:57
(13) наименование номенклатуры
15 Мигало
 
29.05.14
23:01
Код номенклатуры пиши в название колонки
16 kobzon
 
29.05.14
23:02
А если выборке например присвоить Номенк = Запрос.Номенклатура;
И дальше:
Тз.НоваяКолонка(Номенк);
17 Mister-X07
 
29.05.14
23:05
НоваяКолонка(<Идентификатор>,<Тип>,<Длина>,<Точность>,<Заголовок>,<Ширина>,<Формат>,<Положение>)

хм, а можно ли в качестве Идентификатор писать переменную как в (16), я всегда помещал туда конкретную строку?
18 Mister-X07
 
29.05.14
23:06
или выражение которое возвращает строку
19 Mister-X07
 
29.05.14
23:11
я лично не встречал такое решение, только через индексы
20 kobzon
 
29.05.14
23:14
(19) может не прокатить. Делай значит через индексы)
21 Mister-X07
 
29.05.14
23:16
(15)
Тз.НоваяКолонка(запрос.ТМЦ.код);

думаешь прокатит?
22 Мигало
 
29.05.14
23:19
(21) Точнее так
Тз.НоваяКолонка("К" + запрос.ТМЦ.код) // Вдруг код это число

Если снаименованием то придется делать так
Переменная = СокрЛП(Запрос.ТМЦ.Наименование);
Пока Найти(Переменная, "  ") > 0 Цикл
Переменная = СтрЗаменить(Переменная, "  ", " ");
КонецЦикла;
Переменная = СтрЗаменить(Переменная, " ", "_");
Тз.НоваяКолонка(Переменная)
23 Mister-X07
 
29.05.14
23:24
хм, в базе в номенклатуре код числовой, да еще и уникален по всему справочнику, тогда можно так:

тз.новаяКолонка(запрос.ТМЦ.код)
24 kobzon
 
29.05.14
23:25
Да, кавычки обязательны)

      Кон = Запрос.Контрагент;
      
      ТЗ.НоваяКолонка("_" + Кон);
25 Mister-X07
 
29.05.14
23:28
(23) тогда будут колонки с номерами 3000, 2000... ))
26 Mister-X07
 
29.05.14
23:28
лучше как в (22)
Тз.НоваяКолонка("К" + запрос.ТМЦ.код)
27 Mister-X07
 
29.05.14
23:30
и тогда можно будет искат в выборке в ТЗ:

ПолучитьЗначение(1,"К" + запрос.ТМЦ.код)
28 Mister-X07
 
29.05.14
23:30
искать ))
29 Mister-X07
 
29.05.14
23:53
спс, попробую отпишусь
30 Mister-X07
 
30.05.14
11:31
(24) не канает - не верный идентификатор колонки
(22) + (27) все ок, спасибо еще раз
31 Mister-X07
 
30.05.14
11:32
запрос.ТМЦ.код - тут число
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан