Обсуждение:Отчёт по 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)цикл по условию ( 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 17:19 )
0(0)bInn = CheckRegDoc(RD_KIND_INN, a[3],"ИНН"); bOgrn = CheckRegDoc(RD_KIND_OGRN, a[2], "ОГРН"); if (bInn or bOgrn)
>> Ответить
Описание примера. Вторая строка ( 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 на станциях операционистов
- есть идеи по ведению пользовательской таблицы те добавлять новые файлы в нее когда приходит список из ЦБ
Отчет классный по результату !!! спасибо
>> Ответить