Имя: Пароль:
1C
 
Обнаружено дублирование ключевых значений в колонках: "Ссылка" ДС при прокрутке
0 tigrandis
 
04.07.21
15:34
Добрый день, помогите понять что не так, в расширение меняю текст запроса, все как в инструкции, при запуске все отлично, но при прокрутке выдает Обнаружено дублирование ключевых значений в колонках: "Ссылка" динамическое считывание включал и выключал, никакого толка, есть идеи у кого то ?
1 craxx
 
04.07.21
15:36
(0) динамическое считывание тут не причем. В консоли запросов текст запроса собери и посмотри где ключи дублятся
2 tigrandis
 
04.07.21
15:38
(1) вот именно что не дублятся, при запуске норм запускает и данные есть, но когда несколько раз прокручиваю выпадает данная ошибка
3 craxx
 
04.07.21
15:39
(2) текст запроса  студию
4 BeerHelpsMeWin
 
04.07.21
15:40
(0) вангую: выводишь в список неуникальные допреквизиты справочника/документа
5 tigrandis
 
04.07.21
15:40
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ДокументЗаказКлиента.Ссылка КАК Ссылка,
    ДокументЗаказКлиента.ПометкаУдаления КАК ПометкаУдаления,
    ДокументЗаказКлиента.Номер КАК Номер,
    ДокументЗаказКлиента.Дата КАК Дата,
    ДокументЗаказКлиента.НомерПоДаннымКлиента КАК НомерПоДаннымКлиента,
    ДокументЗаказКлиента.ДатаПоДаннымКлиента КАК ДатаПоДаннымКлиента,
    ДокументЗаказКлиента.Проведен КАК Проведен,
    ДокументЗаказКлиента.Приоритет КАК Приоритет,
    ДокументЗаказКлиента.Партнер КАК Партнер,
    ДокументЗаказКлиента.Контрагент КАК Контрагент,
    ДокументЗаказКлиента.Организация КАК Организация,
    ДокументЗаказКлиента.Соглашение КАК Соглашение,
    ДокументЗаказКлиента.Договор КАК Договор,
    ДокументЗаказКлиента.Сделка КАК Сделка,
    ДокументЗаказКлиента.Валюта КАК Валюта,
    ДокументЗаказКлиента.СуммаДокумента КАК СуммаДокумента,
    ДокументЗаказКлиента.СуммаВозвратнойТары КАК СуммаВозвратнойТары,
    ДокументЗаказКлиента.ГрафикОплаты КАК ГрафикОплаты,
    ДокументЗаказКлиента.ЖелаемаяДатаОтгрузки КАК ЖелаемаяДатаОтгрузки,
    ДокументЗаказКлиента.Склад КАК Склад,
    ДокументЗаказКлиента.Статус КАК Статус,
    ДокументЗаказКлиента.Менеджер КАК Менеджер,
    ВЫРАЗИТЬ(ДокументЗаказКлиента.ДополнительнаяИнформация КАК СТРОКА(64)) КАК ДополнительнаяИнформация,
    ДокументЗаказКлиента.СуммаАвансаДоОбеспечения КАК СуммаАвансаДоОбеспечения,
    ДокументЗаказКлиента.СуммаПредоплатыДоОтгрузки КАК СуммаПредоплатыДоОтгрузки,
    ДокументЗаказКлиента.ДатаОтгрузки КАК ДатаОтгрузки,
    ДокументЗаказКлиента.ХозяйственнаяОперация КАК ХозяйственнаяОперация,
    ДокументЗаказКлиента.ПорядокРасчетов КАК ПорядокРасчетов,
    ВЫРАЗИТЬ(ДокументЗаказКлиента.Комментарий КАК СТРОКА(64)) КАК Комментарий,
    ВЫБОР
        КОГДА НЕ ДокументЗаказКлиента.Проведен
            ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияЗаказовКлиентов.ПустаяСсылка)
        ИНАЧЕ ЕСТЬNULL(СостоянияЗаказовКлиентов.Состояние, ЗНАЧЕНИЕ(Перечисление.СостоянияЗаказовКлиентов.Закрыт))
    КОНЕЦ КАК Состояние,
    ВЫБОР
        КОГДА НЕ ДокументЗаказКлиента.Проведен
            ТОГДА ЛОЖЬ
        КОГДА СостоянияЗаказовКлиентов.ДатаСобытия <> ДАТАВРЕМЯ(1, 1, 1)
                И &ДатаАктуальности > СостоянияЗаказовКлиентов.ДатаСобытия
            ТОГДА ИСТИНА
        ИНАЧЕ ЛОЖЬ
    КОНЕЦ КАК Просрочен,
    ВЫБОР
        КОГДА ДокументЗаказКлиента.Приоритет В
                (ВЫБРАТЬ ПЕРВЫЕ 1
                    Приоритеты.Ссылка КАК Приоритет
                ИЗ
                    Справочник.Приоритеты КАК Приоритеты
                УПОРЯДОЧИТЬ ПО
                    Приоритеты.РеквизитДопУпорядочивания)
            ТОГДА 0
        КОГДА ДокументЗаказКлиента.Приоритет В
                (ВЫБРАТЬ ПЕРВЫЕ 1
                    Приоритеты.Ссылка КАК Приоритет
                ИЗ
                    Справочник.Приоритеты КАК Приоритеты
                УПОРЯДОЧИТЬ ПО
                    Приоритеты.РеквизитДопУпорядочивания УБЫВ)
            ТОГДА 2
        ИНАЧЕ 1
    КОНЕЦ КАК КартинкаПриоритета,
    ЕСТЬNULL(СостоянияЗаказовКлиентов.СуммаОплаты, 0) КАК СуммаОплаты,
    ЕСТЬNULL(СостоянияЗаказовКлиентов.ПроцентОплаты, 0) КАК ПроцентОплаты,
    ЕСТЬNULL(СостоянияЗаказовКлиентов.СуммаОтгрузки, 0) КАК СуммаОтгрузки,
    ЕСТЬNULL(СостоянияЗаказовКлиентов.ПроцентОтгрузки, 0) КАК ПроцентОтгрузки,
    ВЫБОР
        КОГДА ЕСТЬNULL(СостоянияЗаказовКлиентов.СуммаДолга, 0) < 0
            ТОГДА ЕСТЬNULL(СостоянияЗаказовКлиентов.СуммаДолга, 0)
        ИНАЧЕ 0
    КОНЕЦ КАК НашДолг,
    ВЫБОР
        КОГДА ЕСТЬNULL(СостоянияЗаказовКлиентов.СуммаДолга, 0) > 0
            ТОГДА ЕСТЬNULL(СостоянияЗаказовКлиентов.СуммаДолга, 0)
        ИНАЧЕ 0
    КОНЕЦ КАК ДолгКлиента,
    ЕСТЬNULL(СостоянияЗаказовКлиентов.ПроцентДолга, 0) КАК ПроцентДолга,
    ЕСТЬNULL(СостоянияЗаказовКлиентов.ДатаСобытия, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаСобытия,
    ЕСТЬNULL(СостоянияЗаказовКлиентов.ЕстьРасхожденияОрдерНакладная, ЛОЖЬ) КАК ЕстьРасхожденияОрдерНакладная,
    СостоянияЭД.СостояниеВерсииЭД КАК СостояниеВерсииЭД,
    СостоянияЭД.ПредставлениеСостояния КАК ПредставлениеСостояния,
    &ДополнительныеПоляСостояниеEDI КАК ДополнительныеПоляСостояниеEDI,
    ВЫБОР
        КОГДА ДокументЗаказКлиента.СуммаДокумента - ЕСТЬNULL(ПБДС.Ссылка.СуммаДокумента, 0) - ЕСТЬNULL(ПКО.Ссылка.СуммаДокумента, 0) - ЕСТЬNULL(ЭКВ.Ссылка.СуммаДокумента, 0) = 0
            ТОГДА ИСТИНА
        ИНАЧЕ ЛОЖЬ
    КОНЕЦ КАК Оплачено,
    ВЫБОР
        КОГДА ДокументЗаказКлиента.СуммаДокумента - РеализацияТоваровУслуг.СуммаДокумента = 0
            ТОГДА ИСТИНА
        ИНАЧЕ ЛОЖЬ
    КОНЕЦ КАК Отгружен,
    ЕСТЬNULL(ДопРеквизитОтправленНаПочту.Значение, ЛОЖЬ) КАК ОтправленоНаПочту,
    ЕСТЬNULL(ДопРеквизитРеализацияБезОплаты.Значение, ЛОЖЬ) КАК РеализацияБезОплаты
ИЗ
    Документ.ЗаказКлиента КАК ДокументЗаказКлиента
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияЗаказовКлиентов КАК СостоянияЗаказовКлиентов
        ПО (СостоянияЗаказовКлиентов.Заказ = ДокументЗаказКлиента.Ссылка)
        {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияЭД КАК СостоянияЭД
        ПО (СостоянияЭД.СсылкаНаОбъект = ДокументЗаказКлиента.Ссылка)}
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеБезналичныхДенежныхСредств.РасшифровкаПлатежа КАК ПБДС
        ПО ДокументЗаказКлиента.Ссылка = ПБДС.ОснованиеПлатежа
            И (ПБДС.Ссылка.Проведен)
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриходныйКассовыйОрдер.РасшифровкаПлатежа КАК ПКО
        ПО ДокументЗаказКлиента.Ссылка = ПКО.ОснованиеПлатежа
            И (ПКО.Ссылка.Проведен)
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        ПО ДокументЗаказКлиента.Ссылка = РеализацияТоваровУслуг.ЗаказКлиента
            И (РеализацияТоваровУслуг.Ссылка.Проведен)
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.ДополнительныеРеквизиты КАК ДопРеквизитОтправленНаПочту
        ПО ДокументЗаказКлиента.Ссылка = ДопРеквизитОтправленНаПочту.Ссылка
            И (ДопРеквизитОтправленНаПочту.Свойство.Наименование = "Результат отправлен на почту")
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.ДополнительныеРеквизиты КАК ДопРеквизитРеализацияБезОплаты
        ПО ДокументЗаказКлиента.Ссылка = ДопРеквизитРеализацияБезОплаты.Ссылка
            И (ДопРеквизитРеализацияБезОплаты.Свойство.Наименование = "Реализация без оплаты")
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОперацияПоПлатежнойКарте.РасшифровкаПлатежа КАК ЭКВ
        ПО ДокументЗаказКлиента.Ссылка = ЭКВ.ОснованиеПлатежа
            И (ЭКВ.Ссылка.Проведен)
6 tigrandis
 
04.07.21
15:41
(4) да так и есть, а как обойти этот момент ?
7 craxx
 
04.07.21
15:42
(6) ну а говоришь не дублятся
8 tigrandis
 
04.07.21
15:42
ну в рез запросе нет дублей
9 craxx
 
04.07.21
15:44
(8) сам только что в (6) написал что есть
10 tigrandis
 
04.07.21
15:44
(9) ну есть доп реквизиты, но по каждому стоит отбор, и по сути они не дубли, Я имел ввиду вдруг этот момент нужно по другому соединять
11 craxx
 
04.07.21
15:46
(10) что значит по сути? В поле Ссылка в таблице результата запроса значения повторяются?
12 tigrandis
 
04.07.21
15:47
(11) нет
13 BeerHelpsMeWin
 
04.07.21
15:48
(6) А как еще обойти? Переписать запрос, чтобы левые соединения возвращали только одно значение.
Использовать вместо ДС что-то другое.
Сделать для ДС уникальный ключ вместо "ссылки". (Но тогда, естественно, у тебя некоторые документы будут попадать в список несколько раз.)
14 acht
 
04.07.21
15:51
(12) Ты этот запрос откуда взял - из текста в конфигураторе?
15 tigrandis
 
04.07.21
16:21
(14) текст запроса получаю через функцию в расширении, и при создании формы меняю у динамического списка запрос
16 Ёпрст
 
гуру
04.07.21
16:21
(15) ну и выкинб из текста запроса все левые соединения, которые приводят к дубля ссылки на док твой.
17 Ёпрст
 
гуру
04.07.21
16:23
И это, group_concat в 1с-ину еще не завезли, если все доп реквизиты, хочешь в одной колонке иметь, например.
Так что, страдай и пиши запрос без них
18 acht
 
04.07.21
16:28
(15) Выброси его в печку.

После прохождения через СКД, которая управляет динамическим списком, фактически выполняемый запрос будет построен заново, по установленным в списке отборам/группировкам и т.п. И именно этот новый запрос даст тебе дублирование ключевой колонки.

Клади на форму команду, получай исполняемую схему/настройки динамического списка и смотри, какой запрос там будет - ЕМНИП это будет в инициализированном макете компоновки. И вот только тогда ты поймешь, что там происходит и почему СКД исправила твой запрос именно так.
19 acht
 
04.07.21
16:30
И окажется там вообще какой-нибудь заказ, оплаченный в два приема...