Имя: Пароль:
1C
 
Таблица значений программное добавление колонок
0 vlasabo
 
08.02.17
11:57
Добрый день всем еще раз.
Пытаюсь сделать ТЗ и программно её заполнить.
Для этого пытаюсь  добавить колонки из цикла.

табличка = НОВЫЙ ТаблицаЗначений;
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ РАЗЛИЧНЫЕ
        |    РасписаниеРегистр.ФИОСотрудника.Наименование КАК сотр
        |ИЗ
        |    РегистрСведений.РасписаниеРегистр КАК РасписаниеРегистр
        |ГДЕ
        |    РасписаниеРегистр.Период = &Период";
    Запрос.Параметры.Вставить("Период",объект.Дата);
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Сообщить(ТипЗнч(ВыборкаДетальныеЗаписи.сотр));
        Табличка.Колонки.Добавить(ВыборкаДетальныеЗаписи.Сотр);
    КонецЦикла;

    
Ошибка:

{Обработка.Сетка.Форма.Форма.Форма(68)}: Ошибка при вызове метода контекста (Добавить)
        Табличка.Колонки.Добавить(ВыборкаДетальныеЗаписи.Сотр);
по причине:
Неверное имя колонки
Неверное имя колонки

Почему?

Пробовал еще вот так:
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
НоваяСтрока = Табличка.Добавить();
НоваяСтрока[ВыборкаДетальныеЗаписи.сотр] = (" ");
    КонецЦикла;
тоже ошибка, "Поле объекта не обнаружено (тут ФИО первого сотруднкиа из выборки)"

Ткните носом, пожалуйста, где почитать о добавлении изменяющегося количества колонок в ТЗ.



(на всякий пожарный - стоит задача вывести пользователю на экран таблчику, где в столбцах сотрудники, а строки представляют собой расписание - кому и какую услугу оказывает сотрудник.)
1 lxndr
 
08.02.17
11:59
Имя колонки присваивается по имени переменной. У иванова пробелы..
2 lxndr
 
08.02.17
11:59
(1) * по правилам именования переменных
3 KishMish
 
08.02.17
12:00
ВыборкаДетальныеЗаписи.Сотр - имеет пробелы или другие недопустимые символы
4 vicof
 
08.02.17
12:02
(0) Бро, выводи в отчет, не страдай херней
5 vlasabo
 
08.02.17
12:06
С пробелами ясно, как-то можно побороть?) Теперь хоть ясно почему ошибка
(4) я б с радостью, но это обработка, предполагающая дальнейшее изменение данных.
6 vlasabo
 
08.02.17
12:23
(5) а вот и не угадал я(
Не только в пробелах дело.
Для проверки решил взять первые 4 буквы фамилии, опять та же ошибка:

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ РАЗЛИЧНЫЕ
        |    РасписаниеРегистр.ФИОСотрудника.Наименование как сотр
        |ИЗ
        |    РегистрСведений.РасписаниеРегистр КАК РасписаниеРегистр
        |ГДЕ
        |    РасписаниеРегистр.Период = &Период";
    Запрос.Параметры.Вставить("Период",объект.Дата);
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    НоваяСтрока = Табличка.Добавить();
    ИмяКолонки=Лев(ВыборкаДетальныеЗаписи.сотр,4);
    НоваяСтрока[ИмяКолонки] = (" ");
    КонецЦикла;



{Обработка.Сетка.Форма.Форма.Форма(70)}: Поле объекта не обнаружено (Айда)
    НоваяСтрока[ИмяКолонки] = (" ");
Что является первыми 4 буквами первого сотрудника из выборки
7 Вафель
 
08.02.17
12:27
бери тогда "К" + СокрЛП(Сотр.Код)
8 vlasabo
 
08.02.17
12:28
(7) неожиданно сработало вот так:

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

    ИмяКолонки=Лев(ВыборкаДетальныеЗаписи.сотр,4);

     табличка.Колонки.Добавить(ИмяКолонки);
    КонецЦикла;
Вариант выше потом буду разбираться почему не сработал, пока надо дело доделывать.
Огромное спасибо каждому за помощь, нигде не увидел при гуглинге о запрете пробелов и спецсимволов в названии колонки
9 lera01
 
08.02.17
12:30
(6) А где в коллекцию колонок добавляешь?
10 lera01
 
08.02.17
12:32
(8) не в пробелах дело. из (0) - Выборка.Сотр - какой тип? Ведь явно не строка.
11 Вафель
 
08.02.17
12:33
(10) Там же весь код есть.
12 vlasabo
 
08.02.17
12:37
(10) строка. Там же  справочник.сотрудники.наименование
13 aka AMIGO
 
08.02.17
12:37
У меня работает вот это:

    ВремТаб = Новый ТаблицаЗначений;
    КС = Новый КвалификаторыСтроки(20);
    Массив.Добавить(Тип("Строка"));
    ОписаниеТиповС = Новый ОписаниеТипов(Массив, , КС);
    Кол = ЭтаФорма.Колонка1; //на форме валяется реквизит
    Если НЕ ПустаяСтрока(Кол) Тогда
        ВремТаб.Колонки.Добавить(ЭтаФорма.Колонка1,,КС);
...

ЗЫ. извините, если что © :)
14 aka AMIGO
 
