Подскажите по запросу плиз:
Нужно чтобы из регистра накопления Продажи попали все строки по документам "Реализация товаров и услуг" с условием отбора "ОтгрузкаБезПерехода = НЕТ" и
"Возврат товаров от покупателя".
Нужно чтобы из регистра накопления Продажи попали все строки по документам "Реализация товаров и услуг" с условием отбора "ОтгрузкаБезПерехода = НЕТ" и
"Возврат товаров от покупателя".
Запрос привожу ниже:
ВЫБРАТЬ
Продажи.Период,
Продажи.Регистратор,
Продажи.ЗаказПокупателя,
Продажи.ДоговорКонтрагента,
Продажи.Проект,
Продажи.Контрагент,
"ИНН_" + Продажи.Контрагент.ИНН КАК Контрагент_ИНН,
СУММА(Продажи.Стоимость) КАК Стоимость
ИЗ
РегистрНакопления.Продажи КАК Продажи
ГДЕ
Продажи.Период МЕЖДУ &ДатаНач И &ДатаКон
И ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.РеализацияТоваровУслуг).ОтгрузкаБезПерехода = &ОтгрузкаБезПерехода_ОТБОР
СГРУППИРОВАТЬ ПО
Продажи.Период,
Продажи.Регистратор,
Продажи.ЗаказПокупателя,
Продажи.ДоговорКонтрагента,
Продажи.Проект,
Продажи.Контрагент,
"ИНН_" + Продажи.Контрагент.ИНН
ПоказатьПо теме из базы знаний
- Консоль запросов к базе Oracle для 1С, без использования специализированных программ
- Как читать чужой код? Часть 3. Разбор и доработка запросов
- Быстрый фронт в базе размером 6.8 терабайт – наши стандарты при разработке и рефакторинге запросов
- Все консоли запросов для 1С
- Начните уже использовать хранилище запросов
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(9)
Спасибо, а можно подробнее как будет выглядеть полный текст запроса ? не догоняю чтото...
ВЫБРАТЬ
Выразить(ПродажиОбороты.Регистратор как (Документ.РеализацияТоваровУслуг)) КАК регистратор
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
Выразить(ПродажиОбороты.Регистратор как (Документ.ВозвраТоваровПокупателем))
Выразить(ПродажиОбороты.Регистратор как (Документ.РеализацияТоваровУслуг)) КАК регистратор
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
Выразить(ПродажиОбороты.Регистратор как (Документ.ВозвраТоваровПокупателем))
Спасибо, а можно подробнее как будет выглядеть полный текст запроса ? не догоняю чтото...
Ну вобщем то вот
И ваш запрос
Т.е в вашем случае видно что идет лишнее приведение типов и он менее оптимизированный
ВЫБРАТЬ
ЗаказыКлиентов.Регистратор КАК Регистратор,
ЗаказыКлиентов.Период КАК Период
ИЗ
РегистрНакопления.ЗаказыКлиентов КАК ЗаказыКлиентов
ГДЕ
ЗаказыКлиентов.Период МЕЖДУ &ДатаНач И &ДатаКон
И ТИПЗНАЧЕНИЯ(ЗаказыКлиентов.Регистратор) = ТИП(Документ.ЗаказКлиента)
exec sp_executesql N'SEL ECT
T1._RecorderTRef,
T1._RecorderRRef,
T1._Period
FR OM dbo._AccumRg51608 T1
WHERE ((T1._Fld1961 = @P1)) AND (((T1._Period >= @P2) AND (T1._Period <= @P3)) AND (T1._RecorderTRef = 0x000002D8))',N'@P1 numeric(10),@P2 datetime2(3),@P3 datetime2(3)',0,'4018-06-01 00:00:00','4018-06-10 00:00:00'
ПоказатьИ ваш запрос
ВЫБРАТЬ
ЗаказыКлиентов.Регистратор КАК Регистратор,
ЗаказыКлиентов.Период КАК Период
ИЗ
РегистрНакопления.ЗаказыКлиентов КАК ЗаказыКлиентов
ГДЕ
ЗаказыКлиентов.Период МЕЖДУ &ДатаНач И &ДатаКон
И НЕ ВЫРАЗИТЬ(ЗаказыКлиентов.Регистратор КАК Документ.ЗаказКлиента ) ЕСТЬ NULL
exec sp_executesql N'SELECT
T1._RecorderTRef,
T1._RecorderRRef,
T1._Period
FR OM dbo._AccumRg51608 T1
WH ERE ((T1._Fld1961 = @P1)) AND (((T1._Period >= @P2) AND (T1._Period <= @P3)) AND (NOT (((CASE WHEN T1._RecorderTRef = 0x000002D8 THEN T1._RecorderRRef END) IS NULL))))',N'@P1 numeric(10),@P2 datetime2(3),@P3 datetime2(3)',0,'2001-01-01 00:00:00','2001-01-01 00:00:00'
ПоказатьТ.е в вашем случае видно что идет лишнее приведение типов и он менее оптимизированный
(27)
В скуле уже не покажу, лезть в профайлер уже не хочется, закрыл его...
а сам запрос в 1С вот просто добавил вывод регистратор.Дата.
просто вы вроде к документам то особо и не обращались, да и выразить только в конце
В скуле уже не покажу, лезть в профайлер уже не хочется, закрыл его...
а сам запрос в 1С вот просто добавил вывод регистратор.Дата.
ВЫБРАТЬ
ЗаказыКлиентов.Регистратор КАК Регистратор,
ЗаказыКлиентов.Период КАК Период,
ЗаказыКлиентов.Регистратор.Дата
Поместить ВТ_Заказы
ИЗ
РегистрНакопления.ЗаказыКлиентов КАК ЗаказыКлиентов
ГДЕ
ЗаказыКлиентов.Период МЕЖДУ &ДатаНач И &ДатаКон
И ТИПЗНАЧЕНИЯ(ЗаказыКлиентов.Регистратор) = ТИП(Документ.ЗаказКлиента)
ПоказатьВЫБРАТЬ
ВЫРАЗИТЬ(ПродажиОбороты.Регистратор КАК Документ.ЧекККМ) КАК Регистратор,
Регистратор.Дата КАК Дата
ИЗ
РегистрНакопления.Продажи.Обороты(&дата1, &дата2, Регистратор, ) КАК ПродажиОбороты
ГДЕ
ВЫРАЗИТЬ(ПродажиОбороты.Регистратор КАК Документ.ЧекККМ) ЕСТЬ НЕ NULL
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ВЫРАЗИТЬ(ПродажиОбороты.Регистратор КАК Документ.ОтчетОРозничныхПродажах),
Регистратор.Дата
ИЗ
РегистрНакопления.Продажи.Обороты(&дата1, &дата2, Регистратор, ) КАК ПродажиОбороты
ГДЕ
ВЫРАЗИТЬ(ПродажиОбороты.Регистратор КАК Документ.ОтчетОРозничныхПродажах) ЕСТЬ НЕ NULL
Показатьтолько названия документов и реквизиты свои
(15)
Я так понимаю абсолютно равнозначно в плане условия...чем ваше условие лучше ?
Или
Последнее может правда выдать ошибку, поэтому обычно пользуюсь ТИПЗНАЧЕНИЯ()
Я так понимаю абсолютно равнозначно в плане условия...чем ваше условие лучше ?
ГДЕ
ВЫРАЗИТЬ(ПродажиОбороты.Регистратор КАК Документ.ЧекККМ) ЕСТЬ НЕ NULL
ГДЕ
ТИПЗНАЧЕНИЯ(ПродажиОбороты.Регистратор) = ТИП(Документ.ЧекККМ)
Или
ГДЕ
ПродажиОбороты.Регистратор ССЫЛКА Документ.ЧекККМ
Последнее может правда выдать ошибку, поэтому обычно пользуюсь ТИПЗНАЧЕНИЯ()
(18)Хм надо проверить, хотя я всегда считал если в 1С поле составного типа то в SQL это будет два поля, а то и более если там не только ссылочные данные так вот второе поле как раз и определяет тип данных ( там циферки ) и по идее
условие как раз должно накладываться на вот это второе поле...
Хотя возможно я и не прав, давно это дело уже смотрел...
ГДЕ
ТИПЗНАЧЕНИЯ(ПродажиОбороты.Регистратор) = ТИП(Документ.ЧекККМ)
Хотя возможно я и не прав, давно это дело уже смотрел...
(19) посмотри например в СКЛ во что превращается запрос.... насколько я помню так левое соединение к каждому документу, который входит в составной тип..... если мы ограничим тип одним документом через выразить, этих соединений будет меньше.... соответственно......
да скорее всего должно быть даже так:
ВЫБРАТЬ
ВЫРАЗИТЬ(ПродажиОбороты.Регистратор КАК Документ.ЧекККМ) КАК Регистратор,
ВЫРАЗИТЬ(ПродажиОбороты.Регистратор КАК Документ.ЧекККМ).Дата КАК Дата
ИЗ
РегистрНакопления.Продажи.Обороты(&дата1, &дата2, Регистратор, ) КАК ПродажиОбороты
ГДЕ
ВЫРАЗИТЬ(ПродажиОбороты.Регистратор КАК Документ.ЧекККМ) ЕСТЬ НЕ NULL
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ВЫРАЗИТЬ(ПродажиОбороты.Регистратор КАК Документ.ОтчетОРозничныхПродажах),
ВЫРАЗИТЬ(ПродажиОбороты.Регистратор КАК Документ.ОтчетОРозничныхПродажах).Дата
ИЗ
РегистрНакопления.Продажи.Обороты(&дата1, &дата2, Регистратор, ) КАК ПродажиОбороты
ГДЕ
ВЫРАЗИТЬ(ПродажиОбороты.Регистратор КАК Документ.ОтчетОРозничныхПродажах) ЕСТЬ НЕ NULL
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот