Запрос в ОФ выполняется дольше чем в УФ

1. aalu14 09.04.24 16:13 Сейчас в теме
Привет! Делаю управляемую форму списка документа. Вызываю функцию с запросом, возврат тз с результатом. В обычной форме тот же самый запрос выполняется 1.19 сек, а в уф 26,32 сек.

Подскажите, куда копать, чтобы ускорить это всё в уф?
УФ чистая, только заполнение списка (тз), и вызов серверной функции при активизации строки в списке (тз).

Заранее спасибо!

ТаблицаИтоговПеремещения 	= ПолучитьИтогиПеремещенияНаСервере(ТекДата, ТекБанковскийСчет);
ВсегоПоступилоПеремещения   = ТаблицаИтоговПеремещения.Итог("ВсегоПоступило");
ВсегоСписаноПеремещения     = ТаблицаИтоговПеремещения.Итог("ВсегоСписано");



&НаСервере
Функция ПолучитьИтогиПеремещенияНаСервере(ТекДата, ТекБанковскийСчет)

	мВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();

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

КонецФункции

Показать
По теме из базы знаний
Найденные решения
19. Boneman 298 10.04.24 11:18 Сейчас в теме
(1)
ТаблицаИтоговПеремещения = ПолучитьИтогиПеремещенияНаСервере(ТекДата, ТекБанковскийСчет);
ВсегоПоступилоПеремещения = ТаблицаИтоговПеремещения.Итог("ВсегоПоступило");
ВсегоСписаноПеремещения = ТаблицаИтоговПеремещения.Итог("ВсегоСписано");


ТаблицаИтоговПеремещения это же таблица значения. Она для чего вообще на клиенте ?
Для банального получения итогов Поступило/Списано ?
Убери это.
Таблицы значений на клиенте быть вообще не должно.
Функцию передалай в &НаСервереБезКонтекста
т.к. ты при переходе между сервером и клиентом качаешь весь контекст формы туда обратно.
И итоги свои получай внутри функции, и возващай назад не таблицу значений, а готовые данные, например структуру с Итогами всего поступило и всего списано.
23. Sashares 34 10.04.24 12:27 Сейчас в теме
(21)
по поводу соединения со справочником - это делается в случае, когда нужны данные по всем эл. спр. даже если нет док


Это так не работает.
В запросе отбор на равно. Не предусмотрено получение остатков по всем счетам.
В запросе внутреннее соединение - нет документов, запрос будет пустой.

Соединение со справочником тут не нужно.

Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    0 КАК ВсегоСписано,
    |    СписаниеСРасчетногоСчета.СуммаДокумента КАК ВсегоПоступило
    |ПОМЕСТИТЬ Перемещение
    |ИЗ
    |    Документ.СписаниеСРасчетногоСчета КАК СписаниеСРасчетногоСчета
    |ГДЕ
    |    СписаниеСРасчетногоСчета.СчетКонтрагента = &БанковскийСчетИтогов
    |    И СписаниеСРасчетногоСчета.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийСписаниеДенежныхСредств.ПереводНаДругойСчет)
    |    И СписаниеСРасчетногоСчета.Организация = &Организация
    |    И СписаниеСРасчетногоСчета.Дата МЕЖДУ &НачалоДня И &КонецДня
    |    И СписаниеСРасчетногоСчета.Проведен = ИСТИНА
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    ПриходныйКассовыйОрдер.СуммаДокумента,
    |    0
    |ИЗ
    |    Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
    |ГДЕ
    |    ПриходныйКассовыйОрдер.Контрагент = &БанковскийСчетИтогов
    |    И ПриходныйКассовыйОрдер.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПКО.ПолучениеНаличныхВБанке)
    |    И ПриходныйКассовыйОрдер.Организация = &Организация
    |    И ПриходныйКассовыйОрдер.Дата МЕЖДУ &НачалоДня И &КонецДня
    |    И ПриходныйКассовыйОрдер.Проведен = ИСТИНА
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    0,
    |    РасходныйКассовыйОрдер.СуммаДокумента
    |ИЗ
    |    Документ.РасходныйКассовыйОрдер КАК РасходныйКассовыйОрдер
    |ГДЕ
    |    РасходныйКассовыйОрдер.СчетОрганизации = &БанковскийСчетИтогов
    |    И РасходныйКассовыйОрдер.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРКО.ВзносНаличнымиВБанк)
    |    И РасходныйКассовыйОрдер.Организация = &Организация
    |    И РасходныйКассовыйОрдер.Дата МЕЖДУ &НачалоДня И &КонецДня
    |    И РасходныйКассовыйОрдер.Проведен = ИСТИНА
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    ВЫБОР
    |        КОГДА ВЫРАЗИТЬ(Субконто1 КАК Справочник.БанковскиеСчета).ВалютаДенежныхСредств = &ВалютаРеглУчета
    |            ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток
    |        ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаНачальныйОстаток
    |    КОНЕЦ КАК НачальныйОстаток,
    |    ВЫБОР
    |        КОГДА БанковскиеСчета.ВалютаДенежныхСредств = &ВалютаРеглУчета
    |            ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаОборотДт
    |        ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаОборотДт
    |    КОНЕЦ КАК ВсегоПоступило,
    |    ВЫБОР
    |        КОГДА БанковскиеСчета.ВалютаДенежныхСредств = &ВалютаРеглУчета
    |            ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаОборотКт
    |        ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаОборотКт
    |    КОНЕЦ КАК ВсегоСписано,
    |    ВЫБОР
    |        КОГДА БанковскиеСчета.ВалютаДенежныхСредств = &ВалютаРеглУчета
    |            ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток
    |        ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаКонечныйОстаток
    |    КОНЕЦ КАК КонечныйОстаток
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
    |            НАЧАЛОПЕРИОДА(&ДатаИтогов, ДЕНЬ),
    |            КОНЕЦПЕРИОДА(&ДатаИтогов, ДЕНЬ),
    |            ,
    |            ДвиженияИГраницыПериода,
    |            ,
    |            ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.БанковскиеСчета),
    |            Организация = &Организация
    |                И Субконто1 = &БанковскийСчетИтогов) КАК ХозрасчетныйОстаткиИОбороты";
	
РезультатыЗапроса = Запрос.ВыполнитьПакет();
ТабРаз = РезультатыЗапроса[0].Выгрузить();
ТабДва = РезультатыЗапроса[1].Выгрузить();
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. newlogin1 09.04.24 17:44 Сейчас в теме
(1)Добрый день.
Запрос как запрос, можно придраться к порядку отборов и отбору по организации, но не более.
Проблема в другом месте. Нужен замер всего кода и сам код.
Прогнал такой же запрос в серверной базе без отбора по счету, от начала ведения учета - 262 строки, почти 3 секунды.
8. aalu14 10.04.24 10:14 Сейчас в теме
19. Boneman 298 10.04.24 11:18 Сейчас в теме
(1)
ТаблицаИтоговПеремещения = ПолучитьИтогиПеремещенияНаСервере(ТекДата, ТекБанковскийСчет);
ВсегоПоступилоПеремещения = ТаблицаИтоговПеремещения.Итог("ВсегоПоступило");
ВсегоСписаноПеремещения = ТаблицаИтоговПеремещения.Итог("ВсегоСписано");


ТаблицаИтоговПеремещения это же таблица значения. Она для чего вообще на клиенте ?
Для банального получения итогов Поступило/Списано ?
Убери это.
Таблицы значений на клиенте быть вообще не должно.
Функцию передалай в &НаСервереБезКонтекста
т.к. ты при переходе между сервером и клиентом качаешь весь контекст формы туда обратно.
И итоги свои получай внутри функции, и возващай назад не таблицу значений, а готовые данные, например структуру с Итогами всего поступило и всего списано.
21. aalu14 10.04.24 12:05 Сейчас в теме
(19)Запрос с дурными соединениями со справочником изменять нельзя. Объединил два запроса с учетом ваших замечаний. Но все равно функция долго обрабатывается.
&НаКлиенте
Процедура ОбновитьИтоги(ТекДата, ТекБанковскийСчет, ВсегдаОбновлять = Ложь)
	Структура = ПолучитьИтогиНаСервереТЕСТ(ТекДата, ТекБанковскийСчет);
	БанковскийСчетИтогов = ТекБанковскийСчет;
        ДатаИтогов           = ТекДата;
	НачальныйОстаток = Структура.НачальныйОстаток;
	ВсегоПоступило   = Структура.ВсегоПоступило;
	ВсегоСписано     = Структура.ВсегоСписано;
	КонечныйОстаток  = Структура.КонечныйОстаток;
	ВсегоПоступилоПеремещения   = Структура.ВсегоПоступило;
	ВсегоСписаноПеремещения     = Структура.ВсегоСписано;	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьИтогиНаСервереТЕСТ(ТекДата, ТекБанковскийСчет)

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

Показать
23. Sashares 34 10.04.24 12:27 Сейчас в теме
(21)
по поводу соединения со справочником - это делается в случае, когда нужны данные по всем эл. спр. даже если нет док


Это так не работает.
В запросе отбор на равно. Не предусмотрено получение остатков по всем счетам.
В запросе внутреннее соединение - нет документов, запрос будет пустой.

Соединение со справочником тут не нужно.

Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    0 КАК ВсегоСписано,
    |    СписаниеСРасчетногоСчета.СуммаДокумента КАК ВсегоПоступило
    |ПОМЕСТИТЬ Перемещение
    |ИЗ
    |    Документ.СписаниеСРасчетногоСчета КАК СписаниеСРасчетногоСчета
    |ГДЕ
    |    СписаниеСРасчетногоСчета.СчетКонтрагента = &БанковскийСчетИтогов
    |    И СписаниеСРасчетногоСчета.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийСписаниеДенежныхСредств.ПереводНаДругойСчет)
    |    И СписаниеСРасчетногоСчета.Организация = &Организация
    |    И СписаниеСРасчетногоСчета.Дата МЕЖДУ &НачалоДня И &КонецДня
    |    И СписаниеСРасчетногоСчета.Проведен = ИСТИНА
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    ПриходныйКассовыйОрдер.СуммаДокумента,
    |    0
    |ИЗ
    |    Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
    |ГДЕ
    |    ПриходныйКассовыйОрдер.Контрагент = &БанковскийСчетИтогов
    |    И ПриходныйКассовыйОрдер.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПКО.ПолучениеНаличныхВБанке)
    |    И ПриходныйКассовыйОрдер.Организация = &Организация
    |    И ПриходныйКассовыйОрдер.Дата МЕЖДУ &НачалоДня И &КонецДня
    |    И ПриходныйКассовыйОрдер.Проведен = ИСТИНА
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    0,
    |    РасходныйКассовыйОрдер.СуммаДокумента
    |ИЗ
    |    Документ.РасходныйКассовыйОрдер КАК РасходныйКассовыйОрдер
    |ГДЕ
    |    РасходныйКассовыйОрдер.СчетОрганизации = &БанковскийСчетИтогов
    |    И РасходныйКассовыйОрдер.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРКО.ВзносНаличнымиВБанк)
    |    И РасходныйКассовыйОрдер.Организация = &Организация
    |    И РасходныйКассовыйОрдер.Дата МЕЖДУ &НачалоДня И &КонецДня
    |    И РасходныйКассовыйОрдер.Проведен = ИСТИНА
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    ВЫБОР
    |        КОГДА ВЫРАЗИТЬ(Субконто1 КАК Справочник.БанковскиеСчета).ВалютаДенежныхСредств = &ВалютаРеглУчета
    |            ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток
    |        ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаНачальныйОстаток
    |    КОНЕЦ КАК НачальныйОстаток,
    |    ВЫБОР
    |        КОГДА БанковскиеСчета.ВалютаДенежныхСредств = &ВалютаРеглУчета
    |            ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаОборотДт
    |        ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаОборотДт
    |    КОНЕЦ КАК ВсегоПоступило,
    |    ВЫБОР
    |        КОГДА БанковскиеСчета.ВалютаДенежныхСредств = &ВалютаРеглУчета
    |            ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаОборотКт
    |        ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаОборотКт
    |    КОНЕЦ КАК ВсегоСписано,
    |    ВЫБОР
    |        КОГДА БанковскиеСчета.ВалютаДенежныхСредств = &ВалютаРеглУчета
    |            ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток
    |        ИНАЧЕ ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаКонечныйОстаток
    |    КОНЕЦ КАК КонечныйОстаток
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
    |            НАЧАЛОПЕРИОДА(&ДатаИтогов, ДЕНЬ),
    |            КОНЕЦПЕРИОДА(&ДатаИтогов, ДЕНЬ),
    |            ,
    |            ДвиженияИГраницыПериода,
    |            ,
    |            ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.БанковскиеСчета),
    |            Организация = &Организация
    |                И Субконто1 = &БанковскийСчетИтогов) КАК ХозрасчетныйОстаткиИОбороты";
	
РезультатыЗапроса = Запрос.ВыполнитьПакет();
ТабРаз = РезультатыЗапроса[0].Выгрузить();
ТабДва = РезультатыЗапроса[1].Выгрузить();
Показать
25. aalu14 10.04.24 14:42 Сейчас в теме
(23) посмотрите (24), пожалуйста
2. booksfill 09.04.24 16:29 Сейчас в теме
(1)
и вызов серверной функции при активизации строки с списке (тз)

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

Ибо понять вот это "ТаблицаИтоговПеремещения = ПолучитьИтогиПеремещенияНаСервере(ТекДата, ТекБанковскийСчет);" затруднительно - неясно в каком месте кода это вызывается. См. примечание.

P.S.
Хотел сперва напомнить, что "вызов серверной функции при активизации строки с списке (тз)."
Низзя так делать, но что-то тут вообще темное, ибо, что вы потом с тз делаете тоже, неясно.
6. aalu14 10.04.24 10:13 Сейчас в теме
(2) Да, толстый клиент
Объясните, пожалуйста, как методологически правильно обновлять данные при активизации строки. Заранее спасибо!
17. booksfill 10.04.24 11:00 Сейчас в теме
(6)
Запрет на вызов серверных функций при активизации строки вызван тем, что он может привести к зацикливанию, т.к. может повторно вызваться событие при активизации строки.
Это может быть исправлено запоминанием текущей строки и отказом от повторного вызова серверного метода, если тек. строка не менялась. Ну и обычно добавляют обработчик ожидания, чтобы обычное метание/прокрутка по строкам не приводило к вызову серверного метода.

Методологически же я бы рекомендовал, если это возможно по соображениям расхода оперативной памяти и т.п., закешировать нужные данные и выводить их, не используя обращение к серверу.

Если закешировать не вариант, то рекомендовал бы пересмотреть архитектуру, т.к. каждый раз дергать сервер, да еще с запросами к базе, ну, вы сами понимаете...
Ведь по сути, вы при каждой активизации строки формируете "мини отчет", только вдобавок еще и не консистентный.
4. starjevschik 09.04.24 17:54 Сейчас в теме
замер производительности не видно, потерялся где-то.
7. aalu14 10.04.24 10:14 Сейчас в теме
5. aalu14 10.04.24 09:59 Сейчас в теме
На форме ДС (а не тз, как я писал)
//Запрос дс:
ВЫБРАТЬ
	ЖурналДокументовБанковскиеВыписки.Ссылка,
	ЖурналДокументовБанковскиеВыписки.Дата,
	ЖурналДокументовБанковскиеВыписки.ПометкаУдаления,
	ЖурналДокументовБанковскиеВыписки.Номер,
	ЖурналДокументовБанковскиеВыписки.Проведен,
	ЖурналДокументовБанковскиеВыписки.Организация,
	ЖурналДокументовБанковскиеВыписки.БанковскийСчет,
	ЖурналДокументовБанковскиеВыписки.Поступило,
	ЖурналДокументовБанковскиеВыписки.Контрагент,
	ЖурналДокументовБанковскиеВыписки.Списано,
	ЖурналДокументовБанковскиеВыписки.Валюта,
	ЖурналДокументовБанковскиеВыписки.ВидОперации,
	ЖурналДокументовБанковскиеВыписки.ДатаВходящегоДокумента,
	ЖурналДокументовБанковскиеВыписки.НомерВходящегоДокумента,
	ЖурналДокументовБанковскиеВыписки.РучнаяКорректировка,
	ЖурналДокументовБанковскиеВыписки.НазначениеПлатежа,
	ЖурналДокументовБанковскиеВыписки.Ответственный,
	ЖурналДокументовБанковскиеВыписки.Комментарий,
	ЖурналДокументовБанковскиеВыписки.Подразделение,
	ЖурналДокументовБанковскиеВыписки.Тип,
	НАЧАЛОПЕРИОДА(ЖурналДокументовБанковскиеВыписки.Дата, ДЕНЬ) КАК ДатаОтбора
ИЗ
	ЖурналДокументов.БанковскиеВыписки КАК ЖурналДокументовБанковскиеВыписки


// Процедура активизации строки ДС
&НаКлиенте
Процедура ЖурналДокументовСписокПриАктивизацииСтроки(Элемент)

	ТекДанные = Элементы.Список.ТекущиеДанные;
	
	Если ТекДанные = Неопределено Тогда
		ТекБанковскийСчет = БанковскийСчет;
		Если ЗначениеЗаполнено(БанковскийСчет) И Дата = '00010101' Тогда
			ТекДата = ОбщегоНазначения.ПолучитьРабочуюДату();
		Иначе
			ТекДата = Дата;
		КонецЕсли;
	Иначе
		ТекДата = ТекДанные.Дата;
		ТекБанковскийСчет = ТекДанные.БанковскийСчет;
	КонецЕсли;
	
	ОбновитьИтоги(ТекДата, ТекБанковскийСчет);
	
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьИтоги(ТекДата, ТекБанковскийСчет, ВсегдаОбновлять = Ложь)

	Если ВсегдаОбновлять ИЛИ (ДатаИтогов <> ТекДата) ИЛИ (БанковскийСчетИтогов <> ТекБанковскийСчет) Тогда
		
		ТаблицаИтогов = ПолучитьИтогиНаСервере(ТекДата, ТекБанковскийСчет);
		
		БанковскийСчетИтогов = ТекБанковскийСчет;
		ДатаИтогов           = ТекДата;
		
		НачальныйОстаток = ТаблицаИтогов.Итог("НачальныйОстаток");
		ВсегоПоступило   = ТаблицаИтогов.Итог("ВсегоПоступило");
		ВсегоСписано     = ТаблицаИтогов.Итог("ВсегоСписано");
		КонечныйОстаток  = ТаблицаИтогов.Итог("КонечныйОстаток");
		
		ТаблицаИтоговПеремещения 	= ПолучитьИтогиПеремещенияНаСервере(ТекДата, ТекБанковскийСчет);
		ВсегоПоступилоПеремещения   = ТаблицаИтоговПеремещения.Итог("ВсегоПоступило");
		ВсегоСписаноПеремещения     = ТаблицаИтоговПеремещения.Итог("ВсегоСписано");
		
	КонецЕсли;
	
КонецПроцедуры

Функция ПолучитьИтогиПеремещенияНаСервере(ТекДата, ТекБанковскийСчет)

	мВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();

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

КонецФункции


Показать


И прикрепляю замер оф и уф. Спасибо большое!
Прикрепленные файлы:
9. Sashares 34 10.04.24 10:17 Сейчас в теме
(5) В запросе функции
ПолучитьИтогиПеремещенияНаСервере
какая то дичь.

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


Зачем соединение со справочником Банковские счета?
Если СписаниеСРасчетногоСчета.СчетКонтрагента и есть нужный банковский счет, по которому надо делать отбор, то по нему и надо делать отбор.

Второй запрос:
|ВЫБРАТЬ
    |    ПриходныйКассовыйОрдер.СуммаДокумента,
    |    0
    |ИЗ
    |    Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчета КАК БанковскиеСчета
    |        ПО ПриходныйКассовыйОрдер.Контрагент = БанковскиеСчета.Ссылка
    |ГДЕ
    |    БанковскиеСчета.Ссылка = &БанковскийСчетИтогов
    |    И ПриходныйКассовыйОрдер.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПКО.ПолучениеНаличныхВБанке)
    |    И ПриходныйКассовыйОрдер.Организация = &Организация
    |    И ПриходныйКассовыйОрдер.Дата МЕЖДУ &НачалоДня И &КонецДня
    |    И ПриходныйКассовыйОрдер.Проведен = ИСТИНА
Показать


Соединение по ПриходныйКассовыйОрдер.Контрагент = БанковскиеСчета.Ссылка
Контрагент это банковский счет? Серьезно?
Если в документе есть реквизит - банковский счет, то по нему и надо отбирать.

Третий запрос - аналогично первому.

Следующее замечание - ОбновитьИтоги - все что внутри "Если" должно быть в серверной процедуре.
Таблицу с сервера на клиент передавать нельзя.
12. aalu14 10.04.24 10:27 Сейчас в теме
(9) рек. Контрагент дока ПриходныйКассовыйОрдер тип: СправочникСсылка.Склады, СправочникСсылка.БанковскиеСчета, СправочникСсылка.Контрагенты, СправочникСсылка.ФизическиеЛица

вот так сделано...
13. Sashares 34 10.04.24 10:29 Сейчас в теме
(12)Тогда не надо соединяться со справочником ни в одном запросе. Сразу делайте отбор по нужному реквизиту документа.
20. aalu14 10.04.24 11:38 Сейчас в теме
(13) по поводу соединения со справочником - это делается в случае, когда нужны данные по всем эл. спр. даже если нет док
10. Sashares 34 10.04.24 10:21 Сейчас в теме
(5)Дополню.
ТаблицаИтоговПеремещения и ТаблицаИтогов это что? Реквизиты формы?
Если да, удаляйте их. Они не нужны.
11. aalu14 10.04.24 10:25 Сейчас в теме
(10) ТаблицаИтоговПеремещения и ТаблицаИтогов - не реквизиты
На счет запроса ничего не могу сказать, задача сделать уф на основе оф, просто перенес запрос. Спасибо! Действительно, какая-то хрень...
14. aalu14 10.04.24 10:46 Сейчас в теме
Случайно не добавил еще вызываемую функцию. Вот как раз на ней тупит уф.

&НаСервере
Функция ПолучитьИтогиНаСервере(ТекДата, ТекБанковскийСчет)

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

КонецФункции

Показать
15. Sashares 34 10.04.24 10:49 Сейчас в теме
(14) Уберите "Выразить" из запроса.
Как из соединения, так и из виртуальной таблицы.
Оно тут не нужно.
16. aalu14 10.04.24 10:57 Сейчас в теме
18. aalu14 10.04.24 11:07 Сейчас в теме
(15) Постараюсь сделать 1 запрос вместо 2
22. aalu14 10.04.24 12:23 Сейчас в теме
(15) посмотрите (19), пожалуйста
24. aalu14 10.04.24 14:41 Сейчас в теме
(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].ВсегоСписаноП);		
КонецФункции

Показать
Прикрепленные файлы:
26. Xershi 1490 10.04.24 15:06 Сейчас в теме
(24) так у вас что сервер слабый? Код на клиенте выполняет ПК на клиенте, а код на сервере ПК сервера 1С.
27. aalu14 10.04.24 15:08 Сейчас в теме
(24) Да, постоянно загрузка цп под 100%
28. Sashares 34 10.04.24 18:23 Сейчас в теме
(24) У меня больше нет идей, что можно еще исправить в запросе.
Ну только если сгруппировать результат первого запроса.

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

Можно еще попробовать установить флаг Индексировать на те реквизиты документа, по которым выполняется условие отбора. То есть на СчетКонтрагента, Контрагент, СчетОрганизации соответственно.
Прикрепленные файлы:
29. aalu14 11.04.24 13:49 Сейчас в теме
(28) Спасибо большое за помощь, на самом деле вы мне очень помогли в плане понимания решений для оптимизации!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот