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

Как не надо писать код в 1С

Автор MuI_I_Ika, 26 ноя 2019, 14:28

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

MuI_I_Ika

Сегодня будем разбирать пример очень плохого программирования.

И как ни странно все такие примеры мне в большинстве случаев попадаются в типовых конфигурациях.

Что мы имеем. Конфигурация ERP релиз 2.4.10.75. Журнал Документы продажи (к оформлению).

Продажи/Оптовые продажи/Накладные к оформлению



Сам список по результату выводит всего несколько документов.



Беглый анализ запроса (Обработка.ЖурналДокументовПродажи.Форма.КОформлениюНакладных.МодульФормы Функция ТекстЗапросаСпискаРаспоряженийНаОформление строка: 417), который приводит к указанной проблеме, выявил проблемы в запросах пакета 4 и 10.
Подробнее.

Сам текст запроса:

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
Таблица.Ссылка КАК ЗаказКлиента,
Таблица.Склад КАК Склад
ПОМЕСТИТЬ ВтДокументыОформления
ИЗ
ВтОстаткиПоЗаказуКлиента КАК Таблица

ИНДЕКСИРОВАТЬ ПО
ЗаказКлиента,
Склад
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
ВтДокументыОформления.Склад КАК Склад
ПОМЕСТИТЬ ВтДокументыОформленияСклады
ИЗ
ВтДокументыОформления КАК ВтДокументыОформления
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ЗаказыКлиентов.ЗаказКлиента КАК ЗаказКлиента,
ЗаказыКлиентов.Склад КАК Склад
ПОМЕСТИТЬ ВтДокументыОтобранные
ИЗ
РегистрНакопления.ЗаказыКлиентов КАК ЗаказыКлиентов
ГДЕ
ЗаказыКлиентов.Активность
И ЗаказыКлиентов.КОформлению > 0
И ЗаказыКлиентов.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
И ЗаказыКлиентов.Склад В
(ВЫБРАТЬ
ВтДокументыОформленияСклады.Склад
ИЗ
ВтДокументыОформленияСклады)

ИНДЕКСИРОВАТЬ ПО
ЗаказКлиента,
Склад
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
Таблица.ЗаказКлиента КАК ЗаказКлиента,
Таблица.Склад КАК Склад
ПОМЕСТИТЬ ВтЕстьНакладные
ИЗ
ВтДокументыОформления КАК Таблица
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтДокументыОтобранные КАК ДокументыОтобранные
ПО Таблица.ЗаказКлиента = ДокументыОтобранные.ЗаказКлиента
И Таблица.Склад = ДокументыОтобранные.Склад

ИНДЕКСИРОВАТЬ ПО
ЗаказКлиента,
Склад
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
Таблица.Ссылка КАК Ссылка,
Таблица.Склад КАК Склад,
ВЫБОР
КОГДА НЕ ТаблицаЕстьНакладные.ЗаказКлиента ЕСТЬ NULL
ТОГДА 2
ИНАЧЕ 1
КОНЕЦ КАК СостояниеНакладной,
Таблица.СостояниеОрдера КАК СостояниеОрдера
ПОМЕСТИТЬ ВтСостояниеНакладной
ИЗ
ВтОстаткиПоЗаказуКлиента КАК Таблица
ЛЕВОЕ СОЕДИНЕНИЕ ВтЕстьНакладные КАК ТаблицаЕстьНакладные
ПО (ТаблицаЕстьНакладные.ЗаказКлиента = Таблица.Ссылка)
И (ТаблицаЕстьНакладные.Склад = Таблица.Склад)

ИНДЕКСИРОВАТЬ ПО
Ссылка
;

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

ИНДЕКСИРОВАТЬ ПО
ДокументОтгрузки
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
Таблица.ДокументОтгрузки КАК ДокументОтгрузки,
Таблица.Склад КАК Склад
ПОМЕСТИТЬ ВтДокументыОтгрузки
ИЗ
ВтОстаткиТоварыКОтгрузке КАК Таблица

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
ВтДокументыОтгрузки.Склад КАК Склад
ПОМЕСТИТЬ ВтДокументыОтгрузкиСклады
ИЗ
ВтДокументыОтгрузки КАК ВтДокументыОтгрузки
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ТоварыКОтгрузке.ДокументОтгрузки КАК ДокументОтгрузки,
ТоварыКОтгрузке.Склад КАК Склад
ПОМЕСТИТЬ ВтТоварыКОтгрузке
ИЗ
РегистрНакопления.ТоварыКОтгрузке КАК ТоварыКОтгрузке
ГДЕ
ТоварыКОтгрузке.Активность
И (ТоварыКОтгрузке.КОтгрузке > 0
И ТоварыКОтгрузке.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
ИЛИ ТоварыКОтгрузке.Собрано > 0
И ТоварыКОтгрузке.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход))
И ТоварыКОтгрузке.Склад В
(ВЫБРАТЬ
ВтДокументыОтгрузкиСклады.Склад
ИЗ
ВтДокументыОтгрузкиСклады)

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
Таблица.ДокументОтгрузки КАК ДокументОтгрузки,
Таблица.Склад КАК Склад
ПОМЕСТИТЬ ВтЕстьОрдера
ИЗ
ВтДокументыОтгрузки КАК Таблица
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтТоварыКОтгрузке КАК ТоварыКОтгрузке
ПО Таблица.ДокументОтгрузки = ТоварыКОтгрузке.ДокументОтгрузки
И Таблица.Склад = ТоварыКОтгрузке.Склад

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

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

ИНДЕКСИРОВАТЬ ПО
Таблица.ДокументОтгрузки
;

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

ИНДЕКСИРОВАТЬ ПО
ДокументОтгрузки
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ТоварыКОтгрузке.ДокументОтгрузки КАК Распоряжение,
ТоварыКОтгрузке.ДокументОтгрузки КАК Ссылка,
ТоварыКОтгрузке.ДокументОтгрузки КАК ЗаказКлиента,
ВЫБОР
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаказКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаказКлиента).ПометкаУдаления
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаявкаНаВозвратТоваровОтКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаявкаНаВозвратТоваровОтКлиента).ПометкаУдаления
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.РеализацияТоваровУслуг
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.РеализацияТоваровУслуг).ПометкаУдаления
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ПередачаТоваровХранителю
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ПередачаТоваровХранителю).ПометкаУдаления
КОНЕЦ КАК ПометкаУдаления,
ВЫБОР
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаказКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаказКлиента).Номер
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаявкаНаВозвратТоваровОтКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаявкаНаВозвратТоваровОтКлиента).Номер
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.РеализацияТоваровУслуг
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.РеализацияТоваровУслуг).Номер
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ПередачаТоваровХранителю
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ПередачаТоваровХранителю).Номер
КОНЕЦ КАК Номер,
ВЫБОР
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаказКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаказКлиента).Дата
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаявкаНаВозвратТоваровОтКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаявкаНаВозвратТоваровОтКлиента).Дата
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.РеализацияТоваровУслуг
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.РеализацияТоваровУслуг).Дата
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ПередачаТоваровХранителю
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ПередачаТоваровХранителю).Дата
КОНЕЦ КАК ДатаДокумента,
ТИПЗНАЧЕНИЯ(ТоварыКОтгрузке.ДокументОтгрузки) КАК ТипРаспоряжения,
ВЫБОР
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаказКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаказКлиента).Проведен
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаявкаНаВозвратТоваровОтКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаявкаНаВозвратТоваровОтКлиента).Проведен
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.РеализацияТоваровУслуг
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.РеализацияТоваровУслуг).Проведен
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ПередачаТоваровХранителю
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ПередачаТоваровХранителю).Проведен
КОНЕЦ КАК Проведен,
ВЫБОР
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаказКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаказКлиента).Партнер
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаявкаНаВозвратТоваровОтКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаявкаНаВозвратТоваровОтКлиента).Партнер
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.РеализацияТоваровУслуг
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.РеализацияТоваровУслуг).Партнер
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ПередачаТоваровХранителю
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ПередачаТоваровХранителю).Партнер
КОНЕЦ КАК Партнер,
ВЫБОР
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаказКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаказКлиента).Контрагент
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаявкаНаВозвратТоваровОтКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаявкаНаВозвратТоваровОтКлиента).Контрагент
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.РеализацияТоваровУслуг
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.РеализацияТоваровУслуг).Контрагент
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ПередачаТоваровХранителю
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ПередачаТоваровХранителю).Контрагент
КОНЕЦ КАК Контрагент,
ВЫБОР
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаказКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаказКлиента).Организация
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаявкаНаВозвратТоваровОтКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаявкаНаВозвратТоваровОтКлиента).Организация
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.РеализацияТоваровУслуг
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.РеализацияТоваровУслуг).Организация
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ПередачаТоваровХранителю
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ПередачаТоваровХранителю).Организация
КОНЕЦ КАК Организация,
ВЫБОР
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаказКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаказКлиента).Соглашение
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаявкаНаВозвратТоваровОтКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаявкаНаВозвратТоваровОтКлиента).Соглашение
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.РеализацияТоваровУслуг
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.РеализацияТоваровУслуг).Соглашение
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ПередачаТоваровХранителю
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ПередачаТоваровХранителю).Соглашение
КОНЕЦ КАК Соглашение,
ВЫБОР
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаказКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаказКлиента).Договор
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаявкаНаВозвратТоваровОтКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаявкаНаВозвратТоваровОтКлиента).Договор
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.РеализацияТоваровУслуг
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.РеализацияТоваровУслуг).Договор
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ПередачаТоваровХранителю
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ПередачаТоваровХранителю).Договор
КОНЕЦ КАК Договор,
ВЫБОР
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаказКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаказКлиента).Сделка
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаявкаНаВозвратТоваровОтКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаявкаНаВозвратТоваровОтКлиента).Сделка
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.РеализацияТоваровУслуг
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.РеализацияТоваровУслуг).Сделка
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ПередачаТоваровХранителю
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ПередачаТоваровХранителю).Сделка
КОНЕЦ КАК Сделка,
ВЫБОР
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаказКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаказКлиента).Валюта
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаявкаНаВозвратТоваровОтКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаявкаНаВозвратТоваровОтКлиента).Валюта
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.РеализацияТоваровУслуг
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.РеализацияТоваровУслуг).Валюта
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ПередачаТоваровХранителю
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ПередачаТоваровХранителю).Валюта
КОНЕЦ КАК Валюта,
ВЫБОР
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаказКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаказКлиента).СуммаДокумента
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаявкаНаВозвратТоваровОтКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаявкаНаВозвратТоваровОтКлиента).СуммаЗамены
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.РеализацияТоваровУслуг
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.РеализацияТоваровУслуг).СуммаДокумента
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ПередачаТоваровХранителю
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ПередачаТоваровХранителю).СуммаДокумента
ИНАЧЕ 0
КОНЕЦ КАК СуммаДокумента,
ВЫБОР
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаказКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаказКлиента).ГрафикОплаты
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаявкаНаВозвратТоваровОтКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаявкаНаВозвратТоваровОтКлиента).ГрафикОплаты
КОНЕЦ КАК ГрафикОплаты,
ВЫБОР
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаказКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаказКлиента).Склад
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаявкаНаВозвратТоваровОтКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаявкаНаВозвратТоваровОтКлиента).Склад
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.РеализацияТоваровУслуг
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.РеализацияТоваровУслуг).Склад
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ПередачаТоваровХранителю
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ПередачаТоваровХранителю).Склад
КОНЕЦ КАК СкладШапки,
ТоварыКОтгрузке.Склад КАК Склад,
ВЫБОР
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаказКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаказКлиента).Статус
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаявкаНаВозвратТоваровОтКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаявкаНаВозвратТоваровОтКлиента).Статус
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.РеализацияТоваровУслуг
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.РеализацияТоваровУслуг).Статус
КОНЕЦ КАК Статус,
ВЫБОР
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаказКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаказКлиента).Менеджер
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаявкаНаВозвратТоваровОтКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаявкаНаВозвратТоваровОтКлиента).Менеджер
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.РеализацияТоваровУслуг
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.РеализацияТоваровУслуг).Менеджер
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ПередачаТоваровХранителю
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ПередачаТоваровХранителю).Менеджер
КОНЕЦ КАК Менеджер,
ВЫБОР
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаказКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаказКлиента).ДокументОснование
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаявкаНаВозвратТоваровОтКлиента
ТОГДА НЕОПРЕДЕЛЕНО
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.РеализацияТоваровУслуг
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.РеализацияТоваровУслуг).ЗаказКлиента
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ПередачаТоваровХранителю
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ПередачаТоваровХранителю).ЗаказКлиента
КОНЕЦ КАК ДокументОснование,
ВЫБОР
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаказКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаказКлиента).Приоритет
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаявкаНаВозвратТоваровОтКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаявкаНаВозвратТоваровОтКлиента).Приоритет
КОНЕЦ КАК Приоритет,
ВЫБОР
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаказКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаказКлиента).ХозяйственнаяОперация
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаявкаНаВозвратТоваровОтКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаявкаНаВозвратТоваровОтКлиента).ХозяйственнаяОперация
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.РеализацияТоваровУслуг
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.РеализацияТоваровУслуг).ХозяйственнаяОперация
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ПередачаТоваровХранителю
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ПередачаТоваровХранителю).ХозяйственнаяОперация
КОНЕЦ КАК ХозяйственнаяОперация,
ВЫБОР
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаказКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаказКлиента).СпособДоставки
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ЗаявкаНаВозвратТоваровОтКлиента
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ЗаявкаНаВозвратТоваровОтКлиента).СпособДоставки
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.РеализацияТоваровУслуг
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.РеализацияТоваровУслуг).СпособДоставки
КОГДА ТоварыКОтгрузке.ДокументОтгрузки ССЫЛКА Документ.ПередачаТоваровХранителю
ТОГДА ВЫРАЗИТЬ(ТоварыКОтгрузке.ДокументОтгрузки КАК Документ.ПередачаТоваровХранителю).СпособДоставки
КОНЕЦ КАК СпособДоставки,
ТоварыКОтгрузке.СостояниеНакладной КАК СостояниеНакладной,
ТоварыКОтгрузке.СостояниеОрдера КАК СостояниеОрдера
ИЗ
ВтНовыеОрдера КАК ТоварыКОтгрузке
ГДЕ
НЕ ТоварыКОтгрузке.ДокументОтгрузки.Ссылка ЕСТЬ NULL



