Запросы 1С - взаимозачеты

1. junikDEV 18.12.24 16:34 Сейчас в теме
Добрый день! Пишу уже третий раз, так никто и не смог помочь, сам к сожалению так и не пришел к решению.
Вопрос, есть тз документа(он единственный) в нем беспорядочные займы, то есть один является должником для второго и в то же время кредитором для третьего, задача в том что нужно провести взаимозачеты и сократить таблицу до минимального кол-ва строк, чтобы при добавлении новых записей алгоритм не ломался и работал правильно, все действия проводить только в запросе, без постобработки и без помощи средств скд, как нужно правильно составить запрос? Делаю так, получил таблицу должников с группировкой по должнику и суммой, и таблицу кредиторов с группировкой по кредитору и суммой. Как теперь получить таблицу расчетов как на 3 скриншоте?
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 18.12.24 16:55 Сейчас в теме
(1) В реальной жизни таких ТЗ не бывает. Значит вы сейчас учитесь и преподаватель дал вам задачу. Расскажите ему, как вы хотите решить её и он подскажет в чем ваша ошибка. Получение здесь готового запроса не даст вам знаний.
3. junikDEV 18.12.24 16:56 Сейчас в теме
(2) так в том то и прикол, что нет подсказок
4. user2107191 18.12.24 17:03 Сейчас в теме
(3) В том и прикол, что не существует решения таким одним запросом, чтобы он был понятен начинающему изучать запросы. Это будет громоздкая и сложная абстракция, поскольку между этими таблицами нет взаимосвязей, нет приоритетов очередности (ну ладно, вместо приоритетов очередности можно от фонаря использовать АВТОНОМЕР()), и так далее... Это первое.

А второе - если бы ко мне пришел подаван с такой задачей, я бы его тряпками погнал бы. Такие задачи решаются без использования запросов (читай - это не дело СУБД).
NicolasCage; RustamZz; +2 Ответить
5. RustamZz 18.12.24 17:08 Сейчас в теме
(3) Согласен c ТТ я бы стал делать ее обходом двух таблиц, а не запросом. Текста - меньше, смысла - больше.
user2107191; +1 Ответить
6. mkalimulin 1334 18.12.24 21:30 Сейчас в теме
(2) Тут проблема в другом. Этот человек упорно постит свою задачу. Уже получил два работающих рецепта:
1. спросить у о1
2. погуглить ФИФО в запросе
Но ему это почему-то не помогает
7. user2107191 18.12.24 21:52 Сейчас в теме
(6) ФИФО не прокатит. ФИФО - это когда одна конкретная сумма с ключом размазывается по нескольким остальным сумма с ключом в порядке приоритетности. Я делал запросом, я знаю.

В данной задаче нет взаимосвязанных ключей, как и приоритетности. И сумм несколько. Многие ко многим без единого ключа.
8. mkalimulin 1334 18.12.24 22:23 Сейчас в теме
(7) Это задача именно на ФИФО. Разве не очевидно? Расходы распределяются на приходы. Берете сумму из второй таблицы и распределяете ее по строкам первой. Известный рецепт "ФИФО в запросе" тут сработает. Впрочем, можно и не разбираться в таких тонкостях и просто спросить o1. Сразу получите тот же самый запрос, что и в статьях по ФИФО в запросе
9. user2107191 18.12.24 22:44 Сейчас в теме
(8)
ФИФО в запросе
Ну вот, первая в поиске. https://infostart.ru/1c/articles/99207/ Все именно так, как я и говорил - ОДНА сумма размазывается на несколько. Единственное, что в данном случае нет ключа связи между таблицами, поскольку сумма всего одна, она приходит единственным параметром, и связывать её ни с чем не надо. Есть параметр ключ приоритетности (Дата) для подсчета нарастающего итога методом связи на <=.

Вторую сумму оплаты уже не размазать в этом же запросе, поскольку ты не поймешь - с какой долговой строки её размазывать после размазывания первой оплаты.

Вторая в поиске https://infostart.ru/1c/articles/1187402/
Тут уже реальные ДВЕ таблицы. Но, как я и говорил - между ними есть ключ (Номенклатура), и поле приоритетности для связи на <= (Дата) и подсчета нарастающего итога.
И то же самое: для ключа существует только ОДНА распределяемая сумма во второй таблице. Ибо читай выше - вторую сумму оплаты уже не размазать, поскольку ты не поймешь - с какой долговой строки её размазывать после размазывания первой оплаты.

В задаче же приведенной здесь нет важной составляющей - ключа! Который бы однозначно связывал ОДНУ распределяемую сумму-источник слева с несколькими строками-получателями справа (или наоборот).
10. user2107191 18.12.24 22:50 Сейчас в теме
(8) Остаётся один вариант - обратиться к твоем всемогущему ИИ. С нетерпением жду решения этой задачи одним запросом от ИИ.
Даже подскажу текст запроса "распределить несколько несвязанных сумм из одной таблицы по нескольким несвязанным сумма из другой таблицы".
Для подсчета нарастающего итога - так уж и быть, разрешу проавтонумеровать строки таблиц в запросе.
11. mkalimulin 1334 18.12.24 23:33 Сейчас в теме
(10) В первой ссылке читаешь комментарии, находишь упоминание правильного запроса. То же самое выдает state-of-art модель
user2107191; +1 Ответить
12. user2107191 19.12.24 00:07 Сейчас в теме
(11) Да, есть такой вариант, нашел https://infostart.ru/1c/articles/68225/
Была у меня тоже мысль про пересекающиеся нарастающие итоги обеих таблиц. Но так как я не погружался в задачу целиком (своих достаточно) - то не стал раскручивать. Думаю, была бы такая потребность - я бы докрутил без проблем.
А в статье - да, все верно уже докручено. Одна левая сумма может закрываться тремя видами правых строк - хвост предыдущей , полная строка(и) в интервале, и голова следующей. Для этого надо установить три вида связи на вхождение правых строк в левый интервал. Так как интервал определяется двумя границами - до и после, то нам нужны по две нарастающих последовательности с обеих сторон.

Это явно задача не для обучающихся запросам.
13. mkalimulin 1334 19.12.24 00:30 Сейчас в теме
(12) А теперь оцените возможности ИИ. Вы смутно понимаете как, но "докручивать" сейчас нет ресурсов. А тут 10 секунд и готово. Намного быстрее, чем гуглить и разбираться в нагугленном. Вот у автора так вообще не получилось разобраться, хоть ему и сказали, что гуглить
14. user2107191 19.12.24 06:12 Сейчас в теме
(13) Всё равно придётся разбираться.
1. Как минимум переписывать под свою структуру таблиц. Для это придётся понять.
2. И усиленно тестировать. Ибо алгоритм не твой, а ответственность нести тебе.

Акцептовать применение гуглорезультатов или чаторезультатов все равно должен человек.
15. mkalimulin 1334 19.12.24 10:19 Сейчас в теме
(14)
1. Зачем? Задавай на входе свою структуру таблиц
2. А свой алгоритм, значит, можно тестировать не усиленно?
Оставьте свое сообщение

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