int CountOffsetsForKvitokToEmail; int ctnKvitokToEmail=99999; //имхо больше 100тыс. квитков не будет int OffsetsForKvitokToEmail[ctnKvitokToEmail]; string EmailsForKvitokToEmail[ctnKvitokToEmail]; string TnFioForKvitokToEmail[ctnKvitokToEmail]; int CheckMonthForKvitokToEmail[ctnKvitokToEmail]; int kvitokToEmail=0; //флаг отправки квитков (1- отправляем, 0- не отправляем) string fileNameForLog; // имя файла с логами отправленных квитков за тек мес int ShowMessage[2]; int cntCheckSuccessfulSend=0; bool logForKvitokToZplNet=false; //сохраняем лог в сетевом zpl Send_Checks() { string NameFile;//путь для временного файла //сохраняем печатную форму в файл CheckToFile(NameFile); //открываем файл с квитками char buf[256]; int handle = open(NameFile,O_RDONLY | O_TEXT,0); if ( handle==-1 ) { sprintf(buf,"Ошибка при открытии файла с квитками\n%s",html); AmbaMessageBox(buf,"АМБа. Ошибка при отправке квитков по email",MB_OK|MB_ICONERROR, 0); return -1; } //проверяем наличие файла с настройками SMTP сервера //если файла нет - вызываем панельку int len=256; char path[256]; //объявляем массив типа char, в который запишем путь до локального ZPL GetCurrentDirectory(len-1,path); path+="\\_infoSmtp"; if ( access(path,0) ) NetDialogs().InitSmtp(); var CMsg=CreateObject("ProgressBar"); CMsg.Initial(0,100,1); CMsg.SetShowTime(static_cast_to_int(false)); //цикл по квиткам var Month=CreateObject("KMonth"); for(int i=1;i<=CountOffsetsForKvitokToEmail;i++) { if (CMsg.Msg_Proc("Подождите немного. Идет рассылка квитков.",100.*i/CountOffsetsForKvitokToEmail)==ESC ) return 0; long l=lseek(handle,OffsetsForKvitokToEmail[i-1],SEEK_SET); char strtmp[OffsetsForKvitokToEmail[i]-OffsetsForKvitokToEmail[i-1]+1]; int r=read(handle,strtmp,OffsetsForKvitokToEmail[i]-OffsetsForKvitokToEmail[i-1]); strtmp=SubStr(strtmp,0,r); Month.SetMonth(atoi(CheckMonthForKvitokToEmail[i])); string namemonth = Month.NameMonth(); //отправляем квиток CheckToEmail(i,strtmp,namemonth); } //чистим за собой close(handle); DeleteFile(NameFile); AskAndShowLogChecks(); } AskAndShowLogChecks() { if (AmbaMessageBox("Успешно отправлено " +to_string(cntCheckSuccessfulSend) + "(из "+ to_string(GetVarValue("ВСЕГО_КВИТКОВ")) + ") квитков \r Показать лог отправки?" ,"Отправка квитков",MB_YESNO|MB_ICONQUESTION,0)==IDYES) { try { ShellExecute(0,"open",fileNameForLog,0,0,1); } catch(...) { AmbaMessageBox("Ошибка при запуске notepad","",0,0); } } } InitOffsets(cnt) { ShowMessage[0]=ShowMessage[1]=0; CountOffsetsForKvitokToEmail=0; for (int i=0;i5) { //на входе текст квитк в кодировке 866, на выходе html в кодировку 1251 string textBody=MakeHtmlBody(to_string(text)); string subject ="Квиток за " + namemonth; //Тема сообщения //удалось отправить письмо string from="";//адрес отправителя возьмем из панельки sendStatus=NetDialogs().SendMailHtml(from,email,OemToAnsi(subject),textBody); } } catch(...) { //... } var infoForLog=MakeLogInfo(tn,fio,email,sendStatus); AddLogFile(fileNameForLog,infoForLog); } MakeHtmlBody(dosText) { string s=""+ ""+ ""+ ""+ ""+ ""+ ""+ "
"+ ""+ "
"+
                      OemToAnsi(dosText)+
                    "
"+ "
"+ "
"+ ""+ ""; return s; } MakeLogInfo(tn,fio,email,sendStatus) { int cntPatrInfo=6; string InfoForLog[cntPatrInfo]; /*1 - ТН 2 - ФИО 3 - email 4 - статус отправки(отправлен/не отправлен) 5 - Сообщение*/ InfoForLog[1]=tn; InfoForLog[2]=fio; InfoForLog[3]=email; if(strlen(email)>5) { if(sendStatus) { InfoForLog[4]="Отправлен"; cntCheckSuccessfulSend++; InfoForLog[5]="квиток отправлен сотруднику " + fio + " на адрес " + email; } else { InfoForLog[4]="Не отправлен"; InfoForLog[5]="ошибка при отправке квитка сотруднику " + fio + " на адрес " + email; } } else { InfoForLog[4]="Не отправлен"; InfoForLog[5]="У сотрудника "+fio+" не заполнен email"; if (!ShowMessage[0]) MsgBoxCheck(OemToAnsi(InfoForLog[5]),EXT_NAME_PR_ERR,1,"",ShowMessage[0]); } return InfoForLog; } AddLogFile(fileName,InfoForLog) { char str[1024]; if (logForKvitokToZplNet) { //сохраняем информацию вида: время отправки;ТН;ФИО;email;СтатусОтправки;Сообщение;Имя пользователя sprintf(str,"%s;%s;%s;%s;%s;%s;%s",GetTimeForMessage(),InfoForLog[1],InfoForLog[2],InfoForLog[3],InfoForLog[4],InfoForLog[5],GetUserName()); } else { //сохраняем информацию вида: время;ТН;ФИО;email;СтатусОтправки;Cообщение sprintf(str,"%s;%s;%s;%s;%s;%s",GetTimeForMessage(),InfoForLog[1],InfoForLog[2],InfoForLog[3],InfoForLog[4],InfoForLog[5]); } try { NetDialogs().AddStringToFile(to_string(fileName), OemToAnsi(str)); NetDialogs().toLog_Debug(OemToAnsi(str)); } catch(...) { ; } } GetTimeForMessage() { char IDTime[256]; struct SYSTEMTIME st; GetLocalTime(st); sprintf(IDTime,"%02d.%02d.%04d %02d:%02d:%02d",st.wDay,st.wMonth,st.wYear, st.wHour, st.wMinute, st.wSecond); return to_string(IDTime); }