[ОТВЕТИТЬ]
Опции темы
19.06.2007 15:10  
akonev
ну, по хорошему, еще есть SMOnlineCheckItems и SMOnlineDiscCard
 
19.06.2007 15:13  
Mtirt
Да. наверное. Просто я точно не помню, показалось, что каскадом и содержимое чека должно удалиться.
 
19.06.2007 15:25  
akonev
Цитата:
Сообщение от Mtirt
Да. наверное. Просто я точно не помню, показалось, что каскадом и содержимое чека должно удалиться.
Ой, точно. Таня, твоя правда, там действительно каскадики стоят. *129
 
19.06.2007 15:32  
Mtirt
Вот smgoods неплохо было бы проверить. Там могут остаться записи по оперативным продажам.
 
19.06.2007 16:00  
bob
Здравствуйте, Владимир.

Высылаю скрипты для удаления "лишних" чеков.
Перед их выполнением необходимо ОБЯЗАТЕЛЬНО сделать резервную копию БД!!!

Последовательность действий следующая:

1. Удалить (если есть) кассовые документы образовавшиеся по "игрушечным"
сменам.
2. Поключиться к БД с помощью SQLPlus от имени пользователя Supermag.
3. Для удаления оперативных чеков набрать команду @DeleteOperCheck.sql;
4. Для удаления закрытых чеков:
4.1. Отредактировать скрипт DelCloseCheck.sql, заменив параметр D на
номер кассы, с которой пришли
"игрушечные продажи" и параметр Z на номер "игрушечной смены"
4.2. набрать команду @DelCloseCheck.sql;
4.3. Пункты 4.1 и 4.2 повторить для каждой смены с каждой кассы,
которые требуется удалить.
5. Пересчитать остатки ("Административный модуль", раздел "База данных",
вкладка "Утилиты", кнопка "Перерасчет
остатков"). Во время пересчета остатков все пользователи должны
отключиться от базы, а также должны быть
остановлены кассовый и почтовый сервисы.

--
С уважением, Алексей Кипарисов,
Инженер отдела сопровождения ПО
ООО "Сервис Плюс АТ"
Вложения
Тип файла: zip Del_Checks.zip (397 байт, 108 просмотров)
 
19.06.2007 16:11  
OlegON
Цитата:
Сообщение от bob
С уважением, Алексей Кипарисов,
Инженер отдела сопровождения ПО
ООО "Сервис Плюс АТ"
С тех пор структура базы менялась... Смотреть некогда, извиняюсь.
 
21.06.2007 13:17  
YuraZ
Вот, может поможет. Скрипт копирует оперативные чеки в закрытые. Пользоваться аккуратно :)

Код:
DECLARE
  -- Номер места хранения. Берем из Разделы->Склады и магазины.
  vLocID NUMBER := 10;
  -- Номер кассы
  vDeskNum NUMBER := 1;
  -- Номер смены
  vZNum NUMBER := 315;
  -- Дата закрытия смены. Заменить на нужную.
  vCloseDate DATE := TO_DATE('01.01.2005', 'DD.MM.YYYY');
  -- Отдел. Берем из Разделы->Структура магазина/склада. Выбираем нужный отдел
  -- (скорее всего это самообслуживание) и в правом окне смотрим параметр "Ид."
  vDepartmentID NUMBER := 1;
  
  -- Далее по тексту заменить строки вида "<вставить номера исключаемых чеков>"
  -- (в 2-х местах) на номера чеков, которые не надо загружать. Это те чеки,
  -- в которых встречаются наборы. Записывать в виде: "1,2,3,4". Т.е. через
  -- запятую и без кавычек!
  
  -- В конце скрипта есть закомментированный кусок кода. Его необходимо
  -- скопировать в отдельное окно SQL Editor-а и выполнить. ВНИМАНИЕ.
  -- Этот кусок кода необходимо выполнить ТОЛЬКО в самом конце работы после
  -- того как убедитесь в том, что все кассовые документы созданы и суммы
  -- сходятся!
  
begin
  -- Чистим таблицы
  delete from smcashz where locid = vLocID and desknum = vDeskNum and znum = vZNum;
  delete from smcashdisccard where locid = vLocID and desknum = vDeskNum and znum = vZNum;
  delete from smcashdisc where locid = vLocID and desknum = vDeskNum and znum = vZNum;
  delete from smcashcredcardchecks where locid = vLocID and desknum = vDeskNum and znum = vZNum;
  delete from smcashchecksprinted where locid = vLocID and desknum = vDeskNum and znum = vZNum;
  delete from smcashcheckcomplexitems where locid = vLocID and desknum = vDeskNum and znum = vZNum;
  delete from smcashcheckitems where locid = vLocID and desknum = vDeskNum and znum = vZNum;
  delete from smcashchecks where locid = vLocID and desknum = vDeskNum and znum = vZNum;

  -- Добавляем смену
  insert into smcashz(locid, desknum, znum, closedate, zready, doccreated)
  values (vLocID, vDeskNum, vZNum, vCloseDate, 0, 0);
  
  -- Переносим оперативные чеки
  insert into smcashchecks(locid, desknum, znum, checknum, printtime, cashier, totalsum, opcode, depid)
  select o.locid, o.desknum, o.znum, o.checknum, o.printtime, o.cashier, o.totalsum, o.opcode, vDepartmentID
  from smonlinechecks o
  where o.locid = vLocID and o.desknum = vDeskNum and o.znum = vZNum and (o.checknum not in (<вставить номера исключаемых чеков>));
  
  -- Переносим товары из оперативных чеков
  insert into smcashcheckitems(locid, desknum, znum, checknum, item, article, quantity, itemprice, totalsum, credcardbrand, seller, depid, subarticle)
  select o.locid, o.desknum, o.znum, o.checknum, o.item, o.article, o.quantity, o.itemprice, o.totalsum, o.credcardbrand, o.seller, o.depid, o.subarticle
  from smonlinecheckitems o
  where o.locid = vLocID and o.desknum = vDeskNum and o.znum = vZNum and (o.checknum not in (<вставить номера исключаемых чеков>));

  -- Удаляем оперативные чеки
/* Скопировать начиная со следующей строки...
  delete from smonlinechecksprinted where locid = vLocID and desknum = vDeskNum and znum = vZNum;
  delete from smonlinedisccard where locid = vLocID and desknum = vDeskNum and znum = vZNum;
  delete from smonlinechecks where locid = vLocID and desknum = vDeskNum and znum = vZNum;
  delete from cmonlinecheckitems where locid = vLocID and desknum = vDeskNum and znum = vZNum;
  commit;
  ... и до предыдущей строки */

  COMMIT;
END;
 
24.06.2011 12:46  
Propil
Дополнения по результатам использования этого скрипта на СМ 1.027.2 SP6
Для его выполнения необходим слэш в самом конце
/
Также, если в составе чеков не было наборов, необходимо из скрипта удалить эти записи:
Код:
 and (o.checknum not in (<вставить номера исключаемых чеков>))
Также, необходимо выполнить (спасибо Mtirt)
Код:
update smcashz set zready=1 where  locid=7 and desknum=12 and znum=360;
цифры в
Код:
locid=7 and desknum=12 and znum=360;
меняем на Ваши
После тормозим кассовый модуль, идём в СМ и там создаем (или пересоздаем, если уже был) кассовый документ на эту дату
Закомментированные строки удаления оперчеков выполнять нет надобности, так как в процессе создания кассового документа они чистятся автоматически
 
28.06.2011 22:17  
YuraZ
Цитата:
Сообщение от Propil
Дополнения по результатам использования этого скрипта на СМ 1.027.2 SP6
Для его выполнения необходим слэш в самом конце
/
Также, если в составе чеков не было наборов, необходимо из скрипта удалить эти записи:
Код:
 and (o.checknum not in (<вставить номера исключаемых чеков>))
Также, необходимо выполнить (спасибо Mtirt)
Код:
update smcashz set zready=1 where  locid=7 and desknum=12 and znum=360;
цифры в
Код:
locid=7 and desknum=12 and znum=360;
меняем на Ваши
После тормозим кассовый модуль, идём в СМ и там создаем (или пересоздаем, если уже был) кассовый документ на эту дату
Закомментированные строки удаления оперчеков выполнять нет надобности, так как в процессе создания кассового документа они чистятся автоматически
О как. Этот скрипт я давно уже переделывал под работу с наборами. Он где-то тут уже проскальзывал. Последняя версия такова:

Код:
-- !!!!!!!!!!!!!!!!!! ОБЯЗАТЕЛЬНО ДЕЛАЕМ БЭКАП БАЗЫ !!!!!!!!!!!!!!!!!!!!
declare
  -- Номер места хранения. Берем из Разделы->Склады и магазины.
  vLocID number := 2;
  -- Номер кассы
  vDeskNum number := 1;
  -- Номер смены
  vZNum number := 9999;
  -- Дата закрытия смены. Заменить на нужную.
  vCloseDate date := to_date('04.09.2006', 'DD.MM.YYYY');
  -- Отдел. Берем из Разделы->Структура магазина/склада. Выбираем нужный отдел
  -- (скорее всего это самообслуживание) и в правом окне смотрим параметр "Ид."
  vDepartmentID number := 1;

  i1 integer;
  i2 integer;

begin
  -- Чистим таблицы
  delete from supermag.smcashz where locid = vLocID and desknum = vDeskNum and znum = vZNum;
  delete from supermag.smcashdisccard where locid = vLocID and desknum = vDeskNum and znum = vZNum;
  delete from supermag.smcashdisc where locid = vLocID and desknum = vDeskNum and znum = vZNum;
  delete from supermag.smcashcredcardchecks where locid = vLocID and desknum = vDeskNum and znum = vZNum;
  delete from supermag.smcashchecksprinted where locid = vLocID and desknum = vDeskNum and znum = vZNum;
  delete from supermag.smcashcheckcomplexitems where locid = vLocID and desknum = vDeskNum and znum = vZNum;
  delete from supermag.smcashcheckitems where locid = vLocID and desknum = vDeskNum and znum = vZNum;
  delete from supermag.smcashchecks where locid = vLocID and desknum = vDeskNum and znum = vZNum;
  delete from supermag.smcashcheckcomplexitems where locid = vLocID and desknum = vDeskNum and znum = vZnum;
  delete from supermag.smdocprops where doctype = 'CS' and docid = 'CS' || to_char(vCloseDate, 'YYYYMMDD') || '@' || to_char(vLocID);
  delete from supermag.smdocprops where doctype = 'CR' and docid = 'CR' || to_char(vCloseDate, 'YYYYMMDD') || '@' || to_char(vLocID);

  -- Корректируем оперативные остатки
  delete from supermag.smopergoods where locid = vLocID and desknum = vDeskNum and znum = vZNum and depid = vDepartmentID;
  delete from supermag.smopergoodsscale where locid = vLocID and desknum = vDeskNum and znum = vZNum and depid = vDepartmentID;

  -- Добавляем смену
  insert into supermag.smcashz(locid, desknum, znum, closedate, zready, doccreated)
  values (vLocID, vDeskNum, vZNum, vCloseDate, 1, 1);

  -- Переносим оперативные чеки
  insert into supermag.smcashchecks(locid, desknum, znum, checknum, printtime, cashier, totalsum, opcode, depid)
  select o.locid, o.desknum, o.znum, o.checknum, o.printtime, o.cashier, o.totalsum, o.opcode, vDepartmentID
  from supermag.smonlinechecks o
  where o.locid = vLocID and o.desknum = vDeskNum and o.znum = vZNum;

  -- Переносим товары из оперативных чеков
  insert into supermag.smcashcheckitems(locid, desknum, znum, checknum, item, article, quantity, itemprice, totalsum, credcardbrand, seller, depid, subarticle)
  select o.locid, o.desknum, o.znum, o.checknum, o.item, o.article, o.quantity, o.itemprice, o.totalsum, o.credcardbrand, o.seller, o.depid, o.subarticle
  from supermag.smonlinecheckitems o
  where o.locid = vLocID and o.desknum = vDeskNum and o.znum = vZNum;

  -- "Разворачиваем" наборы
  insert into supermag.smcashcheckcomplexitems (locid, desknum, znum, complexarticle, article, itemprice, amount, pricepercent, isdependent)
  select distinct o.locid, o.desknum, o.znum, ca.complexarticle, ca.article,
--    supermag.yz.getpriceondatesm(o.locid, ca.article, vCloseDate),
    (select his.price
     from supermag.smpricehistory his, supermag.smlocprices prt
     where his.storeloc = o.locid and his.article = ca.article
       and his.pricetype = prt.pricetype and prt.locid = his.storeloc
       and (bitand(prt.flags, 2) = 2)
       and his.recid = (select max(h.recid)
                        from supermag.smpricehistory h
                        where h.storeloc = his.storeloc
                          and h.article = his.article
                          and h.pricetype = his.pricetype
                          and to_date(h.eventtime) <= vCloseDate)),
    ca.amount, ca.pricepercent, ca.isdependent
  from supermag.smcashcheckitems o, smcard c, supermag.smcomplexarticles ca
  where o.locid = vLocID and o.desknum = vDeskNum and o.znum = vZNum and c.article = o.article and c.datatype = 5
    and ca.complexarticle = c.article;
  -- Ставим метку, указывающую на то, что кассовый документ не соответствует Z-отчетам
  select count(*) into i1 from supermag.smdocuments d where d.doctype = 'CS' and d.id = 'CS' || to_char(vCloseDate, 'YYYYMMDD') || '@' || to_char(vLocID);
  if i1 > 0 then
    select count(*) into i2 from supermag.smdocprops d where d.doctype = 'CS' and d.docid = 'CS' || to_char(vCloseDate, 'YYYYMMDD') || '@' || to_char(vLocID) and d.paramname = 'Cash.Invalid';
    if i2 > 0 then
      update supermag.smdocprops set paramvalue = '*' where doctype = 'CS' and docid = 'CS' || to_char(vCloseDate, 'YYYYMMDD') || '@' || to_char(vLocID) and paramname = 'Cash.Invalid';
    else
      insert into smdocprops(doctype, docid, paramname, paramvalue) values ('CS', 'CS' || to_char(vCloseDate, 'YYYYMMDD') || '@' || to_char(vLocID), 'Cash.Invalid', '*');
    end if;
  end if;
  select count(*) into i1 from supermag.smdocuments d where d.doctype = 'CR' and d.id = 'CR' || to_char(vCloseDate, 'YYYYMMDD') || '@' || to_char(vLocID);
  if i1 > 0 then
    select count(*) into i2 from supermag.smdocprops d where d.doctype = 'CR' and d.docid = 'CR' || to_char(vCloseDate, 'YYYYMMDD') || '@' || to_char(vLocID) and d.paramname = 'Cash.Invalid';
    if i2 > 0 then
      update supermag.smdocprops set paramvalue = '*' where doctype = 'CR' and docid = 'CR' || to_char(vCloseDate, 'YYYYMMDD') || '@' || to_char(vLocID) and paramname = 'Cash.Invalid';
    else
      insert into smdocprops(doctype, docid, paramname, paramvalue) values ('CR', 'CR' || to_char(vCloseDate, 'YYYYMMDD') || '@' || to_char(vLocID), 'Cash.Invalid', '*');
    end if;
  end if;

  -- Удаляем оперативные чеки
  delete from supermag.smonlinechecksprinted where locid = vLocID and desknum = vDeskNum and znum = vZNum;
  delete from supermag.smonlinedisccard where locid = vLocID and desknum = vDeskNum and znum = vZNum;
  delete from supermag.smonlinechecks where locid = vLocID and desknum = vDeskNum and znum = vZNum;
  delete from supermag.smonlinecheckitems where locid = vLocID and desknum = vDeskNum and znum = vZNum;
  commit;

  commit;
end;
Прошу простить - делалось давно. Возможно чего-то еще не учел. Если надо, могу причесать и доделать.
 
29.06.2011 09:48  
Mtirt
Я бы вот здесь поставила бы
Код:
  insert into supermag.smcashz(locid, desknum, znum, closedate, zready, doccreated)
  values (vLocID, vDeskNum, vZNum, vCloseDate, 1, 0);
Тогда нет необходимости ставить метку документа, про пересоздании кассового документа данные Z-отчета будут учтены.

Ну и в последних версиях Супермаг+ удалять опер. чеки не надо. Супермаг+ удалит их при создании кассовых документов.
 
 


Опции темы



Часовой пояс GMT +3, время: 01:15.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.