Имя: Пароль:
1C
1С v8
Проблема с запросом
0 ЮлияКолегова
 
15.07.20
20:26
Всем добрый день. Есть запрос

ВЫБРАТЬ
    КодыСтрокДекларацииПоНДСКЗачетуСрезПоследних.Период КАК Период,
    КодыСтрокДекларацииПоНДСКЗачетуСрезПоследних.ВидОперации КАК ВидОперацииПоступления,
    КодыСтрокДекларацииПоНДСКЗачетуСрезПоследних.КодСтроки КАК КодСтроки,
    КодыСтрокДекларацииПоНДСКЗачетуСрезПоследних.ВидОборота КАК ВидОборота,
    ВЫБОР
        КОГДА КодыСтрокДекларацииПоНДСКЗачетуСрезПоследних.ВидОборота = ЗНАЧЕНИЕ(Перечисление.ВидыОборотовПоРеализации.ПустаяСсылка)
            ТОГДА 2
        ИНАЧЕ 1
    КОНЕЦ КАК Приоритет
ПОМЕСТИТЬ ВТ_Приоритет
ИЗ
    РегистрСведений.КодыСтрокДекларацииПоНДСКЗачету.СрезПоследних(&КонПериода, ) КАК КодыСтрокДекларацииПоНДСКЗачетуСрезПоследних

ИНДЕКСИРОВАТЬ ПО
    Приоритет,
    ВидОперацииПоступления
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТаблицаОпераций.ВидОперацииПоступления КАК ВидОперацииПоступления,
    МИНИМУМ(ТаблицаОпераций.Приоритет) КАК Приоритет
ПОМЕСТИТЬ вт_ТаблицаДохода
ИЗ
    ВТ_Приоритет КАК ТаблицаОпераций

СГРУППИРОВАТЬ ПО
    ТаблицаОпераций.ВидОперацииПоступления
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    вт_ТаблицаДохода.ВидОперацииПоступления КАК ВидОперацииПоступления,
    ДанныеОКодахДекларации.КодСтроки КАК КодСтроки
ПОМЕСТИТЬ ВТ_СведенияОкодахСтрокДекларации
ИЗ
    вт_ТаблицаДохода КАК вт_ТаблицаДохода
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Приоритет КАК ДанныеОКодахДекларации
        ПО вт_ТаблицаДохода.Приоритет = ДанныеОКодахДекларации.Приоритет
            И вт_ТаблицаДохода.ВидОперацииПоступления = ДанныеОКодахДекларации.ВидОперацииПоступления

ИНДЕКСИРОВАТЬ ПО
    ВидОперацииПоступления,
    КодСтроки
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    НДСКВозмещению.СуммаБезНДСОборот КАК СуммаБезНДСОборот,
    НДСКВозмещению.СуммаНДСОборот КАК СуммаНДСОборот,
    НДСКВозмещению.ВидОперацииПоступления КАК ВидОперацииПоступления,
    НДСКВозмещению.ВидОборота КАК ВидОборота,
    НДСКВозмещению.ВидНалогаНДС КАК ВидНалогаНДС,
    НДСКВозмещению.Регистратор,
    НДСКВозмещению.СчетФактура
ПОМЕСТИТЬ вт_НДСКВозмещениюОбороты
ИЗ
    РегистрНакопления.НДСКВозмещению.Обороты(&НачПериода, &КонПериода, Регистратор, Налогоплательщик = &Налогоплательщик) КАК НДСКВозмещению

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    КорректировкаНДСКВозмещению.СуммаКорректировкиОборотаОборот,
    КорректировкаНДСКВозмещению.СуммаНДСОборот,
    КорректировкаНДСКВозмещению.ВидОперацииКорректировки,
    КорректировкаНДСКВозмещению.ВидОборота,
    КорректировкаНДСКВозмещению.ВидНалогаНДС,
    КорректировкаНДСКВозмещению.Регистратор,
    NULL
