Связь параметров выбора между полями двух разных таблиц справочника

1. DENSKR 16 18.03.21 12:43 Сейчас в теме
Нужна помощь! Есть справочник с двумя табличными частями.
Необходимо настроить связь параметров выбора поля "Номенклатура" одной табличной части на поле "Номенклатура" другой табличной части, чтобы в конечном итоге во второй табличной части можно было выбрать номенклатуру только ту, которая находится в первой табличной части.
Я вижу это примерно так, но это не работает:

НоваяСвязь = Новый СвязьПараметраВыбора("Отбор.Ссылка", "НоменклатураИзПервойТаблицы");
НовыйМассив = Новый Массив;
НовыйМассив.Добавить(НоваяСвязь);
НовыеСвязи = Новый ФиксированныйМассив(НовыйМассив);
	Элементы.ГруппаСтраницы.ПодчиненныеЭлементы.ВтораяТаблица.ПодчиненныеЭлементы.ВтораяТаблицаСсылкаНаПервуюТаблицу.СвязиПараметровВыбора = НовыеСвязи;
	
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. glek 120 18.03.21 13:01 Сейчас в теме
(1) А если в первой табличной части удалить строку? Или поменять один товар на другой? Боюсь, что связями параметров выбора особо здесь ничего не сделаешь. Если "Номенклатура из первой" это у вас реквизит формы, то при каждом позиционировании на первой ТЧ Вы будете получать не совсем ожидаемое поведение. Здесь необходимо, скорее всего:
1. процедура при окончании редактировани и после удаления для первой ТЧ, в которой Вы будете формировать массив номенклатуры для второй ТЧ (в случае удаления необходимо будет удалять позиции из второй ТЧ)
2. Для второй ТЧ для событие начало выбора, автоподбор и т.д (или при изменении, что намного проще) проверять, входит ли номенклатура в массив, полученный в пункте 1.
3. DENSKR 16 18.03.21 13:11 Сейчас в теме
(2) А как примерно это может выглядеть программно?
8. glek 120 18.03.21 13:30 Сейчас в теме
(3)
1. При окончании редактирования и после удаления формируете массив номенклатуры (ТЧ1.Выгрузить().ВыгрузитьКОлонку("Номенклатура");
1.а)
Запрос = Новый Запрос;
Запрос.Текст = 
"Выбрать
Все поля из второй таблицы
Из &Таблица2 Как Таблица2
Поместить Таблица2
;
Выбрать 
Все Поля из Таблицы2 Где Таблица2.Номенклатура в (&МассивНоменклатуры)

