import "layer92.dll" unsigned int NumOfOrder=0; /* переменная для отслежеивания порядкового номера */ /* печатаемой записи при печати в формате пользователя */ double Itog=0; int LenStrItog=0; User_Print_Title_Script( HandleOutputFile ) /************************************************************** ** Функция печатает заголовок в файл. ** Используется при передачи кассовых ведомостей и ордеров ** в файл в формате пользователя. *************************************************************** */ { // return Sys_Print_Title_Script( HandleOutputFile ); // ВНИМАНИЕ !!! Файл открыт для записи в двоичном режиме // { для УБРиР 12.05.00 char Title[81]; char CurData[11]; var EndTable="└─────┴───────────────────┴─────────────────┴──────────┘\r\n"; int LenStrTable=strlen(EndTable); strcpy(CurData,datatek); CurData[6] = CurData[8]; // эти манипуляции необходимы CurData[7] = CurData[9]; // чтобы привести дату из формата CurData[8] = '\0'; // ДД.ММ.ГГГГ в формат ДД.ММ.ГГ sprintf(Title,"%.8s 98 2 3 4 75000 \r\n",CurData); write(HandleOutputFile, Title, strlen(Title)); write(HandleOutputFile, "┌─────┬───────────────────┬─────────────────┬──────────┐\r\n", LenStrTable); /* write(HandleOutputFile, "│ N │ Номер карточки │ Сумма операции │ Счет │\r\n", LenStrTable); write(HandleOutputFile, "├─────┼───────────────────┼─────────────────┼──────────┤\r\n", LenStrTable); */ write(HandleOutputFile, EndTable, LenStrTable); NumOfOrder=0; // } для УБРиР 12.05.00 return; } User_Transfer_One_Script( &pDoc, HandleOutputFile, Num, Flag, Otbor ) /*-------------------------------------------------------------------*/ /* Pазноска одной стpоки из списка оpдеpов или ведомости. */ /* pDoc - указатель на объект (ордер или ведомость) */ /* HandleOutputFile - файл в который пишем */ /* Num - номеp стpоки в списке оpдеpов или в ведомости. */ /* Flag - 'O' pазноска оpдеpа. */ /* Flag - 'I' pазноска ведомости. */ /* Otbor - 0 передача только непереданных ЛС */ /* Otbor - 1 передача всех ЛС (независимо от того, передавался он */ /* раньше или нет) */ /* Функция используется при передачи кассовых ведомостей и ордеров */ /* в файл в формате пользователя. */ /*-------------------------------------------------------------------*/ { // return Sys_Transfer_One_Script( pDoc, HandleOutputFile, Num, Flag, Otbor ); var Ved = CreateObject("Doc"); Ved.Initial(static_cast_to_string(pDoc)); int N_Fld_Transf=Ved.GetNumFld("TRANSFER"); // Номер поля с именем TRANSFER в которое заносится // признак передачи в файл (в АРМ). // Проверка: "оpдеp или стpока ведомости pазнесены в АРМ" // Если поле TRANSFER отсутствует в ордере или ведомости то разноска // все равно будет происходить, только не будет проставлятся признак // разноски. // Если не надо передавать уже переданные ЛС и есть отметка, что // текущий ЛС передан, то его мы передавать не будем if ( Ved.Char_From_Field( N_Fld_Transf,Num )=='П' && !Otbor ) return; // { 12.05.00 для УБРиР var EndTable="└─────┴───────────────────┴─────────────────┴──────────┘\r\n"; long tn=sizetn*atol(Ved.TextS(Ved.Get_N_POD(), Num)) +atol(Ved.TextS(Ved.Get_N_TAB(), Num)); int c = LSRead(tn, 2); if ( c != 1) return; // Записываем номер карточки char NumCard[17]; /* Номер карточки */ kch_from("kart",NumCard); // } 12.05.00 для УБРиР // Записываем ТН /* Табельный номер */ long Tab_Num = atol( static_cast_to_string(Ved.TextS(Ved.Get_N_TAB(), Num)) ); char Fio[40], /* ФИО */ Name_Podr[81], /* Название подразделения */ Data_Transf[11], /* Дата передачи */ Month[3], Year[5]; /* Месяц и год, за которые сумма */ double Summa=0.; /* Сумма, которая разносится */ // Записываем название подразделения long Dep = atol( static_cast_to_string(Ved.TextS(Ved.Get_N_POD(), Num)) ); sprintf(Name_Podr,"%.80s",GetOtdName(Dep)); // Записываем текущую дату sprintf(Data_Transf,"%.10s",datatek); // Записываем месяц и год за которые передана сумма sprintf(Month,"%d",Month_Cash); sprintf(Year, "%d",Year_Cash); // Записываем сумму Summa = atof( static_cast_to_string(Ved.TextS(Ved.Get_N_SUM(), Num)) ); // Печать в файл сформированной записи // ВНИМАНИЕ !!! Файл открыт для записи в двоичном режиме // { для УБРиР 12.05.00 char str[255]; int LenStrTable=strlen(EndTable); if ( !NumOfOrder ) Itog=LenStrItog=0; Itog+=Summa; // подготовимся к печати первой строки sprintf( str, "│ %3d │ %16.16s │ %15.2f │ │\r\n", ++NumOfOrder, NumCard, Summa); lseek(HandleOutputFile, -(LenStrTable+LenStrItog), SEEK_CUR); write(HandleOutputFile, str, LenStrTable); write(HandleOutputFile, EndTable, LenStrTable); sprintf( str, " ИТОГО: %34.2f\r\n", Itog); LenStrItog = strlen(str); write(HandleOutputFile, str, LenStrItog); // } для УБРиР 12.05.00 // Заполнение столбца разноски if ( N_Fld_Transf != -1 ) Ved.SetText( N_Fld_Transf, Num, "П"); return; } User_Before_Summa_W( &Doc , Kind_Form) { // Функция вызываемая перед приемом ЛС в кассовую ведомость // если вернуть 0 - текущий лс по текущему фильтру не будет приниматься (не будет вызвана Summa_W_Script) // вернуть 1 для приема суммы // Doc - объект класса Doc return 1; } User_Summa_W_Script( &pDoc, Kind_Form ) /********************************************************************/ /* Вычисление суммы в ведомость или оpдеp */ /* Kind_Form - тип ведомости/оpдеpа ( Аванс, Заpплата и т.д. ) */ /********************************************************************/ { return Sys_Summa_W_Script( pDoc, Kind_Form ); } User_Forma_W_Script( &pDoc, Kind_Form, Code, Col ) ////////////////////////////////////////////////////////////////////// // Вспомогательная функция для панели Panel_Cash ////////////////////////////////////////////////////////////////////// { return Sys_Forma_W_Script( pDoc, Kind_Form, Code, Col ); } User_Prepar_User_Append_To_Text_Script(HandleOutputFile) /************************************************************************* ** Функция производит подготовку открытого текстового файла к добавлению ** так, как это требуется пользователю при печати кассовых документов ** в формате пользователя. ** ( Внимание !!! Файл открыт в двоичном виде, т.е. с флагом O_BINARY ) **************************************************************************/ { // return Sys_Prepar_User_Append_To_Text_Script(HandleOutputFile); // 12.05.00 для УБРиР char buffer[4]; /********************************************************************* ** В связи с тем что нужен для печати номер по-порядку, необходимо ** определить каким был номер последней напечатанной записи ********************************************************************** */ char str[81]; long LengthFile=lseek(HandleOutputFile,0,SEEK_END); long CountStr=0; // Отойдем назад на две строки (количество строк на которое отходим // назад зависит от формы печати!!!), для того чтобы встать на последнюю // запись в таблице NumOfOrder=0; for ( long OffsetFile=4; OffsetFile<=LengthFile; ) { lseek(HandleOutputFile,-OffsetFile++,SEEK_END); read(HandleOutputFile, buffer, 2); if ( buffer[0]=='\r' && buffer[1]=='\n' && ++CountStr==3 ) { read(HandleOutputFile,str,1); read(HandleOutputFile,str,9); NumOfOrder = atoi(str); break; } if ( buffer[0]=='\r' && buffer[1]=='\n' && CountStr==1 ) { read(HandleOutputFile,str,20); read(HandleOutputFile,str,60); Itog = atof(str); LenStrItog = OffsetFile-3; } } lseek(HandleOutputFile,0,SEEK_END); return; } // ЇєэъЎш  фы  ъюЁЁхъЄшЁютъш эрчтрэш  ърёёютющ тхфюьюёЄш (Єюы№ъю тхфюьюёЄш) // хёыш фы  Ёрчэ√ї ╦╤ шыш Ёрчэ√ї шёЄюўэшъют т юфэюь ╦╤ ЇєэъЎш  тхЁэхЄ Ёрчэ√х эрчтрэш , Єю сєфєЄ ёючфрэ√ Ёрчэ√х ърёёют√х тхфюьюёЄш. // ╘єэъЎш  т√ч√трхЄё  эр ърцф√щ срырэёэ√щ шёЄюўэшъ/юс·хъЄ/яюфЁрчфхыхэшх/ёють-тю яю ъюЄюЁ√ь фхырхЄё  т√сюЁър т тхфюьюёЄ№. // name - шь  тхфюьюёЄш т WIN ъюфшЁютъх, чрфрээюх яюы№чютрЄхыхь т ърёёютющ ярэхыш (эряЁшьхЁ "яю эрсюЁє тшфют"); // propSum - AProp ёЄЁюъш т тхфюьюёЄш; // propVed - AProp тхфюьюёЄш, сєфхЄ чряюыэхэ хёыш фхыр■Є ё Ёрчсштъющ "┬хфюьюёЄш яю шёЄюўэшърь", шыш = CLL_TOTAL... хёыш "┬ юфэє тхфюьюёЄ№"; // dop - хёыш ёюфхЁцшЄ Їыру 8 (dop & 8) - чэрўшЄ т propVed.GetPodr() єърчрэ ъюф юЁурэшчрЎшш ш тхфюьюёЄш ёючфр■Єё  ё Ёрчсштъющ яю юЁурэшчрЎш ь // ЇєэъЎш  фюыцэр тхЁэєЄ№ name ш ьюцхЄ хую ьюфшЇшЎшЁютрЄ№ (эряЁшьхЁ фюсртшЄ№ эрчтрэшх срэър фы  чруЁєцхээюую ╦╤) // ╬сЁрсрЄ√тхь√щ ╦╤ т ¤ЄюЄ ьюьхэЄ чруЁєцхэ т ярь Є№ ш фюёЄєяхэ фы  шчтыхўхэш  эхюсїюфшь√ї фрээ√ї шч эхую. // ╥рсхы№э√щ эюьхЁ ¤Єюую ╦╤ ьюцэю яюыєўшЄ№ шч яюы  ърфЁютющ ўрёЄш kch_from_int("tn") шыш ЇєэъЎшхщ GetTnCurrentLS() UserKassVedName(name, doc, kindForm, propVed, propSum, dop) { return name; }