Имя: Пароль:
1C
1С v8
программно задать тип ячейки табличного поля
0 247tsm
 
06.12.24
16:51
Обычные формы.
На форме обработки есть табличное поле с типом данных таблица значений, которая формируется программно и соответственно поля видны только во время работы программы.
В одном из полей - ТипИсточника - строкой указан тип, например, "справочник.Сотрудники".
Соседнее поле - ЗначениеПриемника - имеет составной тип - ДокументСсылка.ПриемНаРаботу, СправочникСсылка.Сотрудники, СправочникСсылка.Должности.

Как сделать программно так, чтобы когда поле ТипИсточника="справочник.Сотрудники" поле ЗначениеПриемника
становится полем с типом СправочникСсылка.Сотрудники и я без выбора типа сразу попадаю на выбор элемента из справочника Сотрудники?
И то же самое и для типа ДокументСсылка.ПриемНаРаботу.

Спасибо
1 СвинТуз
 
06.12.24
16:58
"я без выбора типа сразу попадаю на выбор элемента "

Руками работаете?
2 247tsm
 
06.12.24
17:12
(1) да, происходит выгрузка данных через COM-соединение из другой базы и пользователь ручками выбирает соответствие в его базе.
3 СвинТуз
 
06.12.24
17:14
Интересный вариант.
4 247tsm
 
06.12.24
17:15
я гуглил...
может плохо искал, но не нашел нужного ответа и поэтому  обратился на форум.
5 СвинТуз
 
06.12.24
17:16
КД2 плохой инструмент?
6 247tsm
 
06.12.24
17:17
(3) там, где можно было связать данные (по какому-нибудь уникальному ключу), всё делается автоматом, а где не соединилось, пользователь делает связь ручками.
7 СвинТуз
 
06.12.24
17:17
В эксель им выгрузите. Пусть руками коды вводят и тип.
Потом загрузите из эксель.
8 247tsm
 
06.12.24
17:18
а КД2 это...?
9 СвинТуз
 
06.12.24
17:20
(8)
Забейте
долго осваивать
10 СвинТуз
 
06.12.24
17:21
Это вы реквизиты в объектах их связывать заставляете? )))
11 247tsm
 
06.12.24
17:23
(7) так задача была поставлена. В базе источнике (на платформе 8.3.23) используется план обмена для регистрации изменений, а в базе-приемнике (на платформе 8.3.13) будет запускаться обработка (по расписанию, а также и вручную)
12 247tsm
 
06.12.24
17:24
(10) в таблице значений, а результат связи записываю в регистр сведений
13 СвинТуз
 
06.12.24
17:24
(12)
это вы через КОМ уже данные раз залили в приемник?
Изначально приемник был пустой?
14 247tsm
 
06.12.24
17:24
(10) вернее в табличном поле на основе таблицы значений
15 247tsm
 
06.12.24
17:25
(13) да
16 247tsm
 
06.12.24
17:27
(13) но есть элементы справочников в источнике, у которых нет например, Фискального кода - вот и приходится связывать вручную
17 СвинТуз
 
06.12.24
17:27
(15)
Ну чо?
Прикольный вариант.
18 247tsm
 
06.12.24
17:28
а что насчет ответа на мой вопрос?
"вдоль дороги мёртвые с косами стоят и... тишина"
19 СвинТуз
 
06.12.24
17:28
(16)
КД по ссылке может искать через ГУИД.
20 СвинТуз
 
06.12.24
17:28
(18)
Ну заварил кашу = кушай.
21 247tsm
 
06.12.24
17:29
можно, конечно, оставить выбор типа, но хотел сделать удобнее для пользователя
22 247tsm
 
06.12.24
17:31
(19) я так и делаю - ищу по регистру в приемнике по ГУИДу источника, но если нет совпадающего ГУИДа приходится дать пользователю порулить
23 СвинТуз
 
06.12.24
17:32
Сложно как то хоть и весело.
Реквизиты объекта в таблице значений.
И их еще надо сопоставить.
24 СвинТуз
 
06.12.24
17:32
(22)
Хорошая штука велосипед.
25 СвинТуз
 
06.12.24
17:34
Видел одного человека он сам аналог КД2 писал.
Уверял его штука быстрее работает.
26 СвинТуз
 
06.12.24
17:36
Есть определенная последовательность.
Сначала сопоставляются реквизиты объектов.
Записываются в базу.
Потом уже сами объекты.
На момент сопоставления объектов все их реквизиты в приемнике уже есть.

Тогда не будет таблиц в таблице.
27 СвинТуз
 
06.12.24
17:37
Причем все реквизиты свертываются. Сопоставляются один раз, а не в каждом объекте.
28 СвинТуз
 
06.12.24
17:37
Удачи.
29 247tsm
 
06.12.24
17:38
в Таблице значений я просто показываю пользователю, например, "Наименование" из источника, а он вручную указывает соответствующий элемент справочника в приемнике и по кнопке "Записать" в базе-приемнике заполняю регистр сведений - в измерении ГУИД_Источника - просто строка(36), а в измерении ГУИД_приемника - ссылка на элемент справочника приемника
30 СвинТуз
 
06.12.24
17:40
Такие штуки на КД2 обычно по расписанию работают.
Без участия пользователя.
31 247tsm
 
06.12.24
17:41
(26) а объект это что? элемент справочника?
А как сопоставить источник и приемник, если нет ключа, например, Фискального кода для справочника Сотрудники?
32 СвинТуз
 
06.12.24
17:42
Сложно советовать
Просто обычно это само работает.
Не пойму что там у Вас.
33 СвинТуз
 
06.12.24
17:43
Вы сами себе задачу четче пропишите
и решение придет.
34 247tsm
 
06.12.24
17:44
(30) это, когда первоначальное заполнение закончено.
А у нас на 90% автоматически, а остаток никак не соединить автоматически - вот и приходится делать вручную.
Я не знаю, что такое КД2 (а вдруг оно мне очень нужно и я не знал, как жить без него), но скорее всего, никакой КД2 не поможет, если нет для связи уникального ключа
35 СвинТуз
 
06.12.24
17:46
(34)
Код связи обычно делается в одной из баз.
Можно в обеих. И гоняется.

Если первоначальное заполнение из КД2 оно и без этого вроде как работает.

Начет КД2 = зря.
36 СвинТуз
 
06.12.24
17:47
Элементарно.

Велосипед дело увлекательное. Его изобретение в квадрате.
37 247tsm
 
06.12.24
18:06
(36) велосипед или нет, не знаю, но уверен в одном: не существует алгоритма дающего на 100% правильное однозначное соединение данных источника и приемника, если нет уникального (простого или составного) ключа
38 lEvGl
 
гуру
06.12.24
18:15
(0)
ТекущаяСтрока = Элемент.ТекущиеДанные;
    ТипЗначенияСвойства = ТекущаяСтрока.Свойство.ТипЗначения;
    
    ЭлементУправления = Элемент.Колонки.Колонка.ЭлементУправления;
    ЭлементУправления.ОграничениеТипа = ТипЗначенияСвойства;
    ТекущаяСтрока.Колонка = ТипЗначенияСвойства.ПривестиЗначение(ТекущаяСтрока.Колонка)

ТипЗначения можно сделать из строки
39 247tsm
 
06.12.24
18:18
(38) спасибо, пробую
40 247tsm
 
09.12.24
11:09
сделал так:

Процедура ТабличноеПоле1ПередНачаломИзменения(Элемент, Отказ)

СтрокаТипЗнч = "СправочникСсылка.Сотрудники";
эл = Элемент.Колонки.УникальныйИдентификаторПриемника.ЭлементУправления;
	
эл.ОграничениеТипа = Новый ОписаниеТипов(СтрокаТипЗнч);
Значение = эл.Значение;
эл.Значение = эл.ОграничениеТипа.ПривестиЗначение(Значение);
эл.ВыбиратьТип = Ложь;

КонецПроцедуры


в итоге тип не выбирается, но и справочник Сотрудники не открывается для выбора сотрудника - просто на кнопке "..." и при нажатии ничего не происходит.

Что я упустил?
41 lEvGl
 
гуру
06.12.24
19:43
Тип("СправочникСсылка.Сотрудники")
а не описаниетипов
ну и колонка должна такой тип поддерживать, либо должна быть составной либо такие вещи делаются через ПВХ, где описаны допустимые типы, а у колонки тип - этот ПВХ. Это упрощенно, ПВХов на самом деле два
42 247tsm
 
09.12.24
10:58
(41) не получилось, но скорее всего это связано с типом колонки, которую я получаю из запроса.
Попробую в этом направлении.
Спасибо
43 СвинТуз
 
12.12.24
11:26
(42)
"которую я получаю из запроса"
Создайте кодом, жестко типизируя колонки, и построчно перегрузите.
44 247tsm
 
12.12.24
11:22
(43) да, спасибо, так я и сделал