|   |   | 
| 
 | Создать новый реквизит ТЧ и добавить его в ТЧ программно | ☑ | ||
|---|---|---|---|---|
| 0
    
        pasha801 25.11.24✎ 22:45 | 
        ТаблицаТовары = Элементы.ТЧГлавная;
 НовыйРеквизит = Элементы.Добавить("Вес", Тип("ПолеФормы"), ТаблицаТовары); НовыйРеквизит.Заголовок = "Вес"; НовыйРеквизит.ПутьКДанным = "Объект.ТЧГлавная.Вес"; НовыйРеквизит.Вид = ВидПоляФормы.ПолеВвода; Реквизит создается, но выходит ошибка когда присваивается значение в ПутьКДанным: Ошибка при установке значения атрибута контекста (ПутьКДанным) НовыйРеквизит.ПутьКДанным = "Объект.ТЧГлавная.Вес"; по причине: Недопустимое значение | |||
| 1
    
        Asmody 25.11.24✎ 22:51 | 
        потому что твой НовыйРеквизит - это не реквизит.     | |||
| 2
    
        Asmody 25.11.24✎ 22:53 | 
        для начала рекомендую определиться с тем, реквизит чего ты хочешь создать программно. а потом попытаться понять - можно ли это сделать в принципе     | |||
| 3
    
        pasha801 25.11.24✎ 22:58 | 
        (2) реквизит табличной части? можно ли?     | |||
| 4
    
        Asmody 25.11.24✎ 23:10 | 
        (3) нет. Структура метаданных программно не изменяется     | |||
| 5
    
        pasha801 25.11.24✎ 23:31 | 
        (4) т.е. решения моего вопроса нету? просто хочу чтобы добавлялась колонка или колонки в тч. получается нужно заранее создать эти реквизиты     | |||
| 6
    
        Asmody 26.11.24✎ 00:20 | 
        (5) колонку в таблицу формы динамически добавить можно. и связать ее с динамически добавленным реквизитом формы тоже можно. и даже как-то где-то потом эти данные хранить.
 Но требует ли задача таких сложностей? | |||
| 7
    
        PR 26.11.24✎ 00:29 | 
        (5) А куда по-твоему будет записываться значение твоего "реквизита", когда ты в форме нажмешь Записать?     | |||
| 8
    
        Мультук гуру 26.11.24✎ 06:28 | 
        (0)
 Пример https://1c-programmer-blog.ru/programmirovanie/kak-programmno-dobavit-kolonku-v-tablichnuyu-chast-upravlyaemoj-formy.html (7) Никуда не будет записываться. Будет считаться "на лету" и показываться пользователю | |||
| 9
    
        RVN 26.11.24✎ 06:59 | 
        (7) Куда ты запрограммируешь - туда и будет записываться.     | |||
| 10
    
        Stepashkin 26.11.24✎ 07:21 | 
        (0) Вы создаете не реквизит, а элемент формы. А реквизит у вас - это Объект.ТЧГлавная. А вес, я так понимаю, это колонка табличной части.     | |||
| 11
    
        программистище 26.11.24✎ 08:18 | 
        реквизит тч создается по типу:
 ДобавляемыеРеквизиты = Новый Массив; НовыйРеквизит = Новый РеквизитФормы("Вес",Новый ОписаниеТипов("Число"),"Объект.ТЧГлавная","Вес"); ДобавляемыеРеквизиты.Добавить(НовыйРеквизит); ЭтотОбъект.ИзменитьРеквизиты(ДобавляемыеРеквизиты); А потом уже свой код по созданию элемента формы | |||
| 12
    
        pasha801 27.11.24✎ 21:00 | 
        (7) записывать никуда не надо, самое главное чтобы в данный момент в тч вывело 
 (8) благодарю, то что нужно (11) спасибо Ребята, всем спасибо, помогли разобраться | |||
| 13
    
        Волшебник 27.11.24✎ 21:07 | 
        И зачем всё это?     | |||
| 14
    
        pasha801 27.11.24✎ 22:03 | 
        (13) с экселя выгружаю данные в тч, а из тч уже в нужный документ     | |||
| 15
    
        pasha801 28.11.24✎ 00:37 | 
        (11) не подскажете, как теперь записать данные в эту колонку:
 пытаюсь добавлять запись так КолонкаДанных = Объект.ТЧГлавная.Добавить(); незнаю как продолжить, обратиться к реквизиту созданному | |||
| 16
    
        Garykom гуру 28.11.24✎ 02:21 | 
        Интересно, движок у машины перебирать тоже сам?
 И к врачам не ходим, в интернете спрашиваем как лечиться? | |||
| 17
    
        Prog111 28.11.24✎ 06:47 | 
        (0) У тебя в конфигураторе, в табличной части есть реквизит "Вес"? Не на форме, а слева, в разделе с метаданными?     | |||
| 18
    
        Stepashkin 28.11.24✎ 07:13 | 
        (14) Сделайте обработку. В ней не программно создайте ТЧ с колонками, в них грузите данные из колонок экселя, а потом на основе этих данных создавайте документ. В свое время у меня на такое дело ушло пару часов, если не меньше, не помню. А вообще, в интернете куча примеров, научитесь получать информацию из сети, если постулатов не читали. И совет, если возможно создавать интерактивно - создавайте, не нужно кодить.     | |||
| 19
    
        DrZombi гуру 28.11.24✎ 07:33 | 
        (0) Держи, наборчик инструментов.
 Функции в помощь, для создания элементов на форме УФ#Область Дополнительные_Функции Функция ПолучитьСвойствоДопРеквизита(ИмяСвойства) Экспорт Запрос = Новый Запрос; Запрос.УстановитьПараметр("Имя", ИмяСвойства); Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 | ДополнительныеРеквизитыИСведения.Ссылка КАК Ссылка, | ДополнительныеРеквизитыИСведения.Имя КАК Имя, | ДополнительныеРеквизитыИСведения.ПометкаУдаления КАК ПометкаУдаления, | ДополнительныеРеквизитыИСведения.Наименование КАК Наименование |ИЗ | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения |ГДЕ | ДополнительныеРеквизитыИСведения.Имя = &Имя | |УПОРЯДОЧИТЬ ПО | ПометкаУдаления"; РезЗапроса = Запрос.Выполнить(); Если РезЗапроса.Пустой() Тогда Возврат Неопределено; КонецЕсли; Выбор = РезЗапроса.Выбрать(); Выбор.Следующий(); стрСвойства = Новый Структура("Ссылка,Имя,ПометкаУдаления,Наименование"); ЗаполнитьЗначенияСвойств(стрСвойства, Выбор); Возврат стрСвойства; КонецФункции Функция НайтиРеквизитПоНаименованию(МассРекв, ИмяРеквизита) Перем РезФункци,СчИндекса,КолВо,Реквизит; РезФункци = Неопределено; СчИндекса = 0; КолВо = МассРекв.Количество(); Пока КолВо > 0 Цикл Реквизит = МассРекв[КолВо-1]; СчИндекса = СчИндекса + 1; Если Реквизит.Имя = ИмяРеквизита Тогда РезФункци = СчИндекса - 1; Прервать; КонецЕсли; КолВо = КолВо - 1; КонецЦикла; Возврат РезФункци; КонецФункции Функция ДобавитьЭлементНаФорму(ИмяЭлемента, ПутьКДанным, ЭлементТаблицы_Список, ЭлементТаблицы_После, Элементы) ЭлементФормы = Элементы.Найти(ИмяЭлемента); Если ЭлементФормы = Неопределено и ЭлементТаблицы_Список <> Неопределено Тогда Если ЭлементТаблицы_После = Неопределено Тогда ЭлементФормы = Элементы.Добавить(ИмяЭлемента, Тип("ПолеФормы"), ЭлементТаблицы_Список); Иначе ЭлементФормы = Элементы.Вставить(ИмяЭлемента, Тип("ПолеФормы"), ЭлементТаблицы_Список, ЭлементТаблицы_После); КонецЕсли; ЭлементФормы.Вид = ВидПоляФормы.ПолеВвода; Если ПутьКДанным <> Неопределено И ЗначениеЗаполнено(ПутьКДанным) Тогда Попытка ЭлементФормы.ПутьКДанным = ПутьКДанным; Исключение КонецПопытки; КонецЕсли; КонецЕсли; Возврат ЭлементФормы; КонецФункции //ГруппаФормы Функция ДобавитьГруппуНаФорму(ИмяЭлемента, ЭлементТаблицы_Список, ЭлементТаблицы_После, Элементы) ЭлементФормы = Элементы.Найти(ИмяЭлемента); Если ЭлементФормы = Неопределено и ЭлементТаблицы_Список <> Неопределено Тогда Если ЭлементТаблицы_После = Неопределено Тогда ЭлементФормы = Элементы.Добавить(ИмяЭлемента, Тип("ГруппаФормы"), ЭлементТаблицы_Список); Иначе ЭлементФормы = Элементы.Вставить(ИмяЭлемента, Тип("ГруппаФормы"), ЭлементТаблицы_Список, ЭлементТаблицы_После); КонецЕсли; ЭлементФормы.Вид = ВидГруппыФормы.ОбычнаяГруппа; КонецЕсли; Возврат ЭлементФормы; КонецФункции //ТаблицаФормы Функция ДобавитьТаблицуНаФорму(ИмяЭлемента, ПутьКДанным, ЭлементТаблицы_Список, ЭлементТаблицы_После, Элементы) ЭлементФормы = Элементы.Найти(ИмяЭлемента); Если ЭлементФормы = Неопределено и ЭлементТаблицы_Список <> Неопределено Тогда Если ЭлементТаблицы_После = Неопределено Тогда ЭлементФормы = Элементы.Добавить(ИмяЭлемента, Тип("ТаблицаФормы"), ЭлементТаблицы_Список); Иначе ЭлементФормы = Элементы.Вставить(ИмяЭлемента, Тип("ТаблицаФормы"), ЭлементТаблицы_Список, ЭлементТаблицы_После); КонецЕсли; ЭлементФормы.ПутьКДанным = ПутьКДанным; КонецЕсли; Возврат ЭлементФормы; КонецФункции //ДобавитьГруппуКнопокНаФорму Функция ДобавитьГруппуКнопокНаФорму(ИмяЭлемента, ЭлементТаблицы_Список, ЭлементТаблицы_После, Элементы) ЭлементФормы = Элементы.Найти(ИмяЭлемента); Если ЭлементФормы = Неопределено и ЭлементТаблицы_Список <> Неопределено Тогда Если ЭлементТаблицы_После = Неопределено Тогда ЭлементФормы = Элементы.Добавить(ИмяЭлемента, Тип("ГруппаФормы"), ЭлементТаблицы_Список); Иначе ЭлементФормы = Элементы.Вставить(ИмяЭлемента, Тип("ГруппаФормы"), ЭлементТаблицы_Список, ЭлементТаблицы_После); КонецЕсли; ЭлементФормы.Вид = ВидГруппыФормы.ГруппаКнопок; КонецЕсли; Возврат ЭлементФормы; КонецФункции Функция ДобавитьГруппуКолонокНаФорму(ИмяЭлемента, ЭлементТаблицы_Список, ЭлементТаблицы_После, Элементы) ЭлементФормы = Элементы.Найти(ИмяЭлемента); Если ЭлементФормы = Неопределено и ЭлементТаблицы_Список <> Неопределено Тогда Если ЭлементТаблицы_После = Неопределено Тогда ЭлементФормы = Элементы.Добавить(ИмяЭлемента, Тип("ГруппаФормы"), ЭлементТаблицы_Список); Иначе ЭлементФормы = Элементы.Вставить(ИмяЭлемента, Тип("ГруппаФормы"), ЭлементТаблицы_Список, ЭлементТаблицы_После); КонецЕсли; ЭлементФормы.Вид = ВидГруппыФормы.ГруппаКолонок; КонецЕсли; Возврат ЭлементФормы; КонецФункции Функция ДобавитьСтраницуНаФорму(ИмяЭлемента, ЭлементТаблицы_Список, ЭлементТаблицы_После, Элементы) ЭлементФормы = Элементы.Найти(ИмяЭлемента); Если ЭлементФормы = Неопределено и ЭлементТаблицы_Список <> Неопределено Тогда Если ЭлементТаблицы_После = Неопределено Тогда ЭлементФормы = Элементы.Добавить(ИмяЭлемента, Тип("ГруппаФормы"), ЭлементТаблицы_Список); Иначе ЭлементФормы = Элементы.Вставить(ИмяЭлемента, Тип("ГруппаФормы"), ЭлементТаблицы_Список, ЭлементТаблицы_После); КонецЕсли; ЭлементФормы.Вид = ВидГруппыФормы.Страница; КонецЕсли; Возврат ЭлементФормы; КонецФункции Функция ДобавитьСтраницыНаФорму(ИмяЭлемента, ЭлементТаблицы_Список, ЭлементТаблицы_После, Элементы) ЭлементФормы = Элементы.Найти(ИмяЭлемента); Если ЭлементФормы = Неопределено и ЭлементТаблицы_Список <> Неопределено Тогда Если ЭлементТаблицы_После = Неопределено Тогда ЭлементФормы = Элементы.Добавить(ИмяЭлемента, Тип("ГруппаФормы"), ЭлементТаблицы_Список); Иначе ЭлементФормы = Элементы.Вставить(ИмяЭлемента, Тип("ГруппаФормы"), ЭлементТаблицы_Список, ЭлементТаблицы_После); КонецЕсли; ЭлементФормы.Вид = ВидГруппыФормы.Страницы; КонецЕсли; Возврат ЭлементФормы; КонецФункции Функция ДобавитьДекорациюНаФорму(ИмяЭлемента, ЭлементТаблицы_Список, ЭлементТаблицы_После, Элементы) ЭлементФормы = Элементы.Найти(ИмяЭлемента); Если ЭлементФормы = Неопределено и ЭлементТаблицы_Список <> Неопределено Тогда Если ЭлементТаблицы_После = Неопределено Тогда ЭлементФормы = Элементы.Добавить(ИмяЭлемента, Тип("ДекорацияФормы"), ЭлементТаблицы_Список); Иначе ЭлементФормы = Элементы.Вставить(ИмяЭлемента, Тип("ДекорацияФормы"), ЭлементТаблицы_Список, ЭлементТаблицы_После); КонецЕсли; ЭлементФормы.Вид = ВидДекорацииФормы.Надпись; КонецЕсли; Возврат ЭлементФормы; КонецФункции //.... //Получить картинку оп наименованию... Функция ПолучитьИзБиблиотекиКартинку(ИмяКартинки) Попытка Возврат БиблиотекаКартинок[ИмяКартинки]; Исключение Возврат Неопределено; КонецПопытки; КонецФункции #КонецОбласти Функция по созданию реквизитов на форме, просто примерПроцедура СоздатьРеквизитыФормыДокумента_ИмяДокументаДляПростотыПоиска(Форма, ИмяИндексаРеквизитов, Путь) МассРекв = Форма.ПолучитьРеквизиты(Путь); ИмяРеквизита = "" + ИмяИндексаРеквизитов; //"ПериодНачисленияСтрокой"; ИндексРеквизита = НайтиРеквизитПоНаименованию(МассРекв, ИмяРеквизита); Если ИндексРеквизита = Неопределено Тогда ДобавляемыеРеквизиты = Новый Массив; // Опишем ревизиты формы - ПериодНачисленияСтрокой ТипНеопределено = Неопределено; НовыйТип = Новый ОписаниеТипов(ТипНеопределено); НовыйРеквизит = Новый РеквизитФормы(ИмяРеквизита, НовыйТип, Путь, "Настройка формы", Ложь); ДобавляемыеРеквизиты.Добавить(НовыйРеквизит); ТипНеопределено = Неопределено; НовыйТип = Новый ОписаниеТипов("Строка"); НовыйРеквизит = Новый РеквизитФормы("ЛогОшибокСообщений", НовыйТип, Путь, "Лог ошибок сообщений", Ложь); ДобавляемыеРеквизиты.Добавить(НовыйРеквизит); Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); КонецЕсли; КонецПроцедуры Сама Функция, которая все делает, один раз ПриСозданииФормы, или ПриЧтенииДанныхПроцедура ДобавитьНаФормуЭлемента_ИмяДокументаДляПростотыПоиска(ЭтотОбъект_) Экспорт Элементы = ЭтотОбъект_.Элементы; Форма = ЭтотОбъект_.ЭтаФорма; //Объект = Форма.Объект; Команды = Форма.Команды; //Добавить реквизиты формы... ИмяИндексаРеквизитов = "НастройкаФормы"; СоздатьРеквизитыФормыДокумента_ИмяДокументаДляПростотыПоиска(Форма, ИмяИндексаРеквизитов, ""); //... Добавить Команду ИмяКоманды_О_001 = "ЗагрузитьПакетФайлов"; ИмяКоманды_О_Элемента = ИмяКоманды_О_001; Если Команды.Найти(ИмяКоманды_О_Элемента) = Неопределено Тогда Картинка = ПолучитьИзБиблиотекиКартинку("ВнешнийИсточникДанных"); Команда = Команды.Добавить(ИмяКоманды_О_Элемента); //Имя команды Команда.Заголовок = "Загрузить пакет файлов"; Команда.Действие = "ЗагрузитьПакетФайлов"; //Имя связанной процедуры Команда.Подсказка = "Загрузить пакет файлов XLSX... или любых Екселек... не вижу смысла ограничиваться..."; Команда.Отображение = ?(Картинка = Неопределено,ОтображениеКнопки.Текст,ОтображениеКнопки.КартинкаИТекст); Если Картинка <> Неопределено Тогда Команда.Картинка = Картинка; КонецЕсли; Команда.ИзменяетСохраняемыеДанные = Ложь; КонецЕсли; //ФормаГруппа1 ЭлементФормы_Осн = Форма.КоманднаяПанель; ЭлементФормы_Перед = Неопределено; //Элементы.Найти("ИмяРеквизитаНаФорме"); Если ЭлементФормы_Перед <> Неопределено Тогда ЭлементФормы_Осн = ЭлементФормы_Перед.Родитель; КонецЕсли; //Добавим группу кнрпок ИмяЭлемента = "ФормаГруппа1"; ГруппаКнопок_01 = ДобавитьГруппуКнопокНаФорму(ИмяЭлемента, ЭлементФормы_Осн, ЭлементФормы_Перед, Элементы); ГруппаКнопок_01.Вид = ВидГруппыФормы.ГруппаКнопок; ГруппаКнопок_01.Заголовок = "Режим открытия форм..."; ГруппаКнопок_01.Отображение = ОтображениеГруппыКнопок.Компактное; ИмяКоманды_О_Элемента = ИмяКоманды_О_001; ЭлементФормы_Кнопка1 = Элементы.Найти(ИмяКоманды_О_Элемента); Если ЭлементФормы_Кнопка1 = Неопределено Тогда ЭлементФормы_Кнопка1 = Элементы.Добавить(ИмяКоманды_О_Элемента, Тип("КнопкаФормы"), ГруппаКнопок_01); ЭлементФормы_Кнопка1.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели; ЭлементФормы_Кнопка1.ИмяКоманды = ИмяКоманды_О_Элемента; ЭлементФормы_Кнопка1.ТолькоВоВсехДействиях = Ложь; //ЭлементФормы_Кнопка1.ПоложениеВКоманднойПанели = ПоложениеКнопкиВКоманднойПанели.ВДополнительномПодменю; КонецЕсли; ЭлементФормы_Осн = Форма; ЭлементФормы_Перед = Неопределено; //Элементы.Найти("ИмяРеквизитаНаФорме2"); Если ЭлементФормы_Перед <> Неопределено Тогда ЭлементФормы_Осн = ЭлементФормы_Перед.Родитель; КонецЕсли; ИмяЭлемента = "ГруппировкаЛога"; ПутьКДаннымЗаголовка = ""; Группа_01 = ДобавитьГруппуНаФорму(ИмяЭлемента, ЭлементФормы_Осн, ЭлементФормы_Перед, Элементы); Группа_01.ОтображатьЗаголовок = Ложь; Группа_01.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; ЭлементФормы_Список = Элементы.Найти("Список"); Если ЭлементФормы_Список <> Неопределено Тогда Элементы.Переместить(ЭлементФормы_Список, Группа_01); КонецЕсли; ИмяЭлемента = "ЛогОшибокСообщений"; ПутьКДанным = "ЛогОшибокСообщений"; ЭлементФормы = ДобавитьЭлементНаФорму(ИмяЭлемента, ПутьКДанным, Группа_01, Неопределено, Элементы); ЭлементФормы.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; ЭлементФормы.МногострочныйРежим = Истина; ЭлементФормы.КнопкаОчистки = Истина; ЭлементФормы.АвтоМаксимальнаяШирина = Ложь; ЭлементФормы.АвтоМаксимальнаяВысота = Ложь; ЭлементФормы.РедактированиеТекста = Ложь; ЭлементФормы.АвтоПереносСтрок = Ложь; КонецПроцедуры | |||
| 20
    
        DrZombi гуру 28.11.24✎ 07:39 | 
        +(0)(19) Вот так создаются доп реквизиты в табличной части объекта, на форме... Как бы он там есть, но в базу не пишется.
 Только для визуализации СоздатьРеквизитыФормыДокумента_РезервыПоОплатеТруда(Форма, "ЦветСтроки", "Объект.ОценочныеОбязательстваПоСотрудникам"); | |||
| 21
    
        DrZombi гуру 28.11.24✎ 07:42 | 
        +(0)(19) А вот так добавить на форме списка поля, которых там автором не предусмотрено, а хочется :)
 ИмяЭлемента = "Ответственный_Списка"; ПутьКДанным = "Список.Ссылка.Ответственный"; ЭлементФормы = ДобавитьЭлементНаФорму(ИмяЭлемента, ПутьКДанным, ЭлементТаблицы_Список, ЭлементТаблицы_После, Элементы); | |||
| 22
    
        DrZombi гуру 28.11.24✎ 07:47 | 
        +(0)Помни одно и главное, составной тип, который на форме, нельзя однозначно добавить его составляющие реквизиты. 
 Т.е. К примеру у тебя Есть ссылка Типа "Контрагент" И "ФизЛицо", т.е. Два справочника в одном реквизите. Так вот, такую конструкцию на форме "Элемента" не вывести через точку "Объект.ТабличнаяЧасть.КонтрагентФизик.Код"... Увы оно так не умеет (Не путай с динамическим списком) :) | |||
| 23
    
        Волшебник 28.11.24✎ 09:46 | 
        (14)(15) А почему бы не создать реквизит "Вес" в структуре табличной части в дереве конфигурации? 
 Зачем вы ебёте всем мозги? | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |