на главную страницу программы "Водяной"

Инструменты пользователя

Инструменты сайта


запросы_к_регистрам

Общие сведения

Имена таблиц регистров в базе начинаются с R_.
Во всех регистрах есть измерения, по которым фиксируются операции (например, FIRMA) и ресурсы (например, сумма, количество). Ресурсы имеют имена, начинающиеся с P_ (приход) и R_ (расход).
Поля вида KO_имя_регистра в настоящее время не используются.
Не существует таблиц остатков регистров, все остатки получаются запросами, суммирующими R_ресурс-P_ресурс (ниже будут приведены примеры таких запросов).

Во всех регистрах присутствуют идентификатор проводки (ID), дата и время операции (DATADOC), ссылка на таблицу (TABLICA), документ (DOC_ID), строку (STR_ID) и ряд вспомогательных полей для корреспондирующих проводок.
Ниже приведены примеры запросов к некоторым регистрам.

ВАЖНО! Проектируя запросы к регистрам, надо иметь в виду, что проводки по ним по мере обновления программы могут меняться (чаще всего добавляются новые измерения или ресурсы, но теоретически возможны и иные изменения структуры таблиц).

Взаиморасчеты

Взаиморасчеты (денежные) в базе хранятся в таблице R_VZAIMORASHETY.
Измерения: фирма - FIRMA, клиент - KONTRAGENT, договор - DOGOVOR.
Ресурс один - сумма, соответственно расход по ней (это платежи, возвраты) - R_SUMMA, приход (это отгрузка) - P_SUMMA. Получить долг можно запросом, суммирующим R_SUMMA-P_SUMMA.
Примеры:
SELECT KONTRAGENT,DOGOVOR, SUM(IIF(P_SUMMA IS NULL,0, P_SUMMA))- SUM(IIF(R_SUMMA IS NULL,0, R_SUMMA)) AS DOLG FROM r_vzaimorashety GROUP BY KONTRAGENT,DOGOVOR

Этот запрос выдаст долги по всем контрагентам и договорам на конец базы

SELECT SUM(IIF(P_SUMMA IS NULL,0, P_SUMMA))-SUM(IIF(R_SUMMA IS NULL,0, R_SUMMA)) FROM r_vzaimorashety WHERE DATADOC⇐'03.09.2019' AND KONTRAGENT=1000000000001

выдаст долг клиента с кодом 1000000000001 на утро 3.09.2019.

Регистры учета тары

Учет тары ведется в 3 регистрах: остатки тары, собственная (выкупленная) тара и залоговая стоимость тары.
Задолженность клиента по таре = остаток - собственная тара - залог.

Регистр остатков тары

R_VKК - регистр физического остатка тары у клиента.
Кроме фирмы и клиента, там есть еще измерения ADRES (адрес доставки) и TARA (код тары).
Соответственно, вместо P_SUMMA и R_SUMMA будут P_KOLICHESTVO и R_KOLICHESTVO.

SELECT SUM(IIF(P_KOLICHESTVO IS NULL,0, P_KOLICHESTVO))-SUM(IIF(R_KOLICHESTVO IS NULL,0, R_KOLICHESTVO)) FROM R_VKK WHERE DATADOC⇐'03.09.2019' AND ADRES=1000000000001

Этот запрос вернет остаток (НО НЕ ЗАДОЛЖЕННОСТЬ) по таре ВСЕХ ВИДОВ по адресу с кодом 1000000000001.

SELECT SUM(IIF(P_KOLICHESTVO IS NULL,0, P_KOLICHESTVO))-SUM(IIF(R_KOLICHESTVO IS NULL,0, R_KOLICHESTVO)) FROM R_VKK WHERE DATADOC⇐'03.09.2019' AND TARA=1000000000001 AND ADRES=1000000000001

Аналогичный запрос, но только по одному виду тары

Регистр собственной тары

R_SKK хранит движения по выкупленной клиентом таре.

SELECT SUM(IIF(P_KOLICHESTVO IS NULL,0, P_KOLICHESTVO))-SUM(IIF(R_KOLICHESTVO IS NULL,0, R_KOLICHESTVO)) FROM R_SKK WHERE DATADOC⇐'03.09.2019' AND TARA=1000000000001 AND ADRES=1000000000001

Этот запрос вернет количество выкупленной по адресу 1000000000001 тары определенного вида по данным на утро 3.09.2019.

Залоговая стоимость

R_ZAL хранит количество залоговой тары и ее стоимость.

SELECT SUM(IIF(P_KOLICHESTVO IS NULL,0, P_KOLICHESTVO))-SUM(IIF(R_KOLICHESTVO IS NULL,0, R_KOLICHESTVO)) FROM R_ZAL WHERE DATADOC⇐'03.09.2019' AND TARA=1000000000001 AND ADRES=1000000000001

Запрос вернет количество залоговой тары по адресу 1000000000001 тары определенного вида по данным на утро 3.09.2019.

Долг по таре клиента

Как уже говорилось выше, задолженность клиента по таре = остаток - собственная тара - залог.
Пример запроса, получающего долг адреса доставки по таре:

SELECT SUM(OST_-SOB_-ZAL_) FROM (SELECT SUM(IIF(P_KOLICHESTVO IS NULL,0, P_KOLICHESTVO))-SUM(IIF(R_KOLICHESTVO IS NULL,0, R_KOLICHESTVO)) AS OST_,0 AS SOB_, 0 AS ZAL_ FROM R_VKK WHERE TARA=1000000000001 AND ADRES=1000000000001 AND DATADOC⇐'03.09.2019'
UNION ALL
SELECT 0 AS OST_, SUM(IIF(P_KOLICHESTVO IS NULL,0, P_KOLICHESTVO))-SUM(IIF(R_KOLICHESTVO IS NULL,0, R_KOLICHESTVO)) AS SOB_, 0 AS ZAL_ FROM R_SKK WHERE TARA=1000000000001 AND ADRES=1000000000001 AND DATADOC⇐'03.09.2019'
UNION ALL
SELECT 0 AS OST_, 0 AS SOB_, SUM(IIF(P_KOLICHESTVO IS NULL,0, P_KOLICHESTVO))-SUM(IIF(R_KOLICHESTVO IS NULL,0, R_KOLICHESTVO)) AS ZAL_ FROM R_ZAL WHERE TARA=1000000000001 AND ADRES=1000000000001 AND DATADOC⇐'03.09.2019')

запросы_к_регистрам.txt · Последние изменения: 2019/09/03 09:30 — timofeev