Запрос.УстановитьПараметр(ТАблица2, Таблица2)
Запрос.УстановитьПараметр(МассивНоменклатуры, Массив номенклатуры из пункт 1

Таблица2.Загрузить(Запрос.выполнить.Выгрузить
Показать


Это при изменении в таблице 1

Во второй таблице.
Для упрощения (моего, чтобы много не писать) ставим в колонке номенклатуры запрет редактирования текста (чтоб не писать автоподбор и окончание ввода текста), А в начало выбора ставим
СтандартнаяОбработка = ЛОЖЬ
ПараметрыФормы = Новый Структура("Отбор", Новый Структура("Ссылка", МассивСсылок из пункта1))
ОткрытьФОрму(Справочник.Номенклатура.ФормаВыбора, ПараметрыФОрмы, Элемент).

Как-то так.
4. bmk74 235 18.03.21 13:17 Сейчас в теме
(1)
"НоменклатураИзПервойТаблицы")

А вот это что ?...извиняюсь ...
Вы хотите задать отбор по чему ???
Из справки
5. DENSKR 16 18.03.21 13:19 Сейчас в теме
(4) Это я не знаю как настроить связь параметров выбора.
6. DENSKR 16 18.03.21 13:19 Сейчас в теме
(5) Отсюда и тема на форуме за вознограждение....
7. bmk74 235 18.03.21 13:21 Сейчас в теме +1 $m
(3)Примерно так
&НаКлиенте
Процедура ТоварыНоменклатураНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	Стандартная обработка  = Ложь;
        ДанныеВыбора = (Заполняете это списком значений номенклатур из первой таблицы);
КонецПроцедуры


Связи параметров никак не настроите по таб части

Опять же встроенная справка всегда вам в помошь
НачалоВыбора
9. DENSKR 16 18.03.21 13:36 Сейчас в теме
(7) Спасибо, это именно то что нужно!
Сделал так:
&НаКлиенте
Процедура ТаблицаДобавленияДляНоменклатурыНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	СтандартнаяОбработка  = Ложь;	
ДанныеВыбора = СписокНоменклатуры();
КонецПроцедуры

Функция СписокНоменклатуры()
	
ТЗНом = Объект.УсловиеНоменклатура;
ТЗНомВыгр = ТЗНом.Выгрузить();
СписокНом = Новый СписокЗначений;
Для Каждого Стр Из ТЗНомВыгр Цикл
	СписокНом.Добавить(Стр.Номенклатура);
КонецЦикла;
Возврат СписокНом;	
КонецФункции	
Показать
10. Sashares 35 18.03.21 13:42 Сейчас в теме
(9)При начале выбора нельзя использовать серверные вызовы.
Лучше список номенклатуры сделать реквизитом формы и заполнять/актуализировать при необходимости.
Например, если у вас табличные части на разных страницах, то можно при смене страницы на страницу с ТЧ2 формировать список номенклатуры для выбора.
11. DENSKR 16 18.03.21 13:43 Сейчас в теме
(10) У меня корректно отрабатывает. Почему нельзя использовать?
12. Sashares 35 18.03.21 13:44 Сейчас в теме
(11)Синтакс помощник - НачалоВыбора.
Прикрепленные файлы:
13. DENSKR 16 18.03.21 13:46 Сейчас в теме
(12) Я по этому заполняю список для данных выбора отдельно функцией.
14. Sashares 35 18.03.21 13:48 Сейчас в теме
(13)Если у функции не указана директива, то по умолчанию используется директива &НаСервере.
15. DENSKR 16 18.03.21 13:50 Сейчас в теме
(14) Вопрос тут нельзя использовать серверные вызовы потому что это понесет за собой что то?
Или нельзя использовать серверные вызовы потому что не будет работать, вроде работает код который я указал выше.
16. Sashares 35 18.03.21 14:20 Сейчас в теме
(15)Скорее всего
потому что это понесет за собой что то
, т.к. код то обычно работает. Что именно будет это что-то можно только гадать.
Ну и имхо, если у вас по сценарию работы сначала заполняется одна табличная часть, а потом пользователь переходит ко второй табличной части, то при выборе каждой номенклатуры получать список который не изменился - а зачем?
17. DENSKR 16 18.03.21 14:24 Сейчас в теме
(16) Имхо без НачалоВыбора тут не обойтись...
18. starik-2005 3054 18.03.21 14:26 Сейчас в теме
(15) там серверная функция вообще не нужна, ибо табличная часть объекта доступна и на клиенте.
19. DENSKR 16 18.03.21 14:39 Сейчас в теме
(18) А как тогда заполнить данные выбора на клиенте?
20. starik-2005 3054 18.03.21 14:41 Сейчас в теме +1 $m
(19)
ДанныеВыбора =  Новый СписокЗначений;
Для каждого Ст ИЗ Объект.ТаблицаНомерРаз Цикл
  ДанныеВыбора.Добавить( Ст.Номенклатура )
КонецЦикла;
СтандартнаяОбработка = Ложь;
21. DENSKR 16 18.03.21 14:48 Сейчас в теме
(20) Добавить на клиенте же не работает.
22. starik-2005 3054 18.03.21 14:48 Сейчас в теме
23. DENSKR 16 18.03.21 14:49 Сейчас в теме
24. DENSKR 16 18.03.21 14:49 Сейчас в теме
(20) Так и сделал, Спасибо!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот