Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
16 Июн 2021, 18:04
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
МультиВход
 
collapse

Автор Тема: Тормозит при проведении  (Прочитано 3962 раз)

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

Оффлайн akaipbay

  • *
  • Регистрация: 2016-04-25
  • Сообщений: 24
  • РЕПУТАЦИЯ: 0
    • Skype: akaipbay
  • Профессия: Ученик 1С
Добрый день!

Подскажите пожалуйста, при проведении документа есть такой запрос (ниже). Он очень долго Выполняется(), в чем может быть причина? Как его можно оптимизировать или ускорить подскажите?

Процедура ЗаполнитьТаблицуОстатковНДС(ДатаК,Склад,СписСчетов,тбОстСтатей) экспорт
зпОст = новый Запрос;
текстОст =
"ВЫБРАТЬ
| ВложНДС.Счет,
| ВложНДС.Склад,
| ВложНДС.СтатьяЗатрат,
| ВложНДС.ОстНДС,
| ВложСчета.ОстатокСтатьи,
| ВЫБОР
| КОГДА ЕСТЬNULL(ВложСчета.ОстатокСтатьи, 0) = 0
| ТОГДА 0
| ИНАЧЕ ВложНДС.ОстНДС / ВложСчета.ОстатокСтатьи
| КОНЕЦ КАК коэфф,
| ВложНДС.КолОстНДС
|ИЗ
| (ВЫБРАТЬ
| УслНДС_ОИОб.Счет КАК Счет,
| УслНДС_ОИОб.Склад КАК Склад,
| УслНДС_ОИОб.СтатьяЗатрат КАК СтатьяЗатрат,
| СУММА(НАК_УслНДС_ОИОб.СуммаНДСНачальныйОстаток + УслНДС_ОИОб.СуммаНДСПриход) КАК ОстНДС,
| СУММА(НАК_УслНДС_ОИОб.КоличествоНачальныйОстаток + УслНДС_ОИОб.КоличествоПриход) КАК КолОстНДС
| ИЗ
| РегистрНакопления.УслугиПроизводствоНДС.ОстаткиИОбороты(&ДатаНач, &ДатаКон, Период, , Счет В ИЕРАРХИИ (&СписСчетов)) КАК НАК_УслНДС_ОИОб
| ГДЕ
| ВЫБОР
| КОГДА &Склад <> 0
| ТОГДА УслНДС_ОИОб.Склад = &Склад
| ИНАЧЕ ИСТИНА
| КОНЕЦ
|
| СГРУППИРОВАТЬ ПО
| УслНДС_ОИОб.Счет,
| УслНДС_ОИОб.Склад,
| УслНДС_ОИОб.СтатьяЗатрат) КАК ВложНДС
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ВЫБОР
| КОГДА ТОИОб.Счет = &счет2621_1
| ТОГДА &счет2612_1
| КОГДА ТОИОб.Счет = &счет2622_6
| ТОГДА &счет2613_5
| КОГДА ТОИОб.Счет = &счет2622_1
| ТОГДА &счет2613_1
| ИНАЧЕ ТОИОб.Счет
| КОНЕЦ КАК Счет,
| ВЫБОР
| КОГДА ПОДСТРОКА(ТОИОб.Счет.Код, 1, 4) = ""2613""
| ИЛИ ПОДСТРОКА(ТОИОб.Счет.Код, 1, 4) = ""2621""
| ИЛИ ПОДСТРОКА(ТОИОб.Счет.Код, 1, 4) = ""2622""
| ТОГДА ТОИОб.Субконто1
| ИНАЧЕ ТОИОб.Субконто2
| КОНЕЦ КАК Склад,
| ВЫБОР
| КОГДА ПОДСТРОКА(ТОИОб.Счет.Код, 1, 4) = ""2613""
| ИЛИ ПОДСТРОКА(ТОИОб.Счет.Код, 1, 4) = ""2621""
| ИЛИ ПОДСТРОКА(ТОИОб.Счет.Код, 1, 4) = ""2622""
| ТОГДА ТОИОб.Субконто2
| ИНАЧЕ ТОИОб.Субконто3
| КОНЕЦ КАК СтатьяЗатрат,
| СУММА(ВЫБОР
| КОГДА ТОИОб.Счет = &счет2621_1
| ИЛИ ТОИОб.Счет = &счет2622_6
| ИЛИ ТОИОб.Счет = &счет2622_1
| ТОГДА -ТОИОб.СуммаНачальныйОстатокКт
| ИНАЧЕ ТОИОб.СуммаНачальныйОстатокДт + ТОИОб.СуммаОборотДт
| КОНЕЦ) КАК ОстатокСтатьи
| ИЗ
| РегистрБухгалтерии.Типовой.ОстаткиИОбороты(&ДатаНач, &ДатаКон, Период, , Счет В ИЕРАРХИИ (&СписСчетов), , ) КАК ТОИОб
| ГДЕ
| ВЫБОР
| КОГДА &Склад <> 0
| ТОГДА ВЫБОР
| КОГДА ПОДСТРОКА(ТОИОб.Счет.Код, 1, 4) = ""2613""
| ИЛИ ПОДСТРОКА(ТОИОб.Счет.Код, 1, 4) = ""2621""
| ИЛИ ПОДСТРОКА(ТОИОб.Счет.Код, 1, 4) = ""2622""
| ТОГДА ТОИОб.Субконто1 = &Склад
| ИНАЧЕ ТОИОб.Субконто2 = &Склад
| КОНЕЦ
| ИНАЧЕ ИСТИНА
| КОНЕЦ
|
| СГРУППИРОВАТЬ ПО
| ВЫБОР
| КОГДА ТОИОб.Счет = &счет2621_1
| ТОГДА &счет2612_1
| КОГДА ТОИОб.Счет = &счет2622_6
| ТОГДА &счет2613_5
| КОГДА ТОИОб.Счет = &счет2622_1
| ТОГДА &счет2613_1
| ИНАЧЕ ТОИОб.Счет
| КОНЕЦ,
| ВЫБОР
| КОГДА ПОДСТРОКА(ТОИОб.Счет.Код, 1, 4) = ""2613""
| ИЛИ ПОДСТРОКА(ТОИОб.Счет.Код, 1, 4) = ""2621""
| ИЛИ ПОДСТРОКА(ТОИОб.Счет.Код, 1, 4) = ""2622""
| ТОГДА ТОИОб.Субконто1
| ИНАЧЕ ТОИОб.Субконто2
| КОНЕЦ,
| ВЫБОР
| КОГДА ПОДСТРОКА(ТОИОб.Счет.Код, 1, 4) = ""2613""
| ИЛИ ПОДСТРОКА(ТОИОб.Счет.Код, 1, 4) = ""2621""
| ИЛИ ПОДСТРОКА(ТОИОб.Счет.Код, 1, 4) = ""2622""
| ТОГДА ТОИОб.Субконто2
| ИНАЧЕ ТОИОб.Субконто3
| КОНЕЦ) КАК ВложСчета
| ПО ВложНДС.Счет = ВложСчета.Счет
| И ВложНДС.Склад = ВложСчета.Склад
| И ВложНДС.СтатьяЗатрат = ВложСчета.СтатьяЗатрат"
;

зпОст.Текст = текстОст;
зпОст.УстановитьПараметр("ДатаНач",НачалоМесяца(ДатаК));
зпОст.УстановитьПараметр("ДатаКон",КонецМесяца(ДатаК));
зпОст.УстановитьПараметр("СписСчетов",СписСчетов);
зпОст.УстановитьПараметр("Склад",Склад);

счет2612_1 = ПланыСчетов.Типовой.НайтиПоКоду("2612.1");
счет2613_5 = ПланыСчетов.Типовой.НайтиПоКоду("2613.5");
счет2613_1 = ПланыСчетов.Типовой.НайтиПоКоду("2613.1");

счет2621_1 = ПланыСчетов.Типовой.НайтиПоКоду("2621.1");
счет2622_6 = ПланыСчетов.Типовой.НайтиПоКоду("2622.6");
счет2622_1 = ПланыСчетов.Типовой.НайтиПоКоду("2622.1");

зпОст.УстановитьПараметр("счет2612_1",счет2612_1);
зпОст.УстановитьПараметр("счет2613_5",счет2613_5);
зпОст.УстановитьПараметр("счет2613_1",счет2613_1);

зпОст.УстановитьПараметр("счет2621_1",счет2621_1);
зпОст.УстановитьПараметр("счет2622_6",счет2622_6);
зпОст.УстановитьПараметр("счет2622_1",счет2622_1);

резЗпОст = зпОст.Выполнить();
тбОстСтатей = резЗпОст.Выгрузить();


КонецПроцедуры


Оффлайн vitasw

  • *****
  • Регистрация: 2015-02-10
  • Сообщений: 2597
  • РЕПУТАЦИЯ: 317
  • КПД: 12%
  • Профессия: Программист 1С
"Выбор" - это зло. я б использовал кучу левых соединений.

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • *****
  • Регистрация: 2010-11-06
  • Сообщений: 5748
  • РЕПУТАЦИЯ: 1105
  • КПД: 19%
  • Красная армия всех сильней!
    • Skype: cska-fanat-kz81
  • Профессия: Разработчик 1С
и
ПОДСТРОКА(ТОИОб.Счет.Код, 1, 4) = ""2613""
- зло

лучше "...Счет = &Счет2613" или "...Счет В (&СписокСчетов2600)" или "...Счет В ИЕРАРХИИ(&Счет2600)"
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн Klyacksa

  • Фрилансер. Милости прошу с задачами в личку.
  • *****
  • Регистрация: 2010-08-20
  • Сообщений: 1325
  • РЕПУТАЦИЯ: 430
  • КПД: 32%
  • Профессия: Программист 1С
и мои 5 копеек:
&Склад = 0 или УслНДС_ОИОб.Склад = &Склад
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Оффлайн vitasw

  • *****
  • Регистрация: 2015-02-10
  • Сообщений: 2597
  • РЕПУТАЦИЯ: 317
  • КПД: 12%
  • Профессия: Программист 1С
"или" - вообще зло, лучше список значений.

Оффлайн SGIRG

  • ***
  • Регистрация: 2014-03-26
  • Сообщений: 114
  • РЕПУТАЦИЯ: 33
  • КПД: 29%
Попробуйте использовать временные таблицы.
Оптимизатор 1С плохо работает с вложенными запросами
Нажимайте "Спасибо", так приятнее))

Оффлайн Klyacksa

  • Фрилансер. Милости прошу с задачами в личку.
  • *****
  • Регистрация: 2010-08-20
  • Сообщений: 1325
  • РЕПУТАЦИЯ: 430
  • КПД: 32%
  • Профессия: Программист 1С
"или" - вообще зло, лучше список значений.
ИМХО, не все так однозначно
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Оффлайн Luzer1C

  • ****
  • Регистрация: 2014-02-17
  • Сообщений: 493
  • РЕПУТАЦИЯ: 62
  • КПД: 13%
    • Skype: kredko_evgeniy
  • Профессия: Программист 1С
Цитировать
Попробуйте использовать временные таблицы.

Плюсую. Временные таблицы в последнее время работают быстрее всяких вложенных запросов.
Добавлено: 04 Авг 2016, 04:50

Например:
ВЫБРАТЬ
ПланСчетовТиповой.Ссылка
ПОМЕСТИТЬ СписокСчетов
ИЗ
ПланСчетов.Типовой КАК ПланСчетовТиповой
ГДЕ
ПланСчетов.Типовой.Код = "2612.1"

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

ВЫБРАТЬ
ПланСчетовТиповой.Ссылка
ИЗ
ПланСчетов.Типовой КАК ПланСчетовТиповой
ГДЕ
ПланСчетов.Типовой.Код = "2613.5"
И так далее. Запрос получится громоздкий, но работать будет на порядок быстрее.
Халамбалам.

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • *****
  • Регистрация: 2010-11-06
  • Сообщений: 5748
  • РЕПУТАЦИЯ: 1105
  • КПД: 19%
  • Красная армия всех сильней!
    • Skype: cska-fanat-kz81
  • Профессия: Разработчик 1С
Luzer1C, вы имеете ввиду соединение с таблицей плана счетов будет быстрее условия "...Счет В (&СписокСчетов)"?
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн Luzer1C

  • ****
  • Регистрация: 2014-02-17
  • Сообщений: 493
  • РЕПУТАЦИЯ: 62
  • КПД: 13%
    • Skype: kredko_evgeniy
  • Профессия: Программист 1С
100%. Вместо &СписокСчетов прописать так:

(Выбрать
СписокСчетов.Ссылка
Из
СписокСчетов)
Халамбалам.


Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Последние вакансии

* Том 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
68 Сообщений
LexaK
68 Сообщений
antoneus antoneus
33 Сообщений
Ивашка
27 Сообщений
neek666
26 Сообщений
KATERINA 861
19 Сообщений
SSC
15 Сообщений
Алексей_1985_06
15 Сообщений
alexandr_ll
14 Сообщений
BuhRust
8 Сообщений

* Кто онлайн

  • Точка Гостей: 385
  • Точка Скрытых: 0
  • Точка Пользователей: 6
  • Точка Сейчас на форуме:

* Облако тэгов

* Инструменты

* Дополнительно

Поиск