Корекція дублів та ревізія залишків у TCU3
Перевірка дублів у журналі операцій:
1. Знаходимо дублі у журналі:
SELECTTOP(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)ASdouble_records_count, -
dbo.tovar.tovar_number, -
dbo.tovar.tovar_name FROMdbo.jrnINNERJOINdbo.reestr-
ONdbo.jrn.reestr_number = dbo.reestr.reestr_number INNERJOINdbo.tovar-
ONdbo.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) GROUPBYdbo.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_nameHAVING(COUNT(dbo.jrn.jrn_number) > 1)ORDERBYdbo.jrn.reestr_number
2. У полі nakl_number бачимо перелік накладних, якими були повтори проводок. Вибираємо з таблиці jrn записи за цими накладними і прибираємо повтори вручну (по reestr_number + list_number). Приклад:
SELECTTOP(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 FROMdbo.jrnWHERE(nakl_number = 2240168)ORDERBYlist_number, jrn_number
3. Перевіряємо розбіжності. Результат не видаляти, таблиця буде потрібна для переобліку!
SELECTdbo.tovar.tovar_number,-
dbo.tovar.tovar_name, -
dbo.reestr.reestr_number, -
dbo.reestr.kol, -
SUM(CASE -
WHENrash_prih = 0THEN -
jrn.kol * (- 1) -
ELSEjrn.kolEND)ASjrn_kol,ABS(SUM(CASE -
WHENrash_prih = 0THEN -
jrn.kol * (- 1) -
ELSEjrn.kolEND) - dbo.reestr.kol)ASdiff FROMdbo.reestrINNERJOINdbo.jrn-
ONdbo.reestr.reestr_number = dbo.jrn.reestr_number INNERJOINdbo.tovar-
ONdbo.reestr.tovar_number = dbo.tovar.tovar_number WHERE(dbo.tovar.tovar_type = 0)GROUPBYdbo.tovar.tovar_number, dbo.tovar.tovar_name, dbo.reestr.reestr_number, dbo.reestr.kolHAVING(ABS(SUM(CASE-
WHENrash_prih = 0THEN -
jrn.kol * (- 1) -
ELSEjrn.kolEND) - dbo.reestr.kol) > 0.001) ORDERBYtovar_name
4. Коригуємо залишки у реєстрі, потім коригуємо залишки у закупівельних партіях:
UPDATEreestrSETreestr.kol = jrn_kolFROM-
(SELECTdbo.tovar.tovar_number, -
dbo.tovar.tovar_name, -
dbo.reestr.reestr_number, -
dbo.reestr.kol, -
SUM(CASE -
WHENrash_prih = 0THEN -
jrn.kol * (- 1) -
ELSEjrn.kolEND)ASjrn_kol,ABS(SUM(CASE -
WHENrash_prih = 0THEN -
jrn.kol * (- 1) -
ELSEjrn.kolEND) - dbo.reestr.kol)ASdiff -
FROMdbo.reestr -
INNERJOINdbo.jrn -
ONdbo.reestr.reestr_number = dbo.jrn.reestr_number -
INNERJOINdbo.tovar -
ONdbo.reestr.tovar_number = dbo.tovar.tovar_number -
WHERE(dbo.tovar.tovar_type = 0) -
GROUPBYdbo.tovar.tovar_number, dbo.tovar.tovar_name, dbo.reestr.reestr_number, dbo.reestr.kol -
HAVING(ABS(SUM(CASE -
WHENrash_prih = 0THEN -
jrn.kol * (- 1) -
ELSEjrn.kolEND) - dbo.reestr.kol) > 0.001)) sum_reestr INNERJOINreestr-
ONreestr.reestr_number=sum_reestr.reestr_number
5. Перевіряємо розбіжності у закупівельних партіях з оборотами у журналі:
SELECTdbo.tovar.tovar_number,-
dbo.tovar.tovar_name, -
dbo.reestr.reestr_number, -
dbo.reestr.kol, -
SUM(CASE -
WHENjrn.rash_prih = 0THEN -
jrn.kol * (- 1) -
ELSEjrn.kolEND)ASjrn_kol,ABS(SUM(CASE -
WHENjrn.rash_prih = 0THEN -
jrn.kol * (- 1) -
ELSEjrn.kolEND) - dbo.list.kol_current)ASdiff, dbo.list.kol_current, dbo.list.list_number, dbo.nakl.nakl_number, dbo.reestr.point_number FROMdbo.listINNERJOINdbo.nakl-
ONdbo.list.nakl_number = dbo.nakl.nakl_number INNERJOINdbo.reestrINNERJOINdbo.jrn-
ONdbo.reestr.reestr_number = dbo.jrn.reestr_number INNERJOINdbo.tovar-
ONdbo.reestr.tovar_number = dbo.tovar.tovar_number -
ONdbo.list.list_number = dbo.jrn.list_prih_number WHERE(dbo.nakl.nakl_type = 1)-
OR(dbo.nakl.nakl_type = 2) GROUPBYdbo.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_numberHAVING(ABS(SUM(CASE-
WHENjrn.rash_prih = 0THEN -
jrn.kol * (- 1) -
ELSEjrn.kolEND) - dbo.list.kol_current) > 0.001)
6. Коригуємо залишки в закупівельних партіях із журналу:
UPDATElistSETlist.kol_current = T1.jrn_kolFROM-
(SELECTdbo.tovar.tovar_number, -
dbo.tovar.tovar_name, -
dbo.reestr.reestr_number, -
dbo.reestr.kol, -
SUM(CASE -
WHENjrn.rash_prih = 0THEN -
jrn.kol * (- 1) -
ELSEjrn.kolEND)ASjrn_kol,ABS(SUM(CASE -
WHENjrn.rash_prih = 0THEN -
jrn.kol * (- 1) -
ELSEjrn.kolEND) - dbo.list.kol_current)ASdiff, dbo.list.kol_current, dbo.list.list_number, dbo.nakl.nakl_number, dbo.reestr.point_number -
FROMdbo.list -
INNERJOINdbo.nakl -
ONdbo.list.nakl_number = dbo.nakl.nakl_number -
INNERJOINdbo.reestr -
INNERJOINdbo.jrn -
ONdbo.reestr.reestr_number = dbo.jrn.reestr_number -
INNERJOINdbo.tovar -
ONdbo.reestr.tovar_number = dbo.tovar.tovar_number -
ONdbo.list.list_number = dbo.jrn.list_prih_number -
WHERE(dbo.nakl.nakl_type = 1) -
OR(dbo.nakl.nakl_type = 2) -
GROUPBYdbo.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 -
WHENjrn.rash_prih = 0THEN -
jrn.kol * (- 1) -
ELSEjrn.kolEND) - dbo.list.kol_current) > 0.001))AST1 INNERJOINlist-
ONlist.list_number = T1.list_number
7. Зробити переоблік товарів зі списку.
п. 3
Ще ситуація - накладна на передачу 2654433 провелася частково. Частина товарів попала на нову ТТ, частина - ні. Сама накладна знаходиться в стані непроведеної.
Виправяємо - видалимо з накладної товари, які не провелися, а потім ставимо ознаку проведена для накладної. Видалені товари проведемо окремою накладною:
SELECTlist.*,-
jrn.jrn_number FROMlistLEFTJOINjrn-
ONlist.list_number = jrn.list_number WHERElist.nakl_number = 2654433ORDERBYlist.list_number Видалити записи, які маютьNULLв jrn.jrn_number
Андрій Мукан
Admin, Writer, File Uploader
Останнє оновлення:
26.02.2025 15:00:46
80
Запитання та відгуки
Andriy Kravchenko
Admin, Writer, File Uploader
Останнє оновлення:
26.02.2025 15:00:46
Причина виникнення дублів так до кінця і не з'ясована. Це не проблема нашого програмного коду в ТЦУ3, можливо, проблема драйвера Microsoft ActiveX Data Objects msado15.dll. В TCU5 такої проблеми не спостерігається.