10.01.2012 03:04
Необходимо чтобы остатки из СМ2000 (у нас 1.028.2) выгружались на кассу (УКМ4 47 sp5). В магазинах по одной кассе. Как это можно реализовать?
В СП говорят, что СМ2000 не выгружает остатки, хотя возможность работы с ними есть в УКМ. Есть возможность реализации этого через Web компонету СМ2000 (установив IIS и настроив так, чтобы УКМ при запросе кассира обращалась к нему и брала остатки сразу из СМ2000.) Кто пользуется данными возможностями?
P.S. Поднимаю новую тему, т.к. поиск выдает старые данные, думаю, что за эти годы могло появиться что то нужное нам.
Заранее спасибо за дельные советы.
10.01.2012 16:43
сомневаюсь, чтобы много народу этим всерьез занималось.

по-моему, эта функция появилась в укм48sp2. так что первое, что вас ждет - это апдейт укм4. потом развлекуха с IIS, который еще и лицензировать надо.

дело вкуса, но лично я бы, наверное, сначала проверил, можно ли где-то в укм4 увидеть остаток, если вгрузить его через addnum1. в проверке цены, к примеру.

если можно - тогда после выгрузки (проверить наличие файлов-флагов) внешним скриптом пробежать по plu и заполнить addnum1, а потом уже только отдать все это укм-у. если обмен настроить текстовый, то всех дел на день.
11.01.2012 14:27
То, что остаток можно грузить в укм, это понятно. Даже в "стандартном 2CSV импорте" есть "Брать остатки из свойства add1". Вопрос, чем именно выгружать эти остатки из СМ2000?
11.01.2012 14:33
Чем-то своим.
Например, запросом или отчетом, выполняемым по расписанию.
12.01.2012 12:58
Цитата:
Dusha То, что остаток можно грузить в укм, это понятно. Даже в "стандартном 2CSV импорте" есть "Брать остатки из свойства add1". Вопрос, чем именно выгружать эти остатки из СМ2000?
на самом деле выгрузить не проблема, особенно если пользуете "стандартный 2CSV".

всего-то и надо собрать простенький скриптик, который пробежит по карточкам и впишет остатки.
ну придется еще сделать задание в шедулере, которое будет раз в 10 (к примеру) минут проверять флажки, запускать скрипт и перекладывать файлы из каталога, куда положил супермаг без остатков, в каталог, откуда заберет укм4 уже с остатками.

вопрос в другом: когда остатки уже попали в укм4 - где их будет видно? никогда с остатками не работал.
26.01.2012 13:09
Остатки на кассу выгрузить удалось и касса с ними работает. Остаток видно и при запросе цены товара и в подборе. Вопрос теперь только в автоматизации этого процесса, а именно в выгрузке в текстовый файлик информации вида "article", остаток и написании скрипта объединяющего файл выгрузки с этим файлом по полю article.
26.01.2012 16:25
формат обмена у вас какой все-таки?
26.01.2012 18:35
Цитата:
Andrew_Konev формат обмена у вас какой все-таки?
Стандартный 2 CSV
28.02.2012 15:34
ничего особо не проверялось, предварительно тщательно обнюхивать!!!
рассматривать скорее как отправную точку, а не как готовое решение.

скормить в sqlplus:
sqlplus supermag/qqq@db2000 @c:\sql\remains.sql

протокол обмена проще отстроить, если все выгрузки будут полные.
имена файлов-флагов сверяйте с настройками конвертера укм4 и проверяйте, что там на самом деле падает!!! пишу по памяти, могу чего-нить попутать.

1) проверить наличие cashXX.CNG (для полной выгрузки; XX - номер кассы) и отсутствие cash.NON в каталоге, куда пишет см+
2) выложить туда cashXX.LDD
3) прогнать скрипт
4) в каталоге, откуда будет забирать укм4, проверить отсутствие cashXX.LDD
5) положить в каталог укм4 cash.NON, остальное вычистить
6) скопировать все файлы *.dat , кроме plucash.dat
7) скопировать plucash2.dat переименовать в plucash.dat
8) скопировать cashXX.CNG
9) убрать cash.NON из каталога укм4
10) убрать cashXX.LDD из каталога см+
остатки в текстовой выгрузке:

Код:
DECLARE
-- c:\sql\remains.sql
-- прописываем остатки в выгрузке из СМ+ на кассы

    sm_sl   NUMBER(5) := 34;                 -- ID места хранения

    k_outF  UTL_FILE.FILE_TYPE;
    k_inF   UTL_FILE.FILE_TYPE;
    k_Dir   VARCHAR2(20) := 'SM_DATA';       -- директория, созданная в базе. до версии 9.2.0 тут должен быть путь к файлу
    k_inN   VARCHAR2(20) := 'PLUCASH.dat';   -- имя файла входных данных
    k_outN  VARCHAR2(20) := 'PLUCASH2.dat';  -- имя выходного файла

    tab     char(1) := ','; --  разделитель полей
    cn      VARCHAR2(511);  --  загружаемая строка
    cac     NUMBER(3);      --  номер позиции разделителя полей
    cnb     VARCHAR2(255);  --  начало строки до addnum1
    cne     VARCHAR2(255);  --  конец строки после addnum1

    sm_article VARCHAR2(255); -- артикул СМ+
    sm_goods   NUMBER(8,3);   -- остаток по документам
    sm_online  NUMBER(8,3);   -- оперативные продажи
    sm_remains VARCHAR2(255); -- оперативный остаток в тексте для вставки в выгрузку
    check_art  NUMBER(5);     -- для проверки, что артикул еще жив (всякое бывает)

BEGIN
    k_inF := UTL_FILE.FOPEN(k_Dir,k_inN,'r');
    k_outF := UTL_FILE.FOPEN(k_Dir,k_outN,'w');

    loop
      -- пробегаем циклом по файлу карточек
      begin
        UTL_FILE.GET_LINE(k_inF,cn);
      exception
        WHEN NO_DATA_FOUND THEN EXIT;
      end;

      cac := instr(cn,tab);                             -- находим первый разделитель
      sm_article := replace(SUBSTR(cn,1,cac-1),'"',''); -- в первом поле в кавычках артикул. достаем его оттуда

      -- addnum1 - восьмое поле. то есть поле после седьмого разделителя
      cac := instr(cn,tab,1,7);                         -- находим 7-й разделитель
      cnb := SUBSTR(cn,1,cac);                          -- запоминаем начало строки до поля addnum1
      cne := SUBSTR(cn,cac+1);                          -- запоминаем конец строки

      sm_remains := '0';                                -- обнулим остатки на случай, если в базе про них ничего не найдем

      -- если артикул в базе нашелся - достаем его остатки и оперативные продажи
      SELECT count(*) INTO check_art FROM SMCard WHERE Article = sm_article;
      if check_art = 1 then
        begin

          -- остатки
          sm_goods :=0 ; 
          SELECT count(*) INTO check_art FROM smgoods WHERE Article = sm_article AND storeloc=sm_sl;
          if check_art = 1 then
            SELECT quantity INTO sm_goods FROM smgoods WHERE article=sm_article AND storeloc=sm_sl;
          end if;  

          -- оперативные продажи  
          sm_online := 0 ;
          SELECT count(*) INTO check_art FROM smopergoods WHERE article=sm_article AND locid=sm_sl;
          if check_art > 0 then
            SELECT nvl(sum(salequantity),0)-nvl(sum(returnquantity),0) INTO sm_online FROM smopergoods WHERE article=sm_article AND locid=sm_sl;
          end if;  
            
          -- считаем оперативный остаток, переводим в текст, заменяем десятичный разделитель (чтобы не зависеть от региональных настроек)
          sm_remains := replace(to_char(sm_goods - sm_online),',','.');
        end;
      end if;  

      -- собираем обратно строку для выгрузки
      cn := cnb||sm_remains||cne;

      -- пишем готовую строку в исходящий файл
      UTL_FILE.PUTF(k_outF,cn||'\n');
      UTL_FILE.FFLUSH(k_outF);

    end loop;

    UTL_FILE.FCLOSE(k_inF);
    UTL_FILE.FCLOSE(k_outF);

--------------------------------------------------            

EXCEPTION
  WHEN UTL_FILE.INVALID_PATH THEN 
        RAISE_APPLICATION_ERROR(-20100, 'Invalid Path');
  WHEN UTL_FILE.INVALID_MODE THEN 
        RAISE_APPLICATION_ERROR(-20101, 'Invalid Mode');
  WHEN UTL_FILE.INVALID_OPERATION THEN 
        RAISE_APPLICATION_ERROR(-20101, 'Invalid Operation');
  WHEN UTL_FILE.INVALID_FILEHANDLE THEN 
        RAISE_APPLICATION_ERROR(-20300,'Invalid File Handle');
  WHEN UTL_FILE.WRITE_ERROR THEN 
        RAISE_APPLICATION_ERROR(-20301,'Write Error');
  WHEN UTL_FILE.INTERNAL_ERROR THEN 
        RAISE_APPLICATION_ERROR(-20302,'Internal Error');
END;
/


возможно, пользователю supermag надо будет добавить прав через администратора супермага, не помню.
28.02.2012 17:33
Цитата:
Dusha Остатки на кассу выгрузить удалось и касса с ними работает. Остаток видно и при запросе цены товара и в подборе. Вопрос теперь только в автоматизации этого процесса, а именно в выгрузке в текстовый файлик информации вида "article", остаток и написании скрипта объединяющего файл выгрузки с этим файлом по полю article.
A каким образом вы выгружали остатки, каким скриптом?
Часовой пояс GMT +3, время: 10:33.

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