08.02.17
12:38
+13 пропустил..
Массив = Новый Массив;
15 Вафель
 
08.02.17
12:39
Можно просто
ОписаниеТиповС = Новый ОписаниеТипов("Строка", , КС);
16 aka AMIGO
 
08.02.17
12:40
(15) Ммм.. спасибо. Я тоже учусь :)
17 aka AMIGO
 
08.02.17
12:52
Пара операторов - лишние.. У меня в коде.
Работает так:
    ВремТаб = Новый ТаблицаЗначений;
    КС = Новый КвалификаторыСтроки(20);
    Кол = ЭтаФорма.Колонка1;
    Если НЕ ПустаяСтрока(Кол) Тогда
        ВремТаб.Колонки.Добавить(ЭтаФорма.Колонка1,,КС);
18 Serg_1960
 
08.02.17
13:22
Табличка.Очистить();
Табличка = Запрос.Выполнить().Выгрузить();
ЭлементыФормы.Табличка.СоздатьКолонки();
19 Serg_1960
 
08.02.17
13:33
ЭлементыФормы.Табличка[0].ТекстШапки...
20 vlasabo
 
08.02.17
13:45
(18) если б я мог просто выгрузить запрос в табличку я бы так и сделал, но увы, каким образом я "переверну" запрос так, что у меня значения запроса станут колонками?)
21 Serg_1960
 
08.02.17
13:58
(20) В запросе, через "КАК ..." присвоить нужные значения, аналогичные колонкам таблички (если они уже есть) ?
22 Serg_1960
 
08.02.17
14:00
Стоп, отставить. Дай подумать.
23 Serg_1960
 
08.02.17
14:24
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
   Табличка.Колонки.Добавить("Колонка"+СокрЛ(Табличка.Колонки.Количество()+1),,ВыборкаДетальныеЗаписи.Сотр);
...
24 Serg_1960
 
08.02.17
14:29
Не, лучше так:

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
   Имя = "Колонка" + СокрЛ(Табличка.Колонки.Количество()+1);
   Табличка.Колонки.Добавить(Имя,,ВыборкаДетальныеЗаписи.Сотр);
   Строка = Табличка.Добавить();
   Строка[Имя] = ...
25 vlasabo
 
08.02.17
14:31
(23) здесь просто колонка1, колонка2 и т.д.
(24) здесь с именами колонок то же самое, только еще строки сразу добавляем
26 aka AMIGO
 
08.02.17
14:33
(25) Тебе зачем эта ТЗ нужна? перенести в ТЧ документа?
Если - да, то назови колонки сам, заполнишь обходом запроса, и загрузишь в ТЧ.
27 vlasabo
 
08.02.17
14:33
Упс, пардон муа, тут я был не прав - у меня в выводе на форму этой ТЗ не было передачи заголовка. Передал - всё работает, спасибо
28 vlasabo
 
08.02.17
14:34
(26) нет, я в (1) писал цели и задачи.
Это обработка расписания, надо вывести сетку сотрудников и кто чем занят. В дальнейшем будет обработка выбора значения и т.д.
29 Serg_1960
 
08.02.17
14:35
(26) Автор скажет что ему нужно после сотого поста. Всё как обычно :)
30 Serg_1960
 
08.02.17
14:37
(27) Если ТЗ нужна на форму, то см.(19). "Заголовок" - это ТЗ, а на форме это - "ТекстШапки" :)
31 DailyLookingOnA Sunse
 
08.02.17
14:38
Имена колонок нужно создавать просто как Колонка01, Колонка02 и т.д.
А наименования сотрудников хранить в массиве размерностью количеством колонок.
32 DailyLookingOnA Sunse
 
08.02.17
14:39
А, ну еще в заголовках колонок можно заполнить наименования сотрудников.
33 vlasabo
 
08.02.17
16:43
(29) всё уже написано в (1) же.
Ребят, спасибо всем, главный затык решен, код сюда скинул