ИЗ
    РегистрНакопления.КорректировкаНДСКВозмещению.Обороты(&НачПериода, &КонПериода, Регистратор, Налогоплательщик = &Налогоплательщик) КАК КорректировкаНДСКВозмещению
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    КодыСтрокДекларацииПоНДСКЗачетуСрезПоследних.КодСтроки КАК КодСтроки,
    СУММА(вт_НДСКВозмещениюОбороты.СуммаБезНДСОборот) КАК СуммаБезНДСОборот,
    СУММА(вт_НДСКВозмещениюОбороты.СуммаНДСОборот) КАК СуммаНДСОборот,
    вт_НДСКВозмещениюОбороты.ВидОперацииПоступления КАК ВидОперацииПоступления,
    "Возмещение" КАК Раздел,
    вт_НДСКВозмещениюОбороты.ВидОборота,
    вт_НДСКВозмещениюОбороты.ВидНалогаНДС КАК ВидНалогаНДС,
    вт_НДСКВозмещениюОбороты.Регистратор КАК Регистратор,
    вт_НДСКВозмещениюОбороты.СчетФактура КАК СчетФактура
ПОМЕСТИТЬ ВозмещениеВТ
ИЗ
    вт_НДСКВозмещениюОбороты КАК вт_НДСКВозмещениюОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КодыСтрокДекларацииПоНДСКЗачету.СрезПоследних(&КонПериода, ) КАК КодыСтрокДекларацииПоНДСКЗачетуСрезПоследних
        ПО вт_НДСКВозмещениюОбороты.ВидОборота = КодыСтрокДекларацииПоНДСКЗачетуСрезПоследних.ВидОборота
            И вт_НДСКВозмещениюОбороты.ВидОперацииПоступления = КодыСтрокДекларацииПоНДСКЗачетуСрезПоследних.ВидОперации
ГДЕ
    (КодыСтрокДекларацииПоНДСКЗачетуСрезПоследних.КодСтроки ПОДОБНО &КодСтроки300
            ИЛИ КодыСтрокДекларацииПоНДСКЗачетуСрезПоследних.КодСтроки ЕСТЬ NULL)

СГРУППИРОВАТЬ ПО
    КодыСтрокДекларацииПоНДСКЗачетуСрезПоследних.КодСтроки,
    вт_НДСКВозмещениюОбороты.ВидОборота,
    вт_НДСКВозмещениюОбороты.ВидНалогаНДС,
    вт_НДСКВозмещениюОбороты.ВидОперацииПоступления,
    вт_НДСКВозмещениюОбороты.Регистратор,
    вт_НДСКВозмещениюОбороты.СчетФактура

ИНДЕКСИРОВАТЬ ПО
    КодСтроки,
    ВидНалогаНДС,
    Регистратор,
    СчетФактура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    СчетФактураПолученный.Ссылка,
    СчетФактураПолученный.ДокументОснование.Ссылка КАК Регистратор
ПОМЕСТИТЬ ВТ_ПодчиненныеДокументы
ИЗ
    Документ.СчетФактураПолученный.ДокументыОснования КАК СчетФактураПолученный
ГДЕ
    СчетФактураПолученный.Ссылка.Проведен = ИСТИНА
    И СчетФактураПолученный.ДокументОснование.Ссылка В
            (ВЫБРАТЬ
                вт_НДСКВозмещениюОбороты.Регистратор
            ИЗ
                вт_НДСКВозмещениюОбороты КАК вт_НДСКВозмещениюОбороты)

ИНДЕКСИРОВАТЬ ПО
    Регистратор
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ПодчиненныеДокументы.Ссылка,
    ПодчиненныеДокументы.Регистратор КАК Регистратор
ПОМЕСТИТЬ вт_ДействующиеСФ
ИЗ
    ВТ_ПодчиненныеДокументы КАК ПодчиненныеДокументы
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СчетаФактурыПрекратившиеДействие.СрезПоследних(
                ,
                СчетФактура В
                    (ВЫБРАТЬ
                        ВТ_ПодчиненныеДокументы.Ссылка
                    ИЗ
                        ВТ_ПодчиненныеДокументы КАК ВТ_ПодчиненныеДокументы)) КАК СчетаФактурыПрекратившиеДействие
        ПО ПодчиненныеДокументы.Ссылка = СчетаФактурыПрекратившиеДействие.СчетФактура
ГДЕ
    СчетаФактурыПрекратившиеДействие.СчетФактура ЕСТЬ NULL

ИНДЕКСИРОВАТЬ ПО
    Регистратор
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВозмещениеВТ.КодСтроки,
    ВозмещениеВТ.ВидОперацииПоступления,
    СУММА(ВозмещениеВТ.СуммаБезНДСОборот) КАК СуммаБезНДСОборот,
    СУММА(ВозмещениеВТ.СуммаНДСОборот) КАК СуммаНДСОборот,
    СУММА(ВЫБОР
            КОГДА вт_ДействующиеСФ.Ссылка ЕСТЬ NULL
                ТОГДА ВозмещениеВТ.СуммаБезНДСОборот
            ИНАЧЕ 0
        КОНЕЦ) КАК СуммаБезНДСОборот_БезСФ,
    СУММА(ВЫБОР
            КОГДА вт_ДействующиеСФ.Ссылка ЕСТЬ NULL
                ТОГДА ВозмещениеВТ.СуммаНДСОборот
            ИНАЧЕ 0
        КОНЕЦ) КАК СуммаНДСОборот_БезСФ,
    ВозмещениеВТ.Раздел КАК Раздел,
    ВозмещениеВТ.ВидОборота,
    СУММА(ВЫБОР
            КОГДА вт_ДействующиеСФ.Ссылка ЕСТЬ NULL
                ТОГДА 0
            ИНАЧЕ ВозмещениеВТ.СуммаБезНДСОборот
        КОНЕЦ) КАК СуммаБезНДСОборот_СФ,
    СУММА(ВЫБОР
            КОГДА вт_ДействующиеСФ.Ссылка ЕСТЬ NULL
                ТОГДА 0
            ИНАЧЕ ВозмещениеВТ.СуммаНДСОборот
        КОНЕЦ) КАК СуммаНДСОборот_СФ,
    ВЫБОР
        КОГДА вт_ДействующиеСФ.Ссылка ЕСТЬ NULL
            ТОГДА ЛОЖЬ
        ИНАЧЕ ВЫБОР
                КОГДА вт_ДействующиеСФ.Ссылка.СпособПолучения = ЗНАЧЕНИЕ(Перечисление.СпособыОбменаДокументами.Электронно)
                    ТОГДА ИСТИНА
                ИНАЧЕ ЛОЖЬ
            КОНЕЦ
    КОНЕЦ КАК ЕстьЭСФ
ИЗ
    ВозмещениеВТ КАК ВозмещениеВТ
        ЛЕВОЕ СОЕДИНЕНИЕ вт_ДействующиеСФ КАК вт_ДействующиеСФ
        ПО ВозмещениеВТ.Регистратор = вт_ДействующиеСФ.Регистратор
            И (ВЫБОР
                КОГДА ВозмещениеВТ.Регистратор ССЫЛКА Документ.АвансовыйОтчет
                    ТОГДА ВозмещениеВТ.СчетФактура = вт_ДействующиеСФ.Ссылка
                ИНАЧЕ ИСТИНА
            КОНЕЦ)
ГДЕ
    ВозмещениеВТ.ВидНалогаНДС = &ВидНалогаНДСМетодомЗачета
    И ВозмещениеВТ.КодСтроки = &КодСтрокиМетодаЗачета
    И ВозмещениеВТ.СчетФактура.Дата МЕЖДУ &НачПериода И &КонПериода

СГРУППИРОВАТЬ ПО
    ВозмещениеВТ.КодСтроки,
    ВозмещениеВТ.ВидОперацииПоступления,
    ВозмещениеВТ.Раздел,
    ВозмещениеВТ.ВидОборота,
    ВЫБОР
        КОГДА вт_ДействующиеСФ.Ссылка ЕСТЬ NULL
            ТОГДА ЛОЖЬ
        ИНАЧЕ ВЫБОР
                КОГДА вт_ДействующиеСФ.Ссылка.СпособПолучения = ЗНАЧЕНИЕ(Перечисление.СпособыОбменаДокументами.Электронно)
                    ТОГДА ИСТИНА
                ИНАЧЕ ЛОЖЬ
            КОНЕЦ
    КОНЕЦ

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ВозмещениеВТ.КодСтроки,
    ВозмещениеВТ.ВидОперацииПоступления,
    СУММА(ВозмещениеВТ.СуммаБезНДСОборот),
    СУММА(ВозмещениеВТ.СуммаНДСОборот),
    СУММА(ВЫБОР
            КОГДА вт_ДействующиеСФ.Ссылка ЕСТЬ NULL
                ТОГДА ВозмещениеВТ.СуммаБезНДСОборот
            ИНАЧЕ 0
        КОНЕЦ),
    СУММА(ВЫБОР
            КОГДА вт_ДействующиеСФ.Ссылка ЕСТЬ NULL
                ТОГДА ВозмещениеВТ.СуммаНДСОборот
            ИНАЧЕ 0
        КОНЕЦ),
    ВозмещениеВТ.Раздел,
    ВозмещениеВТ.ВидОборота,
    СУММА(ВЫБОР
            КОГДА вт_ДействующиеСФ.Ссылка ЕСТЬ NULL
                ТОГДА 0
            ИНАЧЕ ВозмещениеВТ.СуммаБезНДСОборот
        КОНЕЦ),
    СУММА(ВЫБОР
            КОГДА вт_ДействующиеСФ.Ссылка ЕСТЬ NULL
                ТОГДА 0
            ИНАЧЕ ВозмещениеВТ.СуммаНДСОборот
        КОНЕЦ),
    ВЫБОР
        КОГДА вт_ДействующиеСФ.Ссылка ЕСТЬ NULL
            ТОГДА ЛОЖЬ
        ИНАЧЕ ВЫБОР
                КОГДА вт_ДействующиеСФ.Ссылка.СпособПолучения = ЗНАЧЕНИЕ(Перечисление.СпособыОбменаДокументами.Электронно)
                    ТОГДА ИСТИНА
                ИНАЧЕ ЛОЖЬ
            КОНЕЦ
    КОНЕЦ
ИЗ
    ВозмещениеВТ КАК ВозмещениеВТ
        ЛЕВОЕ СОЕДИНЕНИЕ вт_ДействующиеСФ КАК вт_ДействующиеСФ
        ПО ВозмещениеВТ.Регистратор = вт_ДействующиеСФ.Регистратор
            И (ВЫБОР
                КОГДА ВозмещениеВТ.Регистратор ССЫЛКА Документ.АвансовыйОтчет
                    ТОГДА ВозмещениеВТ.СчетФактура = вт_ДействующиеСФ.Ссылка
                ИНАЧЕ ИСТИНА
            КОНЕЦ)
ГДЕ
    НЕ ВозмещениеВТ.КодСтроки = &КодСтрокиМетодаЗачета

СГРУППИРОВАТЬ ПО
    ВозмещениеВТ.КодСтроки,
    ВозмещениеВТ.ВидОперацииПоступления,
    ВозмещениеВТ.Раздел,
    ВозмещениеВТ.ВидОборота,
    ВЫБОР
        КОГДА вт_ДействующиеСФ.Ссылка ЕСТЬ NULL
            ТОГДА ЛОЖЬ
        ИНАЧЕ ВЫБОР
                КОГДА вт_ДействующиеСФ.Ссылка.СпособПолучения = ЗНАЧЕНИЕ(Перечисление.СпособыОбменаДокументами.Электронно)
                    ТОГДА ИСТИНА
                ИНАЧЕ ЛОЖЬ
            КОНЕЦ
    КОНЕЦ

При выполнении в обработке вылетает ошибка - "{ВнешнийОтчет.РегламентированныйОтчет300Форма.Форма.Форма3002020Кв1.Форма(3162)}: Ошибка при вызове метода контекста (Выполнить)
    Результат = Запрос.Выполнить();
по причине:
{(201, 34)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
И ВозмещениеВТ.СчетФактура.Дата <<?>>МЕЖДУ &НачПериода И &КонПериода"

При проверке этого же запроса в консоле работает все нормально. Пробовала и не ко временной таблице прописывать параметры связанные с датой, а СчетФактураПолученный.Ссылка.Проведен МЕЖДУ &НачПериода И &КонПериода - ошибка не уходит.
Запрос не мой, а как видно по ошибке - переделываю рег отчетность. Мне бы понять от чего такая ошибка? Пустых дат в СчетФактуре быть не может. Или как изменить условия?
1 ЮлияКолегова
 
15.07.20
20:30
В последней строке не Проведен а Дата
2 LoneWanderer
 
15.07.20
21:00
В параметрах точно даты лежат, а не, например, строки?
3 palsergeich
 
15.07.20
21:02
Посмотри что является результатом пакета вт_НДСКВозмещениюОбороты.
Там запрос - объединение.
Во 2ой части - счет фактура забита как Null.
А Null нельзя сравнивать так как Вы хотите
4 Жан Пердежон
 
15.07.20
21:02
***
    NULL <= скорее всего вот отсюда дату выцепить не может
ИЗ
    РегистрНакопления.КорректировкаНДСКВозмещению.Обороты(&НачПериода, &КонПериода, Регистратор, Налогоплательщик = &Налогоплательщик) КАК КорректировкаНДСКВозмещению
;

***
5 palsergeich
 
15.07.20
21:02
ВЫБРАТЬ
    НДСКВозмещению.СуммаБезНДСОборот КАК СуммаБезНДСОборот,
    НДСКВозмещению.СуммаНДСОборот КАК СуммаНДСОборот,
    НДСКВозмещению.ВидОперацииПоступления КАК ВидОперацииПоступления,
    НДСКВозмещению.ВидОборота КАК ВидОборота,
    НДСКВозмещению.ВидНалогаНДС КАК ВидНалогаНДС,
    НДСКВозмещению.Регистратор,
    НДСКВозмещению.СчетФактура
ПОМЕСТИТЬ вт_НДСКВозмещениюОбороты
ИЗ
    РегистрНакопления.НДСКВозмещению.Обороты(&НачПериода, &КонПериода, Регистратор, Налогоплательщик = &Налогоплательщик) КАК НДСКВозмещению

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    КорректировкаНДСКВозмещению.СуммаКорректировкиОборотаОборот,
    КорректировкаНДСКВозмещению.СуммаНДСОборот,
    КорректировкаНДСКВозмещению.ВидОперацииКорректировки,
    КорректировкаНДСКВозмещению.ВидОборота,
    КорректировкаНДСКВозмещению.ВидНалогаНДС,
    КорректировкаНДСКВозмещению.Регистратор,
    NULL <- Проблема тут
ИЗ
    РегистрНакопления.КорректировкаНДСКВозмещению.Обороты(&НачПериода, &КонПериода, Регистратор, Налогоплательщик = &Налогоплательщик) КАК КорректировкаНДСКВозмещению
;
6 Жан Пердежон
 
15.07.20
21:02
(3) сам NULL сравнивать можно
7 palsergeich
 
15.07.20
21:02
(4) Хех, почти синхронно)
8 palsergeich
 
15.07.20
21:03
(6) Но не на интервал
9 palsergeich
 
15.07.20
21:04
(8) Туплю, чота, устал.
СчетФактура.Дата
он не может от Null получить Дату)
10 ЮлияКолегова
 
15.07.20
21:16
В общем проблема была в том, что при передаче параметра в КонПериода была изначально Граница, поменяв на просто КонецДня все заработало. Посмотрим на сколько сильно это повлияет на данные (2) (3) (4)
11 palsergeich
 
15.07.20
21:42
(10) Но на то, что мы написали тоже обрати внимание, то, что сейчас этого нет, не значит что не нарвешься
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан