// Передача сумм в ПАО "Открытие" var CTabl; // объект класса для работы таблицей char NumDog[16]; // Номер договора char DateD[11]; // Дата договора char OtdBank[10]; // Отделение банка char Val[4]; // Валюта операции char VidZ[3]; // Вид зачисления char NNN[6]; //порядковый номер реестра char dr[11]; // дата реестра char dt[11]; // Текущая дата char Org[256],Inn[256]; string Bik; string Schet; int idxFam = 1, idxIm = 2, idxOtch = 3, idxBankCard = 4, idxSumm = 5, idxOrder = 6, idxVal = 7, idxIncomeTypeCode = 8, idxPenaltySum = 9, CountIdx = 10; int fld[CountIdx]; // массив номеров полей таблицы GetOrgDetails(&Org,&Inn) { char str[256]; GetEnterpriseVar("ИМЯП", Org,100); // Наименование предприятия или отделения иностранной организации FreeSpaceString(Org,2,""); OemToChar(Org,Org); GetEnterpriseVar("ИНН", Inn,22); FreeSpaceString(Inn,2,""); } GetOrgCode(Tabl) { var ArrOrg; if ( Tabl.GetFilterByOrg(ArrOrg) ) return atoi(ArrOrg[0]); return 0; } GetEnterpriseVarByCode(orgCode,psedo) { char str[256]; if ( !orgCode ) GetEnterpriseVar(psedo, str, 255); else str=GetEnterpriseRefValue(orgCode,psedo); return RTrimS(str); } //***Формирование файла xml на зачисление сумм Open_SumXML(AdrCTabl, AdrCListTabl, RcrInList) { //создаем объект для работы с таблицей var CTabl = CreateObject("CurPrnTbl"); CTabl.Initial(AdrCTabl); //определяем номера полей в таблице if ( !FillFld(CTabl) ) return false; int count_rec=CTabl.Count_Rcr(); try { var XMLDoc= CreateXMLobj(); var XMLDoc1 = CreateElemXML(XMLDoc,OemToAnsi("СчетаПК")); XMLDoc.documentElement= XMLDoc1; int orgCode = GetOrgCode(CTabl); Org=GetEnterpriseVarByCode(orgCode,"ИМЯП"); Inn=GetEnterpriseVarByCode(orgCode,"ИНН"); char schet[21],bik[10]; Schet=GetEnterpriseVarByCode(orgCode,"РСЧ"); Bik=GetEnterpriseVarByCode(orgCode,"БИК"); Val = CTabl.Text(fld[idxVal],0); 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\\open_s.dat"; fullpath(CurrentDir,CurrentDir,255); FreeSpaceString(CurrentDir,3,""); string WorkFile=CurrentDir; if ( LoadGlobalData(WorkFile)==-1 ) return 0; SetAttrElemXML(XMLDoc.documentElement,"xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance"); SetAttrElemXML(XMLDoc.documentElement,"xsi:noNamespaceSchemaLocation","Wages.xsd"); XMLDoc1.setAttribute(OemToAnsi("ДатаФормирования"),static_cast_to_string(ModifDate(datatek))); XMLDoc1.setAttribute(OemToAnsi("НомерДоговора"),static_cast_to_string(NumDog)); XMLDoc1.setAttribute(OemToAnsi("ДатаДоговора"),static_cast_to_string(DateD)); XMLDoc1.setAttribute(OemToAnsi("НаименованиеОрганизации"),static_cast_to_string(Org)); XMLDoc1.setAttribute(OemToAnsi("ИНН"),static_cast_to_string(Inn)); XMLDoc1.setAttribute(OemToAnsi("РасчетныйСчетОрганизации"),static_cast_to_string(Schet)); XMLDoc1.setAttribute(OemToAnsi("КодВалюты"),static_cast_to_string(Val)); XMLDoc1.setAttribute(OemToAnsi("БИК"),static_cast_to_string(Bik)); XMLDoc1.setAttribute(OemToAnsi("Зачисление"),static_cast_to_string(VidZ)); 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 nomPP=0; char str[256]; double ItogSum = 0; for (int zap=0; zap999 ) nom=1; sprintf(NNN,"%d",nom); } else { Text_Text(dt,datatek,10); NNN="1"; } if (InputPGlobalData(TitleForm)==ESC) return ESC; SaveGlobalData(WorkFile); return 0; } //==================================================================== // Задаем значения по умолчанию SetGlobalDefault() { strcpy(NumDog,"123456781234567") ; // Номер договора strcpy(DateD,"01.01.2017") ; // Дата договора strcpy(OtdBank,"123456789"); // Отделение банка strcpy(VidZ,"01"); // Вид зачисления strcpy(dr,datatek); // Вид зачисления return 0; } //==================================================================== // Ввод и данных InputPGlobalData(caption) { if (ESC==Panel_Zapros(" Введите дополнительные данные ","", " Номер договора",NumDog, 16, " Дата договора",DateD, 10, " Отделение банка", OtdBank,10, " Вид зачисления", VidZ,3, " Номер реестра", NNN,6, " Дата реестра", dr,10) ) return ESC; return 1; } //==================================================================== // Сохраняет глобальные данные. Принимает имя файла. SaveGlobalData(WorkFile) { int file; if ((file = CreateFile(WorkFile, 1073741824, 2, 0, 2, 128, 0)) == -1) { AmbaMessageBox("Не могу открыть файл "+WorkFile+" для записи.","Ошибка",1,0); return ESC; } int len; WriteFile(file,NumDog,16,len,0); WriteFile(file,DateD,11,len,0); WriteFile(file,OtdBank,10,len,0); WriteFile(file,VidZ,3,len,0); WriteFile(file,NNN,6,len,0); WriteFile(file,dr,10,len,0); CloseHandle(file); return 1; } //==================================================================== // Загрузка данных. Принимает дескриптор файла. LoadGlobalData(WorkFile) { int file = CreateFile(WorkFile,2147483648 , 0 , 0 , 3 , 0, 0); if (file==-1) return -1; int len; ReadFile(file,NumDog,16,len,0); NumDog[15]='\0'; ReadFile(file,DateD,11,len,0); DateD[10]='\0'; ReadFile(file,OtdBank,10,len,0); OtdBank[9] ='\0'; ReadFile(file,VidZ,3,len,0); VidZ[2] ='\0'; ReadFile(file,NNN,6,len,0); NNN[5] ='\0'; ReadFile(file,dr,10,len,0); dr[10] ='\0'; CloseHandle(file); return 0; } //================================================================ // функция для генерации имени файла //================================================================ MNOpenSum ( AdrCTabl, // адрес передаваемой таблицы AdrCListTabl, // адрес списка таблиц RcrInList // номер записи в списке таблиц ) { var CTabl = CreateObject("CurPrnTbl"); CTabl.Initial(AdrCTabl); int orgCode = GetOrgCode(CTabl); Inn=GetEnterpriseVarByCode(orgCode,"ИНН"); var OptionsT = CreateObject("TransferOptions"); if (InputGlobalData()==ESC) return 0; char NameFile[512]; sprintf (NameFile,"C:\\open\\ZPR_%d_%s_%s.xml",atoi(NNN), static_cast_to_string(ModifDate2(dr)),Inn); OptionsT.SetNameFile(static_cast_to_string(NameFile)); } //================================================================ // функция для генерации имени файла //================================================================ MNOpenSum2 ( AdrCTabl, // адрес передаваемой таблицы AdrCListTabl, // адрес списка таблиц RcrInList // номер записи в списке таблиц ) { var OptionsT = CreateObject("TransferOptions"); if (InputGlobalData()==ESC) return 0; char NameFile[512]; sprintf (NameFile,"C:\\open\\%s_%06d.xml", NumDog,atoi(NNN)); OptionsT.SetNameFile(static_cast_to_string(NameFile)); } //====================================================== // ПЕЧАТНЫЕ ФОРМЫ PrintOtkrytie() { var CFile=CreateObject("CurPrnFile"); // объект класса для работы с текущим файлом печати CFile.SetFlagBrowse(0); // запрещаем просмотр CFile.SetFlag_Print(0); CTabl=CreateObject("CurPrnTbl"); // объект класса для работы с текущей таблицей int cr=CTabl.Count_Rcr(); // число рабочих записей в таблице var xls=CreateObject("Excel.Application"); // создаем объект Excel.Application, т.е. запускаем Excel, если он установлен конечно char Dir[128]; // строка для текущей директории GetCurrentDirectory(128,Dir); // получаем текущую директорию (это корень каталога ZPL из которого запустили АМБу) string nm="otkrytie.xlt"; // имя Excel'евского файла var WorkDir = Dir + "\\"+NameCommonDir()+"\\"; xls.Caption=OemToAnsi("Список на зачисление денежных средств");// заголовок (в windows кодировке) var Workb=xls.Workbooks.Add(WorkDir+nm); // открываем в Excel'е наш файл ls.xls var wsh = Workb.Worksheets.Item(1); // создаем ссылку на на наш worksheet чтобы избежать впоследствии длинных записей wsh.Select(); var CMsg = 0; // Процент выполненной работы int bTime = false; // false-показывать процент, // true-показывать оставшееся время CMsg=CreateObject("ProgressBar"); CMsg.Initial(0,100,1); CMsg.SetShowTime(static_cast_to_int(bTime)); if ( !FillFld(CTabl) ) return false; //определяем необходимые нам номера полей double sum, ItogSum=0; char Org[256], Ruk[256], RukDoldjn[256], GlBuh[256], GlBuhDoljn[256]; int orgCode = GetOrgCode(CTabl); Org=GetEnterpriseVarByCode(orgCode,"ИМЯП"); // Заполняем наименование организации OemToChar(Org,Org); WriteToCell(wsh,"A2",Org); // пишем в ячейку название организации // Заполняем подножие списка Должности и ФИО руководителей RukDoldjn=OemToAnsi(GetEnterpriseVarByCode(orgCode,"ДОЛЖ")); Ruk=OemToAnsi(GetEnterpriseVarByCode(orgCode,"РУКП")); GlBuhDoljn=OemToAnsi(GetEnterpriseVarByCode(orgCode,"ДОЛЖБУХ")); GlBuh=OemToAnsi(GetEnterpriseVarByCode(orgCode,"ГЛБУХ")); // Заполняем месяц и дату зачисления char reestr[256]; sprintf(reestr,"Реестр № _____ от __________ "); OemToChar(reestr,reestr); FreeSpaceString(reestr,3,""); WriteToCell(wsh,"A3",reestr); int ShStr=5; int j=1; char nnn[256], str[256], str2[256], str3[256], dog_num[256]; try { // цикл по записям таблицы for (int zap=0; zap0) { // добaвляем строку wsh.Rows(ShStr+1).Insert(); } j++; ShStr++; } wsh.Rows(ShStr+1).Delete(); wsh.Rows(ShStr).Delete(); //ShStr++; //Itog summa sprintf(nnn,"F%d",ShStr); sprintf(str,"%.2f",ItogSum); OemToChar(str,str); WriteToCell(wsh,nnn,str); sprintf(nnn,"A%d",ShStr+3); WriteToCell(wsh,nnn,RukDoldjn + " __________________ " + Ruk); sprintf(nnn,"A%d",ShStr+6); WriteToCell(wsh,nnn,GlBuhDoljn + " __________________ " + GlBuh); xls.Visible=true; // делаем Excel видимым } catch(object err) { SayError(err); } catch(...) { ; } return 0; } WriteToCell(&WSheet,&Cell,&strok) // WSheet - ссылка на worksheet // Cell - имя ячейки // str - значение, которое требуется записать в ячейку Cell рабочего листа WSheet { string t = static_cast_to_string(strok); if ( strlen(t) ) WSheet.Range(static_cast_to_string(Cell)).Value = t; return 0; }