[РЕШЕНО] Как добавить колонку в ТаблицуЗначений

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Ktyf, 10 мар 2015.

  1. TopicStarter Overlay
    Ktyf
    Offline

    Ktyf Опытный в 1С

    Регистрация:
    16 янв 2013
    Сообщения:
    457
    Симпатии:
    12
    Баллы:
    29
    увы нет. Первую причину уже объяснили. А во-вторых если этих элементов наклепают 100 шт, и часть из них пустые - неее, не вариант
  2. TopicStarter Overlay
    Ktyf
    Offline

    Ktyf Опытный в 1С

    Регистрация:
    16 янв 2013
    Сообщения:
    457
    Симпатии:
    12
    Баллы:
    29
    Еще один закидон: создаю ТЗ программно. Естественно мне надо добавить колонки в цикле
    Код:
    Пока Бригады.Следующий() Цикл
                    тз.Колонки.Добавить(Бригады.Наименование,Новый ОписаниеТипов("Число"));
                 КонецЦикла;
    Так программа ругается на то, что первым параметром идет Бригады.Наименование!!! Ей нужно явное задание имени!!! Можно вообще пропустить этот параметр, но тогда вылетает ошибка дальше
    Код:
    Новый РеквизитФормы(Колонка.Заголовок, Колонка.ТипЗначения, "тзЗагрузка", Колонка.Заголовок)
    Пока я создаю Новый реквизитФормы по колонкам с именем, все хорошо. Но как только дохожу до колонок у которых нет имени, а заголовок есть - вылетает ошибка!!! "Ошибка при вызове конструктора (РеквизитФормы)"
  3. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    попробуйте Строка(Бригада.Наименование)
  4. TopicStarter Overlay
    Ktyf
    Offline

    Ktyf Опытный в 1С

    Регистрация:
    16 янв 2013
    Сообщения:
    457
    Симпатии:
    12
    Баллы:
    29
    пробовала. Суть оказалась не в этом - у меня наименование бригад "5 бригада" и т.д. А Имя реквизита должно начинаться с буквы. Возможно из-за этого и не создавалось имя колонки.
  5. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    а еще без пробелов
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Мне лично уже интересно, что за задача такая, что требует прям создания колонок на форме, что называется налету.
    Может есть какое-то другое решение вашей задачи.
  7. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    Вадим, у меня тож была такая задача. Это довольно часто можно использовать, геморно, но работает
  8. TopicStarter Overlay
    Ktyf
    Offline

    Ktyf Опытный в 1С

    Регистрация:
    16 янв 2013
    Сообщения:
    457
    Симпатии:
    12
    Баллы:
    29
    угу.
    Ну что я могу сказать. Почти день сворачивания мозгов и я получила, что хотела. Tiger86, спасибо - пнули в нужном направлении-Kiss-
    Вот что имеем на выходе
    Код:
    тз = Новый ТаблицаЗначений();
        ШвейныйЦех = Справочники.СтруктурныеЕдиницы.НайтиПоКоду("00-000006");
        Бригады = Справочники.СтруктурныеЕдиницы.Выбрать(ШвейныйЦех);
        тз.Колонки.Добавить("Продукция",,"Продукция");
        тз.Колонки.Добавить("Характеристика",,"Характеристика");
        тз.Колонки.Добавить("Время",Новый ОписаниеТипов("Число"),"Время");
       
        Пока Бригады.Следующий() Цикл
            строчка = Бригады.Наименование;
            тз.Колонки.Добавить(Строка(Бригады.Наименование),Новый ОписаниеТипов("Число"),Бригады.Наименование);
        КонецЦикла;
       
        МассивРеквизитов = Новый Массив;
        МассивРеквизитов.Добавить(Новый РеквизитФормы("тзЗагрузка", Новый ОписаниеТипов("ТаблицаЗначений"), "", "Моя таблица", Ложь));
       
        Для Каждого Колонка Из ТЗ.Колонки Цикл
            МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, "тзЗагрузка", Колонка.Заголовок));
        КонецЦикла;
       
        ИзменитьРеквизиты(МассивРеквизитов);
       
        //Помещаем Элементы на форму
        Таблица = Элементы.Добавить("тзЗагрузка", Тип("ТаблицаФормы"),Элементы.РаспределениеПоБригадам);
        Таблица.ПутьКДанным = "тзЗагрузка";
        Таблица.Отображение = ОтображениеТаблицы.Список;    
       
        Для Каждого Колонка Из ТЗ.Колонки Цикл
            НовыйЭлемент = Элементы.Добавить("тзЗагрузка" + Колонка.Имя, Тип("ПолеФормы"), Таблица);
            НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
            НовыйЭлемент.ПутьКДанным = "тзЗагрузка." + Колонка.Имя;
        КонецЦикла;
        ЗначениеВРеквизитФормы(ТЗ,"тзЗагрузка");
    Конечно я еще даже не пыталась ее обрабатывать, но навскидку получилась полноценная ТаблицаЗначений! Спасибо всем!
  9. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Если задача с динамическим набором колонок, то нужно сразу продумать вариант наименования колонок, иначе будет то, что обсуждалось в данной теме.
    Как правило решение получается в виде: "Колонка" + Формат(СчКолонок, "ЧГ=0").
  10. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    Вадим, это правильно, но изначально беда была в другом
  11. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    403
    Симпатии:
    71
    Баллы:
    54
    Здравствуйте.
    У меня была похожая задача, и я ее решила аналогично. Но мне потребовалось еще и менять количество колонок в зависимости от вида файла, который загружаю одной и той же обработкой. Просто добавить/убрать колонку на форме никак не выходило, решила сначала "убить" таблицу на форме, а потом снова ее создать.
    Опытным путем добилась этого следующим кодом:
    Код:
    ЭлементТаблица = Элементы.Найти("Таб"); //Это мой элемент формы
    Если ЭлементТаблица <> Неопределено Тогда
    Элементы.Удалить(ЭлементТаблица);
    МассивРеквизитов = Новый Массив;
    МассивРеквизитов.Добавить("Таб");
    ИзменитьРеквизиты(,МассивРеквизитов);
    КонецЕсли;
    Потом заново создаю таблицу на форме и заполняю ее.
    А можно ли как-то другим способом удалить/добавить колонку без удаления всей таблицы?
  12. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    на обычных формах - запросто, а вот на уф как то все через 1 место надо делать получается

Поделиться этой страницей