Время его выполнения можно посмотреть на скриншоте 3. Это около 30-ти секунд.



Учитывая, что эта форма с которой постоянно работают менеджеры и она обновляется при каждом изменении документов, такое время выполнения недопустимо.

Итак, подробнее рассмотрим указанные запросы (4 и 10).

Запрос 4.

Как видно на скриншоте 3 он возвращает 2 493 755 строк.
Его текст:

ВЫБРАТЬ РАЗРЕШЕННЫЕ
ЗаказыКлиентов.ЗаказКлиента КАК ЗаказКлиента,
ЗаказыКлиентов.Склад КАК Склад
ПОМЕСТИТЬ ВтДокументыОтобранные
ИЗ
РегистрНакопления.ЗаказыКлиентов КАК ЗаказыКлиентов
ГДЕ
ЗаказыКлиентов.Активность
И ЗаказыКлиентов.КОформлению > 0
И ЗаказыКлиентов.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
И ЗаказыКлиентов.Склад В
(ВЫБРАТЬ
ВтДокументыОформленияСклады.Склад
ИЗ
ВтДокументыОформленияСклады)

ИНДЕКСИРОВАТЬ ПО
ЗаказКлиента,
Склад


По сути он выбирает все расходные записи регистра ЗаказыКлиентов, где КОформлению > 0. Это примерно половина всех записей регистра.

Запрос 10

Он возвращает 2 785 228 строк

Его текст:

ВЫБРАТЬ РАЗРЕШЕННЫЕ
ТоварыКОтгрузке.ДокументОтгрузки КАК ДокументОтгрузки,
ТоварыКОтгрузке.Склад КАК Склад
ПОМЕСТИТЬ ВтТоварыКОтгрузке
ИЗ
РегистрНакопления.ТоварыКОтгрузке КАК ТоварыКОтгрузке
ГДЕ
ТоварыКОтгрузке.Активность
И (ТоварыКОтгрузке.КОтгрузке > 0
И ТоварыКОтгрузке.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
ИЛИ ТоварыКОтгрузке.Собрано > 0
И ТоварыКОтгрузке.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход))
И ТоварыКОтгрузке.Склад В
(ВЫБРАТЬ
ВтДокументыОтгрузкиСклады.Склад
ИЗ
ВтДокументыОтгрузкиСклады)

ИНДЕКСИРОВАТЬ ПО
ДокументОтгрузки,
Склад


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

Ну как бы не удивительно что дальнейшее соединение этих таблиц длится 30 секунд.

Хорошо, что у нас в базе всего несколько миллионов записей. Я представляю что бы было, если бы записей были миллиарды?

Учитывая что для разработчика было неочевидно, что запрос будет выполняться долго, поясню на пальцах. Вам нужно выбрать 1 000 записей из таблицы, в которой 1 000 000 записей. Если вы сначала построите запрос, который вытягивает весь миллион записей, и только потом накладываете отбор в следующем запросе пакета, то вы получаете долгий запрос.

В борьбе с этой проблемой разработчики платформы 1С придумали виртуальные таблицы остатков для регистров накопления. Они во первых гораздо меньше основной таблицы. А во вторых содержат исключительно ту информацию, которая может понадобиться в дальнейшем. Если вам приходится строить запрос по основной таблице регистра накопления, то скорее всего в вашем программном решении неправильно организована структура самого регистра. И в первую очередь нужно пересмотреть архитектуру, а уже потом писать неоптимальный запрос.

PS: получил ответ техподдержки 1С на эту ошибку. Умиляют меня их ответы. Такое ощущение возникает, что им там каждый день на планерке рассказывают что все пользователи им по гроб жизни должны и с ними надо общаться как бы свысока.

"Здравствуйте.

   К сожалению, по текущему описанию не удается воспроизвести проблемное поведение программы.
   Для дальнейшего расследования проблемы просьба следовать Порядку обращения на линию консультаций 1С:ERP"

Вроде как и не просил ничего воспроизводить. Просто посмотреть запрос. Ну собственно я у себя запрос исправил. А вы там как хотите. Я вашим пользователям ничего не должен.

Теги: говнокод 

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

Рейтинг@Mail.ru

Поиск