Привет! Делаю управляемую форму списка документа. Вызываю функцию с запросом, возврат тз с результатом. В обычной форме тот же самый запрос выполняется 1.19 сек, а в уф 26,32 сек.
Подскажите, куда копать, чтобы ускорить это всё в уф?
УФ чистая, только заполнение списка (тз), и вызов серверной функции при активизации строки в списке (тз).
Заранее спасибо!
Подскажите, куда копать, чтобы ускорить это всё в уф?
УФ чистая, только заполнение списка (тз), и вызов серверной функции при активизации строки в списке (тз).
Заранее спасибо!
ТаблицаИтоговПеремещения = ПолучитьИтогиПеремещенияНаСервере(ТекДата, ТекБанковскийСчет);
ВсегоПоступилоПеремещения = ТаблицаИтоговПеремещения.Итог("ВсегоПоступило");
ВсегоСписаноПеремещения = ТаблицаИтоговПеремещения.Итог("ВсегоСписано");
&НаСервере
Функция ПолучитьИтогиПеремещенияНаСервере(ТекДата, ТекБанковскийСчет)
мВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| 0 КАК ВсегоСписано,
| СписаниеСРасчетногоСчета.СуммаДокумента КАК ВсегоПоступило
|ИЗ
| Документ.СписаниеСРасчетногоСчета КАК СписаниеСРасчетногоСчета
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчета КАК БанковскиеСчета
| ПО СписаниеСРасчетногоСчета.СчетКонтрагента = БанковскиеСчета.Ссылка
|ГДЕ
| БанковскиеСчета.Ссылка = &БанковскийСчетИтогов
| И СписаниеСРасчетногоСчета.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийСписаниеДенежныхСредств.ПереводНаДругойСчет)
| И СписаниеСРасчетногоСчета.Организация = &Организация
| И СписаниеСРасчетногоСчета.Дата МЕЖДУ &НачалоДня И &КонецДня
| И СписаниеСРасчетногоСчета.Проведен = ИСТИНА
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПриходныйКассовыйОрдер.СуммаДокумента,
| 0
|ИЗ
| Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчета КАК БанковскиеСчета
| ПО ПриходныйКассовыйОрдер.Контрагент = БанковскиеСчета.Ссылка
|ГДЕ
| БанковскиеСчета.Ссылка = &БанковскийСчетИтогов
| И ПриходныйКассовыйОрдер.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПКО.ПолучениеНаличныхВБанке)
| И ПриходныйКассовыйОрдер.Организация = &Организация
| И ПриходныйКассовыйОрдер.Дата МЕЖДУ &НачалоДня И &КонецДня
| И ПриходныйКассовыйОрдер.Проведен = ИСТИНА
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 0,
| РасходныйКассовыйОрдер.СуммаДокумента
|ИЗ
| Документ.РасходныйКассовыйОрдер КАК РасходныйКассовыйОрдер
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчета КАК БанковскиеСчета
| ПО РасходныйКассовыйОрдер.СчетОрганизации = БанковскиеСчета.Ссылка
|ГДЕ
| БанковскиеСчета.Ссылка = &БанковскийСчетИтогов
| И РасходныйКассовыйОрдер.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРКО.ВзносНаличнымиВБанк)
| И РасходныйКассовыйОрдер.Организация = &Организация
| И РасходныйКассовыйОрдер.Дата МЕЖДУ &НачалоДня И &КонецДня
| И РасходныйКассовыйОрдер.Проведен = ИСТИНА";
Запрос.УстановитьПараметр("НачалоДня", НачалоДня(ТекДата));
Запрос.УстановитьПараметр("КонецДня", КонецДня(ТекДата));
Запрос.УстановитьПараметр("БанковскийСчетИтогов", ТекБанковскийСчет);
Запрос.УстановитьПараметр("Организация", ТекБанковскийСчет.Владелец);
Запрос.УстановитьПараметр("ВалютаРеглУчета", мВалютаРегламентированногоУчета);
ТаблицаИтогов = Запрос.Выполнить().Выгрузить();
Возврат ТаблицаИтогов;
КонецФункции
ПоказатьПо теме из базы знаний
- Спуск на уровень СУБД
- Немного о конфигурировании PostgreSQL
- Собираем образ виртуальной машины с PostgreSQL и платформой 1С. Цикл "Многопоточный CI для 1С c Packer, Vagrant и Jenkins", часть 2
- Вы запускаете приложения, но делаете это без уважения
- Как менеджеру прогнозировать сроки выполнения задачи с вероятностью 80-90%?
Найденные решения
(1)
ТаблицаИтоговПеремещения это же таблица значения. Она для чего вообще на клиенте ?
Для банального получения итогов Поступило/Списано ?
Убери это.
Таблицы значений на клиенте быть вообще не должно.
Функцию передалай в &НаСервереБезКонтекста
т.к. ты при переходе между сервером и клиентом качаешь весь контекст формы туда обратно.
И итоги свои получай внутри функции, и возващай назад не таблицу значений, а готовые данные, например структуру с Итогами всего поступило и всего списано.
ТаблицаИтоговПеремещения = ПолучитьИтогиПеремещенияНаСервере(ТекДата, ТекБанковскийСчет);
ВсегоПоступилоПеремещения = ТаблицаИтоговПеремещения.Итог("ВсегоПоступило");
ВсегоСписаноПеремещения = ТаблицаИтоговПеремещения.Итог("ВсегоСписано");
ВсегоПоступилоПеремещения = ТаблицаИтоговПеремещения.Итог("ВсегоПоступило");
ВсегоСписаноПеремещения = ТаблицаИтоговПеремещения.Итог("ВсегоСписано");
ТаблицаИтоговПеремещения это же таблица значения. Она для чего вообще на клиенте ?
Для банального получения итогов Поступило/Списано ?
Убери это.
Таблицы значений на клиенте быть вообще не должно.
Функцию передалай в &НаСервереБезКонтекста
т.к. ты при переходе между сервером и клиентом качаешь весь контекст формы туда обратно.
И итоги свои получай внутри функции, и возващай назад не таблицу значений, а готовые данные, например структуру с Итогами всего поступило и всего списано.
(21)
Это так не работает.
В запросе отбор на равно. Не предусмотрено получение остатков по всем счетам.
В запросе внутреннее соединение - нет документов, запрос будет пустой.
Соединение со справочником тут не нужно.
по поводу соединения со справочником - это делается в случае, когда нужны данные по всем эл. спр. даже если нет док
Это так не работает.
В запросе отбор на равно. Не предусмотрено получение остатков по всем счетам.
В запросе внутреннее соединение - нет документов, запрос будет пустой.
Соединение со справочником тут не нужно.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| 0 КАК ВсегоСписано,
| СписаниеСРасчетногоСчета.СуммаДокумента КАК ВсегоПоступило
|ПОМЕСТИТЬ Перемещение
|ИЗ
| Документ.СписаниеСРасчетногоСчета КАК СписаниеСРасчетногоСчета
|ГДЕ
| СписаниеСРасчетногоСчета.СчетКонтрагента = &БанковскийСчетИтогов
| И СписаниеСРасчетногоСчета.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийСписаниеДенежныхСредств.ПереводНаДругойСчет)
| И СписаниеСРасчетногоСчета.Организация = &Организация
| И СписаниеСРасчетногоСчета.Дата МЕЖДУ &НачалоДня И &КонецДня
| И СписаниеСРасчетногоСчета.Проведен = ИСТИНА
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПриходныйКассовыйОрдер.СуммаДокумента,
| 0
|ИЗ
| Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
|ГДЕ
| ПриходныйКассовыйОрдер.Контрагент = &БанковскийСчетИтогов
| И ПриходныйКассовыйОрдер.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПКО.ПолучениеНаличныхВБанке)
| И ПриходныйКассовыйОрдер.Организация = &Организация
| И ПриходныйКассовыйОрдер.Дата МЕЖДУ &НачалоДня И &КонецДня
| И ПриходныйКассовыйОрдер.Проведен = ИСТИНА
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 0,
| РасходныйКассовыйОрдер.СуммаДокумента
|ИЗ
| Документ.РасходныйКассовыйОрдер КАК РасходныйКассовыйОрдер
|ГДЕ
| РасходныйКассовыйОрдер.СчетОрганизации = &БанковскийСчетИтогов
| И РасходныйКассовыйОрдер.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРКО.ВзносНаличнымиВБанк)
| И РасходныйКассовыйОрдер.Организация = &Организация
| И РасходныйКассовыйОрдер.Дата МЕЖДУ &НачалоДня И &КонецДня
| И РасходныйКассовыйОрдер.Проведен = ИСТИНА
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ВЫБОР
| КОГДА ВЫРАЗИТЬ(Субконто1 КАК Справочник.БанковскиеСчета).ВалютаДенежныхСредств = &ВалютаРеглУчета
| ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток
| ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаНачальныйОстаток
| КОНЕЦ КАК НачальныйОстаток,
| ВЫБОР
| КОГДА БанковскиеСчета.ВалютаДенежныхСредств = &ВалютаРеглУчета
| ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаОборотДт
| ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаОборотДт
| КОНЕЦ КАК ВсегоПоступило,
| ВЫБОР
| КОГДА БанковскиеСчета.ВалютаДенежныхСредств = &ВалютаРеглУчета
| ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаОборотКт
| ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаОборотКт
| КОНЕЦ КАК ВсегоСписано,
| ВЫБОР
| КОГДА БанковскиеСчета.ВалютаДенежныхСредств = &ВалютаРеглУчета
| ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток
| ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаКонечныйОстаток
| КОНЕЦ КАК КонечныйОстаток
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
| НАЧАЛОПЕРИОДА(&ДатаИтогов, ДЕНЬ),
| КОНЕЦПЕРИОДА(&ДатаИтогов, ДЕНЬ),
| ,
| ДвиженияИГраницыПериода,
| ,
| ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.БанковскиеСчета),
| Организация = &Организация
| И Субконто1 = &БанковскийСчетИтогов) КАК ХозрасчетныйОстаткиИОбороты";
РезультатыЗапроса = Запрос.ВыполнитьПакет();
ТабРаз = РезультатыЗапроса[0].Выгрузить();
ТабДва = РезультатыЗапроса[1].Выгрузить();
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)Добрый день.
Запрос как запрос, можно придраться к порядку отборов и отбору по организации, но не более.
Проблема в другом месте. Нужен замер всего кода и сам код.
Прогнал такой же запрос в серверной базе без отбора по счету, от начала ведения учета - 262 строки, почти 3 секунды.
Запрос как запрос, можно придраться к порядку отборов и отбору по организации, но не более.
Проблема в другом месте. Нужен замер всего кода и сам код.
Прогнал такой же запрос в серверной базе без отбора по счету, от начала ведения учета - 262 строки, почти 3 секунды.
(1)
ТаблицаИтоговПеремещения это же таблица значения. Она для чего вообще на клиенте ?
Для банального получения итогов Поступило/Списано ?
Убери это.
Таблицы значений на клиенте быть вообще не должно.
Функцию передалай в &НаСервереБезКонтекста
т.к. ты при переходе между сервером и клиентом качаешь весь контекст формы туда обратно.
И итоги свои получай внутри функции, и возващай назад не таблицу значений, а готовые данные, например структуру с Итогами всего поступило и всего списано.
ТаблицаИтоговПеремещения = ПолучитьИтогиПеремещенияНаСервере(ТекДата, ТекБанковскийСчет);
ВсегоПоступилоПеремещения = ТаблицаИтоговПеремещения.Итог("ВсегоПоступило");
ВсегоСписаноПеремещения = ТаблицаИтоговПеремещения.Итог("ВсегоСписано");
ВсегоПоступилоПеремещения = ТаблицаИтоговПеремещения.Итог("ВсегоПоступило");
ВсегоСписаноПеремещения = ТаблицаИтоговПеремещения.Итог("ВсегоСписано");
ТаблицаИтоговПеремещения это же таблица значения. Она для чего вообще на клиенте ?
Для банального получения итогов Поступило/Списано ?
Убери это.
Таблицы значений на клиенте быть вообще не должно.
Функцию передалай в &НаСервереБезКонтекста
т.к. ты при переходе между сервером и клиентом качаешь весь контекст формы туда обратно.
И итоги свои получай внутри функции, и возващай назад не таблицу значений, а готовые данные, например структуру с Итогами всего поступило и всего списано.
(19)Запрос с дурными соединениями со справочником изменять нельзя. Объединил два запроса с учетом ваших замечаний. Но все равно функция долго обрабатывается.
&НаКлиенте
Процедура ОбновитьИтоги(ТекДата, ТекБанковскийСчет, ВсегдаОбновлять = Ложь)
Структура = ПолучитьИтогиНаСервереТЕСТ(ТекДата, ТекБанковскийСчет);
БанковскийСчетИтогов = ТекБанковскийСчет;
ДатаИтогов = ТекДата;
НачальныйОстаток = Структура.НачальныйОстаток;
ВсегоПоступило = Структура.ВсегоПоступило;
ВсегоСписано = Структура.ВсегоСписано;
КонечныйОстаток = Структура.КонечныйОстаток;
ВсегоПоступилоПеремещения = Структура.ВсегоПоступило;
ВсегоСписаноПеремещения = Структура.ВсегоСписано;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьИтогиНаСервереТЕСТ(ТекДата, ТекБанковскийСчет)
мВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| 0 КАК ВсегоСписано,
| СписаниеСРасчетногоСчета.СуммаДокумента КАК ВсегоПоступило
|ПОМЕСТИТЬ Перемещение
|ИЗ
| Документ.СписаниеСРасчетногоСчета КАК СписаниеСРасчетногоСчета
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчета КАК БанковскиеСчета
| ПО СписаниеСРасчетногоСчета.СчетКонтрагента = БанковскиеСчета.Ссылка
|ГДЕ
| БанковскиеСчета.Ссылка = &БанковскийСчетИтогов
| И СписаниеСРасчетногоСчета.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийСписаниеДенежныхСредств.ПереводНаДругойСчет)
| И СписаниеСРасчетногоСчета.Организация = &Организация
| И СписаниеСРасчетногоСчета.Дата МЕЖДУ &НачалоДня И &КонецДня
| И СписаниеСРасчетногоСчета.Проведен = ИСТИНА
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПриходныйКассовыйОрдер.СуммаДокумента,
| 0
|ИЗ
| Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчета КАК БанковскиеСчета
| ПО ПриходныйКассовыйОрдер.Контрагент = БанковскиеСчета.Ссылка
|ГДЕ
| БанковскиеСчета.Ссылка = &БанковскийСчетИтогов
| И ПриходныйКассовыйОрдер.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПКО.ПолучениеНаличныхВБанке)
| И ПриходныйКассовыйОрдер.Организация = &Организация
| И ПриходныйКассовыйОрдер.Дата МЕЖДУ &НачалоДня И &КонецДня
| И ПриходныйКассовыйОрдер.Проведен = ИСТИНА
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 0,
| РасходныйКассовыйОрдер.СуммаДокумента
|ИЗ
| Документ.РасходныйКассовыйОрдер КАК РасходныйКассовыйОрдер
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчета КАК БанковскиеСчета
| ПО РасходныйКассовыйОрдер.СчетОрганизации = БанковскиеСчета.Ссылка
|ГДЕ
| БанковскиеСчета.Ссылка = &БанковскийСчетИтогов
| И РасходныйКассовыйОрдер.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРКО.ВзносНаличнымиВБанк)
| И РасходныйКассовыйОрдер.Организация = &Организация
| И РасходныйКассовыйОрдер.Дата МЕЖДУ &НачалоДня И &КонецДня
| И РасходныйКассовыйОрдер.Проведен = ИСТИНА
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ВЫБОР
| КОГДА БанковскиеСчета.ВалютаДенежныхСредств = &ВалютаРеглУчета
| ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток
| ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаНачальныйОстаток
| КОНЕЦ КАК НачальныйОстаток,
| ВЫБОР
| КОГДА БанковскиеСчета.ВалютаДенежныхСредств = &ВалютаРеглУчета
| ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаОборотДт
| ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаОборотДт
| КОНЕЦ КАК ВсегоПоступило,
| ВЫБОР
| КОГДА БанковскиеСчета.ВалютаДенежныхСредств = &ВалютаРеглУчета
| ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаОборотКт
| ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаОборотКт
| КОНЕЦ КАК ВсегоСписано,
| ВЫБОР
| КОГДА БанковскиеСчета.ВалютаДенежныхСредств = &ВалютаРеглУчета
| ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток
| ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаКонечныйОстаток
| КОНЕЦ КАК КонечныйОстаток,
| 0 КАК Поле1,
| 0 КАК Поле2
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
| НАЧАЛОПЕРИОДА(&ДатаИтогов, ДЕНЬ),
| КОНЕЦПЕРИОДА(&ДатаИтогов, ДЕНЬ),
| ,
| ДвиженияИГраницыПериода,
| ,
| ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.БанковскиеСчета),
| Организация = &Организация
| И Субконто1 = &БанковскийСчетИтогов) КАК ХозрасчетныйОстаткиИОбороты
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчета КАК БанковскиеСчета
| ПО ХозрасчетныйОстаткиИОбороты.Субконто1 = БанковскиеСчета.Ссылка
|ГДЕ
| БанковскиеСчета.Ссылка = &БанковскийСчетИтогов
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 0,
| 0,
| 0,
| 0,
| Перемещение.ВсегоСписано,
| Перемещение.ВсегоПоступило
|ИЗ
| Перемещение КАК Перемещение";
Запрос.УстановитьПараметр("ДатаИтогов", ТекДата);
Запрос.УстановитьПараметр("БанковскийСчетИтогов", ТекБанковскийСчет);
Запрос.УстановитьПараметр("Организация", ТекБанковскийСчет.Владелец);
Запрос.УстановитьПараметр("ВалютаРеглУчета", мВалютаРегламентированногоУчета);
Запрос.УстановитьПараметр("НачалоДня", НачалоДня(ТекДата));
Запрос.УстановитьПараметр("КонецДня", КонецДня(ТекДата));
ТаблицаИтогов = Запрос.Выполнить().Выгрузить();
Возврат Новый Структура("НачальныйОстаток, ВсегоПоступило, ВсегоСписано, КонечныйОстаток, ВсегоПоступило, ВсегоСписано",
ТаблицаИтогов.Итог("НачальныйОстаток"), ТаблицаИтогов.Итог("ВсегоПоступило"), ТаблицаИтогов.Итог("ВсегоСписано"), ТаблицаИтогов.Итог("КонечныйОстаток"),
ТаблицаИтогов.Итог("ВсегоПоступило"), ТаблицаИтогов.Итог("ВсегоСписано"));
КонецФункции
Показать
(21)
Это так не работает.
В запросе отбор на равно. Не предусмотрено получение остатков по всем счетам.
В запросе внутреннее соединение - нет документов, запрос будет пустой.
Соединение со справочником тут не нужно.
по поводу соединения со справочником - это делается в случае, когда нужны данные по всем эл. спр. даже если нет док
Это так не работает.
В запросе отбор на равно. Не предусмотрено получение остатков по всем счетам.
В запросе внутреннее соединение - нет документов, запрос будет пустой.
Соединение со справочником тут не нужно.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| 0 КАК ВсегоСписано,
| СписаниеСРасчетногоСчета.СуммаДокумента КАК ВсегоПоступило
|ПОМЕСТИТЬ Перемещение
|ИЗ
| Документ.СписаниеСРасчетногоСчета КАК СписаниеСРасчетногоСчета
|ГДЕ
| СписаниеСРасчетногоСчета.СчетКонтрагента = &БанковскийСчетИтогов
| И СписаниеСРасчетногоСчета.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийСписаниеДенежныхСредств.ПереводНаДругойСчет)
| И СписаниеСРасчетногоСчета.Организация = &Организация
| И СписаниеСРасчетногоСчета.Дата МЕЖДУ &НачалоДня И &КонецДня
| И СписаниеСРасчетногоСчета.Проведен = ИСТИНА
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПриходныйКассовыйОрдер.СуммаДокумента,
| 0
|ИЗ
| Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
|ГДЕ
| ПриходныйКассовыйОрдер.Контрагент = &БанковскийСчетИтогов
| И ПриходныйКассовыйОрдер.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПКО.ПолучениеНаличныхВБанке)
| И ПриходныйКассовыйОрдер.Организация = &Организация
| И ПриходныйКассовыйОрдер.Дата МЕЖДУ &НачалоДня И &КонецДня
| И ПриходныйКассовыйОрдер.Проведен = ИСТИНА
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 0,
| РасходныйКассовыйОрдер.СуммаДокумента
|ИЗ
| Документ.РасходныйКассовыйОрдер КАК РасходныйКассовыйОрдер
|ГДЕ
| РасходныйКассовыйОрдер.СчетОрганизации = &БанковскийСчетИтогов
| И РасходныйКассовыйОрдер.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРКО.ВзносНаличнымиВБанк)
| И РасходныйКассовыйОрдер.Организация = &Организация
| И РасходныйКассовыйОрдер.Дата МЕЖДУ &НачалоДня И &КонецДня
| И РасходныйКассовыйОрдер.Проведен = ИСТИНА
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ВЫБОР
| КОГДА ВЫРАЗИТЬ(Субконто1 КАК Справочник.БанковскиеСчета).ВалютаДенежныхСредств = &ВалютаРеглУчета
| ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток
| ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаНачальныйОстаток
| КОНЕЦ КАК НачальныйОстаток,
| ВЫБОР
| КОГДА БанковскиеСчета.ВалютаДенежныхСредств = &ВалютаРеглУчета
| ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаОборотДт
| ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаОборотДт
| КОНЕЦ КАК ВсегоПоступило,
| ВЫБОР
| КОГДА БанковскиеСчета.ВалютаДенежныхСредств = &ВалютаРеглУчета
| ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаОборотКт
| ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаОборотКт
| КОНЕЦ КАК ВсегоСписано,
| ВЫБОР
| КОГДА БанковскиеСчета.ВалютаДенежныхСредств = &ВалютаРеглУчета
| ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток
| ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаКонечныйОстаток
| КОНЕЦ КАК КонечныйОстаток
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
| НАЧАЛОПЕРИОДА(&ДатаИтогов, ДЕНЬ),
| КОНЕЦПЕРИОДА(&ДатаИтогов, ДЕНЬ),
| ,
| ДвиженияИГраницыПериода,
| ,
| ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.БанковскиеСчета),
| Организация = &Организация
| И Субконто1 = &БанковскийСчетИтогов) КАК ХозрасчетныйОстаткиИОбороты";
РезультатыЗапроса = Запрос.ВыполнитьПакет();
ТабРаз = РезультатыЗапроса[0].Выгрузить();
ТабДва = РезультатыЗапроса[1].Выгрузить();
Показать
(1)
Не надо текст запроса, лучше нормально код приведите, когда и откуда вызывается.
А также какое кол-во данных у вас в тз.
Ну и работаете, я так понимаю под толстым клиентом, ибо как иначе вы на клиенте умудряетесь получить тз?
Ибо понять вот это "ТаблицаИтоговПеремещения = ПолучитьИтогиПеремещенияНаСервере(ТекДата, ТекБанковскийСчет);" затруднительно - неясно в каком месте кода это вызывается. См. примечание.
P.S.
Хотел сперва напомнить, что "вызов серверной функции при активизации строки с списке (тз)."
Низзя так делать, но что-то тут вообще темное, ибо, что вы потом с тз делаете тоже, неясно.
и вызов серверной функции при активизации строки с списке (тз)
Не надо текст запроса, лучше нормально код приведите, когда и откуда вызывается.
А также какое кол-во данных у вас в тз.
Ну и работаете, я так понимаю под толстым клиентом, ибо как иначе вы на клиенте умудряетесь получить тз?
Ибо понять вот это "ТаблицаИтоговПеремещения = ПолучитьИтогиПеремещенияНаСервере(ТекДата, ТекБанковскийСчет);" затруднительно - неясно в каком месте кода это вызывается. См. примечание.
P.S.
Хотел сперва напомнить, что "вызов серверной функции при активизации строки с списке (тз)."
Низзя так делать, но что-то тут вообще темное, ибо, что вы потом с тз делаете тоже, неясно.
(6)
Запрет на вызов серверных функций при активизации строки вызван тем, что он может привести к зацикливанию, т.к. может повторно вызваться событие при активизации строки.
Это может быть исправлено запоминанием текущей строки и отказом от повторного вызова серверного метода, если тек. строка не менялась. Ну и обычно добавляют обработчик ожидания, чтобы обычное метание/прокрутка по строкам не приводило к вызову серверного метода.
Методологически же я бы рекомендовал, если это возможно по соображениям расхода оперативной памяти и т.п., закешировать нужные данные и выводить их, не используя обращение к серверу.
Если закешировать не вариант, то рекомендовал бы пересмотреть архитектуру, т.к. каждый раз дергать сервер, да еще с запросами к базе, ну, вы сами понимаете...
Ведь по сути, вы при каждой активизации строки формируете "мини отчет", только вдобавок еще и не консистентный.
Запрет на вызов серверных функций при активизации строки вызван тем, что он может привести к зацикливанию, т.к. может повторно вызваться событие при активизации строки.
Это может быть исправлено запоминанием текущей строки и отказом от повторного вызова серверного метода, если тек. строка не менялась. Ну и обычно добавляют обработчик ожидания, чтобы обычное метание/прокрутка по строкам не приводило к вызову серверного метода.
Методологически же я бы рекомендовал, если это возможно по соображениям расхода оперативной памяти и т.п., закешировать нужные данные и выводить их, не используя обращение к серверу.
Если закешировать не вариант, то рекомендовал бы пересмотреть архитектуру, т.к. каждый раз дергать сервер, да еще с запросами к базе, ну, вы сами понимаете...
Ведь по сути, вы при каждой активизации строки формируете "мини отчет", только вдобавок еще и не консистентный.
На форме ДС (а не тз, как я писал)
И прикрепляю замер оф и уф. Спасибо большое!
//Запрос дс:
ВЫБРАТЬ
ЖурналДокументовБанковскиеВыписки.Ссылка,
ЖурналДокументовБанковскиеВыписки.Дата,
ЖурналДокументовБанковскиеВыписки.ПометкаУдаления,
ЖурналДокументовБанковскиеВыписки.Номер,
ЖурналДокументовБанковскиеВыписки.Проведен,
ЖурналДокументовБанковскиеВыписки.Организация,
ЖурналДокументовБанковскиеВыписки.БанковскийСчет,
ЖурналДокументовБанковскиеВыписки.Поступило,
ЖурналДокументовБанковскиеВыписки.Контрагент,
ЖурналДокументовБанковскиеВыписки.Списано,
ЖурналДокументовБанковскиеВыписки.Валюта,
ЖурналДокументовБанковскиеВыписки.ВидОперации,
ЖурналДокументовБанковскиеВыписки.ДатаВходящегоДокумента,
ЖурналДокументовБанковскиеВыписки.НомерВходящегоДокумента,
ЖурналДокументовБанковскиеВыписки.РучнаяКорректировка,
ЖурналДокументовБанковскиеВыписки.НазначениеПлатежа,
ЖурналДокументовБанковскиеВыписки.Ответственный,
ЖурналДокументовБанковскиеВыписки.Комментарий,
ЖурналДокументовБанковскиеВыписки.Подразделение,
ЖурналДокументовБанковскиеВыписки.Тип,
НАЧАЛОПЕРИОДА(ЖурналДокументовБанковскиеВыписки.Дата, ДЕНЬ) КАК ДатаОтбора
ИЗ
ЖурналДокументов.БанковскиеВыписки КАК ЖурналДокументовБанковскиеВыписки
// Процедура активизации строки ДС
&НаКлиенте
Процедура ЖурналДокументовСписокПриАктивизацииСтроки(Элемент)
ТекДанные = Элементы.Список.ТекущиеДанные;
Если ТекДанные = Неопределено Тогда
ТекБанковскийСчет = БанковскийСчет;
Если ЗначениеЗаполнено(БанковскийСчет) И Дата = '00010101' Тогда
ТекДата = ОбщегоНазначения.ПолучитьРабочуюДату();
Иначе
ТекДата = Дата;
КонецЕсли;
Иначе
ТекДата = ТекДанные.Дата;
ТекБанковскийСчет = ТекДанные.БанковскийСчет;
КонецЕсли;
ОбновитьИтоги(ТекДата, ТекБанковскийСчет);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьИтоги(ТекДата, ТекБанковскийСчет, ВсегдаОбновлять = Ложь)
Если ВсегдаОбновлять ИЛИ (ДатаИтогов <> ТекДата) ИЛИ (БанковскийСчетИтогов <> ТекБанковскийСчет) Тогда
ТаблицаИтогов = ПолучитьИтогиНаСервере(ТекДата, ТекБанковскийСчет);
БанковскийСчетИтогов = ТекБанковскийСчет;
ДатаИтогов = ТекДата;
НачальныйОстаток = ТаблицаИтогов.Итог("НачальныйОстаток");
ВсегоПоступило = ТаблицаИтогов.Итог("ВсегоПоступило");
ВсегоСписано = ТаблицаИтогов.Итог("ВсегоСписано");
КонечныйОстаток = ТаблицаИтогов.Итог("КонечныйОстаток");
ТаблицаИтоговПеремещения = ПолучитьИтогиПеремещенияНаСервере(ТекДата, ТекБанковскийСчет);
ВсегоПоступилоПеремещения = ТаблицаИтоговПеремещения.Итог("ВсегоПоступило");
ВсегоСписаноПеремещения = ТаблицаИтоговПеремещения.Итог("ВсегоСписано");
КонецЕсли;
КонецПроцедуры
Функция ПолучитьИтогиПеремещенияНаСервере(ТекДата, ТекБанковскийСчет)
мВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| 0 КАК ВсегоСписано,
| СписаниеСРасчетногоСчета.СуммаДокумента КАК ВсегоПоступило
|ИЗ
| Документ.СписаниеСРасчетногоСчета КАК СписаниеСРасчетногоСчета
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчета КАК БанковскиеСчета
| ПО СписаниеСРасчетногоСчета.СчетКонтрагента = БанковскиеСчета.Ссылка
|ГДЕ
| БанковскиеСчета.Ссылка = &БанковскийСчетИтогов
| И СписаниеСРасчетногоСчета.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийСписаниеДенежныхСредств.ПереводНаДругойСчет)
| И СписаниеСРасчетногоСчета.Организация = &Организация
| И СписаниеСРасчетногоСчета.Дата МЕЖДУ &НачалоДня И &КонецДня
| И СписаниеСРасчетногоСчета.Проведен = ИСТИНА
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПриходныйКассовыйОрдер.СуммаДокумента,
| 0
|ИЗ
| Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчета КАК БанковскиеСчета
| ПО ПриходныйКассовыйОрдер.Контрагент = БанковскиеСчета.Ссылка
|ГДЕ
| БанковскиеСчета.Ссылка = &БанковскийСчетИтогов
| И ПриходныйКассовыйОрдер.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПКО.ПолучениеНаличныхВБанке)
| И ПриходныйКассовыйОрдер.Организация = &Организация
| И ПриходныйКассовыйОрдер.Дата МЕЖДУ &НачалоДня И &КонецДня
| И ПриходныйКассовыйОрдер.Проведен = ИСТИНА
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 0,
| РасходныйКассовыйОрдер.СуммаДокумента
|ИЗ
| Документ.РасходныйКассовыйОрдер КАК РасходныйКассовыйОрдер
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчета КАК БанковскиеСчета
| ПО РасходныйКассовыйОрдер.СчетОрганизации = БанковскиеСчета.Ссылка
|ГДЕ
| БанковскиеСчета.Ссылка = &БанковскийСчетИтогов
| И РасходныйКассовыйОрдер.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРКО.ВзносНаличнымиВБанк)
| И РасходныйКассовыйОрдер.Организация = &Организация
| И РасходныйКассовыйОрдер.Дата МЕЖДУ &НачалоДня И &КонецДня
| И РасходныйКассовыйОрдер.Проведен = ИСТИНА";
Запрос.УстановитьПараметр("НачалоДня", НачалоДня(ТекДата));
Запрос.УстановитьПараметр("КонецДня", КонецДня(ТекДата));
Запрос.УстановитьПараметр("БанковскийСчетИтогов", ТекБанковскийСчет);
Запрос.УстановитьПараметр("Организация", ТекБанковскийСчет.Владелец);
Запрос.УстановитьПараметр("ВалютаРеглУчета", мВалютаРегламентированногоУчета);
ТаблицаИтогов = Запрос.Выполнить().Выгрузить();
Возврат ТаблицаИтогов;
КонецФункции
ПоказатьИ прикрепляю замер оф и уф. Спасибо большое!
Прикрепленные файлы:
(5) В запросе функции
Первый запрос:
Зачем соединение со справочником Банковские счета?
Если СписаниеСРасчетногоСчета.СчетКонтрагента и есть нужный банковский счет, по которому надо делать отбор, то по нему и надо делать отбор.
Второй запрос:
Соединение по ПриходныйКассовыйОрдер.Контрагент = БанковскиеСчета.Ссылка
Контрагент это банковский счет? Серьезно?
Если в документе есть реквизит - банковский счет, то по нему и надо отбирать.
Третий запрос - аналогично первому.
Следующее замечание - ОбновитьИтоги - все что внутри "Если" должно быть в серверной процедуре.
Таблицу с сервера на клиент передавать нельзя.
ПолучитьИтогиПеремещенияНаСервере
какая то дичь.
Первый запрос:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
| 0 КАК ВсегоСписано,
| СписаниеСРасчетногоСчета.СуммаДокумента КАК ВсегоПоступило
|ИЗ
| Документ.СписаниеСРасчетногоСчета КАК СписаниеСРасчетногоСчета
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчета КАК БанковскиеСчета
| ПО СписаниеСРасчетногоСчета.СчетКонтрагента = БанковскиеСчета.Ссылка
|ГДЕ
| БанковскиеСчета.Ссылка = &БанковскийСчетИтогов
| И СписаниеСРасчетногоСчета.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийСписаниеДенежныхСредств.ПереводНаДругойСчет)
| И СписаниеСРасчетногоСчета.Организация = &Организация
| И СписаниеСРасчетногоСчета.Дата МЕЖДУ &НачалоДня И &КонецДня
| И СписаниеСРасчетногоСчета.Проведен = ИСТИНА
ПоказатьЗачем соединение со справочником Банковские счета?
Если СписаниеСРасчетногоСчета.СчетКонтрагента и есть нужный банковский счет, по которому надо делать отбор, то по нему и надо делать отбор.
Второй запрос:
|ВЫБРАТЬ
| ПриходныйКассовыйОрдер.СуммаДокумента,
| 0
|ИЗ
| Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчета КАК БанковскиеСчета
| ПО ПриходныйКассовыйОрдер.Контрагент = БанковскиеСчета.Ссылка
|ГДЕ
| БанковскиеСчета.Ссылка = &БанковскийСчетИтогов
| И ПриходныйКассовыйОрдер.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПКО.ПолучениеНаличныхВБанке)
| И ПриходныйКассовыйОрдер.Организация = &Организация
| И ПриходныйКассовыйОрдер.Дата МЕЖДУ &НачалоДня И &КонецДня
| И ПриходныйКассовыйОрдер.Проведен = ИСТИНА
ПоказатьСоединение по ПриходныйКассовыйОрдер.Контрагент = БанковскиеСчета.Ссылка
Контрагент это банковский счет? Серьезно?
Если в документе есть реквизит - банковский счет, то по нему и надо отбирать.
Третий запрос - аналогично первому.
Следующее замечание - ОбновитьИтоги - все что внутри "Если" должно быть в серверной процедуре.
Таблицу с сервера на клиент передавать нельзя.
Случайно не добавил еще вызываемую функцию. Вот как раз на ней тупит уф.
&НаСервере
Функция ПолучитьИтогиНаСервере(ТекДата, ТекБанковскийСчет)
мВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ВЫБОР
| КОГДА БанковскиеСчета.ВалютаДенежныхСредств = &ВалютаРеглУчета
| ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток
| ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаНачальныйОстаток
| КОНЕЦ КАК НачальныйОстаток,
| ВЫБОР
| КОГДА БанковскиеСчета.ВалютаДенежныхСредств = &ВалютаРеглУчета
| ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаОборотДт
| ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаОборотДт
| КОНЕЦ КАК ВсегоПоступило,
| ВЫБОР
| КОГДА БанковскиеСчета.ВалютаДенежныхСредств = &ВалютаРеглУчета
| ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаОборотКт
| ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаОборотКт
| КОНЕЦ КАК ВсегоСписано,
| ВЫБОР
| КОГДА БанковскиеСчета.ВалютаДенежныхСредств = &ВалютаРеглУчета
| ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток
| ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаКонечныйОстаток
| КОНЕЦ КАК КонечныйОстаток
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
| НАЧАЛОПЕРИОДА(&ДатаИтогов, ДЕНЬ),
| КОНЕЦПЕРИОДА(&ДатаИтогов, ДЕНЬ),
| ,
| ДвиженияИГраницыПериода,
| ,
| ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.БанковскиеСчета),
| Организация = &Организация
| И (ВЫРАЗИТЬ(Субконто1 КАК Справочник.БанковскиеСчета)) = &БанковскийСчетИтогов) КАК ХозрасчетныйОстаткиИОбороты
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчета КАК БанковскиеСчета
| ПО ((ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Справочник.БанковскиеСчета)) = БанковскиеСчета.Ссылка)
|ГДЕ
| БанковскиеСчета.Ссылка = &БанковскийСчетИтогов";
Запрос.УстановитьПараметр("ДатаИтогов", ТекДата);
Запрос.УстановитьПараметр("БанковскийСчетИтогов", ТекБанковскийСчет);
Запрос.УстановитьПараметр("Организация", ТекБанковскийСчет.Владелец);
Запрос.УстановитьПараметр("ВалютаРеглУчета", мВалютаРегламентированногоУчета);
ТаблицаИтогов = Запрос.Выполнить().Выгрузить();
Возврат ТаблицаИтогов;
КонецФункции
Показать
(23) Учел все рекомендации, но все равно 11 секунд...
&НаКлиенте
Процедура ЖурналДокументовСписокПриАктивизацииСтроки(Элемент)
ТекДанные = Элементы.Список.ТекущиеДанные;
Если ТекДанные = Неопределено Тогда
ТекБанковскийСчет = БанковскийСчет;
Если ЗначениеЗаполнено(БанковскийСчет) И Дата = '00010101' Тогда
ТекДата = ОбщегоНазначения.ПолучитьРабочуюДату();
Иначе
ТекДата = Дата;
КонецЕсли;
Иначе
ТекДата = ТекДанные.Дата;
ТекБанковскийСчет = ТекДанные.БанковскийСчет;
КонецЕсли;
ОбновитьИтоги(ТекДата, ТекБанковскийСчет);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьИтоги(ТекДата, ТекБанковскийСчет, ВсегдаОбновлять = Ложь)
Структура = ПолучитьИтогиНаСервереТЕСТ(ТекДата, ТекБанковскийСчет, ТекБанковскийСчет.Владелец);
БанковскийСчетИтогов = ТекБанковскийСчет;
ДатаИтогов = ТекДата;
НачальныйОстаток = Структура.НачальныйОстаток;
ВсегоПоступило = Структура.ВсегоПоступилоП;
ВсегоСписано = Структура.ВсегоСписаноП;
КонечныйОстаток = Структура.КонечныйОстаток;
ВсегоПоступилоПеремещения = Структура.ВсегоПоступило;
ВсегоСписаноПеремещения = Структура.ВсегоСписано;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьИтогиНаСервереТЕСТ(ТекДата, ТекБанковскийСчет, Организация)
мВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| 0 КАК ВсегоСписаноП,
| ВЫБОР
| КОГДА СписаниеСРасчетногоСчета.СуммаДокумента = 0
| ТОГДА 0
| ИНАЧЕ СписаниеСРасчетногоСчета.СуммаДокумента
| КОНЕЦ КАК ВсегоПоступилоП
|ИЗ
| Документ.СписаниеСРасчетногоСчета КАК СписаниеСРасчетногоСчета
|ГДЕ
| СписаниеСРасчетногоСчета.СчетКонтрагента = &БанковскийСчетИтогов
| И СписаниеСРасчетногоСчета.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийСписаниеДенежныхСредств.ПереводНаДругойСчет)
| И СписаниеСРасчетногоСчета.Организация = &Организация
| И СписаниеСРасчетногоСчета.Дата МЕЖДУ &НачалоДня И &КонецДня
| И СписаниеСРасчетногоСчета.Проведен = ИСТИНА
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ВЫБОР
| КОГДА ПриходныйКассовыйОрдер.СуммаДокумента = 0
| ТОГДА 0
| ИНАЧЕ ПриходныйКассовыйОрдер.СуммаДокумента
| КОНЕЦ,
| 0
|ИЗ
| Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
|ГДЕ
| ПриходныйКассовыйОрдер.Контрагент = &БанковскийСчетИтогов
| И ПриходныйКассовыйОрдер.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПКО.ПолучениеНаличныхВБанке)
| И ПриходныйКассовыйОрдер.Организация = &Организация
| И ПриходныйКассовыйОрдер.Дата МЕЖДУ &НачалоДня И &КонецДня
| И ПриходныйКассовыйОрдер.Проведен = ИСТИНА
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 0,
| ВЫБОР
| КОГДА РасходныйКассовыйОрдер.СуммаДокумента = 0
| ТОГДА 0
| ИНАЧЕ РасходныйКассовыйОрдер.СуммаДокумента
| КОНЕЦ
|ИЗ
| Документ.РасходныйКассовыйОрдер КАК РасходныйКассовыйОрдер
|ГДЕ
| РасходныйКассовыйОрдер.СчетОрганизации = &БанковскийСчетИтогов
| И РасходныйКассовыйОрдер.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРКО.ВзносНаличнымиВБанк)
| И РасходныйКассовыйОрдер.Организация = &Организация
| И РасходныйКассовыйОрдер.Дата МЕЖДУ &НачалоДня И &КонецДня
| И РасходныйКассовыйОрдер.Проведен = ИСТИНА
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ВЫБОР
| КОГДА ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Справочник.БанковскиеСчета).ВалютаДенежныхСредств = &ВалютаРеглУчета
| ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток
| ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаНачальныйОстаток
| КОНЕЦ КАК НачальныйОстаток,
| ВЫБОР
| КОГДА ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Справочник.БанковскиеСчета).ВалютаДенежныхСредств = &ВалютаРеглУчета
| ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаОборотДт
| ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаОборотДт
| КОНЕЦ КАК ВсегоПоступило,
| ВЫБОР
| КОГДА ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Справочник.БанковскиеСчета).ВалютаДенежныхСредств = &ВалютаРеглУчета
| ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаОборотКт
| ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаОборотКт
| КОНЕЦ КАК ВсегоСписано,
| ВЫБОР
| КОГДА ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Справочник.БанковскиеСчета).ВалютаДенежныхСредств = &ВалютаРеглУчета
| ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток
| ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаКонечныйОстаток
| КОНЕЦ КАК КонечныйОстаток
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
| НАЧАЛОПЕРИОДА(&ДатаИтогов, ДЕНЬ),
| КОНЕЦПЕРИОДА(&ДатаИтогов, ДЕНЬ),
| ,
| ДвиженияИГраницыПериода,
| ,
| ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.БанковскиеСчета),
| Организация = &Организация
| И Субконто1 = &БанковскийСчетИтогов) КАК ХозрасчетныйОстаткиИОбороты";
Запрос.УстановитьПараметр("ДатаИтогов", ТекДата);
Запрос.УстановитьПараметр("БанковскийСчетИтогов", ТекБанковскийСчет);
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("ВалютаРеглУчета", мВалютаРегламентированногоУчета);
Запрос.УстановитьПараметр("НачалоДня", НачалоДня(ТекДата));
Запрос.УстановитьПараметр("КонецДня", КонецДня(ТекДата));
РезультатыЗапроса = Запрос.ВыполнитьПакет();
ТабРаз = РезультатыЗапроса[0].Выгрузить();
ТабДва = РезультатыЗапроса[1].Выгрузить();
Если ТабРаз.Количество() = 0 тогда
Стр = ТабРаз.Добавить();
Стр.ВсегоПоступилоП = 0;
Стр.ВсегоСписаноП = 0;
КонецЕсли;
Если ТабДва.Количество() = 0 тогда
Стр = ТабРаз.Добавить();
Стр.НачальныйОстаток = 0;
Стр.ВсегоПоступило = 0;
Стр.ВсегоСписано = 0;
Стр.КонечныйОстаток = 0;
КонецЕсли;
Возврат Новый Структура("НачальныйОстаток, ВсегоПоступилоП, ВсегоСписаноП, КонечныйОстаток, ВсегоПоступило, ВсегоСписано",
ТабДва[0].НачальныйОстаток, ТабДва[0].ВсегоПоступило, ТабДва[0].ВсегоСписано, ТабДва[0].КонечныйОстаток,
ТабРаз[0].ВсегоПоступилоП, ТабРаз[0].ВсегоСписаноП);
КонецФункции
ПоказатьПрикрепленные файлы:
(24) У меня больше нет идей, что можно еще исправить в запросе.
Ну только если сгруппировать результат первого запроса.
Можно предложить сначала выяснить - при запросе данных из какого документа выполняется долго.
То есть первый, второй или третий запрос в объединении.
Закомментировать остальные, включить замер и выполнить запрос.
Можно еще попробовать установить флаг Индексировать на те реквизиты документа, по которым выполняется условие отбора. То есть на СчетКонтрагента, Контрагент, СчетОрганизации соответственно.
Ну только если сгруппировать результат первого запроса.
Можно предложить сначала выяснить - при запросе данных из какого документа выполняется долго.
То есть первый, второй или третий запрос в объединении.
Закомментировать остальные, включить замер и выполнить запрос.
Можно еще попробовать установить флаг Индексировать на те реквизиты документа, по которым выполняется условие отбора. То есть на СчетКонтрагента, Контрагент, СчетОрганизации соответственно.
Прикрепленные файлы:
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот