0. Ish_2 1028 13.01.10 15:20 Сейчас в теме

БП1.6. Просроченная задолженность по 62 счету. Продолжение разговора

Свободное скачивание.
Для бухгалтера : подробный отчет о просроченных долгах контрагентов по 62 счету.
Для программиста : как одним запросом получить выходную таблицу просроченных долгов ? Развитие темы "Подведем итоги. Нарастающие" http://infostart.ru/public/61295/

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. ValeriTim 20 14.01.10 10:21 Сейчас в теме
Вот действительно классный отчет с отличной реализацией. Можно было бы поставить +10 - поставил бы :!:
2. anig99 2674 16.01.10 20:18 Сейчас в теме
гыгы... плюсы за идею уже ставил... отчет может и хороший, но я такие не юзаю, поэтому ничего пока не поставлю....(:
3. Ish_2 1028 16.01.10 23:16 Сейчас в теме
4. мсе 18.01.10 11:43 Сейчас в теме
Очень приятно, что можно увидеть дату возникновения задолженности.
6. Ish_2 1028 18.01.10 17:43 Сейчас в теме
(5) Да , ладно ,Женя. Чего там..
9. bb1962 2195 20.01.10 09:53 Сейчас в теме
(0) > такая задача может быть решена без кодинга при помощи одного пакета запросов
Всегда ли это хорошо? По этому пути идут разработчики 1С, но каково потом вносить изменения в эти "многоэтажные запросы".
10. Ish_2 1028 20.01.10 11:31 Сейчас в теме
(9) Вопрос закономерный : Всегда ли это хорошо ?

Для данной конкретной задачи - считаю , что ДА.

1. Переносим всю обработку на Сервер БД(отвязываемся от слабости клиента).

2. Для больших БД такой подход более эффективен (обладает высоким быстродействием), чем кодинг.

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

11. KapasMordorov 428 20.01.10 12:33 Сейчас в теме
(9)
(10)
Я тут sql.ru пошарил.
Вроде бы ФИФО запросами они там сделали.
Но пришли к выводу, что цикл в хранимой процедуре быстрее.
12. Ish_2 1028 20.01.10 12:53 Сейчас в теме
(11) Речь идет методе списания ФИФО ?
Эффективность реализации метода списания ФИФО - как "все в одном запросе", разумеется, будет определяться по результатам тестирования и сравнения. На SQL.ru я задавал этот вопрос . Кроме общих скептических соображений ничего не услышал и ссылок никто не привел.
Пока речь идет лишь о решениии некоей абстрактной задачи
http://infostart.ru/public/63048/?PAGEN_1=3#comm340515
13. KapasMordorov 428 20.01.10 13:37 Сейчас в теме
Сегодня НДС и не помню какой текст в яндексе вчера набирал для поиска. Попадаю в другую ветку sql.ru
Будет время, поищу
14. I_G_O_R 57 23.01.10 20:47 Сейчас в теме
Зачем запрос отдельно от СКД?
15. Ish_2 1028 23.01.10 22:40 Сейчас в теме
(14) Заметил -таки.
Вначале я планировал так :
Наборы данных :
Первый - это сам запрос.
Второй - это таблица интервалов дней ( вводится пользователем), каждая строка которой содержит два значения "с" и "по" .
Делаем левое соединение и ОК.
Но левое соединение в СКД предполагает только соединения по равенству.
Моё же левое соединение должно быть по условию вхождения в интервал
> "с" и <="до" (двойное неравенство).
Поэтому пришлось всё делать вне СКД.

А ты еще помнишь тему "Языком запросов раздать N яблок M складам"
http://infostart.ru/public/21564/
Ноги третьего абзаца "для любопытных" растут из неё .
16. I_G_O_R 57 23.01.10 23:01 Сейчас в теме
да я давно заметил, просто сказать было нечего, да и посмотрел только

а в чем проблема соединение делать в запросе и использовать один набор данны?
СтрЗаменить - тоже не нравится, я бы все-таки сделал полностью в СКД, в настройках бы добавил отборы, но включал их только если значения заполнены


Ноги третьего абзаца
- не понял что это

17. Ish_2 1028 23.01.10 23:34 Сейчас в теме
(16)
В одном наборе данных , т.е. в одном запросе в СКД нельзя использовать данные из внешнего источника.
Т.е. тот запрос из текста как есть в СКД не засунешь, т.к. он содержит
&ВнешнийИсточник.

Третий абзац текущей темы "Для любопытных" содержит описание задачи
списания по ФИФО.
В первый раз я описал эту задачу в коммментарии № 8 твоей темы про яблоки.
18. nikola_piter 24.01.10 00:15 Сейчас в теме
19. I_G_O_R 57 24.01.10 13:31 Сейчас в теме
а задача с периодами решается вообще в режиме предприятие с помощью пользовательских полей или таким запросом
ВЫБРАТЬ
	1 КАК НомерИнтервала,
	1 КАК НачалоИнтервала,
	7 КАК КонецИнтервала,
	"от 1 до 7 дней" КАК ИмяИнтервала
ПОМЕСТИТЬ ТабИнтервалы

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

ВЫБРАТЬ
	2,
	8,
	15,
	"от 8 до 15 дней"

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

ВЫБРАТЬ
	3,
	16,
	30,
	"от 16 до 30 дней"
;
Показать
Прикрепленные файлы:
20. Ish_2 1028 24.01.10 15:03 Сейчас в теме
(19) Такой подход к пострению в запроса оправдан, если интервалы вечны и неизменны.Но так как пользователь должен произвольно назначать интервалы , то такой путь построения запроса сомнителен.

А на скриншоте у тебя показано то же,что и в моём отчете по кнопке "интервалы". Т.е. пользователь интерактивно заполняет таблицу интервалов, которая потом через параметр &ВнешнийИсточник используется в запросе.
21. WKBAPKA 212 24.01.10 16:39 Сейчас в теме
22. Ish_2 1028 24.01.10 20:35 Сейчас в теме
(21) Георгий, ты конструктивен. И лаконичен.
(19) Не сразу понял , что ты вел речь о настройке в типовых отчетах для СКД.
23. WKBAPKA 212 24.01.10 21:10 Сейчас в теме
Вот запрос который решает проблему для меня в УТ, правда при обходе нужно расчитать коэффициент. Кстати, может укажите мне на мои ошибки:
ВЫБРАТЬ
	ВзаиморасчетыСКонтрагентами.Регистратор КАК Регистратор,
	ВзаиморасчетыСКонтрагентами.Сделка КАК Сделка,
	ВзаиморасчетыСКонтрагентами.Контрагент.ГоловнойКонтрагент КАК ГоловнойКонтрагент,
	ВзаиморасчетыСКонтрагентами.ДоговорКонтрагента КАК ДоговорКонтрагента,
	ВзаиморасчетыСКонтрагентами.ДокументРасчетовСКонтрагентом КАК ДокументРасчетовСКонтрагентом,
	ВзаиморасчетыСКонтрагентами.Контрагент.ГоловнойКонтрагент.ОсновнойМенеджерПокупателя КАК Менеджер,
	ЕСТЬNULL(ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетовНачальныйОстаток, 0) КАК СуммаВзаиморасчетовНачальныйОстаток,
	ЕСТЬNULL(ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетовКонечныйОстаток, 0) КАК СуммаВзаиморасчетовКонечныйОстаток,
	ЕСТЬNULL(ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетовОборот, 0) КАК СуммаВзаиморасчетовОборот,
	ВЫБОР
		КОГДА ВзаиморасчетыСКонтрагентами.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
				И ВзаиморасчетыСКонтрагентами.Регистратор.Дата >= &Дата1
			ТОГДА ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетовОборот
	КОНЕЦ КАК СуммаРеализацияТовара,
	ВЫБОР
		КОГДА (ВзаиморасчетыСКонтрагентами.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеВходящее
				ИЛИ ВзаиморасчетыСКонтрагентами.Регистратор ССЫЛКА Документ.ПриходныйКассовыйОрдер)
				И ВзаиморасчетыСКонтрагентами.Регистратор.Дата >= &Дата1
			ТОГДА ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетовОборот
	КОНЕЦ КАК СуммаОплатыТовара,
	ВЫБОР
		КОГДА ВзаиморасчетыСКонтрагентами.Регистратор ССЫЛКА Документ.ВозвратТоваровОтПокупателя
				И ВзаиморасчетыСКонтрагентами.Регистратор.Дата >= &Дата1
			ТОГДА ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетовОборот
	КОНЕЦ КАК СуммаВозвратаТовара,
	ВЫБОР
		КОГДА ВзаиморасчетыСКонтрагентами.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
				И ВзаиморасчетыСКонтрагентами.Регистратор.Дата >= &Дата1
			ТОГДА ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетовОборот
	КОНЕЦ КАК СуммаПоступленияТовараПоставщик,
	ВЫБОР
		КОГДА (ВзаиморасчетыСКонтрагентами.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеИсходящее
				ИЛИ ВзаиморасчетыСКонтрагентами.Регистратор ССЫЛКА Документ.РасходныйКассовыйОрдер)
				И ВзаиморасчетыСКонтрагентами.Регистратор.Дата >= &Дата1
			ТОГДА ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетовОборот
	КОНЕЦ КАК СуммаОплатыТовараПоставщик,
	ВЫБОР
		КОГДА ВзаиморасчетыСКонтрагентами.Регистратор ССЫЛКА Документ.ВозвратТоваровПоставщику
				И ВзаиморасчетыСКонтрагентами.Регистратор.Дата >= &Дата1
			ТОГДА ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетовОборот
	КОНЕЦ КАК СуммаВозвратаТовараПоставщик,
	ВЫБОР
		КОГДА ВзаиморасчетыСКонтрагентами.Регистратор ССЫЛКА Документ.КорректировкаДолга
				И ВзаиморасчетыСКонтрагентами.Регистратор.Дата >= &Дата1
			ТОГДА ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетовОборот
	КОНЕЦ КАК СуммаКорректировкиДолга,
	ВЫБОР
		КОГДА ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетовКонечныйОстаток < 0
			ТОГДА ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетовКонечныйОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК Предоплата,
	ВЫБОР
		КОГДА ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетовКонечныйОстаток > 0
			ТОГДА ВЫБОР
					КОГДА РАЗНОСТЬДАТ(ВзаиморасчетыСКонтрагентами.ДокументРасчетовСКонтрагентом.Дата, &Дата2, ДЕНЬ) <= ВзаиморасчетыСКонтрагентами.Контрагент.ДопустимоеЧислоДнейЗадолженности
						ТОГДА ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетовКонечныйОстаток
					ИНАЧЕ 0
				КОНЕЦ
		ИНАЧЕ 0
	КОНЕЦ КАК Текущая,
	ВЫБОР
		КОГДА ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетовКонечныйОстаток > 0
			ТОГДА ВЫБОР
					КОГДА РАЗНОСТЬДАТ(ВзаиморасчетыСКонтрагентами.ДокументРасчетовСКонтрагентом.Дата, &Дата2, ДЕНЬ) > ВзаиморасчетыСКонтрагентами.Контрагент.ДопустимоеЧислоДнейЗадолженности
							И РАЗНОСТЬДАТ(ВзаиморасчетыСКонтрагентами.ДокументРасчетовСКонтрагентом.Дата, &Дата2, ДЕНЬ) <= ВзаиморасчетыСКонтрагентами.Контрагент.ДопустимоеЧислоДнейЗадолженности + &ЧислоДней
						ТОГДА ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетовКонечныйОстаток
					ИНАЧЕ 0
				КОНЕЦ
		ИНАЧЕ 0
	КОНЕЦ КАК Лояльная,
	ВЫБОР
		КОГДА ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетовКонечныйОстаток > 0
			ТОГДА ВЫБОР
					КОГДА РАЗНОСТЬДАТ(ВзаиморасчетыСКонтрагентами.ДокументРасчетовСКонтрагентом.Дата, &Дата2, ДЕНЬ) > ВзаиморасчетыСКонтрагентами.Контрагент.ДопустимоеЧислоДнейЗадолженности + &ЧислоДней
						ТОГДА ВзаиморасчетыСКонтрагентами.СуммаВзаиморасчетовКонечныйОстаток
				КОНЕЦ
	КОНЕЦ КАК Просроченная
ИЗ
	РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ОстаткиИОбороты(&Дата1, &Дата2, Регистратор, Движения, Контрагент В ИЕРАРХИИ (&Параметр1)) КАК ВзаиморасчетыСКонтрагентами
ГДЕ
	ВзаиморасчетыСКонтрагентами.ДоговорКонтрагента.БонусДилера = ЛОЖЬ

УПОРЯДОЧИТЬ ПО
	ВзаиморасчетыСКонтрагентами.Сделка.Дата,
	ВзаиморасчетыСКонтрагентами.ДокументРасчетовСКонтрагентом.Дата
ИТОГИ
	СУММА(СуммаВзаиморасчетовНачальныйОстаток),
	СУММА(СуммаВзаиморасчетовКонечныйОстаток),
	СУММА(СуммаВзаиморасчетовОборот),
	СУММА(СуммаРеализацияТовара),
	СУММА(СуммаОплатыТовара),
	СУММА(СуммаВозвратаТовара),
	СУММА(СуммаПоступленияТовараПоставщик),
	СУММА(СуммаОплатыТовараПоставщик),
	СУММА(СуммаВозвратаТовараПоставщик),
	СУММА(СуммаКорректировкиДолга),
	СУММА(Текущая),
	СУММА(Лояльная),
	СУММА(Просроченная)
ПО
	ОБЩИЕ,
	ГоловнойКонтрагент ИЕРАРХИЯ КАК ГоловнойКонтрагент,
	ДоговорКонтрагента КАК ДоговорКонтрагента,
	Сделка КАК Сделка,
	ДокументРасчетовСКонтрагентом КАК ДокументРасчетовСКонтрагентом,
	Регистратор КАК Регистратор


Показать
24. I_G_O_R 57 25.01.10 00:27 Сейчас в теме
(23)
ГДЕ 
   ВзаиморасчетыСКонтрагентами.ДоговорКонтрагента.БонусДилера = ЛОЖЬ
- это нужно запихать в параметры виртуальной таблицы, но как я понимаю, таких договоров большинство, так что скорости скорее всего не сильно прибавит.
ОстаткиИОбороты - сама по себе очень тормозная таблица, смотрел в MS SQL Profiler, 1С генерирует кучу запросов;
еще нужно заменить
ВзаиморасчетыСКонтрагентами.Регистратор.Дата
на
ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентами.Регистратор КАК Документ.РеализацияТоваровУслуг).Дата

- это из базы знаний 1С http://kb.1c.ru/articleView.jsp?id=44#dot_after_component_type
25. Ish_2 1028 25.01.10 07:35 Сейчас в теме
(23) Скажи , Георгий , зависит ли правильность результата отчета от последовательности проведения документов ?
26. WKBAPKA 212 25.01.10 09:52 Сейчас в теме
2(25): меня зовут не Георгий, а Ярослав...
я так понимаю, что речь идет о дате возникновения долга... прежде всего, я пользуюсь регистром "Взаиморасчеты с контрагентами по документам расчета". Этот регистр, насколько я понял, используется только тогда, когда для договора контрагента установлен признак "Вести учет по документам расчетов". Т.к. я для себя установил такой признак для всех, то соответственно я использую измерения "Документ расчетов с контрагентом" в качестве отправной точки для расчета задолженности. В этом случае для меня последовательность не важна, т.к. фактически я получаю сальдо по этому измерению, а не по регистратору. А т.к. на предприятии в 99% случаев всегда идет цепочка Заказ - Расход то в моем случае задача упрощается...
помучаться пришлось с одним, и то, потому как туповат стал... результат запрос по виртуальным показателям по каждой группировке суммируется, чем больше регисраторов тем в большее количество раз, соответственно, при обходе пришлось брать полученный результат делить на конечный долг, получать коэффициент и уже после этого делить полученный результат на этот коэффициент...
28. Ish_2 1028 25.01.10 09:56 Сейчас в теме
29. WKBAPKA 212 25.01.10 10:00 Сейчас в теме
как бы задача решилась, но не приятный остаток остался ...
2(28): скажите, а манипулирование виртуальными таблицами, кроме хранения промежуточных результатов, что дает?
например, могу ли я выполнить запрос с подсчетом итогов с помощью предложения "ИТОГИ ПО", поместить результат в виртуальную таблицу, и в другом запросе обратиться к этому результату, выбрать необходимые данные и опять подсчитать итоги... или виртуальные таблицы просто позволяют делить большие запросы на подзапросы с последовательным (каскадным) исполнением, и предназначены сугубо для оптимизации?
31. Ish_2 1028 25.01.10 10:04 Сейчас в теме
(29) Кажется не совру , если скажу :
Предложение "ИТОГИ" нельзя использовать при помещении результата во временную таблицу (опция ПОМЕСТИТЬ)
32. Ish_2 1028 25.01.10 10:05 Сейчас в теме
(29)
виртуальные таблицы просто позволяют делить большие запросы на подзапросы с последовательным (каскадным) исполнением, и предназначены сугубо для оптимизации?


Согласен.
35. tango 488 25.01.10 10:13 Сейчас в теме
(29),(31)
Прикрепленные файлы:
37. WKBAPKA 212 25.01.10 10:17 Сейчас в теме
2(35): логично, если использовать таблицу значений... есть один нюанс, по крайней мере у меня не получалось, если поле составного типа, то запрос к такой таблице значений не будет работать... требует исключительно типизированные поля...
и еще, и желательно индексировать поля ТЗ, иначе медленно работает
38. Ish_2 1028 25.01.10 10:25 Сейчас в теме
(35) Ты привёл пример как обойти ограничение : невозможность совместного использования опций ИТОГИ и ПОМЕСТИТЬ.
Но разумнее , мне кажется, подход , где используется две врем. таблицы :
1. Запрос без итогов
2. Запрос с опцией СГРУППИРОВАТЬ
30. Ish_2 1028 25.01.10 10:02 Сейчас в теме
(26) Можно сказать , что решение тобой предлагаемое - частное.
Т.е. в случае если не установлен флаг "Вести учет по документам расчетов", то предложенный тобой алгоритм неприменим при нарушении псоледовательности.


33. WKBAPKA 212 25.01.10 10:08 Сейчас в теме
2(30): совершенно верно... это сильно упростило задачу... дело в том, что в типовой сделали закрытие реализации по фифо в платежных документах, но только для этого регистра, грех было не воспользоваться...
34. Ish_2 1028 25.01.10 10:11 Сейчас в теме
(33) Ты договаривай до конца : объем данных регистра после установки расчета по документам резко вырос.
36. WKBAPKA 212 25.01.10 10:13 Сейчас в теме
2(34): ыщо пока не проверял... но если учитывать туеву кучу регистров, что натулили в типовой, добавление еще одного регистра особо как то не повлияет на скорострельность...
но по скорости роста базы, прирост не значителен...
27. WKBAPKA 212 25.01.10 09:52 Сейчас в теме
39. Dimel 30.04.10 05:33 Сейчас в теме
Спасибо - хороший отчет только мелкий косячок в запрос передается дата конца дня а при работе с таблицей остатков надо бы границу ;)
40. ivan07 27.01.12 13:59 Сейчас в теме
Спасибо, воспользовался вашим отчетом, все отлично
41. Motor24 06.12.12 11:31 Сейчас в теме
Скачал, спасибо, надеюсь на БП 2.0 (8.2) переконвертируется нормально.
43. Ish_2 1028 16.04.14 19:22 Сейчас в теме
(42) Здесь скорее интерес для программиста.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Работа от Инфостарт
Санкт-Петербург
Временный (на проект)

Программист 1С
Новосибирск
зарплата от 80 000 руб.
Полный день

Руководитель отдела внедрения 1С
Новосибирск
зарплата от 60 000 руб. до 160 000 руб.
Полный день

Ведущий программист 1С
Москва
зарплата от 120 000 руб. до 150 000 руб.
Полный день

Программист - консультант 1С
Москва
Полный день