Главная Статьи Обмен опытом Практика использования запросов в 1С 8. Расчет структуры задолженности контрагентов
Практика использования запросов в 1С 8. Расчет структуры задолженности контрагентов
29.07.2010 14:05

Практика использования запросов в 1С 8. Расчет структуры задолженности контрагентов.

Бывают случаи, когда возникает необходимость в построении детальной (вплоть до документа) структуры задолженности контрагентов в виде следующей таблицы:

Контрагент

Договор

Сделка

Документ

Дата

Сумма документа

Сумма остатка долга

Контрагент1

Договор1

 

Реализация товаров и услуг 1

01.01.2010

200 грн

100 грн.

Контрагент1

Договор1

 

Реализация товаров и услуг 2

05.01.2010

150 грн

150 грн.

Сложность ситуации заключается в том, что в таблицах остатков взаиморасчетов информация об остатках не хранится в готовом виде вплоть до документов и для ее получения необходимо логически  сопоставлять события увеличения задолженности (продажи) и события погашения задолженности (оплаты покупателей).

В таком случае можно построить запрос, который позволяет сразу рассчитать подобную таблицу (использована конфигурация "Управление производственным предприятием для Украины, редакция 1.1"):

ВЫБРАТЬ

ДокументыУвеличенияДолга.ДоговорКонтрагента.Владелец КАК Контрагент,

ДокументыУвеличенияДолга.ДоговорКонтрагента КАК ДоговорКонтрагента,

ДокументыУвеличенияДолга.Сделка КАК Сделка,

ДокументыУвеличенияДолга.ДокументЗадолженности КАК ДокументЗадолженности,

ДокументыУвеличенияДолга.ДатаЗадолженности КАК ДатаЗадолженности,

ДокументыУвеличенияДолга.СуммаУвеличенияЗадолженности КАК СуммаЗадолженности,

ВЫБОР КОГДА ЕСТЬNULL(СРЕДНЕЕ(ДокументыУвеличенияДолга.СальдоПослеДокументаЗадолженности), 0) - ЕСТЬNULL(СУММА(ДокументыПогашенияДолга.СуммаПогашенияЗадолженности), 0) < ЕСТЬNULL(СРЕДНЕЕ(ДокументыУвеличенияДолга.СуммаУвеличенияЗадолженности), 0)

ТОГДА ЕСТЬNULL(СРЕДНЕЕ(ДокументыУвеличенияДолга.СальдоПослеДокументаЗадолженности), 0) - ЕСТЬNULL(СУММА(ДокументыПогашенияДолга.СуммаПогашенияЗадолженности), 0)

ИНАЧЕ ЕСТЬNULL(СРЕДНЕЕ(ДокументыУвеличенияДолга.СуммаУвеличенияЗадолженности), 0)

КОНЕЦ КАК СуммаНепогашеннойЗадолженности,

РАЗНОСТЬДАТ(ДокументыУвеличенияДолга.ДатаЗадолженности, &Дата2, ДЕНЬ) КАК ЧислоДнейЗадолженности

ИЗ

(ВЫБРАТЬ

ОстаткиИОборотыВзаиморасчетов.ДоговорКонтрагента.Владелец КАК Контрагент,

ОстаткиИОборотыВзаиморасчетов.ДоговорКонтрагента КАК ДоговорКонтрагента,

ОстаткиИОборотыВзаиморасчетов.Сделка КАК Сделка,

ОстаткиИОборотыВзаиморасчетов.Регистратор КАК ДокументЗадолженности,

ОстаткиИОборотыВзаиморасчетов.Период КАК ДатаЗадолженности,

 

ВЫБОР КОГДА ОстаткиИОборотыВзаиморасчетов.Период = &Дата1 И ОстаткиИОборотыВзаиморасчетов.Регистратор = НЕОПРЕДЕЛЕНО

ТОГДА СУММА(ОстаткиИОборотыВзаиморасчетов.СуммаВзаиморасчетовКонечныйОстаток)

ИНАЧЕ СУММА(ОстаткиИОборотыВзаиморасчетов.СуммаВзаиморасчетовОборот)

КОНЕЦ КАК СуммаУвеличенияЗадолженности,

 

СУММА(ОстаткиИОборотыВзаиморасчетов.СуммаВзаиморасчетовКонечныйОстаток) КАК СальдоПослеДокументаЗадолженности

ИЗ

РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(&Дата1, &Дата2, Регистратор) КАК ОстаткиИОборотыВзаиморасчетов

ГДЕ

СуммаВзаиморасчетовОборот > 0

ИЛИ Период = &Дата1 И Регистратор = НЕОПРЕДЕЛЕНО И СуммаВзаиморасчетовКонечныйОстаток > 0

СГРУППИРОВАТЬ ПО

ОстаткиИОборотыВзаиморасчетов.ДоговорКонтрагента,

ОстаткиИОборотыВзаиморасчетов.Сделка,

ОстаткиИОборотыВзаиморасчетов.Регистратор,

ОстаткиИОборотыВзаиморасчетов.Период

) КАК ДокументыУвеличенияДолга

 

 

ЛЕВОЕ СОЕДИНЕНИЕ

(ВЫБРАТЬ

ОборотыВзаиморасчетов.ДоговорКонтрагента.Владелец КАК Контрагент,

ОборотыВзаиморасчетов.ДоговорКонтрагента КАК ДоговорКонтрагента,

ОборотыВзаиморасчетов.Сделка КАК Сделка,

ОборотыВзаиморасчетов.Период КАК Период,

-СУММА(ОборотыВзаиморасчетов.СуммаВзаиморасчетовОборот) КАК СуммаПогашенияЗадолженности

ИЗ

РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(&Дата1, &Дата2, Регистратор) КАК ОборотыВзаиморасчетов

ГДЕ

ОборотыВзаиморасчетов.СуммаВзаиморасчетовОборот < 0

СГРУППИРОВАТЬ ПО

ОборотыВзаиморасчетов.ДоговорКонтрагента,

ОборотыВзаиморасчетов.Сделка,

ОборотыВзаиморасчетов.Период

) КАК ДокументыПогашенияДолга

ПО

ДокументыУвеличенияДолга.ДоговорКонтрагента = ДокументыПогашенияДолга.ДоговорКонтрагента

И ДокументыУвеличенияДолга.Сделка = ДокументыПогашенияДолга.Сделка

И ДокументыУвеличенияДолга.ДатаЗадолженности <= ДокументыПогашенияДолга.Период

СГРУППИРОВАТЬ ПО

ДокументыУвеличенияДолга.ДоговорКонтрагента,

ДокументыУвеличенияДолга.ДокументЗадолженности,

ДокументыУвеличенияДолга.Сделка,

ДокументыУвеличенияДолга.ДатаЗадолженности,

ДокументыУвеличенияДолга.СуммаУвеличенияЗадолженности

ИМЕЮЩИЕ

ЕСТЬNULL(СРЕДНЕЕ(ДокументыУвеличенияДолга.СальдоПослеДокументаЗадолженности), 0) > ЕСТЬNULL(СУММА(ДокументыПогашенияДолга.СуммаПогашенияЗадолженности), 0)

 

УПОРЯДОЧИТЬ ПО

Контрагент,

ДоговорКонтрагента,

Сделка,

ЧислоДнейЗадолженности УБЫВ

ИТОГИ

СУММА(СуммаНепогашеннойЗадолженности)

ПО

Общие,

Контрагент,

ДоговорКонтрагента

 

В запросе анализируются все документы, в результате которых задолженность покупателя увеличилась и стала большей нуля. Если сумма всех погашений долга (оплат) после такого документа не превышает остаток долга после него, то документ считается неоплаченным. Остаток задолженности определяется по соответствующему алгоритму.

 

Параметры &Дата1 и &Дата2 используются для хранения значений границ интервала анализа.

 

 


Прокопенко Константин Игоревич

 


Направление бизнес-приложений
Руководитель сектора управленческого учета
ЗАТ "Спец-інвест"

 

Добавить комментарий


Защитный код
Обновить

 

     

   
тел. : (044) 200-02-74 © «ООО "Спец-инвест"» 2009
Все права защищены. При полном или частичном использовании материалов сайта активная ссылка на spec-i.com.ua обязательна!
e-mail: 1С@spec-i.com.ua