Запросы 1С

1. junikDEV 10.12.24 14:48 Сейчас в теме
Добрый день! Подскажите пожалуйста какой запрос требуется написать, чтобы на выходе получить эталонный вид отчета. Есть документ с ТЗ где записаны долги между организациями, нужно написать такой запрос в отчете (без помощи средств скд) чтобы на выходе получилось как на примере. Пока только учусь, уже 5 дней сижу решаю, никак не могу допереть, буду благодарен за помощь. Скрины ТЗ документа и эталонного вида отчета прикрепил.
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 10.12.24 15:30 Сейчас в теме
(1) А преподаватель вам как-то объяснял эту задачу? Или только дал картинку?
3. junikDEV 10.12.24 15:31 Сейчас в теме
(2) в том то и дело что нет
4. user2107191 10.12.24 15:32 Сейчас в теме
(3) А какие темы перед этим заданием проходили?
5. junikDEV 10.12.24 15:34 Сейчас в теме
(4) Запросы. Но чего-то подобного там не встречал
6. user2107191 10.12.24 15:35 Сейчас в теме
(5) Ок. но это задача на логику работы с данными. Запросы тут просто лишь как средство.
Подумай, как бы ты такую задачу решил без запросов.
7. RustamZz 10.12.24 15:36 Сейчас в теме
(3) Переносите данные в таблицу с одним контрагентом и суммой, группируете, потом соединяетесь по Сумма=-Сумма
8. junikDEV 10.12.24 15:37 Сейчас в теме
(7) чуть чуть не понял "переносите данные в таблицу"
9. RustamZz 10.12.24 15:40 Сейчас в теме
(8) Выбрать ... Поместить таблица
10. junikDEV 10.12.24 15:42 Сейчас в теме
(9) Создать таблицу должников и таблицу кредиторов?
11. RustamZz 10.12.24 15:43 Сейчас в теме
(10) Одну ДолжникоКредиторную
12. junikDEV 10.12.24 15:48 Сейчас в теме
(11) я немного не понимаю, что вы говорите хахахаахах
13. RustamZz 10.12.24 15:49 Сейчас в теме
(12) Наверное потому что прогуливал тему запросов
14. junikDEV 10.12.24 15:50 Сейчас в теме
(13) да нет, я не понимаю что именно вы имеете ввиду "с одним контрагентом"
15. RustamZz 10.12.24 15:53 Сейчас в теме
(14) У вас в таблице две колонки с контрагентом, вот надо преобразовать в таблицу с одной колонкой.
16. junikDEV 10.12.24 15:54 Сейчас в теме
(15) а, ну вот теперь я вас понял)
17. mkalimulin 1278 10.12.24 15:55 Сейчас в теме
Вы по неправильному пути пошли. Правильный путь на картинке

В результате сразу получаете работающий запрос:
```sql
SEL ECT
Debtor,
Creditor,
SUM(Amount) as Summa_dolga
FR OM
(
SELECT
t1.Debtor,
t1.Creditor,
t1.Amount - COALESCE(t2.Amount, 0) as Amount
FR OM
DebtTable t1
LEFT JOIN
DebtTable t2
ON
t1.Debtor = t2.Creditor
AND t1.Creditor = t2.Debtor
) as ClearedDebts
WH ERE
Amount > 0
GROUP BY
Debtor, Creditor
```

### Explanation

1. **Self-Join**: Join the table with itself to find mutual debts (e.g., A owes B and B owes A).

2. **Netting**: Subtract the counter debt (if any) fr om each original debt to get the net obligation.

3. **Filter**: Only include positive net debts in the final result.

4. **Aggregation**: Sum up net debts wh ere applicable.

5. **Result**: This yields the simplified set of debts that represent actual outstanding obligations.

This approach assumes the ability to manipulate and query data similarly to SQL. Adjust table and column names as necessary to fit your actual database schema.

Можно и на русском языке спрашивать. И сразу текст запроса на языке 1С просить, если вам нормальный SQL не заходит. Я предпочитаю спрашивать на английском и просить текст SQL запроса, потому что так немного надежнее получается. На русском + 1С бывает, что не совсем работающий запрос выдает. Впрочем, идею все равно понять можно будет
Прикрепленные файлы:
18. user2107191 10.12.24 15:59 Сейчас в теме
(17) Отстань от новопассита, еретик!!!
19. RustamZz 10.12.24 16:29 Сейчас в теме
(17) Вы по неправильному пути пошли. Потому что либо вы, либо нейросеть не поняли задачу. Результат у вас получится не такой как в описываемой задаче.
20. mkalimulin 1278 10.12.24 16:43 Сейчас в теме
21. RustamZz 10.12.24 16:53 Сейчас в теме
(20)
Прикрепленные файлы:
22. junikDEV 10.12.24 16:57 Сейчас в теме
(21) тоже проверил, выводит абсолютно ту же самую таблицу
23. junikDEV 10.12.24 17:00 Сейчас в теме
(22) подскажите пожалуйста, я пытаюсь понять что вы написали, как мне получить из двух полей контрагентов одно поле контрагента, которое нужно поместить в ВТ. Я делал просто понял что это отдельно таблица кредиторов или должников, иначе как мне сгруппировать их
25. mkalimulin 1278 10.12.24 17:47 Сейчас в теме
(21) Точно. Поспешил с ответом
24. GeraltSnow 176 10.12.24 17:25 Сейчас в теме
Напомнило


- У меня такое впечатление, будто вы считаете, что я вам должен 96 тысяч долларов.
- Это Слиму Хопкинсу вы должны 96 тысяч. Вы должны Слиму, Слим должен мне. Вы - мне.
- Видимо, Слим тоже здесь.
- Эй, Слим, ты его знаешь? Слим? Бесполезно. Слим потерял слух после того, как его застрелили.
26. VZyryanov 11.12.24 16:37 Сейчас в теме
ВЫБРАТЬ
	Тест01.Должник КАК Должник,
	Тест01.СуммаДолга КАК СуммаДолга
ПОМЕСТИТЬ ВТ1
ИЗ
	Справочник.Тест01 КАК Тест01

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

ВЫБРАТЬ
	Тест01.Кредитор,
	-Тест01.СуммаДолга
ИЗ
	Справочник.Тест01 КАК Тест01
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ1.Должник КАК Должник,
	СУММА(ВТ1.СуммаДолга) КАК СуммаДолга
ПОМЕСТИТЬ ВТ2
ИЗ
	ВТ1 КАК ВТ1

СГРУППИРОВАТЬ ПО
	ВТ1.Должник
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ2.Должник КАК Должник,
	ВТ2А.Должник КАК Кредитор,
	ВТ2.СуммаДолга КАК СуммаДолга
ИЗ
	ВТ2 КАК ВТ2
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ2 КАК ВТ2А
		ПО ВТ2.Должник <> ВТ2А.Должник
			И (ВТ2.СуммаДолга = -ВТ2А.СуммаДолга)
ГДЕ
	ВТ2.СуммаДолга > 0
Показать

Для данного примера работает. В общем случае не смог сделать. Нужны рекурсивные запросы, которых нет в 1С.
27. mkalimulin 1278 11.12.24 16:50 Сейчас в теме
(26) Да можно и без них. Здесь же по сути ФИФО, а оно делается без рекурсивных запросов
Оставьте свое сообщение

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