// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // "Передача сумм", "открытие счетов", "прием карт" Сбербанк (XML) // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // 1. Если организация работает с несколькими отделениями Сбербанка, // то нужно: // - завести поле КЧ с псевдонимом: numbank(если отделение одно - можно поле в к.ч. не заводить, а указать номер отделения в запросе) // В режиме "справочники кадровой части" находится справочник по кодам ОСБ и // их наименованиям, (T_GUIDE\numbank.tab) если в этом справочнике нет названия для ОСБ в который // мы передаем, то будет выдан запрос наименования ОСБ // 2. Если требуется указать несколько филиалов отделения Сбербанка, // то нужно: // - завести поле КЧ с псевдонимом: numfilb (если филиал один - можно поле в к.ч. не заводить, а указать номер филиала в запросе) int cntRowOnWshSber=50; //***настройки для формирования файлов. int ShortNameOrg=1; /* Поступила информация, что сбербанк просит указывать краткое наименование(если краткое заполнено, то берем его) 1- передавать краткое наименование 2- передавать полное наименование */ int isRezident=1; /* Настройка для определения статуса (резидент/нерезидент) на данный момент не понятно по какому признаку определять статус... 1-определяем резидентов по коду паспорта (если 21 - резидент, все остальные нерезиденты) 2-определяем резидентов по коду паспорта (если 10 - нерезидент, все остальные резиденты)*/ int Format=1; /* Формат передачи для полей "место рождения" и "пол" 1-Передавать как в "Dat_inp" (набивалка от сбербанка) 2-Передавать как в описании формата */ /*Временно закомментил эти настройки и ввел одну общую настройку "Format" int FormatMestoRogd=1; 1-Передавать место рождения строкой (как в описании формата) 2-Передавать как в "Dat_inp" (набивалка от сбербанка) int FormatPol=1; 1-Пол - мужской = латинская M (от male), женский = латинская F (от female) (как в описании формата) 2-Передавать как в "Dat_inp" (набивалка от сбербанка) */ //***настройки для формирования файлов. //запрос номера ОСБ и филиала ZaprOsb() { //в к.ч. нет полей if ((kch_num_sys("numbank")==-1)&&(kch_num_sys("numfilb")==-1)) { string Title="Введите дополнительные данные "; string WorkFile=GetFileNameForGlobalData(); //файла еще нет -> надо вывести запрос if (LoadGlobalData(WorkFile)==-1 ) { while(1) { if (RequestGlobalData(Title,"summ")==ESC) { NOsb=""; FOsb=""; return ESC; } //номер ОСБ указали -> выходим if (atoi(NOsb)!=0) break; Title="Не указан номер ОСБ!!!"; } } else if (atoi(NOsb)==0) //файл есть, но номер ОСБ не указан { while(1) { if (RequestGlobalData(Title,"summ")==ESC) { NOsb=""; FOsb=""; return ESC; } //номер ОСБ указали -> выходим if (atoi(NOsb)!=0) break; Title="Не указан номер ОСБ!!!"; } } SaveGlobalData(WorkFile); } } //Запрос вида карты и категории населения string VidVklad =""; int KategNas=207; TipVklad() { //запрос параметров списка на открытие счетов var NetD=NetDialogs(); if (!IsObject(NetD)) return ESC; string str=NetD.RequestForSberbankOpenCards(MainWindow()); if (str=="" || !GetValueFromStr(str)) return ESC; return 1; } GetValueFromStr(str) { /*на входе получаем строку, в которой через разделитель ";" идут: Вид карты VidVklad Категория населения KategNas Признак зарплатной карты SignSalaryCard Тариф на текущий год RateForCurrentYear Тариф на следующий год RateForNextYear */ var Par = CreateObject("ParamFuncRW"); Par.IInitial(static_cast_to_string(str),";",99); int cntPar=Par.Count(); //пришла пустая строка - ничего не делаем if (!cntPar) return 0; //пишем выбраное значение в файл с настройками string WorkFile=GetFileNameForGlobalData(); LoadGlobalData(WorkFile); VidVklad=Par.Get(0); TipOtkrKart=VidVklad; if (Par.Count()>1) KategNas=atoi(Par.Get(1)); CategoryOfPopulation=KategNas; if (Par.Count()>2) SignSalaryCard=Par.Get(2); if (Par.Count()>3) sprintf(RateForCurrentYear,"%15.2f",atof(Par.Get(3))); if (Par.Count()>4) sprintf(RateForNextYear ,"%15.2f",atof(Par.Get(4))); SaveGlobalData(WorkFile); return 1; } GetOrgDetails(&Org,&Inn) { char str[256]; GetEnterpriseVar("ИМЯП", Org,100); // Наименование предприятия или отделения иностранной организации FreeSpaceString(Org,2,""); OemToChar(Org,Org); if(ShortNameOrg==1) { GetEnterpriseVar("ИМЯП2", str,100); // Наименование предприятия или отделения иностранной организации FreeSpaceString(str,2,""); if (strlen(str)) { Org=str; OemToChar(Org,Org); } } GetEnterpriseVar("ИНН", Inn,22); FreeSpaceString(Inn,2,""); /*GetEnterpriseVar("РСЧ",Schet,20); FreeSpaceString(Schet,2,""); GetEnterpriseVar("БИК",Bik,9); FreeSpaceString(Bik,2,""); */ GetEnterpriseVar("АДРПФ",str,255); FreeSpaceString(str,2,""); adresPr=str; } PanelVZa4(&rez) { var MapVZa4 = CreateObject("MapString"); MapVZa4.Add("01","Заработная плата"); MapVZa4.Add("02","Стипендия учащимся"); MapVZa4.Add("03","Пенсия социальная"); MapVZa4.Add("04","Пенсия негосударственных пенсионных фондов"); MapVZa4.Add("05","Пособия и другие выплаты по безработице"); MapVZa4.Add("06","Пособия на детей"); MapVZa4.Add("07","Прочие выплаты"); MapVZa4.Add("08","Аванс по заработной плате"); string Title = "Выберите вид зачисления"; var MapRez = CreateObject("MapString"); if ( PanelValueFromMap(MapVZa4,MapRez,1,Title) == ESC ) return -1; if ( !MapRez.InitIterator() ) return -1; rez=MapRez.GetCurKey(); return 0; } //***Формирование файла xml на зачисление сумм ToSB_SumXML(AdrCTabl, AdrCListTabl, RcrInList) { CodEnterprise=GetCodEnterprise(AdrCListTabl, RcrInList); //создаем объект для работы с таблицей var Tabl = CreateObject("CurPrnTbl"); Tabl.Initial(AdrCTabl); if(Tabl.VarGMain==ESC) return; //определяем номера полей в таблице if ( !FillFld(Tabl) ) return false; int count_rec=Tabl.Count_Rcr(); try { var XMLDoc= CreateXMLobj(); var XMLDoc1 = CreateElemXML(XMLDoc,OemToAnsi("СчетаПК")); XMLDoc.documentElement= XMLDoc1; char Org[256],Inn[256]; GetOrgDetails(Org,Inn); string WorkFile=GetFileNameForGlobalData(); LoadGlobalData(WorkFile); XMLDoc1.setAttribute(OemToAnsi("ДатаФормирования"),static_cast_to_string(ModifDate(datatek))); XMLDoc1.setAttribute(OemToAnsi("НомерДоговора"),static_cast_to_string(nDogovor)); XMLDoc1.setAttribute(OemToAnsi("ДатаДоговора"),static_cast_to_string(ModifDate(dDogovor))); XMLDoc1.setAttribute(OemToAnsi("НаименованиеОрганизации"),static_cast_to_string(Org)); XMLDoc1.setAttribute(OemToAnsi("ИНН"),static_cast_to_string(Inn)); { if (writeBikAndSchet) { XMLDoc1.setAttribute(OemToAnsi("РасчетныйСчетОрганизации"),static_cast_to_string(Schet)); XMLDoc1.setAttribute(OemToAnsi("БИК"),static_cast_to_string(Bik)); } } XMLDoc1.setAttribute(OemToAnsi("ИдПервичногоДокумента"),GetStrGUID()); XMLDoc1.setAttribute(OemToAnsi("НомерРеестра"),to_string(NNN)); XMLDoc1.setAttribute(OemToAnsi("ДатаРеестра"),to_string(ModifDate(dNNN))); var XMLZaZarp = CreateElemXML(XMLDoc,OemToAnsi("ЗачислениеЗарплаты")); int bTime = false; // false-показывать процент, // true-показывать оставшееся время //Инициализируем ProgressBar var CMsg = CreateObject("ProgressBar"); CMsg.Initial(0,100,1); CMsg.SetShowTime(static_cast_to_int(bTime)); int NomerOsb=atoi(NOsb); int nomPP=0; char str[256]; double ItogSum = 0; for (int zap=0; zap1) { XMLElem.setAttribute(OemToAnsi("КодВидаВклада"),static_cast_to_string(Par.Get(0))); XMLElem.setAttribute(OemToAnsi("КодПодвидаВклада"),static_cast_to_string(Par.Get(1))); } XMLElem.setAttribute(OemToAnsi("КодВалюты"),static_cast_to_string("810")); XMLElem= CreateChildElemXML(XMLDoc,XMLElemSotr,OemToAnsi("МобильныйТелефон")); str = Tabl.Text(Ofld[OidxMobTel],zap); FreeSpaceString(str,2,""); SetValueElemXML(XMLElem,OemToAnsi(str)); XMLElem= CreateChildElemXML(XMLDoc,XMLElemSotr,OemToAnsi("КонтрольнаяИнформация")); str = Tabl.Text(Ofld[OidxKontrInfo],zap); FreeSpaceString(str,2,""); SetValueElemXML(XMLElem,OemToAnsi(str)); XMLElem= CreateChildElemXML(XMLDoc,XMLElemSotr,OemToAnsi("СНИЛС")); str = Tabl.Text(Ofld[OidxSnils],zap); FreeSpaceString(str,2,""); SetValueElemXML(XMLElem,OemToAnsi(str)); XMLElem= CreateChildElemXML(XMLDoc,XMLElemSotr,OemToAnsi("КатегорияНаселения")); str = Tabl.Text(Ofld[OidxKategor],zap); FreeSpaceString(str,2,""); SetValueElemXML(XMLElem,OemToAnsi(str)); XMLElem= CreateChildElemXML(XMLDoc,XMLElemSotr,OemToAnsi("ПризнакЗарплатный")); str =SignSalaryCard; FreeSpaceString(str,2,""); SetValueElemXML(XMLElem,OemToAnsi(str)); XMLElem= CreateChildElemXML(XMLDoc,XMLElemSotr,OemToAnsi("ТарифТекущийГод")); str = RateForCurrentYear; FreeSpaceString(str,2,""); SetValueElemXML(XMLElem,OemToAnsi(str)); XMLElem= CreateChildElemXML(XMLDoc,XMLElemSotr,OemToAnsi("ТарифСледующийГод")); str = RateForNextYear; FreeSpaceString(str,2,""); SetValueElemXML(XMLElem,OemToAnsi(str)); { //ПАСПОРТ var XMLElemPasp= CreateChildElemXML(XMLDoc,XMLElemSotr,OemToAnsi("УдостоверениеЛичности")); XMLElem= CreateChildElemXML(XMLDoc,XMLElemPasp,OemToAnsi("ВидДокумента")); str = Tabl.Text(Ofld[OidxNameDoc],zap); FreeSpaceString(str,2,""); SetValueElemXML(XMLElem,OemToAnsi(str)); XMLElem= CreateChildElemXML(XMLDoc,XMLElemPasp,OemToAnsi("Серия")); str = Tabl.Text(Ofld[OidxSerDoc],zap); FreeSpaceString(str,2,""); SetValueElemXML(XMLElem,OemToAnsi(str)); XMLElem= CreateChildElemXML(XMLDoc,XMLElemPasp,OemToAnsi("Номер")); str = Tabl.Text(Ofld[OidxNomDoc],zap); FreeSpaceString(str,2,""); SetValueElemXML(XMLElem,OemToAnsi(str)); XMLElem= CreateChildElemXML(XMLDoc,XMLElemPasp,OemToAnsi("ДатаВыдачи")); str = Tabl.Text(Ofld[OidxDateDoc],zap); FreeSpaceString(str,2,""); SetValueElemXML(XMLElem,OemToAnsi(ModifDate(str))); XMLElem= CreateChildElemXML(XMLDoc,XMLElemPasp,OemToAnsi("КемВыдан")); str = Tabl.Text(Ofld[OidxKemDoc],zap); FreeSpaceString(str,2,""); SetValueElemXML(XMLElem,OemToAnsi(str)); XMLElem= CreateChildElemXML(XMLDoc,XMLElemPasp,OemToAnsi("КодПодразделения")); str = Tabl.Text(Ofld[OidxKodPodrDoc],zap); FreeSpaceString(str,2,""); SetValueElemXML(XMLElem,OemToAnsi(str)); XMLElem= CreateChildElemXML(XMLDoc,XMLElemPasp,OemToAnsi("КодВидаДокумента")); str = Tabl.Text(Ofld[OidxKodDoc],zap); FreeSpaceString(str,2,""); SetValueElemXML(XMLElem,OemToAnsi(str)); } XMLElem= CreateChildElemXML(XMLDoc,XMLElemSotr,OemToAnsi("ДатаРождения")); str = Tabl.Text(Ofld[OidxFCdr],zap); FreeSpaceString(str,2,""); SetValueElemXML(XMLElem,OemToAnsi(ModifDate(str))); XMLElem= CreateChildElemXML(XMLDoc,XMLElemSotr,OemToAnsi("Пол")); str = Tabl.Text(Ofld[OidxFCpol],zap); FreeSpaceString(str,2,""); SetValueElemXML(XMLElem,OemToAnsi(ModifPol(str))); AddAdresToXML(XMLDoc,XMLElemSotr,"АдресМестаРаботы",adresPr); XMLElem= CreateChildElemXML(XMLDoc,XMLElemSotr,OemToAnsi("Должность")); str = Tabl.Text(Ofld[OidxDolgn],zap); FreeSpaceString(str,2,""); SetValueElemXML(XMLElem,OemToAnsi(str)); str=Tabl.Text(Ofld[OidxAdres_reg],zap); AddAdresToXML(XMLDoc,XMLElemSotr,"АдресПрописки",str); str=Tabl.Text(Ofld[OidxAdres_fact],zap);FreeSpaceString(str,2,""); //если адрес факт не указан - берем вместо него адрес регистрации if(strlen(str)==0) str=Tabl.Text(Ofld[OidxAdres_reg],zap); AddAdresToXML(XMLDoc,XMLElemSotr,"АдресПроживания",str); int versionTransliteration=1; int maxLen=19; var f=Tabl.Text(Ofld[OidxF],zap); FreeSpaceString(f,2,""); var i=Tabl.Text(Ofld[OidxI],zap); FreeSpaceString(i,2,""); var fioLat=MakeFioLat(f,i,versionTransliteration,maxLen); XMLElem= CreateChildElemXML(XMLDoc,XMLElemSotr,OemToAnsi("ЭмбоссированныйТекст")); XMLElem.setAttribute(OemToAnsi("Поле1"),GetElementFromString(0,fioLat," ")); XMLElem.setAttribute(OemToAnsi("Поле2"),GetElementFromString(1,fioLat," ")); XMLElem= CreateChildElemXML(XMLDoc,XMLElemSotr,OemToAnsi("Резидент")); if(isRezident==1) { //определяем резидентов по коду паспорта (если 21 - резидент) if(atoi(Tabl.Text(Ofld[OidxKodDoc],zap))==21) SetValueElemXML(XMLElem,"true"); else SetValueElemXML(XMLElem,"false"); } else { //определяем резидентов по коду паспорта (если 10 - нерезидент) if(atoi(Tabl.Text(Ofld[OidxKodDoc],zap))==10) SetValueElemXML(XMLElem,"false"); else SetValueElemXML(XMLElem,"true"); } XMLElem= CreateChildElemXML(XMLDoc,XMLElemSotr,OemToAnsi("МестоРождения")); if (Format!=1) { // sprintf(str,"%s,%s,%s,%s",Tabl.Text(Ofld[OidxStrana_r],zap),Tabl.Text(Ofld[OidxObl_r],zap),Tabl.Text(Ofld[OidxRaion_r],zap),Tabl.Text(Ofld[OidxGorod_r],zap));FreeSpaceString(str,2,""); char tmp[256]; str=Tabl.Text(Ofld[OidxGorod_r],zap); FreeSpaceString(str,3,""); tmp=Tabl.Text(Ofld[OidxRaion_r],zap); FreeSpaceString(tmp,3,""); if ( tmp!="" ) str += ","+tmp; tmp=Tabl.Text(Ofld[OidxObl_r],zap); FreeSpaceString(tmp,3,""); if ( tmp!="" ) str += ","+tmp; tmp=Tabl.Text(Ofld[OidxStrana_r],zap); FreeSpaceString(tmp,3,""); if ( tmp!="" ) str += ","+tmp; SetValueElemXML(XMLElem,OemToAnsi(str)); } else { var XMLElemChild=CreateChildElemXML(XMLDoc,XMLElem,OemToAnsi("Регион")); CreateChildElemXML(XMLDoc,XMLElemChild,OemToAnsi("РегионНазвание")); XMLElemChild=CreateChildElemXML(XMLDoc,XMLElem,OemToAnsi("Район")); CreateChildElemXML(XMLDoc,XMLElemChild,OemToAnsi("РайонНазвание")); XMLElemChild=CreateChildElemXML(XMLDoc,XMLElem,OemToAnsi("НаселенныйПункт")); XMLElemChild=CreateChildElemXML(XMLDoc,XMLElemChild,OemToAnsi("НаселенныйПунктНазвание")); str=Tabl.Text(Ofld[OidxGorod_r],zap); FreeSpaceString(str,3,""); SetValueElemXML(XMLElemChild,OemToAnsi(str)); } XMLElem= CreateChildElemXML(XMLDoc,XMLElemSotr,OemToAnsi("Гражданство")); char CountryName[140];; GetValueClassif("T_GUIDE\\country.tab",Tabl.Text(Ofld[OidxFCcitizen],zap),CountryName,120,"NAME","KOD"); FreeSpaceString(CountryName,2,""); SetValueElemXML(XMLElem,OemToAnsi(CountryName)); } // UnloadScriptModule(scrf); var XMLElemKSumm = CreateChildElemXML(XMLDoc,XMLDoc.documentElement,OemToAnsi("КонтрольныеСуммы")); var XMLElemKolZap= CreateChildElemXML(XMLDoc,XMLElemKSumm,OemToAnsi("КоличествоЗаписей")); SetValueElemXML(XMLElemKolZap,static_cast_to_string(nomPP)); //формируем имя файла char NameFile[256]; var OptionsTR = CreateObject("TransferOptions"); stccpy(NameFile,OptionsTR.GetNameFile(),256); FreeSpaceString(NameFile,3," "); str=NameFile; mkdirAll(str);//создаем каталог если его нет char Path[256]; Path=str; if ( Path[0]=='.' && Path[1]=='.' ) { fullpath(Path,Path,255); FreeSpaceString(Path,3,""); str=Path; } if (!SaveFileXMLFine(XMLDoc,str," ")) { AmbaMessageBox("Невозможно сохранить файл "+NameFile,"ошибка",0, 0); return false; } } catch(object err) { SayError(err); return 0; } catch(...) { SayUndefinedScriptError(); return 0; } return 1; } //***Импорт карт из файла xml ImportCardXML(AdrCTabl, AdrCListTabl, RcrInList) { var Tabl = CreateObject("CurPrnTbl"); Tabl.Initial(AdrCTabl); if ( !FillFldI(Tabl) ) return false; //определяем необходимые нам номера полей Tabl.Clear(); //имя файла, указанное пользователем var OptionsTR = CreateObject("TransferOptions"); char NameFile[256]; stccpy(NameFile,OptionsTR.GetNameFile(),255); FreeSpaceString(NameFile,3,""); var Date = CreateObject("KDate"); Date.SetDateII(1,mtek); try { //файл не нашли-> выходим if (access(NameFile,0)==-1) {AmbaMessageBox("Указанный файл не найден","Ошибка!",0,0);return -1;} var XMLDoc =CreateXMLobj(); LoadFileXML(XMLDoc,NameFile); //грузим данные из XML var XMLRoot=XMLDoc.documentElement; //корневой элемент var nameSpace=XMLRoot.namespaceURI; if(strlen(nameSpace)) { char s[256];sprintf(s,"xmlns:%s='%s'",prefixNameSpace,nameSpace); XMLDoc.setProperty("SelectionNamespaces",to_string(s)); } //проверяем - правильный ли файл выбрал пользователь? (проверка по наличию тега РезультатОткрытияСчетов) bool bNew=false; var rezultElem=GetElemXMLByName(XMLDoc,XMLRoot,OemToAnsi(GetFullElemName(nameSpace,"РезультатОткрытияСчетов")),bNew); if(bNew) { char tmp[256]; sprintf(tmp,"В файле %s нет данных об открытии карт",NameFile); AmbaMessageBox(static_cast_to_string(tmp),"Ошибка",MB_OK|MB_ICONERROR,0); return; } var XMLSortList=rezultElem.selectNodes(OemToAnsi(GetFullElemName(nameSpace,"Сотрудник"))); //список сотрудников в файле с результатами открытия лицевых счетов var MapCard = CreateObject("MapString"); //ключ - Ф_И_О_серия_номер паспорта;значение - номер карты (данные в DOS кодировке) MapCard.Clear(); //заполняем MapCard---> var CMsg = CreateObject("ProgressBar"); CMsg.Initial(0,100,5); CMsg.SetShowTime(static_cast_to_int(0)); int cntRcr=XMLSortList.length(); //кол-во сотрудников в файле int ii=0; //порядковый номер //цикл по элементам "Сотрудник" for(int i=0; i ii=0; for(int i=0;i //(для тех сотрудников, по которым не удалось определись ТН в качестве значения ТН ставим 0, чтобы можно было проставить ТН ручками) for (bool Cur=MapCard.InitIterator();Cur;Cur=MapCard.Next()) { ii++; if (CMsg.Msg_Proc(("Подождите немного. Идет поиск ТН для сотрудников"),100.*ii/MapCard.Size())==ESC ) { MapCard=GetEmpty(); MapTN=GetEmpty(); return 0; } char key[256];key=MapCard.GetCurKey(); var Par = CreateObject("ParamFuncRW"); Par.IInitial1(static_cast_to_string(key),"_",99); //разбиваем строку на элементы //определяем данные по сотруднику string fam =Par.Get(0); string im =Par.Get(1); string otch =Par.Get(2); string seria=Par.Get(3); string nomer=Par.Get(4); string card =MapCard.GetCurValue(); int CurRcr = Tabl.Count_Rcr()-1; // Добавляем, если надо, строку (первая строка есть и она пустая) if ( bNeedAddRcr && Tabl.Add_Rcr(CurRcr++,1)==-1 ) return 0; bNeedAddRcr =true; int tn=0; //если для данного ключа нашли в MapTN элемент - достаем значение ТН if (MapTN.IsExist(static_cast_to_string(key))) tn=atoi(MapTN.GetValue(static_cast_to_string(key))); //заполняем строку CurRcr данными по сотруднику Tabl.SText(Ifld[IidxTN] ,CurRcr,static_cast_to_string(tn )); Tabl.SText(Ifld[IidxF] ,CurRcr,static_cast_to_string(fam )); Tabl.SText(Ifld[IidxI] ,CurRcr,static_cast_to_string(im )); Tabl.SText(Ifld[IidxO] ,CurRcr,static_cast_to_string(otch )); Tabl.SText(Ifld[IidxSerDoc] ,CurRcr,static_cast_to_string(seria )); Tabl.SText(Ifld[IidxNomDoc] ,CurRcr,static_cast_to_string(nomer )); Tabl.SText(Ifld[IidxData] ,CurRcr,static_cast_to_string(Date.GetStr())); Tabl.SText(Ifld[IidxBankCard] ,CurRcr,static_cast_to_string(card )); } //заполняем таблицу данными <--- } catch(object err) { SayError(err); return 0; } catch(...) { SayUndefinedScriptError(); return 0; } Tabl.Rewrite(); return 1; } GetFullElemName(namespace,elemName) { return !strlen(namespace)?elemName:prefixNameSpace+":"+elemName; } Print_xml_otkr(codCurOrg) //печать реестра на открытие счетов { CodEnterprise=atoi(codCurOrg); var CFile=CreateObject("CurPrnFile"); // объект класса для работы с текущим файлом печати CFile.SetFlagBrowse(0); CFile.SetFlag_Print(0); var CTabl=CreateObject("CurPrnTbl"); // объект класса для работы с текущей таблицей int cr=CTabl.Count_Rcr(); // число рабочих записей в таблице char Dir[128]; // строка для текущей директории GetCurrentDirectory(128,Dir); // получаем текущую директорию (это корень каталога ZPL из которого запустили АМБу) string nm="\\"+NameCommonDir()+"\\sbr_xml_otkr.xlt"; // имя Excel'евского файла char NameXlt[256]; NameXlt = Dir+nm; // если шаблона нет, на лок.машине, и версия сетевая...то берем шаблон с // серверной машины if ( !IsLocalZPL() && IsCommonResource(NameCommonDir()) ) { //берем путь к сетевому ZPL GetCommonZPL(NameXlt,255); NameXlt = NameXlt+nm; } tPrepereOfficeForWork(); // определяем работать на Excel или на Calc (определяем какой из офисов (MS Office или OpenOffice) установлен и какой предпочтительнее) tCreateXlsObjects(static_cast_to_string(NameXlt),"Реестр на выпуск банковских карт"); // создание основных объектов try { tGetWshByIndex(1); // получаем ссылку на лист (worksheet) tWshSelect(); var CMsg = 0; // Процент выполненной работы int bTime = false; // false-показывать процент, // true-показывать оставшееся время CMsg=CreateObject("ProgressBar"); CMsg.Initial(0,100,1); CMsg.SetShowTime(static_cast_to_int(bTime)); if ( !FillFldO(CTabl) ) return false; //определяем необходимые нам номера полей string WorkFile=GetFileNameForGlobalData(); LoadGlobalData(WorkFile); tWriteStringToCell("I1",nDogovor); //номер договора tWriteStringToCell("D2",NNN); //номер реестра char str[256],value[256]; var Par = CreateObject("ParamFuncRW"); Par.IInitial1(static_cast_to_string(TipOtkrKart),"-",99); //разбиваем строку на элементы value=Par.Get(1); value+="(РУБ)";OemToChar(value,value); tWriteStringToCell("A3",value); //тип карты char Org[256],Inn[256]; GetOrgDetails(Org,Inn); str="Для сотрудников ";OemToChar(str,str); tWriteStringToCell("A4",str+Org); //название организации tWriteStringToCell("A20",Org); //название организации int ShStr=8; int j=1; char nnn[256]; int maxLen=25; //максимальная длина строки с паспортными данными (кем выдано может не влезть в колонку) // цикл по записям таблицы for (int zap=0; zap1) tRowHeight(ShStr+3,kol_str*12.75); //увеличиваем высоту строки tTextWrap(nnn,1); //разрешаем перенос ShStr+=4; j++; // добaвляем строку tInsertRows(ShStr+4,4); //tCopyRow(ShStr+1); tCopyRows(ShStr+4,4); } //_XlsObj.Columns(10).ColumnWidth = maxLen; //tColumnWidth(10,maxLen); tDeleteRows(ShStr,12); for (int row=ShStr;row1) tRowHeight(ShStr,kol_str*12.75); //увеличиваем высоту строки tTextWrap(nnn,1); //разрешаем перенос // Дата рождения str = CTabl.Text(Ofld[OidxFCdr],zap); FreeSpaceString(str,2,""); OemToChar(str,str); sprintf(nnn,"J%d",ShStr); tWriteStringToCell(nnn,str); // Пол str = CTabl.Text(Ofld[OidxFCpol],zap); FreeSpaceString(str,2,""); OemToChar(str,str); sprintf(nnn,"K%d",ShStr); tWriteStringToCell(nnn,str); // Место рождения (Область) str = CTabl.Text(Ofld[OidxObl_r],zap); FreeSpaceString(str,2,""); OemToChar(str,str); sprintf(nnn,"L%d",ShStr); tWriteStringToCell(nnn,str); // Гражданство str = CTabl.Text(Ofld[OidxFCcitizen],zap); FreeSpaceString(str,2,""); OemToChar(str,str); sprintf(nnn,"M%d",ShStr); tWriteStringToCell(nnn,str); // Адрес регистрации str = CTabl.Text(Ofld[OidxAdres_reg],zap); FreeSpaceString(str,2,""); var Adr = CreateObject("Adres"); Adr.Initial(static_cast_to_string(str),0); //индекс str = Adr.GetAdres("ИНДЕКС","НОРМА"); FreeSpaceString(str,2,""); OemToChar(str,str); sprintf(nnn,"N%d",ShStr); tWriteStringToCell(nnn,str); // Страна str = Adr.GetAdres("СТРАНА","НОРМА"); FreeSpaceString(str,2,""); OemToChar(str,str); sprintf(nnn,"O%d",ShStr); tWriteStringToCell(nnn,str); // Область str = Adr.GetAdres("РЕГИОН","НОРМА"); FreeSpaceString(str,2,""); OemToChar(str,str); sprintf(nnn,"P%d",ShStr); tWriteStringToCell(nnn,str); // Район str = Adr.GetAdres("РАЙОН","НОРМА"); FreeSpaceString(str,2,""); OemToChar(str,str); sprintf(nnn,"Q%d",ShStr); tWriteStringToCell(nnn,str); // Город str = Adr.GetAdres("ГОРОД","НОРМА"); FreeSpaceString(str,2,""); OemToChar(str,str); sprintf(nnn,"R%d",ShStr); tWriteStringToCell(nnn,str); // Поселок str = Adr.GetAdres("НПУНКТ","НОРМА"); FreeSpaceString(str,2,""); OemToChar(str,str); sprintf(nnn,"S%d",ShStr); tWriteStringToCell(nnn,str); // Улица str = Adr.GetAdres("УЛИЦА","НОРМА"); FreeSpaceString(str,2,""); OemToChar(str,str); sprintf(nnn,"T%d",ShStr); tWriteStringToCell(nnn,str); // Дом str = Adr.GetAdres("ДОМ","НОРМА"); FreeSpaceString(str,2,""); OemToChar(str,str); sprintf(nnn,"U%d",ShStr); tWriteStringToCell(nnn,str); // Корпус str = Adr.GetAdres("КОРПУС","НОРМА"); FreeSpaceString(str,2,""); OemToChar(str,str); sprintf(nnn,"V%d",ShStr); tWriteStringToCell(nnn,str); // Квартира str = Adr.GetAdres("КВ-РА","НОРМА"); FreeSpaceString(str,2,""); OemToChar(str,str); sprintf(nnn,"W%d",ShStr); tWriteStringToCell(nnn,str); // Адрес фактический str = CTabl.Text(Ofld[OidxAdres_fact],zap); FreeSpaceString(str,2,""); Adr.Initial(static_cast_to_string(str),0); //индекс str = Adr.GetAdres("ИНДЕКС","НОРМА"); FreeSpaceString(str,2,""); OemToChar(str,str); sprintf(nnn,"X%d",ShStr); tWriteStringToCell(nnn,str); // Страна str = Adr.GetAdres("СТРАНА","НОРМА"); FreeSpaceString(str,2,""); OemToChar(str,str); sprintf(nnn,"Y%d",ShStr); tWriteStringToCell(nnn,str); // Область str = Adr.GetAdres("РЕГИОН","НОРМА"); FreeSpaceString(str,2,""); OemToChar(str,str); sprintf(nnn,"Z%d",ShStr); tWriteStringToCell(nnn,str); // Район str = Adr.GetAdres("РАЙОН","НОРМА"); FreeSpaceString(str,2,""); OemToChar(str,str); sprintf(nnn,"AA%d",ShStr); tWriteStringToCell(nnn,str); // Город str = Adr.GetAdres("ГОРОД","НОРМА"); FreeSpaceString(str,2,""); OemToChar(str,str); sprintf(nnn,"AB%d",ShStr); tWriteStringToCell(nnn,str); // Поселок str = Adr.GetAdres("НПУНКТ","НОРМА"); FreeSpaceString(str,2,""); OemToChar(str,str); sprintf(nnn,"AC%d",ShStr); tWriteStringToCell(nnn,str); // Улица str = Adr.GetAdres("УЛИЦА","НОРМА"); FreeSpaceString(str,2,""); OemToChar(str,str); sprintf(nnn,"AD%d",ShStr); tWriteStringToCell(nnn,str); // Дом str = Adr.GetAdres("ДОМ","НОРМА"); FreeSpaceString(str,2,""); OemToChar(str,str); sprintf(nnn,"AE%d",ShStr); tWriteStringToCell(nnn,str); // Корпус str = Adr.GetAdres("КОРПУС","НОРМА"); FreeSpaceString(str,2,""); OemToChar(str,str); sprintf(nnn,"AF%d",ShStr); tWriteStringToCell(nnn,str); // Квартира str = Adr.GetAdres("КВ-РА","НОРМА"); FreeSpaceString(str,2,""); OemToChar(str,str); sprintf(nnn,"AG%d",ShStr); tWriteStringToCell(nnn,str); ShStr+=1; j++; // добaвляем строку tInsertRows(ShStr,1); tCopyRows(ShStr,1); } tDeleteRows(ShStr,3); for (int row=ShStr;row15) { tRowHeight(7,hig); tTextWrap("BG8",1); //разрешаем перенос } tWriteStringToCell("BG8",Org); tWriteStringToCell("BG9",Inn); // пишем в ячейку ИНН tWriteStringToCell("BG13",cr); string WorkFile=GetFileNameForGlobalData(); LoadGlobalData(WorkFile); //GetEnterpriseVar("РСЧ", str,len-1); // расчетный счет предприятия str=Schet; FreeSpaceString(str,2,""); OemToChar(str,str); tWriteStringToCell("BG10",str); // пишем в ячейку рсч tWriteStringToCell("Q4",NNN); tWriteStringToCell("AE4",dNNN); tWriteStringToCell("BG6",nDogovor); //номер договора tWriteStringToCell("BG7",dDogovor); //дата договора OprNameOsb(atoi(NOsb),WorkFile); if (strlen(NameOsb)) tWriteStringToCell("BG10",OemToAnsi(NameOsb)); //наименование ОСБ tWriteStringToCell("BG14","810"); //валюта счета //=========== if ( IsCommonCnfExist("cntRowWsh","sberbank") ) { char str[81]; GetCommonCnf("cntRowWsh","sberbank",str,80); if(atoi(str)>8) cntRowOnWshSber=atoi(str); } // цикл по записям таблицы for (int zap=0; zap1) { tDeleteRows(ShStr,1); //"итого по листу" для последней страницы char nnn[256]; sprintf(nnn,"CG%d",ShStr); tWriteNumToCell(nnn,ItogWsh); ItogWsh=0.; tMergeCells2(ShStr,1,ShStr,84,1); tWriteStringToCell2(ShStr,1,OemToAnsi("Итого по листу ("+to_string(curWsh)+"):")); tHorizontalAlignment2(ShStr,1,ShStr,1,1); ShStr++; } else tDeleteRows(ShStr,2); //общий итог sprintf(nnn,"CG%d",ShStr); tWriteNumToCell(nnn,ItogSum); //Ф.И.О., должность уполномоченного сотрудника Предприятия (Организации) { int whoFirstUpSotr=GetCommonCnfInt("WhoUpSot","sberbank"); //кого печатаем в первую строку "уполномоченный сотрудник" (0 - того кто указан в настройке fioUpSotr, 1 - руководителя из справке о предприятии ) bool bPrintFirstRuk= (whoFirstUpSotr & 0x01)!=0; char fioFirst[81]; char dolgnFirst[81]; char fioSecond[81]; char dolgnSecond[81]; if( bPrintFirstRuk ) { GetEnterpriseVar("РУКПП",fioFirst,80);FreeSpaceString(fioFirst,2,""); GetEnterpriseVar("ДОЛЖ",dolgnFirst,80);FreeSpaceString(dolgnFirst,2,""); GetCommonCnf("fioUpSotr","sberbank",fioSecond,80); FreeSpaceString(fioSecond,2,""); GetCommonCnf("dolgnUpSotr","sberbank",dolgnSecond,80); FreeSpaceString(dolgnSecond,2,""); } else { GetCommonCnf("fioUpSotr","sberbank",fioFirst,80); FreeSpaceString(fioFirst,2,""); GetCommonCnf("dolgnUpSotr","sberbank",dolgnFirst,80); FreeSpaceString(dolgnFirst,2,""); } {//первый уполномоченный: if(strlen(fioFirst)) { sprintf(nnn,"D%d",ShStr+3); tWriteStringToCell(nnn,OemToAnsi(fioFirst)); } if(strlen(dolgnFirst)) { sprintf(nnn,"BV%d",ShStr+3); tWriteStringToCell(nnn,OemToAnsi(dolgnFirst)); } } {//второй уполномоченный( в качестве второго уполномоченного печатаем сотрудника из настройки: if(strlen(fioSecond)) { sprintf(nnn,"D%d",ShStr+6); tWriteStringToCell(nnn,OemToAnsi(fioSecond)); } if(strlen(dolgnSecond)) { sprintf(nnn,"BV%d",ShStr+6); tWriteStringToCell(nnn,OemToAnsi(dolgnSecond)); } } } //скрыли лист с шаблоном tGetWshByIndex(tGetWshCount()); // получаем ссылку на лист (worksheet) tWshHide(); //выделили первую страницу и вывели итог в шапку tGetWshByIndex(1); tWshSelect(); tWriteNumToCell("BG15",ItogSum); // чтобы не было выделенной строки после всех манипуляций с копированием // выделим отдельную ячейку. tWshCellSelect(1,1); } // блок try catch(object err) { tEndXlsWork(1); // делаем форму видимой SayError(err); return 1; } catch(...) { SayUndefinedScriptError(); } tEndXlsWork(1); // делаем форму видимой return 0; } NeedCopyWsh(curWsh,ShStr) { int cntRowOnFirstWsh=cntRowOnWshSber-7; if (curWsh==1) { if (ShStr>cntRowOnFirstWsh) return true; } else if (ShStr>cntRowOnWshSber) return true; return false; } CopyWorkSheet(&curWsh,&ShStr,&ItogWsh) { //выводим итого по листу для предыдущей страницы if (curWsh>0) { char nnn[256]; sprintf(nnn,"CG%d",ShStr); tWriteNumToCell(nnn,ItogWsh); ItogWsh=0.; tMergeCells2(ShStr,1,ShStr,84,1); tWriteStringToCell2(ShStr,1,OemToAnsi("Итого по листу ("+to_string(curWsh)+"):")); tHorizontalAlignment2(ShStr,1,ShStr,1,1); //убираем подножие tDeleteRows(ShStr+1,10); } int cwsh = tGetWshCount(); // количество Worksheet'ов /*tGetWshByIndex(1); // получаем ссылку на лист (worksheet) tWshSelect();*/ // создаем новый лист копированием шаблонного листа curWsh++; tCopyWshByIndex(cwsh,"л"+static_cast_to_string(curWsh)); tGetWshByIndex(cwsh); tWshSelect(); //печатаем вторую страницу -> убираем шапку и меняем номер строки if(curWsh>1) { tDeleteRows(1,15); ShStr=3; } //n = nStart; // устанавливаем номер печатаемой строки } //название ОСБ из справочника OprNameOsb(NomerOsb,WorkFile) { //нужно определиться со справочником, в кот. будем хранить названия (NomOsb.tab) char str[256]; char N_OSB[99]; sprintf(N_OSB,"%04d",NomerOsb); char Dir[128]; GetCurrentDirectory(128,Dir); var WorkDir = Dir; string FileGUIDE=WorkDir+"\\T_GUIDE\\numbank.tab"; if ( !access(FileGUIDE,0) ) { GetValueClassif("T_GUIDE\\numbank.tab",N_OSB,str,120,"Value","Kod"); FreeSpaceString(str,2,""); } if (strlen(str)==0) { str=NameOsb; //CharToOem(str,str); if (Panel_Zapros("","Введите дополнительные данные", "Наименование ОСБ",str,30)==ESC) return ""; //OemToChar(str,str); NameOsb=str; SaveGlobalData(WorkFile); } return str; } CreateXMLobj() // Создание XML файла { UnloadScriptModule("msxml"); LoadScriptModule("msxml"); var XMLDoc = CreateXML(""); return XMLDoc; } //поля для работы с таблицей "прием карт" int IidxTN = 0 , // ТН(C_FIO) IidxF = 1 , // Фамилия (FCf) IidxI = 2 , // Имя (FCi) IidxO = 3 , // Отчество (FCo) IidxSerDoc = 4 , // Серия IidxNomDoc = 5, // Номер IidxBankCard = 6, // номер карты IidxData = 7, // дата для разноски карт (1 число тек. месяца) CountIdxI = 8; int Ifld[CountIdxI]; // массив номеров полей таблицы FillFldI(&Tabl) //============================================================================= // Находим поля в таблице //============================================================================= { Ifld[IidxTN] = Tabl.Find_Name_Fld("C_FIO"); Ifld[IidxF] = Tabl.Find_Name_Fld("FCf"); Ifld[IidxI] = Tabl.Find_Name_Fld("FCi"); Ifld[IidxO] = Tabl.Find_Name_Fld("FCo"); Ifld[IidxSerDoc] = Tabl.Find_Name_Fld("seria"); Ifld[IidxNomDoc] = Tabl.Find_Name_Fld("nomer"); Ifld[IidxBankCard] = Tabl.Find_Name_Fld("FCBankCard"); Ifld[IidxData] = Tabl.Find_Name_Fld("data"); for ( int ii=0; ii5) nnnLength=5; if(CodEnterprise==0) sprintf(NameFile,"%s%s\\%04d%0*d%s%s",dir,month,atoi(NOsb),nnnLength,atoi(NNN),SpecSimv,".xml"); else sprintf(NameFile,"%s%s\\Org_%03d\\%04d%0*d%s%s",dir,month,CodEnterprise,atoi(NOsb),nnnLength,atoi(NNN),SpecSimv,".xml"); OptionsT.SetNameFile(static_cast_to_string(NameFile)); } GetFileNameForGlobalData() { char StrP[256], CurrentDir[256]; char Dir[21], nam[81], ext[21]; string NameExe = namexe(); splitpath(NameExe,Dir,StrP,nam,ext); GetCurrentDirectory(255,CurrentDir); //CurrentDir+="\\"+NameCommonDir()+"\\_infoSberBank.xml"; CurrentDir+="\\TABLBANK\\_infoSberBank.xml"; fullpath(CurrentDir,CurrentDir,255); FreeSpaceString(CurrentDir,3,""); string WorkFile=CurrentDir; return WorkFile; } GetOldFileNameForGlobalData() { char StrP[256], CurrentDir[256]; char Dir[21], nam[81], ext[21]; string NameExe = namexe(); splitpath(NameExe,Dir,StrP,nam,ext); CurrentDir = Dir+StrP+"..\\SCRIPT\\BANK\\zSB.xml"; fullpath(CurrentDir,CurrentDir,255); FreeSpaceString(CurrentDir,3,""); string WorkFile=CurrentDir; return WorkFile; } InputGlobalData(what) { // ищем файл в локальном ZPL // Если файла нет, ищем файл в ..\\SCRIPT\\BANK\\zSB.xml // Если файл нашли, берем настройки оттуда и перезапрашиваем значения // Иначе показываем пустую панельку string TitleForm="Введите дополнительные данные "; string WorkFile=GetFileNameForGlobalData(); if ( LoadGlobalData(WorkFile)==-1 ) LoadGlobalData(GetOldFileNameForGlobalData()); if (RequestGlobalData(TitleForm,what)==ESC) return ESC; SaveGlobalData(WorkFile); return 0; } //==================================================================== // Ввод и данных RequestGlobalData(caption,what) { int resultBaseRequest=baseRequestGlobalData(caption,what); if(resultBaseRequest!=ESC && writeBikAndSchet) resultBaseRequest=RequestBikAndSchet(); return resultBaseRequest; } RequestBikAndSchet() { char schet[21],bik[10]; //первый запрос -> берем значения из справки о предприятии if (access(GetFileNameForGlobalData(),0)==-1) { GetEnterpriseVar("РСЧ",schet,20); Schet=schet; GetEnterpriseVar("БИК",bik,9); Bik=bik; } schet=Schet, bik=Bik; if (Panel_Zapros("", "Данные для перечисления", " Расчетный Счет",schet,20, " Бик ",bik,9)!=ESC) { Schet=schet; Bik=bik; return 1; } return ESC; } baseRequestGlobalData(caption,what) { //считаем порядковый номер int num=atoi(NNN); num++; int nnnLength=GetCommonCnfInt("NomRLength","sberbank"); if (nnnLength<3) nnnLength=3;else if (nnnLength>5) nnnLength=5; switch(nnnLength) { case 4:if (num>9999) num=1;break; case 5:if (num>99999) num=1;break; default:if (num>999) num=1;break; } sprintf(NNN,"%0*d",nnnLength,num); dNNN=datatek; if(what=="summ") { if (GetCommonCnfInt("unLoadPlat","sberbank")==1) { if (Panel_Zapros("", caption, " Номер ОСБ",NOsb,4, " Филиал отделения банка",FOsb,4, " Номер договора",nDogovor,8, " Дата договора",dDogovor,10, " Порядковый номер реестра",NNN,nnnLength, " Дата реестра",dNNN,10, " Номер платежного поручения",nPlat,6, " Дата платежного поручения",dPlat,10 )==ESC) return ESC; } else { if (Panel_Zapros("", caption, " Номер ОСБ",NOsb,4, " Филиал отделения банка",FOsb,4, " Номер договора",nDogovor,8, " Дата договора",dDogovor,10, " Порядковый номер реестра",NNN,nnnLength, " Дата реестра",dNNN,10 )==ESC) return ESC; } } else if(what=="otkr") { if (Panel_Zapros("", caption, " Номер ОСБ",NOsb,4, " Филиал отделения банка",FOsb,4, " Номер договора",nDogovor,8, " Дата договора",dDogovor,10, " Порядковый номер реестра",NNN,nnnLength )==ESC) return ESC; } return 1; } //==================================================================== // Сохраняет глобальные данные. Принимает имя файла. SaveGlobalData(WorkFile) { var XMLDoc = CreateXMLobj(); if (access(WorkFile,0)==0) //файл уже существует - загрузим его и добавим "новые" данные { LoadFileXML(XMLDoc,WorkFile); //грузим данные из XML } else { XMLDoc.documentElement= CreateElemXML(XMLDoc,OemToAnsi("ДопДанные")); } var XMLRoot=XMLDoc.documentElement; bool bNew; var XMLElem=XMLRoot; if(CodEnterprise>0) //таблицы подготовили "по организациям" { char s[256];sprintf(s,"Орг_%03d",CodEnterprise); XMLElem=GetElemXMLByNameFirstChildOnly(XMLDoc,XMLRoot,OemToAnsi(s),bNew); // Элемент для "текущей" организации } var XMLChildElem; //данные в разрезе организаций { XMLChildElem = GetElemXMLByNameFirstChildOnly(XMLDoc,XMLElem,OemToAnsi("НомерОСБ"),bNew); FreeSpaceString(NOsb,2,""); SetValueElemXML(XMLChildElem,static_cast_to_string(NOsb)); XMLChildElem = GetElemXMLByNameFirstChildOnly(XMLDoc,XMLElem,OemToAnsi("НаименованиеОСБ"),bNew); FreeSpaceString(NameOsb,2,""); SetValueElemXML(XMLChildElem,OemToAnsi(NameOsb)); XMLChildElem = GetElemXMLByNameFirstChildOnly(XMLDoc,XMLElem,OemToAnsi("ФилиалОтделенияБанка"),bNew); FreeSpaceString(FOsb,2,""); SetValueElemXML(XMLChildElem,static_cast_to_string(FOsb)); XMLChildElem = GetElemXMLByNameFirstChildOnly(XMLDoc,XMLElem,OemToAnsi("НомерДоговора"),bNew); FreeSpaceString(nDogovor,2,""); SetValueElemXML(XMLChildElem,static_cast_to_string(nDogovor)); XMLChildElem = GetElemXMLByNameFirstChildOnly(XMLDoc,XMLElem,OemToAnsi("ДатаДоговора"),bNew); FreeSpaceString(dDogovor,2,""); SetValueElemXML(XMLChildElem,static_cast_to_string(dDogovor)); XMLChildElem = GetElemXMLByNameFirstChildOnly(XMLDoc,XMLElem,OemToAnsi("ПорядковыйНомерРеестра"),bNew); FreeSpaceString(NNN,2,""); SetValueElemXML(XMLChildElem,static_cast_to_string(NNN)); XMLChildElem = GetElemXMLByNameFirstChildOnly(XMLDoc,XMLElem,OemToAnsi("ДатаРеестра"),bNew); FreeSpaceString(dNNN,2,""); SetValueElemXML(XMLChildElem,static_cast_to_string(dNNN)); XMLChildElem = GetElemXMLByNameFirstChildOnly(XMLDoc,XMLElem,OemToAnsi("ПлатежноеПоручение"),bNew); FreeSpaceString(nPlat,2,""); SetValueElemXML(XMLChildElem,static_cast_to_string(nPlat)); XMLChildElem = GetElemXMLByNameFirstChildOnly(XMLDoc,XMLElem,OemToAnsi("ДатаПлатежногоПоручения"),bNew); FreeSpaceString(dPlat,2,""); SetValueElemXML(XMLChildElem,static_cast_to_string(dPlat)); if(writeBikAndSchet) { XMLChildElem = GetElemXMLByNameFirstChildOnly(XMLDoc,XMLElem,OemToAnsi("РасчетныйСчетОрганизации"),bNew); FreeSpaceString(Schet,2,""); SetValueElemXML(XMLChildElem,static_cast_to_string(Schet)); XMLChildElem = GetElemXMLByNameFirstChildOnly(XMLDoc,XMLElem,OemToAnsi("БИК"),bNew); FreeSpaceString(Bik,2,""); SetValueElemXML(XMLChildElem,static_cast_to_string(Bik)); } } //общие данные { XMLChildElem = GetElemXMLByNameFirstChildOnly(XMLDoc,XMLRoot,OemToAnsi("ТипКарт"),bNew); FreeSpaceString(TipOtkrKart,2,""); SetValueElemXML(XMLChildElem,static_cast_to_string(TipOtkrKart)); XMLChildElem = GetElemXMLByNameFirstChildOnly(XMLDoc,XMLRoot,OemToAnsi("КатегорияНаселения"),bNew); FreeSpaceString(CategoryOfPopulation,2,""); SetValueElemXML(XMLChildElem,static_cast_to_string(CategoryOfPopulation)); XMLChildElem = GetElemXMLByNameFirstChildOnly(XMLDoc,XMLRoot,OemToAnsi("ПризнакЗарплатный"),bNew); FreeSpaceString(SignSalaryCard,2,""); SetValueElemXML(XMLChildElem,static_cast_to_string(SignSalaryCard)); XMLChildElem = GetElemXMLByNameFirstChildOnly(XMLDoc,XMLRoot,OemToAnsi("ТарифТекущийГод"),bNew); FreeSpaceString(RateForCurrentYear,2,""); SetValueElemXML(XMLChildElem,static_cast_to_string(RateForCurrentYear)); XMLChildElem = GetElemXMLByNameFirstChildOnly(XMLDoc,XMLRoot,OemToAnsi("ТарифСледующийГод"),bNew); FreeSpaceString(RateForNextYear,2,""); SetValueElemXML(XMLChildElem,static_cast_to_string(RateForNextYear)); } //DeleteFile(WorkFile); if ( !SaveFileXMLFine(XMLDoc,WorkFile," ") ) { char s[256]; sprintf(s,"Невозможно создать файл %s",WorkFile); AmbaMessageBox(static_cast_to_string(s),"ошибка",0,0); return false; } XMLDoc = 0; return 1; } //==================================================================== // Загрузка данных. LoadGlobalData(WorkFile) { char tmp[81];GetCommonCnf("noWriteBik","sberbank",tmp,80); writeBikAndSchet=(atoi(tmp)!=1); //файл не нашли-> выходим if (access(WorkFile,0)==-1) return -1; var XMLDoc =CreateXMLobj(); LoadFileXML(XMLDoc,WorkFile); //грузим данные из XML //инициализируем переменные данными из файла bool bNew=false; var XMLRoot=XMLDoc.documentElement; //корневой элемент var XMLElem=XMLRoot; if(CodEnterprise>0) { char s[256];sprintf(s,"Орг_%03d",CodEnterprise); XMLElem=GetElemXMLByNameFirstChildOnly(XMLDoc,XMLRoot,OemToAnsi(s),bNew); } var Elem; //данные в разрезе организаций { Elem=GetElemXMLByNameFirstChildOnly(XMLDoc,XMLElem,OemToAnsi("НомерОСБ"),bNew); NOsb=Elem.text; Elem=GetElemXMLByNameFirstChildOnly(XMLDoc,XMLElem,OemToAnsi("НаименованиеОСБ"),bNew); NameOsb=Elem.text; NameOsb=AnsiToOem(NameOsb); Elem=GetElemXMLByNameFirstChildOnly(XMLDoc,XMLElem,OemToAnsi("ФилиалОтделенияБанка"),bNew); FOsb=Elem.text; Elem=GetElemXMLByNameFirstChildOnly(XMLDoc,XMLElem,OemToAnsi("НомерДоговора"),bNew); nDogovor=Elem.text; Elem=GetElemXMLByNameFirstChildOnly(XMLDoc,XMLElem,OemToAnsi("ДатаДоговора"),bNew); dDogovor=Elem.text; Elem=GetElemXMLByNameFirstChildOnly(XMLDoc,XMLElem,OemToAnsi("ПорядковыйНомерРеестра"),bNew); NNN=Elem.text; Elem=GetElemXMLByNameFirstChildOnly(XMLDoc,XMLElem,OemToAnsi("ДатаРеестра"),bNew); dNNN=Elem.text; Elem=GetElemXMLByNameFirstChildOnly(XMLDoc,XMLElem,OemToAnsi("ПлатежноеПоручение"),bNew); nPlat=Elem.text; Elem=GetElemXMLByNameFirstChildOnly(XMLDoc,XMLElem,OemToAnsi("ДатаПлатежногоПоручения"),bNew); dPlat=Elem.text; if(writeBikAndSchet) { Elem=GetElemXMLByNameFirstChildOnly(XMLDoc,XMLElem,OemToAnsi("РасчетныйСчетОрганизации"),bNew); Schet=Elem.text; Elem=GetElemXMLByNameFirstChildOnly(XMLDoc,XMLElem,OemToAnsi("БИК"),bNew); Bik=Elem.text; if(bNew) //берем "Расчетный счет" и "Бик" из справки о предприятии { char schet[21],bik[10]; GetEnterpriseVar("РСЧ",schet,20); GetEnterpriseVar("БИК",bik,9); Schet=schet; Bik=bik; } } } //общие данные { Elem=GetElemXMLByNameFirstChildOnly(XMLDoc,XMLRoot,OemToAnsi("ТипКарт"),bNew); TipOtkrKart=Elem.text; Elem=GetElemXMLByNameFirstChildOnly(XMLDoc,XMLRoot,OemToAnsi("КатегорияНаселения"),bNew); CategoryOfPopulation=Elem.text; Elem=GetElemXMLByNameFirstChildOnly(XMLDoc,XMLRoot,OemToAnsi("ПризнакЗарплатный"),bNew); SignSalaryCard=Elem.text; Elem=GetElemXMLByNameFirstChildOnly(XMLDoc,XMLRoot,OemToAnsi("ТарифТекущийГод"),bNew); RateForCurrentYear=Elem.text; Elem=GetElemXMLByNameFirstChildOnly(XMLDoc,XMLRoot,OemToAnsi("ТарифСледующийГод"),bNew); RateForNextYear=Elem.text; } XMLDoc=0; return 0; } //====================================== ModifDate(date) //на входе дата в виде строки ДД.ММ.ГГГГ(разделитель не важен) //на выходе дата в формате YYYY-MM-DD { FreeSpaceString(date,2,""); if (strlen(date)==0) return ""; var d=KDateFromStr(date); if (!d.IsValid()) return ""; char delim[256];GetCommonCnf("SimForData","sberbank",delim,2); char rez[256]; sprintf(rez,"%04d%c%02d%c%02d",d.GetYear(),delim[0],d.GetMonth(),delim[0],d.GetDay()); return rez; } ModifPol(str) //пол-мужской = латинская M (от male), женский = латинская F (от female) { if(Format!=1) { if ((str=="м")||(str=="М")) return "M"; if ((str=="ж")||(str=="Ж")) return "F"; } else { if ((str=="м")||(str=="М")) return "М"; if ((str=="ж")||(str=="Ж")) return "Ж"; } return ""; } AddAdresToXML(&XMLDoc,&XMLElem,what,adres_str) /* добавляем в XML компонент "Адрес" название элемента определено переменной what (у сбербанка возможны 3 значения: "АдресМестаРаботы", "АдресПрописки", "АдресПроживания") */ //переменные для хранения "элементов" адреса { char strana [256], region [256], region_t[256], raion [256], raion_t [256], gorod [256], gorod_t [256], nasp [256], nasp_t [256], ul [256], ul_t [256], index [256], dom [256], kor [256], kv [256]; var Adres = CreateObject("Adres"); //объкт для работы с адресом Adres.Initial(static_cast_to_string(adres_str),0); //инициализируем strana = Adres.GetAdres("СТРАНА" ,"ЗНАЧ"); FreeSpaceString(strana ,2,""); region = Adres.GetAdres("РЕГИОН" ,"ЗНАЧ"); FreeSpaceString(region ,2,""); raion = Adres.GetAdres("РАЙОН" ,"ЗНАЧ"); FreeSpaceString(raion ,2,""); gorod = Adres.GetAdres("ГОРОД" ,"ЗНАЧ"); FreeSpaceString(gorod ,2,""); nasp = Adres.GetAdres("НПУНКТ" ,"ЗНАЧ"); FreeSpaceString(nasp ,2,""); ul = Adres.GetAdres("УЛИЦА" ,"ЗНАЧ"); FreeSpaceString(ul ,2,""); dom = Adres.GetAdres("ДОМ" ,"ЗНАЧ"); FreeSpaceString(dom ,2,""); kor = Adres.GetAdres("КОРПУС" ,"ЗНАЧ"); FreeSpaceString(kor ,2,""); kv = Adres.GetAdres("КВ-РА" ,"ЗНАЧ"); FreeSpaceString(kv ,2,""); index = Adres.GetAdres("ИНДЕКС" ,"ЗНАЧ"); FreeSpaceString(index ,2,""); region_t = Adres.GetAdres("РЕГИОН" ,"ТИП"); FreeSpaceString(region_t,2,""); raion_t = Adres.GetAdres("РАЙОН" ,"ТИП"); FreeSpaceString(raion_t ,2,""); gorod_t = Adres.GetAdres("ГОРОД" ,"ТИП"); FreeSpaceString(gorod_t ,2,""); nasp_t = Adres.GetAdres("НПУНКТ" ,"ТИП"); FreeSpaceString(nasp_t ,2,""); ul_t = Adres.GetAdres("УЛИЦА" ,"ТИП"); FreeSpaceString(ul_t ,2,""); //добавлем адрес в XML файл var XMLAdres= CreateChildElemXML(XMLDoc,XMLElem,OemToAnsi(what)); var XMLAdresElem= CreateChildElemXML(XMLDoc,XMLAdres,OemToAnsi("Страна")); var XMLAdresChildElem= CreateChildElemXML(XMLDoc,XMLAdresElem,OemToAnsi("СтранаНазвание")); SetValueElemXML(XMLAdresChildElem,OemToAnsi(strana)); XMLAdresChildElem= CreateChildElemXML(XMLDoc,XMLAdresElem,OemToAnsi("СтранаКод")); SetValueElemXML(XMLAdresChildElem,Adres.GetCountryCod()); XMLAdresElem= CreateChildElemXML(XMLDoc,XMLAdres,OemToAnsi("Регион")); XMLAdresChildElem= CreateChildElemXML(XMLDoc,XMLAdresElem,OemToAnsi("РегионНазвание")); SetValueElemXML(XMLAdresChildElem,OemToAnsi(region)); XMLAdresChildElem= CreateChildElemXML(XMLDoc,XMLAdresElem,OemToAnsi("РегионСокращение")); SetValueElemXML(XMLAdresChildElem,OemToAnsi(region_t)); XMLAdresElem= CreateChildElemXML(XMLDoc,XMLAdres,OemToAnsi("Район")); XMLAdresChildElem= CreateChildElemXML(XMLDoc,XMLAdresElem,OemToAnsi("РайонНазвание")); SetValueElemXML(XMLAdresChildElem,OemToAnsi(raion)); XMLAdresChildElem= CreateChildElemXML(XMLDoc,XMLAdresElem,OemToAnsi("РайонСокращение")); SetValueElemXML(XMLAdresChildElem,OemToAnsi(raion_t)); XMLAdresElem= CreateChildElemXML(XMLDoc,XMLAdres,OemToAnsi("Город")); XMLAdresChildElem= CreateChildElemXML(XMLDoc,XMLAdresElem,OemToAnsi("ГородНазвание")); SetValueElemXML(XMLAdresChildElem,OemToAnsi(gorod)); XMLAdresChildElem= CreateChildElemXML(XMLDoc,XMLAdresElem,OemToAnsi("ГородСокращение")); SetValueElemXML(XMLAdresChildElem,OemToAnsi(gorod_t)); XMLAdresElem= CreateChildElemXML(XMLDoc,XMLAdres,OemToAnsi("НаселенныйПункт")); XMLAdresChildElem= CreateChildElemXML(XMLDoc,XMLAdresElem,OemToAnsi("НаселенныйПунктНазвание")); SetValueElemXML(XMLAdresChildElem,OemToAnsi(nasp)); XMLAdresChildElem= CreateChildElemXML(XMLDoc,XMLAdresElem,OemToAnsi("НаселенныйПунктСокращение")); SetValueElemXML(XMLAdresChildElem,OemToAnsi(nasp_t)); XMLAdresElem= CreateChildElemXML(XMLDoc,XMLAdres,OemToAnsi("Улица")); XMLAdresChildElem= CreateChildElemXML(XMLDoc,XMLAdresElem,OemToAnsi("УлицаНазвание")); SetValueElemXML(XMLAdresChildElem,OemToAnsi(ul)); XMLAdresChildElem= CreateChildElemXML(XMLDoc,XMLAdresElem,OemToAnsi("УлицаСокращение")); SetValueElemXML(XMLAdresChildElem,OemToAnsi(ul_t)); XMLAdresElem= CreateChildElemXML(XMLDoc,XMLAdres,OemToAnsi("Индекс")); SetValueElemXML(XMLAdresElem,OemToAnsi(index)); XMLAdresElem= CreateChildElemXML(XMLDoc,XMLAdres,OemToAnsi("Дом")); SetValueElemXML(XMLAdresElem,OemToAnsi(dom)); XMLAdresElem= CreateChildElemXML(XMLDoc,XMLAdres,OemToAnsi("Корпус")); SetValueElemXML(XMLAdresElem,OemToAnsi(kor)); XMLAdresElem= CreateChildElemXML(XMLDoc,XMLAdres,OemToAnsi("Квартира")); SetValueElemXML(XMLAdresElem,OemToAnsi(kv)); } string prefixNameSpace="ns";