Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 10:37

Изменение Динамического списка в расширении

Автор illyaromanenko, 03 июл 2024, 18:01

0 Пользователей и 1 гость просматривают эту тему.

illyaromanenko

Добрый вечер. Конфигурация ERP 8.3. В расширении необходимо изменить динамический список на форме, а именно добавить колонку Электронная почта. Сейчас запрос динамического списка выглядит так:

ВЫБРАТЬ
   СверкаВзаиморасчетов.Ссылка КАК Ссылка,
   СверкаВзаиморасчетов.ПометкаУдаления КАК ПометкаУдаления,
   СверкаВзаиморасчетов.Номер КАК Номер,
   СверкаВзаиморасчетов.Дата КАК Дата,
   СверкаВзаиморасчетов.Организация КАК Организация,
   СверкаВзаиморасчетов.Контрагент КАК Контрагент,
   СверкаВзаиморасчетов.ТипРасчетов КАК ТипРасчетов,
   СверкаВзаиморасчетов.Партнер КАК Партнер,
   СверкаВзаиморасчетов.Договор КАК Договор,
   СверкаВзаиморасчетов.Менеджер КАК Менеджер,
   СверкаВзаиморасчетов.Статус КАК Статус,
   СостоянияЭД.СостояниеЭДО КАК СостояниеЭДО,
   СостоянияЭД.ПредставлениеСостояния КАК ПредставлениеСостояния
ИЗ
   Документ.СверкаВзаиморасчетов2_5_11 КАК СверкаВзаиморасчетов
      {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияПоОбъектамУчетаЭДО КАК СостоянияЭД
      ПО СверкаВзаиморасчетов.Ссылка = СостоянияЭД.СсылкаНаОбъект}


Изменяю его в процедуре ПриСозданииНаСервере()
   //изменяем динамический список
   СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка();
   СвойстваСписка.ОсновнаяТаблица = "Документ.СверкаВзаиморасчетов2_5_11";
   СвойстваСписка.ДинамическоеСчитываниеДанных = Истина;
   СвойстваСписка.ТекстЗапроса =  "ВЫБРАТЬ
   |   СверкаВзаиморасчетов.Ссылка КАК Ссылка,
   |   СверкаВзаиморасчетов.ПометкаУдаления КАК ПометкаУдаления,
   |   СверкаВзаиморасчетов.Номер КАК Номер,
   |   СверкаВзаиморасчетов.Дата КАК Дата,
   |   СверкаВзаиморасчетов.Организация КАК Организация,
   |   СверкаВзаиморасчетов.Контрагент КАК Контрагент,
   |   СверкаВзаиморасчетов.ТипРасчетов КАК ТипРасчетов,
   |   СверкаВзаиморасчетов.Партнер КАК Партнер,
   |   СверкаВзаиморасчетов.Договор КАК Договор,
   |   СверкаВзаиморасчетов.Менеджер КАК Менеджер,
   |   СверкаВзаиморасчетов.Статус КАК Статус,
   |   СостоянияЭД.СостояниеЭДО КАК СостояниеЭДО,
   |   СостоянияЭД.ПредставлениеСостояния КАК ПредставлениеСостояния,
   |   КонтрагентыКонтактнаяИнформация.АдресЭП КАК АдресЭП
   |ИЗ
   |   Документ.СверкаВзаиморасчетов2_5_11 КАК СверкаВзаиморасчетов
   |      {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияПоОбъектамУчетаЭДО КАК СостоянияЭД
   |      ПО СверкаВзаиморасчетов.Ссылка = СостоянияЭД.СсылкаНаОбъект}
   |      ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
   |      ПО СверкаВзаиморасчетов.Партнер = КонтрагентыКонтактнаяИнформация.Ссылка.Партнер";
   ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.СписокДокументовСверки,
   СвойстваСписка);
   
Ошибка: Обнаружено дублирорвание ключевых значений в колонках "Ссылка". Пробовал и через временную таблицу и через виртуальную - никак не получается. Одна  и та же ошибка. С одним соединением всё работает, с двумя всё ломается. Как это можно исправить?

Максим75

illyaromanenko, а разве может быть одновременно задана и основная таблица динамического списка и запрос?
вроде как или то или то. Или я ошибаюсь?

antoneus

Контрагентов больше одного у партнера может быть, вот и двоит-троит-пятерит строки при левом соединении, а динсписок такое не любит.

Цитата: Максим75 от 03 июл 2024, 18:25а разве может быть одновременно задана и основная таблица динамического списка и запрос?

а почему нет?)

illyaromanenko

antoneus, это да, но дело в другом. Даже если просто прописать два левых соединения не с табличной частью а с регистром каким-то(например), ошибка одна и та же. Эх, придётся костыли придумывать


LexaK

illyaromanenko, вот здесь ошибка
   |      ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
   |      ПО СверкаВзаиморасчетов.Партнер = КонтрагентыКонтактнаяИнформация.Ссылка.Партнер";

необходимо в условие связи добавить отбор по Типу = Электронная почта (как там у вас)

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

antoneus

Ну так в регистре тоже несколько записей может быть по одному партнеру, к соединениям в запросе динамического списка надо аккуратно относиться.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск