Корекція дублів та ревізія залишків у TCU3

Перевірка дублів у журналі операцій:

1. Знаходимо дублі у журналі:

  1. SELECT TOP (100) PERCENT dbo.jrn.nakl_number,
  2.          dbo.jrn.reestr_number,
  3.          dbo.jrn.list_number,
  4.          dbo.jrn.nakl_prih_number,
  5.          dbo.jrn.list_prih_number,
  6.          dbo.jrn.reestr2_number,
  7.          dbo.jrn.date_move,
  8.          dbo.jrn.kol,
  9.          dbo.jrn.cena_opt,
  10.          dbo.jrn.cena_rozn,
  11.          dbo.jrn.cena_dol,
  12.          dbo.jrn.cena_opt_dol,
  13.          dbo.jrn.rash_prih,
  14.          dbo.jrn.nakl_type,
  15.          dbo.jrn.kurs,
  16.          COUNT(dbo.jrn.jrn_number) AS double_records_count,
  17.          dbo.tovar.tovar_number,
  18.          dbo.tovar.tovar_name
  19. FROM dbo.jrn
  20. INNER JOIN dbo.reestr
  21.     ON dbo.jrn.reestr_number = dbo.reestr.reestr_number
  22. INNER JOIN dbo.tovar
  23.     ON dbo.reestr.tovar_number = dbo.tovar.tovar_number
  24. WHERE (dbo.jrn.nakl_type = 1)
  25.         OR (dbo.jrn.nakl_type = 0)
  26.         OR (dbo.jrn.nakl_type = 2)
  27.         OR (dbo.jrn.nakl_type = 3)
  28. 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
  29. HAVING (COUNT(dbo.jrn.jrn_number) > 1)
  30. ORDER BY  dbo.jrn.reestr_number


2. У полі nakl_number бачимо перелік накладних, якими були повтори проводок. Вибираємо з таблиці jrn записи за цими накладними і прибираємо повтори вручну (по reestr_number + list_number). Приклад:

  1. SELECT TOP (100) PERCENT jrn_number,
  2.          nakl_number,
  3.          reestr_number,
  4.          list_number,
  5.          nakl_prih_number,
  6.          list_prih_number,
  7.          reestr2_number,
  8.          date_move,
  9.          kol,
  10.          cena_opt,
  11.          cena_rozn,
  12.          cena_dol,
  13.          cena_opt_dol,
  14.          rash_prih,
  15.          nakl_type,
  16.          kurs,
  17.          fiscal_document,
  18.          serial_number
  19. FROM dbo.jrn
  20. WHERE (nakl_number = 2240168)
  21. ORDER BY  list_number, jrn_number


3. Перевіряємо розбіжності. Результат не видаляти, таблиця буде потрібна для переобліку!

  1. SELECT dbo.tovar.tovar_number,
  2.          dbo.tovar.tovar_name,
  3.          dbo.reestr.reestr_number,
  4.          dbo.reestr.kol,
  5.          SUM(CASE
  6.     WHEN rash_prih = 0 THEN
  7.     jrn.kol * (- 1)
  8.     ELSE jrn.kol END) AS jrn_kol, ABS(SUM(CASE
  9.     WHEN rash_prih = 0 THEN
  10.     jrn.kol * (- 1)
  11.     ELSE jrn.kol END) - dbo.reestr.kol) AS diff
  12. FROM dbo.reestr
  13. INNER JOIN dbo.jrn
  14.     ON dbo.reestr.reestr_number = dbo.jrn.reestr_number
  15. INNER JOIN dbo.tovar
  16.     ON dbo.reestr.tovar_number = dbo.tovar.tovar_number
  17. WHERE (dbo.tovar.tovar_type = 0)
  18. GROUP BY  dbo.tovar.tovar_number, dbo.tovar.tovar_name, dbo.reestr.reestr_number, dbo.reestr.kol
  19. HAVING (ABS(SUM(CASE
  20.     WHEN rash_prih = 0 THEN
  21.     jrn.kol * (- 1)
  22.     ELSE jrn.kol END) - dbo.reestr.kol) > 0.001)
  23. ORDER BY  tovar_name


 4. Коригуємо залишки у реєстрі, потім коригуємо залишки у закупівельних партіях:

  1. UPDATE reestr SET reestr.kol = jrn_kol
  2. FROM
  3.     (SELECT dbo.tovar.tovar_number,
  4.          dbo.tovar.tovar_name,
  5.          dbo.reestr.reestr_number,
  6.          dbo.reestr.kol,
  7.          SUM(CASE
  8.         WHEN rash_prih = 0 THEN
  9.         jrn.kol * (- 1)
  10.         ELSE jrn.kol END) AS jrn_kol, ABS(SUM(CASE
  11.         WHEN rash_prih = 0 THEN
  12.         jrn.kol * (- 1)
  13.         ELSE jrn.kol END) - dbo.reestr.kol) AS diff
  14.     FROM dbo.reestr
  15.     INNER JOIN dbo.jrn
  16.         ON dbo.reestr.reestr_number = dbo.jrn.reestr_number
  17.     INNER JOIN dbo.tovar
  18.         ON dbo.reestr.tovar_number = dbo.tovar.tovar_number
  19.     WHERE (dbo.tovar.tovar_type = 0)
  20.     GROUP BY  dbo.tovar.tovar_number, dbo.tovar.tovar_name, dbo.reestr.reestr_number, dbo.reestr.kol
  21.     HAVING (ABS(SUM(CASE
  22.         WHEN rash_prih = 0 THEN
  23.         jrn.kol * (- 1)
  24.         ELSE jrn.kol END) - dbo.reestr.kol) > 0.001)) sum_reestr
  25. INNER JOIN reestr
  26.     ON reestr.reestr_number=sum_reestr.reestr_number


5. Перевіряємо розбіжності у закупівельних партіях з оборотами у журналі:

  1. SELECT dbo.tovar.tovar_number,
  2.          dbo.tovar.tovar_name,
  3.          dbo.reestr.reestr_number,
  4.          dbo.reestr.kol,
  5.          SUM(CASE
  6.     WHEN jrn.rash_prih = 0 THEN
  7.     jrn.kol * (- 1)
  8.     ELSE jrn.kol END) AS jrn_kol, ABS(SUM(CASE
  9.     WHEN jrn.rash_prih = 0 THEN
  10.     jrn.kol * (- 1)
  11.     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
  12. FROM dbo.list
  13. INNER JOIN dbo.nakl
  14.     ON dbo.list.nakl_number = dbo.nakl.nakl_number
  15. INNER JOIN dbo.reestr
  16. INNER JOIN dbo.jrn
  17.     ON dbo.reestr.reestr_number = dbo.jrn.reestr_number
  18. INNER JOIN dbo.tovar
  19.     ON dbo.reestr.tovar_number = dbo.tovar.tovar_number
  20.     ON dbo.list.list_number = dbo.jrn.list_prih_number
  21. WHERE (dbo.nakl.nakl_type = 1)
  22.         OR (dbo.nakl.nakl_type = 2)
  23. 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
  24. HAVING (ABS(SUM(CASE
  25.     WHEN jrn.rash_prih = 0 THEN
  26.     jrn.kol * (- 1)
  27.     ELSE jrn.kol END) - dbo.list.kol_current) > 0.001)


6. Коригуємо залишки в закупівельних партіях із журналу:

  1. UPDATE list SET list.kol_current = T1.jrn_kol
  2. FROM
  3.     (SELECT dbo.tovar.tovar_number,
  4.          dbo.tovar.tovar_name,
  5.          dbo.reestr.reestr_number,
  6.          dbo.reestr.kol,
  7.          SUM(CASE
  8.         WHEN jrn.rash_prih = 0 THEN
  9.         jrn.kol * (- 1)
  10.         ELSE jrn.kol END) AS jrn_kol, ABS(SUM(CASE
  11.         WHEN jrn.rash_prih = 0 THEN
  12.         jrn.kol * (- 1)
  13.         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
  14.     FROM dbo.list
  15.     INNER JOIN dbo.nakl
  16.         ON dbo.list.nakl_number = dbo.nakl.nakl_number
  17.     INNER JOIN dbo.reestr
  18.     INNER JOIN dbo.jrn
  19.         ON dbo.reestr.reestr_number = dbo.jrn.reestr_number
  20.     INNER JOIN dbo.tovar
  21.         ON dbo.reestr.tovar_number = dbo.tovar.tovar_number
  22.         ON dbo.list.list_number = dbo.jrn.list_prih_number
  23.     WHERE (dbo.nakl.nakl_type = 1)
  24.             OR (dbo.nakl.nakl_type = 2)
  25.     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
  26.     HAVING (ABS(SUM(CASE
  27.         WHEN jrn.rash_prih = 0 THEN
  28.         jrn.kol * (- 1)
  29.         ELSE jrn.kol END) - dbo.list.kol_current) > 0.001)) AS T1
  30. INNER JOIN list
  31.     ON list.list_number = T1.list_number


7. Зробити переоблік товарів зі списку.

п. 3 Ще ситуація - накладна на передачу 2654433 провелася частково. Частина товарів попала на нову ТТ, частина - ні. Сама накладна знаходиться в стані непроведеної. Виправяємо - видалимо з накладної товари, які не провелися, а потім ставимо ознаку проведена для накладної. Видалені товари проведемо окремою накладною:

  1. SELECT list.*,
  2.          jrn.jrn_number
  3. FROM list
  4. LEFT JOIN jrn
  5.     ON list.list_number = jrn.list_number
  6. WHERE list.nakl_number = 2654433
  7. ORDER BY  list.list_number Видалити записи, які мають NULL в jrn.jrn_number

Андрій Мукан

Admin, Writer, File Uploader

30.10.2024 15:57:32

Зареєструйтесь, щоб відправляти коментарі
An unhandled error has occurred. Reload 🗙