Добрый день! Подскажите пожалуйста какой запрос требуется написать, чтобы на выходе получить эталонный вид отчета. Есть документ с ТЗ где записаны долги между организациями, нужно написать такой запрос в отчете (без помощи средств скд) чтобы на выходе получилось как на примере. Пока только учусь, уже 5 дней сижу решаю, никак не могу допереть, буду благодарен за помощь. Скрины ТЗ документа и эталонного вида отчета прикрепил.
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Вы по неправильному пути пошли. Правильный путь на картинке
В результате сразу получаете работающий запрос:
```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С бывает, что не совсем работающий запрос выдает. Впрочем, идею все равно понять можно будет
В результате сразу получаете работающий запрос:
```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С бывает, что не совсем работающий запрос выдает. Впрочем, идею все равно понять можно будет
Прикрепленные файлы:
(22) подскажите пожалуйста, я пытаюсь понять что вы написали, как мне получить из двух полей контрагентов одно поле контрагента, которое нужно поместить в ВТ. Я делал просто понял что это отдельно таблица кредиторов или должников, иначе как мне сгруппировать их
Напомнило
- У меня такое впечатление, будто вы считаете, что я вам должен 96 тысяч долларов.
- Это Слиму Хопкинсу вы должны 96 тысяч. Вы должны Слиму, Слим должен мне. Вы - мне.
- Видимо, Слим тоже здесь.
- Эй, Слим, ты его знаешь? Слим? Бесполезно. Слим потерял слух после того, как его застрелили.
- У меня такое впечатление, будто вы считаете, что я вам должен 96 тысяч долларов.
- Это Слиму Хопкинсу вы должны 96 тысяч. Вы должны Слиму, Слим должен мне. Вы - мне.
- Видимо, Слим тоже здесь.
- Эй, Слим, ты его знаешь? Слим? Бесполезно. Слим потерял слух после того, как его застрелили.
ВЫБРАТЬ
Тест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С.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот