Обсуждение:Отчёт по 193-Т

5 (1)
  • Развернуть Обсуждение:Отчёт по 193-Т ( Обсуждение примера  15.11.2013 22:19 )
    0(0)
    Проверка клиентской базы по 193-Т.
    Для работы надо пересохранить ЦеБэшные файлы в формате ods (LibreOffice Calc)
    и прописать к ним путь в макросе в строке

    var strFolder="\\\\МОЙ_СУПЕРСЕРВЕР\\МОЯ_СУПЕРШАРА$\\193-T";
    strFolder должна указывать на папку с PNU файлами, предполагается что это папка на файловом сервере где хранятся общие справочники и куда имеет доступ пользователь, под которым крутится сервер приложений. В момент проверки файл должен быть закрыт, иначе он не скопируется, это такая фича-бага библиотек RS. См SCR 146468, SCR 146467, тема в айсе не публична по мнению RS

    проверка проводится по всем файлам pnu??????.ods, найденным в этой папке.

    В макросе используется библиотека boostre, которую можно найти в примерах в библиотеке разработчика или заменить функцию проверки строки на цифровой формат.

    С найденным клиентом ничего не делается, только печать. Мои легализаторы не смогли внятно сформулировать, что делать в этом случае.

    PS. макрос под 5.5, но её нет в списке
    Посмотреть пример
    >> Ответить
    • Развернуть не смог проверить ( Aeast  18.11.2013 17:11 )
      0(0)
      Добрый день

      попытался проверить прием .. но не нашел модуля ODSImport()
      укажите плиз , где он есть
      >> Ответить
      • Развернуть Пардон, не ту библиотеку прикрепил Перезалил архив. Модуль в архиве. ( tema  18.11.2013 17:25 )
        0(0)
        Not specified
        >> Ответить
        • Развернуть уточнение ( petrunev  18.11.2013 17:44 )
          0(0)
          Ага получит корректный модуль

          А Кроме каталога с файлами pnu* нужно еще какие-то директории создавать ??
          например .. \\WorkFile\\ ..\\Import\\
          >> Ответить
          • Развернуть добавил но не уверен ( petrunev  18.11.2013 17:46 )
            0(0)
            в модуль Prepare () внес

            macro PrepareFile()
            var sKey=GetApplicationKey();
            var strSrcFileName="Без имени 1.ods";
            var strDstOds:String="..\\TXTfile\\193\\WorkFile\\ods-"+sKey+".zip";
            var strDstXml:String="..\\TXTfile\\193\\Import\\ods-"+sKey+".xml";
            var ErrCode;
            var zip;

            >> Ответить
            • Развернуть По желанию ( tema  18.11.2013 18:18 )
              0(0)
              Пути рассчитаны на наличие в структуре стандартных каталогов WorkFile и Import, если они переопределены, то да, надо менять. При успешной обработке макрос трёт временные файлы в этих каталогах. Исходные pnu оставляет.
              >> Ответить
              • Развернуть по каталогам ( Aeast  19.11.2013 10:20 )
                0(0)
                по каталогам понятно но у меня почему то ошибка

                ╒═════════════════════════════ X:\TXTFILE\193t.1 ══════════════════════════════╕
                │Ошибка копирования ..\TXTfile\193\Undefined->..\TXTfile\193\WorkFile\ods-20131│
                >> Ответить
                • Развернуть вырожденный случай. не находит файлов... ( tema  19.11.2013 10:56 )
                  0(0)
                  в файле pnu.mac строка 129
                  for(iFile,0,dir.Count-1)
                  исправить на
                  for(iFile,0,dir.Count-1,1)

                  var strFolder должна указывать на папку с PNU файлами, предполагается что это папка на файловом сервере где хранятся общие справочники и куда имеет доступ пользователь, под которым крутится сервер приложений. В момент проверки файл должен быть закрыт, иначе он не скопируется, это такая фича-бага библиотек RS. См SCR 146468

                  >> Ответить
                  • Развернуть перезалил пример со всеми фиксами. потестил и на pnu131113.ods ( tema  19.11.2013 11:21 )
                    0(0)
                    Not specified
                    >> Ответить
                    • Развернуть не видит файлов ( Aeast  19.11.2013 12:27 )
                      0(0)
                      Спасибо обновил у себя ваши модули

                      подправил директорию пути с файлами pnu*
                      //var strFolder="\\\\SERVER\\SHARE\\193-T";
                      │var strFolder="\\\\V-makserv2\\rsbank55\\TxtFile\\193";
                      var fRegDoc = TBFile("regdoc.dbt", "R", 3, null,"bank.def");
                      var aTable=TArray();


                      Файлов не обнаруженно - не понятно почему ..
                      файл pnu131113.xls точно есть в \rsbank55\TXTfile\193\pnu131113.xls


                      >> Ответить
                      • Развернуть Доплнительно ( Aeast  19.11.2013 12:28 )
                        0(0)
                        пробовал так strFolder="..\\TxtFile\\193";

                        так же "Файлов не обнаружено"
                        >> Ответить
                        • Развернуть цикл по условию ( Aeast  19.11.2013 12:30 )
                          0(0)
                          Похоже цикл по условию не работает

                          var dir = TDirList (strFolder+"\\pnu??????.ods","F");
                          var iFile:Integer;
                          for(iFile,0,dir.Count-1,1)
                          //PrintLn(dir.Name(iFile));
                          CheckOdsFile(strFolder+"\\"+dir.Name(iFile));
                          end; /* for */

                          >> Ответить
                          • Развернуть не верно понял идею ( Aeast  19.11.2013 12:35 )
                            0(0)
                            а я в директорию \TxtFile\193\ положил сам файл pnu131113.xls

                            а нужно что бы там лежал pnu131113.ods ?? тогда не совсем ясно
                            а откуда модуль возьмет исходный файл
                            >> Ответить
                            • Развернуть сорри ( Aeast  19.11.2013 12:49 )
                              0(0)
                              некорректно прочитал все по примеру

                              сохранил в OpenOffice файл pnu131113.ods
                              да теперь отработал вижу результат

                              Но я бы предложил :
                              - все таки обработать сами файлы из ЦБ pnu131113.xls , у нас не стоит OpenOffice на станциях операционистов
                              - есть идеи по ведению пользовательской таблицы те добавлять новые файлы в нее когда приходит список из ЦБ

                              Отчет классный по результату !!! спасибо

                              >> Ответить
                              • Развернуть Устанавливать всем OOo не надо. ( tema  19.11.2013 13:01 )
                                0(0)
                                Достаточно одному человеку один раз сохранить. Макросу для работы установленный OOo не нужен.
                                Парсить xls нет желания, а через ActiveX медленно работает.

                                Говорят, Excel начиная с какой-то версии умеет работать с .ods, не проверял, но если так, то достаточно в нём сохранить, тогда не надо вообще ни одного Open/LibreОфиса.

                                Вы же понимаете, что если объединять всё в одну таблицу с сохранением формата, то тоже всё будет работать.
                                >> Ответить
                                • Развернуть про формат ( Aeast  19.11.2013 14:08 )
                                  0(0)
                                  про Excel и сохранение в формат ODS не знаю , пользуюсь 2007 - там такого нет , но возможно в SP3 есть . накачу и
                                  посмотрю

                                  Конечно если в одном файле будет все то и работать будет но ЦБ шлет теперь только обновления, а первый файл был большим 1400 строк .

                                  Я тут недавно накидал свой подход , ниже прилагаю .. в 3-х звенке на 1400 записях он отрабатывает за 20 сек
                                  но один косяк я еще не понял как победить

                                  /************************************************************************/
                                  /*Загрузка данных из файла Excel. */
                                  /* Список организаций ВЭД из ЦБ OAE 11-11-2013 */
                                  /************************************************************************/

                                  import BankInter, ClnInter,vch, rslx, rcw,"..\\obj\\lgxs.d32";


                                  file rd ("regdoc") key 3;
                                  file cl ("client") key 0;
                                  var ClientName, fndcln, , wc,wd,wdl,wcl,RowsCount,rBeg,i;
                                  //var c_inn=Tarray, c_ogrn=Tarray;
                                  var Rx,Bk,Sheet,Obj,fName = " ", path1="F:\\Valuta\\*.xls";
                                  //"c:\\otc\\ved\\pnu300913.xls" пример файла

                                  //********************************************
                                  Macro My_exit(i);

                                  Obj.Workbooks.Close;
                                  Obj.Quit;
                                  return;
                                  end;

                                  /*-----------------------------------------*/
                                  /*Модуль поиска Клиента по коду ИНН */
                                  // если есть и не закрыт то используем его наименование
                                  macro cln_wrk(inn)

                                  //msgbox (inn );
                                  //inn="5751023152";

                                  rewind (rd);
                                  rd.RegNum=trim(string(inn));
                                  rd.RDKind=100;
                                  rd.Client=0;
                                  ClientName="";
                                  if( GetLE(rd) )
                                  // msgbox ("ДО =" +rd.regnum+" "+rd.Client);
                                  next (rd) ;
                                  // msgbox ("После = "+rd.Client+" "+rd.RegNum);
                                  if (rd.RegNum==inn)
                                  rewind (cl);
                                  cl.client=rd.client;
                                  if (GetEQ (cl))
                                  // msgbox (cl.Client +" "+cl.szShortName);
                                  ClientName=cl.szShortName;
                                  else
                                  msgbox ("ИНН есть "+inn+" а Клиента нет!!!");
                                  end;
                                  end;
                                  else
                                  // msgbox ("Не нашел !!");
                                  end;
                                  return ClientName;

                                  // msgbox (rd.client );

                                  end;
                                  /*-----------------------------------------*/
                                  rBeg=1;
                                  i=1;
                                  wc ="C"; /*ОГРН*/
                                  wd ="D"; /*ИНН*/
                                  fndcln=0; /*Счетчик найденных совпадений*/


                                  if(IsStandAlone()==TRUE) /* В двухзвенке */
                                  Obj=ActiveX("Excel.Application",Null,False);
                                  else /* В трехзвенке */
                                  Rx=CreateObject("rsax","TRsAxServer","RsAxServer",false);
                                  Obj=Rx.CreateComObject("Excel.Application");
                                  end;

                                  if(SelectFile(fName,path1,"Выбор файла *.xls, ESC - отмена"))
                                  /*файл с шапкой (таблицами и графиками) найден*/
                                  Bk=obj.Workbooks.Open(fName,0,true); /*true - только для чтения*/


                                  // Bk=Obj.Workbooks.Open(fName,0,true);
                                  Sheet = Bk.ActiveSheet();
                                  RowsCount = Sheet.rows.count; /* кол-во строк в таблице*/
                                  // msgbox ("Кол-во строк = "+RowsCount);
                                  println ("Обработан файл "+fname);
                                  println ("-----------------------------------------");
                                  while ( (i=i+1) <= (RowsCount - rBeg)) /*Получается!! 65556 число, решил ограничить 10000 */
                                  // while ( (i=i+1) <= 10)
                                  // MsgBox( Valtype(Obj.sheets(1).Range(string(wcol,i)).Value) );
                                  message("Обработка строки = "+i);
                                  if (Valtype(Obj.sheets(1).Range(string(wc,i)).Value) == V_STRING)
                                  wcl = trim(string(Obj.sheets(1).Range(string(wc,i)).Value));
                                  wdl = trim(string(Obj.sheets(1).Range(string(wd,i)).Value));
                                  // msgbox (wdl+"--- "+substr(wdl,1,10));
                                  if (cln_wrk(wdl)!="")
                                  println ("Найден клиент "+cl.szShortname+" ИНН "+wdl);
                                  // println (wcl + " "+wdl);
                                  fndcln=fndcln+1;
                                  end;
                                  else
                                  // MsgBox("!!!!"+ Obj.sheets(1).Range(string(wc,i)).Value + "строка "+i);
                                  // ware = string(int(Obj.sheets(1).Range(string(wcol,i)).Value));
                                  break;
                                  end;
                                  // msgbox (ware);


                                  end;
                                  msgbox ("Обработанно из файла ЦБ строк "+i+ "| Найденно "+fndcln +" клиентов");
                                  else
                                  msgbox("Файл со списком организаций ВЭД не найден!!!");
                                  /*
                                  /// My_exit(1);
                                  // return;
                                  */
                                  //ob.Workbooks.add;/*новый файл*/
                                  end;;


                                  // Obj.Visible=true;
                                  Obj.Workbooks.Close;
                                  Obj.Quit;

                                  // Sheet.PrintPreview;
                                  // while(Obj.Visible)
                                  // MsgBox("Документ сформирован как таблица Excel.|Распечатайте его и закройте без сохранения.");
                                  // end;

                                  END;


                                  >> Ответить
                                  • Развернуть У меня 1 сек на 3 файла. Файлы лежат не на сервере приложений :) ( tema  19.11.2013 15:49 )
                                    0(0)
                                    Ввиду малого времени выполнения пока не вижу смысла всасывать всё в таблицы pervasiv'а как террористов, хотя это более грамотный путь. Вдруг R-Style замучает совесть и он включит это в базовый функционал :)
                                    >> Ответить
                                    • Развернуть вдруг :)) возможно ( Aeast  19.11.2013 15:59 )
                                      0(0)
                                      До конца не вник , новы проверяете на полное совпадение ИНН и ОГРН? .. я как то на проверке ИНН остановился

                                      Возможно R-Style и включит это в базовый комплект
                                      но файлы уже приходя и работать нужно сейчас .. а пока стуловский модуль у нас не приобретен
                                      думаю сделать что то похожее . Не факт что и в их модуле все хорошо будет с первого раза :((

                                      Думаю что через какое то время точно потребуется отчет по этому списку , и думаю его из базы сделать будет проще
                                      Да кстати, проверил в MS Excel 2007 накатил SP3 и там появилась возможность сохранять файлы в ODS виде

                                      Спасибо за пример !!
                                      >> Ответить
                            • Развернуть Описание примера. Вторая строка ( tema  19.11.2013 12:50 )
                              0(0)
                              Для работы надо пересохранить ЦеБэшные файлы в формате ods (LibreOffice Calc)
                              >> Ответить
                              • Развернуть 2 часть ( Aeast  19.11.2013 12:53 )
                                0(0)
                                сохранил в OpenOffice файл pnu131113.ods
                                да теперь отработал вижу результат

                                Но я бы предложил :
                                - все таки обработать сами файлы из ЦБ pnu131113.xls , у нас не стоит OpenOffice на станциях операционистов
                                - есть идеи по ведению пользовательской таблицы те добавлять новые файлы в нее когда приходит список из ЦБ

                                Отчет классный по результату !!! спасибо
                                >> Ответить