Форум OlegON > Программы и оборудование для автоматизации торговли > Системы автоматизации торговли > Супермаг Плюс (Супермаг 2000)

Последовательное изменение номеров смен. : Супермаг Плюс (Супермаг 2000)

19.04.2024 18:03


11.12.2008 09:00
Vovantus
 
Если честно, не знаю в какой ветке форума запостить данный вопрос, переместите куда нужно, если не туда ткнул..
Немного предыстории. Жила бала касса в магазине. Нормально работала, но что-то с ней произошло и начала она переодически связь с ЭКЛЗ терять во время работы. Само собой, от греха подальше я снял эту кассу. Последний номер смены по СМ и по ФР был, условно, 100. Ставлю на этот лекспос резервный СП101ФР-К. В попыхах в настройках программы меняю номер кассы с 1 на 9, ид магазина не трогаю. По идеи, нужно было поменять и номер смены в cf_ini. Поставить тот, который идёт по ФР (смена 50), чтобы проще было возвраты делать. Но я затупил и не поставил. Касса в таком режиме проработала два месяца и только недавно узнал, что такая вот бадяга произошла. В итоге, имеем рассхождение номеров смен по резервному ФР и по СМ. Вижу два напраления для решения проблемы:
1. Вычищаем из СМ все чеки и кассовые документы для резервной кассы, за период её работы в магазине. Далее, на кассах повторно делаем выгрузку всех смен, но в СМ их не принимаем. Далее, какой-нить утилитой, правим таблички на предмет последовательности номеров смен. Допустим, в СМ смены идут начиная с 100 и далее, а нужно поставить с 50. После правки, принимаем смены в СМ.
2. Каким-то запросом отбираем все кассовые документы для резервной кассы за период её работы в магазине. Далее меняем номера смен, чтобы начинались не с 100, а с 50.
Оба варианта для меня не реализуемы. Я не в курсе существуют ли утилиты, позволяющие пакетно обрабатывать номера смен. И написать запрос на смену номеров отчётов в СМ я тоже не смгу. Может, есть какое-то другое решение? Подскажите, кто что думает. Может, кто-то уже сталкивался с похожими проблемами?
11.12.2008 09:36
Vovantus
 
Думается мне, тему я всё-таки не в том разделе открыл, т.к. реализовать нужный мне порядок смены порядковых номеров Z-отчётов средствами запросов будет сложно. Предлагаю следующее. У меня есть в архивном виде все сменные отчёты по нужной кассе, разгруппированные по датам. Может, всёже, будет проще какой-нить тулзой обработать таблички в файлах выгрузки?
11.12.2008 09:39
Mtirt
 
Код:
update smcashz t set set t.znumber= t.znumber+100 where t.desknum=9 and t.closedate>=to_date(:MyDate,'DD.MM.YYYY')
11.12.2008 09:40
Mtirt
 
Возможно, аналогично поменять придется smcashchecks.
11.12.2008 11:47
kadr
 
по тексту вроде на 50 надо уменьшить номер смены, тогда скорее всего так
Цитата:
Mtirt
Код:
update smcashz t set set t.znumber= t.znumber-50 
where t.desknum=9 and t.closedate>=to_date(:MyDate,'DD.MM.YYYY')
11.12.2008 13:40
akonev
 
... только set один :)
там же еще констрейнты на чеки, строки чеков, скидки, дисконты. и дат в них нету.
каскады только на удаление.
11.12.2008 13:44
deucel
 
Я бы предложил другой вариант

1. удали кассовые документы в СМ.
2. скрипт для примера

Код:
DECLARE
   desk     NUMBER (5) := 9;
   startz   NUMBER (5) := 100;
   endz     NUMBER (5) := 150;
   newz     NUMBER (5) := 49;
