Вторник, 26.11.2024
Мой сайт
Меню сайта
Статистика

Онлайн всего: 49
Гостей: 49
Пользователей: 0
Главная » 2018 » Август » 16 » Остатки субсидий в ПФХД и импорт Excel-еваских таблиц в SQL-сервер
20:12
Остатки субсидий в ПФХД и импорт Excel-еваских таблиц в SQL-сервер

Остатки субсидий в ПФХД и импорт Excel-еваских таблиц в SQL-сервер

Получить остатки по субсидиям достаточно легко. Надо в базе 2018 года запустить вот такое:
SELECT     TOP (100) PERCENT K_UL_1.NUL AS NUL_P, dbo.K_UL.NUL, SUM(dbo.CSUB_CUL_PFEA.SUMM) AS summ
FROM         dbo.DOC RIGHT OUTER JOIN
                      dbo.K_PR RIGHT OUTER JOIN
                      dbo.CSUB_CUL_PFEA LEFT OUTER JOIN
                      dbo.K_ITEM ON dbo.CSUB_CUL_PFEA.K_ITEMID = dbo.K_ITEM.K_ITEMID ON dbo.K_PR.K_PRID = dbo.CSUB_CUL_PFEA.K_PRID ON
                      dbo.DOC.DOCID = dbo.CSUB_CUL_PFEA.DOCID LEFT OUTER JOIN
                      dbo.K_UL_K_UL ON dbo.CSUB_CUL_PFEA.K_UL_K_ULID = dbo.K_UL_K_UL.K_UL_K_ULID RIGHT OUTER JOIN
                      dbo.K_UL ON dbo.K_UL_K_UL.K_ULID = dbo.K_UL.K_ULID LEFT OUTER JOIN
                      dbo.K_UL AS K_UL_1 ON dbo.K_UL_K_UL.K_ULID_PARENT = K_UL_1.K_ULID
WHERE     (dbo.K_PR.K_BKID = 54) AND (SUBSTRING(dbo.K_ITEM.CITEM, 1, 2) = '12') AND (dbo.CSUB_CUL_PFEA.TYPE_PLAN = 3)
GROUP BY K_UL_1.NUL, dbo.K_UL.NUL, dbo.K_PR.K_BKID
ORDER BY dbo.K_UL.NUL, NUL_P
… и получатся остатки (dbo.CSUB_CUL_PFEA.TYPE_PLAN = 3) по типу СИЦ (12xx):

http://akostina76.ucoz.ru/blog/2018-08-05-5273

на 2018 год (dbo.K_PR.K_BKID = 54). Они же, по идее должны возникнуть по итогам 2017-го:
http://akostina76.ucoz.ru/blog/2018-08-11-5288

Получу я в результате выполнения этого запроса такой список:

Но не руками же мне сопоставлять эти суммы. Теоретически можно всё это выбрать и объединить сразу в SQL-сервере. Но по некоторым причинам не лень так делать. Никто же не заставляем меня делать всё одним инструментом.  Вполне могу делать так чтобы поменьше думать. Так и сделаю. Я загоню оба списка (СГЗ и СИЦ) в тот же Excel-евский файл, в котором у меня приходы и уходы денег (на отдельные листы).

Потом импортирую всё это в отдельные таблицы какой-то базы SQL-сервера и свяжу их по названию учреждений.
Импорт запускается по правой кнопке на названии базы:

Источник, естественно, Excel, когда он выбран можно выбрать файл:

Дальше выбор базы, куда будет заливаться информация. По-умолчанию та, на которой был запущен импорт:

Так:

Здесь:

… я отмечаю галками только те листы, которые хочу импортировать и пишу справа те названия таблиц которые должны быть созданы для этой информации. Если нажать Next – запустится импорт.
Вот у меня создались и заполнились эти таблицы.

Теперь надо их связать. Вот так это делается:

SELECT     TOP (100) PERCENT (CASE WHEN dbo.SGZ.NUL IS NULL THEN OSGZ_18.NUL_P ELSE dbo.SGZ.NUL END) AS nul_p,
                      (CASE WHEN dbo.SGZ.NUL1 IS NULL THEN OSGZ_18.NUL ELSE dbo.SGZ.NUL1 END) AS nul,
 SNULL(dbo.SGZ.Разн, 0) AS Ost,
                      ISNULL(dbo.OSGZ_18.summ, 0) AS Pfhd,
ISNULL(dbo.SGZ.Разн, 0) - ISNULL(dbo.OSGZ_18.summ, 0) AS razn
FROM         dbo.SGZ FULL OUTER JOIN
                      dbo.OSGZ_18 ON dbo.SGZ.NUL = dbo.OSGZ_18.NUL_P AND dbo.SGZ.NUL1 = dbo.OSGZ_18.NUL
ORDER BY dbo.OSGZ_18.NUL_P, dbo.SGZ.NUL
Тут довольно необычная связь между таблицами (FULL OUTER JOIN), показанная в конструкторе квадратиками, которые, на самом деле две встречные стрелочки.
Я вовсе не уверена, что в том и другом списке есть все учреждения. У кого-то может быть только ПФХД, а у кого-то только расчётный остаток. Может это и ошибка и так быть не должно, но ситуация такая в данных возможна.
INNER JOIN – объединение только тех строк, которые есть и в той и в другой таблице.
LEFT JOIN – выборка всех  строк из левой таблицы и присоединение к ним строк правой таблицы (всех, которые есть)
RIGHT JOIN – аналогично, но наоборот

FULL JOIN – выборка всех строк из таблиц и связывание тех, которые связываются.
Строки без пары содержат значения NULL вместо информации. Чтобы с этим справиться используется CASE для названий и IsNull() для сумм. Просто для разнообразия, это два метода дающие результат.
https://drive.google.com/file/d/1YjL6e9Qsf4yNJIiScn9Kjfthj4lRaM6r/view?usp=sharing

У меня не самая свежая база за 2018 год, но по идее эти цифры уже 1 января должны быть известны. Отклонения там есть, конечно. Причём довольно загадочные. Вот, пожалуйста:

А вот так оно возникло:

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

Просмотров: 235 | Добавил: akostina76 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа
Поиск
Календарь
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Copyright MyCorp © 2024
    Бесплатный конструктор сайтов - uCoz