|
Помогите придумать формулу из запроса | ☑ | ||
---|---|---|---|---|
0
Обработка
09.12.23
✎
09:35
|
Есть запрос из бухитогов. В нем 3 временных таблицы - данные за 3 периоды которые стоят один за другим по датам. Необходимо вычислить долги образованные за эти 3 периода и 4й это до первого. Речь идет дебеторка по договорам и по счетам.
Вот часть запроса: ВЫБРАТЬ ВТ1.Счет КАК Счет, ВТ1.Договор КАК Договор, ВТ3.СНД КАК СНД1, ВТ3.ДО КАК ДО1, ВТ3.КО КАК КО1, ВТ3.СКД КАК СКД1, ВТ2.СНД КАК СНД2, ВТ2.ДО КАК ДО2, ВТ2.КО КАК КО2, ВТ2.СКД КАК СКД2, ВТ1.СНД КАК СНД3, ВТ1.ДО КАК ДО3, ВТ1.КО КАК КО3, ВТ1.СКД КАК СКД3 ПОМЕСТИТЬ ВТ4 ИЗ ВТ1 КАК ВТ1 ПОЛНОЕ СОЕДИНЕНИЕ ВТ2 КАК ВТ2 ПО ВТ1.Счет = ВТ2.Счет И ВТ1.Договор = ВТ2.Договор ПОЛНОЕ СОЕДИНЕНИЕ ВТ3 КАК ВТ3 ПО ВТ1.Счет = ВТ3.Счет И ВТ1.Договор = ВТ3.Договор |
|||
1
Обработка
09.12.23
✎
09:36
|
Вот так пытаюсь пока но полка не се верно:
ВЫБРАТЬ ВТ4.Счет, ВТ4.Договор, ВЫБОР КОГДА ВТ4.СНД1 = 0 ТОГДА 0 ИНАЧЕ ВЫБОР КОГДА ВТ4.СНД1 - (ВТ4.ДО1 + ВТ4.ДО2 + ВТ4.ДО3) - (ВТ4.КО1 + ВТ4.КО2 + ВТ4.КО3) > 0 ТОГДА ВТ4.СНД1 - (ВТ4.ДО1 + ВТ4.ДО2 + ВТ4.ДО3) - (ВТ4.КО1 + ВТ4.КО2 + ВТ4.КО3) ИНАЧЕ 0 КОНЕЦ КОНЕЦ КАК Больше3лет, ВЫБОР КОГДА ВТ4.СНД2 = 0 ТОГДА 0 ИНАЧЕ ВЫБОР КОГДА ВТ4.СНД2 - (ВТ4.ДО2 + ВТ4.ДО3) - (ВТ4.КО2 + ВТ4.КО3) > 0 ТОГДА ВТ4.СНД2 - (ВТ4.ДО2 + ВТ4.ДО3) - (ВТ4.КО2 + ВТ4.КО3) ИНАЧЕ 0 КОНЕЦ КОНЕЦ КАК ОтГодаДо3лет, ВЫБОР КОГДА ВТ4.СНД3 = 0 ТОГДА 0 ИНАЧЕ ВЫБОР КОГДА ВТ4.СНД3 - ВТ4.ДО3 - ВТ4.КО3 > 0 ТОГДА ВТ4.СНД3 - ВТ4.ДО3 - ВТ4.КО3 ИНАЧЕ 0 КОНЕЦ КОНЕЦ КАК От3месДо1Года ИЗ ВТ4 КАК ВТ4 |
|||
2
PLUT
09.12.23
✎
09:42
|
||||
3
Обработка
09.12.23
✎
09:47
|
(2) У меня старая перепаханная БП2 и в нем не включен флаг учета взаиморасчета по документам. Я озвучивал бухам это.
Плюс у нас отборы разные по счетам и по договорам и по категориям договоров. И как назло база вести 1 ТБ и за период 13 лет. ( |
|||
4
Обработка
09.12.23
✎
09:59
|
Если не осилю формулу внедрю наверно новы регистр накопления и перепроведу только по этому регистру. Или придется ввод остатков сделать.
|
|||
5
Обработка
09.12.23
✎
10:01
|
Бухи собирают задолженность возникшее:
1. до 3 мес 2. от 3 мес до 1 года 3. От 1 года до 3 лет 4. Более 3 лет Вроде отчет сделал и сдал еще 3-4 месяца назад но оказалось ошибки есть. |
|||
6
Лирик
09.12.23
✎
11:20
|
В свое время делал Отчет по срокам задолженности при отключенных расчетах по документам. Технология следующая:
В первую временную таблицу собираем остатки задолженности клиента в нужных разрезах (Контрагент, Договор) Контрагент СуммаДолга ООО РиК 10000 ИП Иванов 20000 Во вторую ВТ собираем "увеличения долга" по этим же разрезам + дата возникновения задолженности (ДатаВозникновения). Контрагент ДатаВозникновения УвеличениеДолга ООО РиК 01.01.2023 1600 ООО РиК 10.01.2023 6800 ООО РиК 20.01.2023 2500 ООО РиК 25.01.2023 4000 ИП Иванов 03.01.2023 3000 ИП Иванов 18.01.2023 18000 ИП Иванов 30.01.2023 8000 Вторую ВТ соединяем саму с собой по условиям равенства основных разрезов и "ВТ.ДатаВозникновения > ВТ1.ДатаВозникновения" и группируем суммы увеличения долга из первой таблицы по МАКС из второй по СУММА Контрагент ДатаВозник УвДолга УвДолга1 ООО РиК 01.01.2023 1600 13300 ООО РиК 10.01.2023 6800 6500 ООО РиК 20.01.2023 2500 4000 ООО РиК 25.01.2023 4000 0 ИП Иванов 03.01.2023 3000 26000 ИП Иванов 18.01.2023 18000 8000 ИП Иванов 30.01.2023 8000 0 Соединяем полученный результат с долгом Контрагент ДатаВозник УвДолга Накоплено Долг ООО РиК 01.01.2023 1600 13300 10000 ООО РиК 10.01.2023 6800 6500 10000 ООО РиК 20.01.2023 2500 4000 10000 ООО РиК 25.01.2023 4000 0 10000 ИП Иванов 03.01.2023 3000 26000 20000 ИП Иванов 18.01.2023 18000 8000 20000 ИП Иванов 30.01.2023 8000 0 20000 Убираем строки где Накоплено > Долг и вычисляем ДолгНаДату = МИН(УвДолга, Долг-Накоплено) Контрагент ДатаВозник ДолгНаДату ООО РиК 10.01.2023 3500 ООО РиК 20.01.2023 2500 ООО РиК 25.01.2023 4000 ИП Иванов 18.01.2023 12000 ИП Иванов 30.01.2023 8000 Итого мы получили таблицу с задолженностями по датам. Я из основных разрезов оставил только Контрагента, для экономии места. Собрать из такой таблицы долг по периодам не составляет труда. |
|||
7
Обработка
09.12.23
✎
11:45
|
Я вот сейчас изучаю типовой отчет.
Хочу под себя переделать если получится. Хорошо что там можно поменять периоды. И счета тоже настроить. |
|||
8
Обработка
09.12.23
✎
11:46
|
(6) Идея не плохая тем более похож на типовую.
Но не громоздко ли? Или не будет медленно и долго? |
|||
9
Гена
09.12.23
✎
12:05
|
(6) А обратный перебор в прошлое невозможен в 1С?
Ведь гораздо проще получить результат: ООО РиК 25.01.2023 4000 ... 10000-4000 = 6000 ООО РиК 20.01.2023 2500 ... 6000-2500 = 3500 ООО РиК 10.01.2023 3500 ... 3500 - 6800 Если нет, то нельзя тупо год уменьшить на единицу, а потом вернуть? ООО РиК 01.01.2023 1600 ООО РиК 10.01.2022 6800 ООО РиК 20.01.2021 2500 ООО РиК 25.01.2020 4000 | ООО РиК 25.01.2020 4000 ООО РиК 20.01.2021 2500 ООО РиК 10.01.2022 6800 ООО РиК 01.01.2023 1600 |
|||
10
Гена
09.12.23
✎
12:20
|
Или, если много движений в одном дне, то сначала:
Дата() = 01.01.2030 - Дата() А после опять: Дата() = 01.01.2030 - Дата() |
|||
11
Лирик
09.12.23
✎
12:57
|
(8) Работает уже несколько лет, быстродействие удовлетворительное. Используется таблица оборотов и остатков.
Данные взяты из регистра Взаиморасчеты, но можно взять откуда угодно, в том числе и из регистра бухгалтерии. Главное правильно сформировать 2 первые ВТ. Остальное техника. Вот пример запроса: "ВЫБРАТЬ | ВзаиморасчетыСКонтрагентамиОстатки.Контрагент, | СУММА(ВзаиморасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток) КАК СуммаДолга |ПОМЕСТИТЬ ДолгиКонтрагентов |ИЗ | РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки КАК ВзаиморасчетыСКонтрагентамиОстатки | |СГРУППИРОВАТЬ ПО | ВзаиморасчетыСКонтрагентамиОстатки.Контрагент | |ИМЕЮЩИЕ | СУММА(ВзаиморасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток) > 0 |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВзаиморасчетыСКонтрагентамиОбороты.Контрагент, | КОНЕЦПЕРИОДА(ВзаиморасчетыСКонтрагентамиОбороты.Период, ДЕНЬ) КАК ДатаВозникновения, | СУММА(ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовПриход) КАК УвеличениеДолга |ПОМЕСТИТЬ УвеличениеДолгов |ИЗ | РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты( | , | , | Регистратор, | Контрагент В | (ВЫБРАТЬ | ДолгиКонтрагентов.Контрагент | ИЗ | ДолгиКонтрагентов КАК ДолгиКонтрагентов)) КАК ВзаиморасчетыСКонтрагентамиОбороты | |СГРУППИРОВАТЬ ПО | ВзаиморасчетыСКонтрагентамиОбороты.Контрагент, | КОНЕЦПЕРИОДА(ВзаиморасчетыСКонтрагентамиОбороты.Период, ДЕНЬ) | |ИМЕЮЩИЕ | СУММА(ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовПриход) > 0 |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | УвеличениеДолгов.Контрагент, | УвеличениеДолгов.ДатаВозникновения, | МАКСИМУМ(УвеличениеДолгов.УвеличениеДолга) КАК УвеличениеДолга, | СУММА(ЕСТЬNULL(УвеличениеДолгов1.УвеличениеДолга, 0)) КАК НакопленныйДолг |ПОМЕСТИТЬ ТаблицаСНакоплением |ИЗ | УвеличениеДолгов КАК УвеличениеДолгов | ЛЕВОЕ СОЕДИНЕНИЕ УвеличениеДолгов КАК УвеличениеДолгов1 | ПО УвеличениеДолгов.Контрагент = УвеличениеДолгов1.Контрагент | И УвеличениеДолгов.ДатаВозникновения > УвеличениеДолгов1.ДатаВозникновения | |СГРУППИРОВАТЬ ПО | УвеличениеДолгов.Контрагент, | УвеличениеДолгов.ДатаВозникновения |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТаблицаСНакоплением.Контрагент, | ТаблицаСНакоплением.ДатаВозникновения, | ВЫБОР | КОГДА ТаблицаСНакоплением.НакопленныйДолг + ТаблицаСНакоплением.УвеличениеДолга > ДолгиКонтрагентов.СуммаДолга | ТОГДА ДолгиКонтрагентов.СуммаДолга - ТаблицаСНакоплением.НакопленныйДолг | ИНАЧЕ ТаблицаСНакоплением.УвеличениеДолга | КОНЕЦ КАК ДолгНаДату |ИЗ | ТаблицаСНакоплением КАК ТаблицаСНакоплением | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДолгиКонтрагентов КАК ДолгиКонтрагентов | ПО ТаблицаСНакоплением.Контрагент = ДолгиКонтрагентов.Контрагент |ГДЕ | ДолгиКонтрагентов.СуммаДолга >= ТаблицаСНакоплением.НакопленныйДолг" |
|||
12
Лирик
09.12.23
✎
13:06
|
(9) Это не понял
(10) Таблица "Увеличений долга" сворачивается по дате (суммы увеличения долга суммируются). (8) У меня вообще рассчитывается долг по документам, правда я беру обороты из таблицы продаж по документу продажи (ну задача была такая, показать за какую накладную должны). Попробуйте, основная нагрузка - выбор увеличений долга. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |