Корекція дублів та ревізія залишків у TCU3
Перевірка дублів у журналі операцій:
1. Знаходимо дублі у журналі:
SELECT
TOP
(100) PERCENT dbo.jrn.nakl_number,
-
dbo.jrn.reestr_number,
-
dbo.jrn.list_number,
-
dbo.jrn.nakl_prih_number,
-
dbo.jrn.list_prih_number,
-
dbo.jrn.reestr2_number,
-
dbo.jrn.date_move,
-
dbo.jrn.kol,
-
dbo.jrn.cena_opt,
-
dbo.jrn.cena_rozn,
-
dbo.jrn.cena_dol,
-
dbo.jrn.cena_opt_dol,
-
dbo.jrn.rash_prih,
-
dbo.jrn.nakl_type,
-
dbo.jrn.kurs,
-
COUNT
(dbo.jrn.jrn_number)
AS
double_records_count,
-
dbo.tovar.tovar_number,
-
dbo.tovar.tovar_name
FROM
dbo.jrn
INNER
JOIN
dbo.reestr
-
ON
dbo.jrn.reestr_number = dbo.reestr.reestr_number
INNER
JOIN
dbo.tovar
-
ON
dbo.reestr.tovar_number = dbo.tovar.tovar_number
WHERE
(dbo.jrn.nakl_type = 1)
-
OR
(dbo.jrn.nakl_type = 0)
-
OR
(dbo.jrn.nakl_type = 2)
-
OR
(dbo.jrn.nakl_type = 3)
GROUP
BY
dbo.jrn.nakl_number, dbo.jrn.reestr_number, dbo.jrn.list_number, dbo.jrn.nakl_prih_number, dbo.jrn.list_prih_number, dbo.jrn.reestr2_number, dbo.jrn.date_move, dbo.jrn.kol, dbo.jrn.cena_opt, dbo.jrn.cena_rozn, dbo.jrn.cena_dol, dbo.jrn.cena_opt_dol, dbo.jrn.nakl_type, dbo.jrn.kurs, dbo.jrn.rash_prih, dbo.tovar.tovar_number, dbo.tovar.tovar_name
HAVING
(
COUNT
(dbo.jrn.jrn_number) > 1)
ORDER
BY
dbo.jrn.reestr_number
2. У полі nakl_number бачимо перелік накладних, якими були повтори проводок. Вибираємо з таблиці jrn записи за цими накладними і прибираємо повтори вручну (по reestr_number + list_number). Приклад:
SELECT
TOP
(100) PERCENT jrn_number,
-
nakl_number,
-
reestr_number,
-
list_number,
-
nakl_prih_number,
-
list_prih_number,
-
reestr2_number,
-
date_move,
-
kol,
-
cena_opt,
-
cena_rozn,
-
cena_dol,
-
cena_opt_dol,
-
rash_prih,
-
nakl_type,
-
kurs,
-
fiscal_document,
-
serial_number
FROM
dbo.jrn
WHERE
(nakl_number = 2240168)
ORDER
BY
list_number, jrn_number
3. Перевіряємо розбіжності. Результат не видаляти, таблиця буде потрібна для переобліку!
SELECT
dbo.tovar.tovar_number,
-
dbo.tovar.tovar_name,
-
dbo.reestr.reestr_number,
-
dbo.reestr.kol,
-
SUM
(
CASE
-
WHEN
rash_prih = 0
THEN
-
jrn.kol * (- 1)
-
ELSE
jrn.kol
END
)
AS
jrn_kol,
ABS
(
SUM
(
CASE
-
WHEN
rash_prih = 0
THEN
-
jrn.kol * (- 1)
-
ELSE
jrn.kol
END
) - dbo.reestr.kol)
AS
diff
FROM
dbo.reestr
INNER
JOIN
dbo.jrn
-
ON
dbo.reestr.reestr_number = dbo.jrn.reestr_number
INNER
JOIN
dbo.tovar
-
ON
dbo.reestr.tovar_number = dbo.tovar.tovar_number
WHERE
(dbo.tovar.tovar_type = 0)
GROUP
BY
dbo.tovar.tovar_number, dbo.tovar.tovar_name, dbo.reestr.reestr_number, dbo.reestr.kol
HAVING
(
ABS
(
SUM
(
CASE
-
WHEN
rash_prih = 0
THEN
-
jrn.kol * (- 1)
-
ELSE
jrn.kol
END
) - dbo.reestr.kol) > 0.001)
ORDER
BY
tovar_name
4. Коригуємо залишки у реєстрі, потім коригуємо залишки у закупівельних партіях:
UPDATE
reestr
SET
reestr.kol = jrn_kol
FROM
-
(
SELECT
dbo.tovar.tovar_number,
-
dbo.tovar.tovar_name,
-
dbo.reestr.reestr_number,
-
dbo.reestr.kol,
-
SUM
(
CASE
-
WHEN
rash_prih = 0
THEN
-
jrn.kol * (- 1)
-
ELSE
jrn.kol
END
)
AS
jrn_kol,
ABS
(
SUM
(
CASE
-
WHEN
rash_prih = 0
THEN
-
jrn.kol * (- 1)
-
ELSE
jrn.kol
END
) - dbo.reestr.kol)
AS
diff
-
FROM
dbo.reestr
-
INNER
JOIN
dbo.jrn
-
ON
dbo.reestr.reestr_number = dbo.jrn.reestr_number
-
INNER
JOIN
dbo.tovar
-
ON
dbo.reestr.tovar_number = dbo.tovar.tovar_number
-
WHERE
(dbo.tovar.tovar_type = 0)
-
GROUP
BY
dbo.tovar.tovar_number, dbo.tovar.tovar_name, dbo.reestr.reestr_number, dbo.reestr.kol
-
HAVING
(
ABS
(
SUM
(
CASE
-
WHEN
rash_prih = 0
THEN
-
jrn.kol * (- 1)
-
ELSE
jrn.kol
END
) - dbo.reestr.kol) > 0.001)) sum_reestr
INNER
JOIN
reestr
-
ON
reestr.reestr_number=sum_reestr.reestr_number
5. Перевіряємо розбіжності у закупівельних партіях з оборотами у журналі:
SELECT
dbo.tovar.tovar_number,
-
dbo.tovar.tovar_name,
-
dbo.reestr.reestr_number,
-
dbo.reestr.kol,
-
SUM
(
CASE
-
WHEN
jrn.rash_prih = 0
THEN
-
jrn.kol * (- 1)
-
ELSE
jrn.kol
END
)
AS
jrn_kol,
ABS
(
SUM
(
CASE
-
WHEN
jrn.rash_prih = 0
THEN
-
jrn.kol * (- 1)
-
ELSE
jrn.kol
END
) - dbo.list.kol_current)
AS
diff, dbo.list.kol_current, dbo.list.list_number, dbo.nakl.nakl_number, dbo.reestr.point_number
FROM
dbo.list
INNER
JOIN
dbo.nakl
-
ON
dbo.list.nakl_number = dbo.nakl.nakl_number
INNER
JOIN
dbo.reestr
INNER
JOIN
dbo.jrn
-
ON
dbo.reestr.reestr_number = dbo.jrn.reestr_number
INNER
JOIN
dbo.tovar
-
ON
dbo.reestr.tovar_number = dbo.tovar.tovar_number
-
ON
dbo.list.list_number = dbo.jrn.list_prih_number
WHERE
(dbo.nakl.nakl_type = 1)
-
OR
(dbo.nakl.nakl_type = 2)
GROUP
BY
dbo.tovar.tovar_number, dbo.tovar.tovar_name, dbo.reestr.reestr_number, dbo.reestr.kol, dbo.list.kol_current, dbo.list.list_number, dbo.nakl.nakl_number, dbo.reestr.point_number
HAVING
(
ABS
(
SUM
(
CASE
-
WHEN
jrn.rash_prih = 0
THEN
-
jrn.kol * (- 1)
-
ELSE
jrn.kol
END
) - dbo.list.kol_current) > 0.001)
6. Коригуємо залишки в закупівельних партіях із журналу:
UPDATE
list
SET
list.kol_current = T1.jrn_kol
FROM
-
(
SELECT
dbo.tovar.tovar_number,
-
dbo.tovar.tovar_name,
-
dbo.reestr.reestr_number,
-
dbo.reestr.kol,
-
SUM
(
CASE
-
WHEN
jrn.rash_prih = 0
THEN
-
jrn.kol * (- 1)
-
ELSE
jrn.kol
END
)
AS
jrn_kol,
ABS
(
SUM
(
CASE
-
WHEN
jrn.rash_prih = 0
THEN
-
jrn.kol * (- 1)
-
ELSE
jrn.kol
END
) - dbo.list.kol_current)
AS
diff, dbo.list.kol_current, dbo.list.list_number, dbo.nakl.nakl_number, dbo.reestr.point_number
-
FROM
dbo.list
-
INNER
JOIN
dbo.nakl
-
ON
dbo.list.nakl_number = dbo.nakl.nakl_number
-
INNER
JOIN
dbo.reestr
-
INNER
JOIN
dbo.jrn
-
ON
dbo.reestr.reestr_number = dbo.jrn.reestr_number
-
INNER
JOIN
dbo.tovar
-
ON
dbo.reestr.tovar_number = dbo.tovar.tovar_number
-
ON
dbo.list.list_number = dbo.jrn.list_prih_number
-
WHERE
(dbo.nakl.nakl_type = 1)
-
OR
(dbo.nakl.nakl_type = 2)
-
GROUP
BY
dbo.tovar.tovar_number, dbo.tovar.tovar_name, dbo.reestr.reestr_number, dbo.reestr.kol, dbo.list.kol_current, dbo.list.list_number, dbo.nakl.nakl_number, dbo.reestr.point_number
-
HAVING
(
ABS
(
SUM
(
CASE
-
WHEN
jrn.rash_prih = 0
THEN
-
jrn.kol * (- 1)
-
ELSE
jrn.kol
END
) - dbo.list.kol_current) > 0.001))
AS
T1
INNER
JOIN
list
-
ON
list.list_number = T1.list_number
7. Зробити переоблік товарів зі списку.
п. 3
Ще ситуація - накладна на передачу 2654433 провелася частково. Частина товарів попала на нову ТТ, частина - ні. Сама накладна знаходиться в стані непроведеної.
Виправяємо - видалимо з накладної товари, які не провелися, а потім ставимо ознаку проведена для накладної. Видалені товари проведемо окремою накладною:
SELECT
list.*,
-
jrn.jrn_number
FROM
list
LEFT
JOIN
jrn
-
ON
list.list_number = jrn.list_number
WHERE
list.nakl_number = 2654433
ORDER
BY
list.list_number Видалити записи, які мають
NULL
в jrn.jrn_number
Андрій Мукан
Admin, Writer, File Uploader
30.10.2024 15:57:32