BEGIN
   FOR c_rec IN (SELECT   desknum, znum FROM smcashz WHERE desknum = desk AND znum BETWEEN startz AND endz ORDER BY closedate, znum)
   LOOP
      newz := newz + 1;

      UPDATE smcashz SET znum = newz WHERE desknum = c_rec.desknum AND znum = c_rec.znum;

      UPDATE smcashchecks SET znum = newz WHERE desknum = c_rec.desknum AND znum = c_rec.znum;

      UPDATE smcashcheckitems SET znum = newz WHERE desknum = c_rec.desknum AND znum = c_rec.znum;

      UPDATE smcashcheckcomplexitems SET znum = newz WHERE desknum = c_rec.desknum AND znum = c_rec.znum;

      UPDATE smcashchecksprinted SET znum = newz WHERE desknum = c_rec.desknum AND znum = c_rec.znum;

      UPDATE smcashcredcardchecks SET znum = newz WHERE desknum = c_rec.desknum AND znum = c_rec.znum;

      UPDATE smcashdisccard SET znum = newz WHERE desknum = c_rec.desknum AND znum = c_rec.znum;

      COMMIT;
   END LOOP;
END;
где
desk - номер кассы
startz - начало номеров Z для замены
endz - соотв. конец номеров Z для замены
newz - начальный номер Z - 1 (минус)

вроде учел все таблички по чекам (т.е. дисконтные и кредитные карты, распечатанные чеки, комплексные артикулы).
смотри чтоб не пересеклись новые номера с заменяемыми
;)

3. Пересоздай кассовые документы.
4. На кассе удали смены по которым менял номера, чтоб случаем не выгрузили повторно.


P.S.
Если лениво удалять и создавать кассовые документы заново
то можно добавить в скрипт изменение таблички smdoccashz
там хранятся Z-отчеты входящие в кассовый документ.
11.12.2008 14:07
akonev
 
Цитата:
Vovantus Может, есть какое-то другое решение?
Вообще-то, самый простой вариант - завести в СМ еще одну кассу, на кассе прописать этот номер и выставить текущий номер Z-отчета.
Это если готов к тому, что возвраты за "неправильно" нумерованные смены придется делать по сумме с подбором товаров.

Если хочется обеспечить и возвраты за прошлые смены - тогда номер кассы не менять, а смены надо перенумеровывать в базе кассы:
1) остановить кассу, закрыв смену
2) вытянуь database на виндовую машину
3) теми же запросами (типа, update cashsail set znumber=(znumber - 50) where cashnumber=9) в dbexpl32.exe уменьшить номера Z-отчетов во всех файлах cash* и в currests
4) в currests еще перекинуть флажек выгрузки (чтобы сработала "выгрузка невыгруженных") для cashnumber=9
5) засунуть базу обратно на кассу
6) в супермаге убить кассовые за эти даты и z-отчеты по 9й кассе
7) выгрузить с кассы все смены

все это пишу в расчете на то, что 9й эта касса становилась только один раз и других смен по 9й кассе не было.
если были - придется еще условия по номерам смен накладывать.
12.12.2008 04:29
Vovantus
 
Спасибо всем за советы. Если честно, я очень опасаюсь применять те запросы, которые Вы предложили. Если вдруг что не так, я сам потом проблемы не разрулю. Склоняюсь к мнению, что для меня будет проще подправить номера смен в табличках на кассе. Андрей, спасибо что подсказал название утилиты для пакетной обработки
Я поступлю следующим образом. Предварительно очищаю в СМ уже выгруженные смены. Закрываю смену на кассе. Далее, делается выгрузка смен за период работы резервного ФР. То, что выгрузилось в СМ пока не попадает. Снимаю резервный ФР, ставлю родной. В настройках УКМ правлю номер кассы и номер смены. Всё, магазин работает. Далее, через DBEXPL32.EXE для всех выгруженных смен тупо уменьшаю номер смены и то что получилось скармливаю СМ. В общем, это примерный план действий. ДУмаю, прокатит. Сегодня попробую и отпишусь.
12.12.2008 11:20
Vovantus
 
В общем, всё получилось! Единственное, что я не учёл - это выгрузки по номеру сменного отчёта. В этом плане УКМ2 - убогая программа. Сразу выгрузить смены за период не получается, только по одной смене. Сразу вспомнил совет Андрея.. Нужно было сначало на рабочей базе в табличке CURRESTS.DB, поставить для поля WasOutput значение 0, а уже затем тупо "выгрузить невыгруженные". Но в этом случае пришлось бы накладывать дополнительные условия на отбор по дате, что для меня сложнова-то. Но так или иначе данные получены, подправлены, СМ их схавал и номера смен для резервной кассы теперь в нужном порядке Всем спасибо. Если впоследствии возникнут какие-то проблемы после этой процедуры, сразу отпишусь.
Часовой пояс GMT +3, время: 18:03.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.