|   |   | 
| 
 | Таблица значений программное добавление колонок | ☑ | ||
|---|---|---|---|---|
| 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) же.
 Ребят, спасибо всем, главный затык решен, код сюда скинул | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |