|
Создать новый реквизит ТЧ и добавить его в ТЧ программно | ☑ | ||
---|---|---|---|---|
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) А почему бы не создать реквизит "Вес" в структуре табличной части в дереве конфигурации?
Зачем вы ебёте всем мозги? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |