• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Тормозит отчет в УТ 8

  • Автор темы Mashino4ka
  • Дата начала
M

Mashino4ka

Добрый день уважаемые!Вообщем есть 1с УТ 8.1 сетевая (2 пк), впринципе работа программы устраивает, отчеты в среднем формирует быстро до одной минуты, но есть некий отчет, отвечающий за долги клиентов по дням просрочки, который внешне добавлен, работает отлично, но почему то формируется очень долго, до 10 минут. Отчет собирает все доки (реализация товаров) начиная с самого раннего, так необходимо, чтобы видеть все просроченные документы (по оплате). Если сделать период, т.е доки будут формироваться за определённый период, то некоторые доки не попадут в этот период и не будут видны.
Пример:
"ИП Козлов" взял в кредит у организации "А" товар на 10000 тысяч рублей

Реализация №1 от 30.11.2010 отсрочка 30 дней 5000 тысяч
Реализация №2 от 03.12.2010 отсрочка 30 дней 3000 тысячи
Реализация №3 от 13.12.2010 отсрочка 10 дней 2000 тысячи

Если мы будем выводить доки по "ИП Козлову" с 01.12.2010 по 31.12.2010, то в отчет попадут 2 документа (№2, №3) , хотя у №1 тоже долг висит.

Так вот когда делаем за месяц отчет формируется быстро, когда за 2 тоже ничего, но когда за год (к примеру) можно идти пить чай, пока он сформируется.
А нужно ИМЕННО чтобы отчет выводился не за период а с самого начала составления этих документов, а это долго, ой как долго.
Не поскажете как можно ускорить формирование отчета?

Прошу прощения за мой "Французский" ;)
 
U

unknown181538

Код или текст запроса приведите.
 
M

Mashino4ka

Код:
Процедура ОтчетИнициализация() Экспорт

ПостроительОтчетаОтчет.Текст =
"ВЫБРАТЬ
|	Дебиторка.ДоговорКонтрагента.Владелец КАК Контрагент,
|	СУММА(ВЫБОР
|			КОГДА НАЧАЛОПЕРИОДА(Дебиторка.РасчетнаяДата, ДЕНЬ) > КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(&ДатаОтчета, ДЕНЬ, -(Дебиторка.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности - 1)), ДЕНЬ)
|				ТОГДА Дебиторка.СуммаОстатокВВалютеВзаиморасчетов
|			ИНАЧЕ 0
|		КОНЕЦ) КАК ДолгВКредите,
|	СУММА(ВЫБОР
|			КОГДА НАЧАЛОПЕРИОДА(Дебиторка.РасчетнаяДата, ДЕНЬ) МЕЖДУ НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&ДатаОтчета, ДЕНЬ, -(Дебиторка.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности - 1)), ДЕНЬ) И КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(&ДатаОтчета, ДЕНЬ, -(Дебиторка.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности - 1)), ДЕНЬ)
|				ТОГДА Дебиторка.СуммаОстатокВВалютеВзаиморасчетов
|			ИНАЧЕ 0
|		КОНЕЦ) КАК ДолгЗаДеньДоВыплаты,
|	СУММА(ВЫБОР
|			КОГДА НАЧАЛОПЕРИОДА(Дебиторка.РасчетнаяДата, ДЕНЬ) МЕЖДУ НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&ДатаОтчета, ДЕНЬ, -Дебиторка.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности), ДЕНЬ) И КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(&ДатаОтчета, ДЕНЬ, -Дебиторка.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности), ДЕНЬ)
|				ТОГДА Дебиторка.СуммаОстатокВВалютеВзаиморасчетов
|			ИНАЧЕ 0
|		КОНЕЦ) КАК ДолгВыплСегодня,
|	СУММА(ВЫБОР
|			КОГДА НАЧАЛОПЕРИОДА(Дебиторка.РасчетнаяДата, ДЕНЬ) < КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(&ДатаОтчета, ДЕНЬ, -Дебиторка.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности), ДЕНЬ)
|				ТОГДА Дебиторка.СуммаОстатокВВалютеВзаиморасчетов
|			ИНАЧЕ 0
|		КОНЕЦ) КАК ДолгПросроченный,
|	СУММА(Дебиторка.СуммаОстатокВВалютеВзаиморасчетов) КАК ДолгОбщий
|{ВЫБРАТЬ
|	Контрагент.*,
|	Дебиторка.ДоговорКонтрагента.*,
|	Дебиторка.РасчетныйДокумент.*,
|	Дебиторка.РасчетнаяДата,
|	Дебиторка.Сделка.*,
|	Дебиторка.ДоговорКонтрагента.ДопустимаяСуммаЗадолженности КАК ДопСумма,
|	Дебиторка.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности КАК Отсрочка,
|	ДолгВКредите,
|	ДолгЗаДеньДоВыплаты,
|	ДолгВыплСегодня,
|	ДолгПросроченный,
|	ДолгОбщий}
|ИЗ
|	(ВЫБРАТЬ
|		Остатки.ДоговорКонтрагента КАК ДоговорКонтрагента,
|		Остатки.Сделка КАК Сделка,
|		ОсновнаяТаблицаРегистра.Период КАК РасчетнаяДата,
|		ОсновнаяТаблицаРегистра.Регистратор КАК РасчетныйДокумент,
|		ВЫБОР
|			КОГДА СУММА(ТаблицаПоследующихПриходов.СуммаВзаиморасчетов * ВЫБОР
|						КОГДА ТаблицаПоследующихПриходов.ВидДвижения = &ВидДвиженияПриход
|								И ТаблицаПоследующихПриходов.СуммаВзаиморасчетов > 0
|								И ТаблицаПоследующихПриходов.Регистратор <> ОсновнаяТаблицаРегистра.Регистратор
|							ТОГДА 1
|						КОГДА ТаблицаПоследующихПриходов.ВидДвижения <> &ВидДвиженияПриход
|								И ТаблицаПоследующихПриходов.СуммаВзаиморасчетов < 0
|								И ТаблицаПоследующихПриходов.Регистратор <> ОсновнаяТаблицаРегистра.Регистратор
|							ТОГДА -1
|						ИНАЧЕ 0
|					КОНЕЦ) > Остатки.СуммаВзаиморасчетовОстаток
|				ТОГДА 0
|			ИНАЧЕ ВЫБОР
|					КОГДА СУММА(ТаблицаПоследующихПриходов.СуммаВзаиморасчетов * ВЫБОР
|								КОГДА ТаблицаПоследующихПриходов.ВидДвижения = &ВидДвиженияПриход
|										И ТаблицаПоследующихПриходов.СуммаВзаиморасчетов > 0
|									ТОГДА 1
|								КОГДА ТаблицаПоследующихПриходов.ВидДвижения <> &ВидДвиженияПриход
|										И ТаблицаПоследующихПриходов.СуммаВзаиморасчетов < 0
|									ТОГДА -1
|								ИНАЧЕ 0
|							КОНЕЦ) > Остатки.СуммаВзаиморасчетовОстаток
|						ТОГДА СУММА(ВЫБОР
|									КОГДА ОсновнаяТаблицаРегистра.Регистратор = ТаблицаПоследующихПриходов.Регистратор
|										ТОГДА Остатки.СуммаВзаиморасчетовОстаток
|									ИНАЧЕ 0
|								КОНЕЦ) - СУММА(ТаблицаПоследующихПриходов.СуммаВзаиморасчетов * ВЫБОР
|									КОГДА ТаблицаПоследующихПриходов.ВидДвижения = &ВидДвиженияПриход
|											И ТаблицаПоследующихПриходов.СуммаВзаиморасчетов > 0
|											И ОсновнаяТаблицаРегистра.Регистратор <> ТаблицаПоследующихПриходов.Регистратор
|										ТОГДА 1
|									КОГДА ТаблицаПоследующихПриходов.ВидДвижения <> &ВидДвиженияПриход
|											И ТаблицаПоследующихПриходов.СуммаВзаиморасчетов < 0
|											И ОсновнаяТаблицаРегистра.Регистратор <> ТаблицаПоследующихПриходов.Регистратор
|										ТОГДА -1
|									ИНАЧЕ 0
|								КОНЕЦ)
|					ИНАЧЕ СУММА(ОсновнаяТаблицаРегистра.СуммаВзаиморасчетов * ВЫБОР
|								КОГДА ОсновнаяТаблицаРегистра.ВидДвижения = &ВидДвиженияПриход
|										И ОсновнаяТаблицаРегистра.СуммаВзаиморасчетов > 0
|										И ОсновнаяТаблицаРегистра.Регистратор = ТаблицаПоследующихПриходов.Регистратор
|									ТОГДА 1
|								КОГДА ОсновнаяТаблицаРегистра.ВидДвижения <> &ВидДвиженияПриход
|										И ОсновнаяТаблицаРегистра.СуммаВзаиморасчетов < 0
|										И ОсновнаяТаблицаРегистра.Регистратор = ТаблицаПоследующихПриходов.Регистратор
|									ТОГДА -1
|								ИНАЧЕ 0
|							КОНЕЦ)
|				КОНЕЦ
|		КОНЕЦ КАК СуммаОстатокВВалютеВзаиморасчетов
|	ИЗ
|		РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки (&ДатаОтчета, {ДоговорКонтрагента.Владелец.* КАК ДоговорКонтрагентаВладелец, ДоговорКонтрагента.* КАК ДоговорКонтрагента, Сделка.* КАК Сделка}) КАК Остатки
|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
|				ВзаиморасчетыСКонтрагентами.ДоговорКонтрагента КАК ДоговорКонтрагента,
|				ВзаиморасчетыСКонтрагентами.Сделка КАК Сделка,
|				ВзаиморасчетыСКонтрагентами.Период КАК Период,
|				ВзаиморасчетыСКонтрагентами.Регистратор КАК Регистратор,
|				ВзаиморасчетыСКонтрагентами.ВидДвижения КАК ВидДвижения,
|				СУММА(ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетов) КАК СуммаВзаиморасчетов
|			ИЗ
|				РегистрНакопления.ВзаиморасчетыСКонтрагентами КАК ВзаиморасчетыСКонтрагентами
|	 
|	  
|			СГРУППИРОВАТЬ ПО
|				ВзаиморасчетыСКонтрагентами.ДоговорКонтрагента,
|				ВзаиморасчетыСКонтрагентами.Сделка,
|				ВзаиморасчетыСКонтрагентами.Период,
|				ВзаиморасчетыСКонтрагентами.Регистратор,
|				ВзаиморасчетыСКонтрагентами.ВидДвижения) КАК ОсновнаяТаблицаРегистра
|				ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
|					ВзаиморасчетыСКонтрагентами.ДоговорКонтрагента КАК ДоговорКонтрагента,
|					ВзаиморасчетыСКонтрагентами.Сделка КАК Сделка,
|					ВзаиморасчетыСКонтрагентами.Период КАК Период,
|					ВзаиморасчетыСКонтрагентами.Регистратор КАК Регистратор,
|					ВзаиморасчетыСКонтрагентами.ВидДвижения КАК ВидДвижения,
|					СУММА(ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетов) КАК СуммаВзаиморасчетов
|				ИЗ
|					РегистрНакопления.ВзаиморасчетыСКонтрагентами КАК ВзаиморасчетыСКонтрагентами
|				
|				СГРУППИРОВАТЬ ПО
|					ВзаиморасчетыСКонтрагентами.ДоговорКонтрагента,
|					ВзаиморасчетыСКонтрагентами.Сделка,
|					ВзаиморасчетыСКонтрагентами.Период,
|					ВзаиморасчетыСКонтрагентами.Регистратор,
|					ВзаиморасчетыСКонтрагентами.ВидДвижения) КАК ТаблицаПоследующихПриходов
|				ПО ТаблицаПоследующихПриходов.ДоговорКонтрагента = ОсновнаяТаблицаРегистра.ДоговорКонтрагента
|					И ТаблицаПоследующихПриходов.Сделка = ОсновнаяТаблицаРегистра.Сделка
|					И (ТаблицаПоследующихПриходов.Период > ОсновнаяТаблицаРегистра.Период
|						ИЛИ ТаблицаПоследующихПриходов.Период = ОсновнаяТаблицаРегистра.Период
|							И ТаблицаПоследующихПриходов.Регистратор >= ОсновнаяТаблицаРегистра.Регистратор)
|								И (ТаблицаПоследующихПриходов.Период <= &ДатаОтчета)
|					И (ТаблицаПоследующихПриходов.ВидДвижения = &ВидДвиженияПриход
|							И ТаблицаПоследующихПриходов.СуммаВзаиморасчетов > 0
|						ИЛИ ТаблицаПоследующихПриходов.ВидДвижения <> &ВидДвиженияПриход
|							И ТаблицаПоследующихПриходов.СуммаВзаиморасчетов < 0)
|			ПО Остатки.ДоговорКонтрагента = ОсновнаяТаблицаРегистра.ДоговорКонтрагента
|				И Остатки.Сделка = ОсновнаяТаблицаРегистра.Сделка
|				И (ОсновнаяТаблицаРегистра.Период <= &ДатаОтчета)
|				И (ОсновнаяТаблицаРегистра.ВидДвижения = &ВидДвиженияПриход
|						И ОсновнаяТаблицаРегистра.СуммаВзаиморасчетов > 0
|					ИЛИ ОсновнаяТаблицаРегистра.ВидДвижения <> &ВидДвиженияПриход
|						И ОсновнаяТаблицаРегистра.СуммаВзаиморасчетов < 0)
|	ГДЕ
|		Остатки.СуммаВзаиморасчетовОстаток > 0
|	
|	СГРУППИРОВАТЬ ПО
|		Остатки.ДоговорКонтрагента,
|		Остатки.Сделка,
|		ОсновнаяТаблицаРегистра.Период,
|		ОсновнаяТаблицаРегистра.Регистратор,
|		Остатки.СуммаВзаиморасчетовОстаток) КАК Дебиторка
|ГДЕ
|	Дебиторка.СуммаОстатокВВалютеВзаиморасчетов > 0
|{ГДЕ
|	Дебиторка.ДоговорКонтрагента.Владелец.* КАК Контрагент,
|	Дебиторка.ДоговорКонтрагента.* КАК ДоговорКонтрагента,
|	Дебиторка.Сделка.* КАК Сделка,
|	Дебиторка.РасчетнаяДата,
|	Дебиторка.РасчетныйДокумент.*,
|	ВЫБОР
|			КОГДА НАЧАЛОПЕРИОДА(Дебиторка.РасчетнаяДата, ДЕНЬ) > КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(&ДатаОтчета, ДЕНЬ, -(Дебиторка.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности - 1)), ДЕНЬ)
|				ТОГДА Дебиторка.СуммаОстатокВВалютеВзаиморасчетов
|			ИНАЧЕ 0
|		КОНЕЦ КАК ДолгВКредите,
|	ВЫБОР
|			КОГДА НАЧАЛОПЕРИОДА(Дебиторка.РасчетнаяДата, ДЕНЬ) МЕЖДУ НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&ДатаОтчета, ДЕНЬ, -Дебиторка.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности), ДЕНЬ) И КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(&ДатаОтчета, ДЕНЬ, -Дебиторка.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности), ДЕНЬ)
|				ТОГДА Дебиторка.СуммаОстатокВВалютеВзаиморасчетов
|			ИНАЧЕ 0
|		КОНЕЦ КАК ДолгВыплСегодня,
|	ВЫБОР
|			КОГДА НАЧАЛОПЕРИОДА(Дебиторка.РасчетнаяДата, ДЕНЬ) < КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(&ДатаОтчета, ДЕНЬ, -Дебиторка.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности), ДЕНЬ)
|				ТОГДА Дебиторка.СуммаОстатокВВалютеВзаиморасчетов
|			ИНАЧЕ 0
|		КОНЕЦ КАК ДолгПросроченный,
|	ВЫБОР
|			КОГДА НАЧАЛОПЕРИОДА(Дебиторка.РасчетнаяДата, ДЕНЬ) МЕЖДУ НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&ДатаОтчета, ДЕНЬ, -(Дебиторка.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности - 1)), ДЕНЬ) И КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(&ДатаОтчета, ДЕНЬ, -(Дебиторка.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности - 1)), ДЕНЬ)
|				ТОГДА Дебиторка.СуммаОстатокВВалютеВзаиморасчетов
|			ИНАЧЕ 0
|		КОНЕЦ КАК ДолгЗаДеньДоВыплаты,
|	Дебиторка.СуммаОстатокВВалютеВзаиморасчетов КАК ДолгОбщий}
|
|СГРУППИРОВАТЬ ПО
|	Дебиторка.ДоговорКонтрагента.Владелец,
|	Дебиторка.ДоговорКонтрагента
|{УПОРЯДОЧИТЬ ПО
|	Дебиторка.ДоговорКонтрагента.Владелец.* КАК Контрагент,
|	Дебиторка.Сделка.* КАК Сделка,
|	Дебиторка.РасчетныйДокумент.* КАК РасчетныйДокумент,
|	Дебиторка.РасчетнаяДата}
|ИТОГИ
|	СУММА(ДолгВКредите),
|	СУММА(ДолгЗаДеньДоВыплаты),
|	СУММА(ДолгВыплСегодня),
|	СУММА(ДолгПросроченный),
|	СУММА(ДолгОбщий)
|ПО
|	ОБЩИЕ,
|	Контрагент,
|	Дебиторка.ДоговорКонтрагента
|{ИТОГИ ПО
|	Дебиторка.ДоговорКонтрагента.Владелец.* КАК Контрагент,
|	Дебиторка.ДоговорКонтрагента.ВалютаВзаиморасчетов.* КАК ВалДог,
|	Дебиторка.ДоговорКонтрагента.*,
|	Дебиторка.Сделка.*,
|	Дебиторка.РасчетныйДокумент,
|	Дебиторка.РасчетнаяДата}
|АВТОУПОРЯДОЧИВАНИЕ";
 
U

unknown181538

1)Попробуйте использовать одну таблицу ОстаткиИОбороты с периодичностью по регистратору.
2) "ТаблицаПоследующихПриходов.Регистратор >= ОсновнаяТаблицаРегистра.Регистратор" - это неправильно:)) К тому же может тормозить дополнительно, т.к. регистратор - сложное явление.
3) ОсновнаяТаблицаРегистра и ТаблицаПоследующихПриходов. Не нашел различия. Засунуть во временную таблицу.
4) Использовать пакетные запросы - легче будет читать.

Короче, переписывайте :)
 
U

unknown181538

хотя насчет остаткиИОбороты я, возможно, погорячился.
В конфе должны быть возможности по ведению учета в разрезе документов. Не исключено, что запрос к движениям сделать быстрым никак нельзя.
 
M

Mashino4ka

Спасибо за ответ, мне не нравится, что он формируется в течении 10 минут, каждый раз ждать 10 минут, накладно!((

А последний раз 1с попросту зависла)
 
M

Mashino4ka

А может ещё что то можно предпринять?Кстати база 2010 года, т.е доки все от 2010 года!
 
T

tanat

А период вы, пардон, где задаете? На какое поле накладываете ограничение?
Думается мне проблема не в отчете, а в настройках, которые вы задаете. Скрин выложите. Обсудим.

И если уж вам надо выводить информацию о документах то лучше было бы использовать не регистр "Взаиморасчеты контарегнтов" а "взаиморасчеты с контрагентами по документам расчетов". тогда уж точно смогли бы видеть, по какому документу у вас "висит" дебиторка.
 
U

unknown181538

Вообще, быстрее будут считываться остатки на текущую (пустую) дату. Зачем его задним числом формировать?*
 
M

Mashino4ka

так у меня отчет и есть на текущую дату...т.е на текущее число. А ещё я пробовала сделать период (т.е отчет был не на определённую дату, а с периодом), так вот за месяц, за 2, формирование проходит быстро, а если делать период больше то долго. Но это оказалось неудобно. Поэтому отчет формируется на текущую дату.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!