Имя: Пароль:
1C
1С v8
Проблема при выводе списка
0 Xsander
 
22.04.19
08:34
Доброго Времени Суток!

Не могу понять - вывожу список документов из динамического списка запросом - 1С выдает ошибку, что несколько записей, хотя регистры проверил - в каждом по одной записи к документу, может в запросе как-то подругому нужно делать соединение?

Запрос:

ВЫБРАТЬ
    ДокументЗаказКлиента.Ссылка КАК Ссылка,
    ДокументЗаказКлиента.ПометкаУдаления КАК ПометкаУдаления,
    ДокументЗаказКлиента.Номер КАК Номер,
    ДокументЗаказКлиента.Дата КАК Дата,
    ВЫБОР
        КОГДА (НЕ ДокументЗаказКлиента.Проведен)
            ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияЗаказовКлиентов.ПустаяСсылка)
        ИНАЧЕ
            ЕСТЬ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(СостоянияЗаказовКлиентов.ЕстьРасхожденияОрдерНакладная,ЛОЖЬ) КАК ЕстьРасхожденияОрдерНакладная,
    СостоянияЭД.СостояниеВерсииЭД,
    ВЫБОР
        КОГДА ДокументЗаказКлиента.ЖелаемаяДатаОтгрузки = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                ИЛИ ДокументЗаказКлиента.ПометкаУдаления = ИСТИНА
            ТОГДА 1
        КОГДА Р_Плановые.Дата ЕСТЬ NULL ИЛИ Р_Плановые.Дата = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
            ТОГДА 2
        КОГДА Р_Плановые.Дата > ДокументЗаказКлиента.ЖелаемаяДатаОтгрузки
            ТОГДА 0
        КОГДА Р_Плановые.Дата <= ДокументЗаказКлиента.ЖелаемаяДатаОтгрузки
            ТОГДА 3
        ИНАЧЕ 0
    КОНЕЦ КАК ИндексКартинкиСрока,
    Р_Плановые.Дата КАК ПлановаяДатаПоступления1    
ИЗ
    Документ.ЗаказКлиента КАК ДокументЗаказКлиента
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияЗаказовКлиентов КАК СостоянияЗаказовКлиентов
        ПО (СостоянияЗаказовКлиентов.Заказ = ДокументЗаказКлиента.Ссылка)
        {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияЭД КАК СостоянияЭД
        ПО (СостоянияЭД.СсылкаНаОбъект = ДокументЗаказКлиента.Ссылка)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Р_ПлановыеСрокиПоставки КАК Р_Плановые
        ПО (Р_Плановые.ЗаказКлиента = ДокументЗаказКлиента.Ссылка)}
1 catena
 
22.04.19
08:36
"регистры проверил - в каждом по одной записи" - значит плохо проверил. Как проверял?
"может в запросе как-то подругому нужно делать соединение" - соединения в ДС нужно делать так, чтобы они даже в теории не допускали дубли по ссылке. Как именно без знания структуры регистров сказать сложно.
2 Xsander
 
22.04.19
08:44
Сам так думал - для каждого регистра обработку написал - запрос идет по записям и считает их количество - сначала выводил только если
количество больше 1, потом все вывел с количеством
3 Xsander
 
22.04.19
08:47
все по одной, сейчас закину в тестовую бд и наверное начну пачками записи удалять - смотреть что происходит

Может при трех левых соединениях теряется связка с заказом и начинает выдавать пустое значение в ссылке на заказ - сейчас проверю
4 catena
 
22.04.19
09:12
(2)Берешь запрос, запускаешь его в консоли с итогами по ссылке и внимательно смотришь на задублированные строки.