Страница 1 из 1

Предобработка банковской выписки

Добавлено: 07 июл 2010, 20:33
Aleksandr Kryuchkov
Есть файл банковской выписки в формате БС Парус (dbf)
Формат описан ниже
№ Имя поля Размерность Содержание Примечание/поле в ДБО

Код: Выделить всё

1* TYP_DOC N(1,0) Тип записи 0 - документ, 1- выписка 
2* NUM_DOC С(12) Номер документа 
3* DATE_DOC Date Дата документа 
4- ORG_FR С(15) Краткий код Контрагента От Кого 
5 ORG_FN C(255) Наименование контрагента От Кого От Кого платеж 
6 ORG_FC С(3) Код страны Контрагента От Кого Цифровой код (для России - 643) 
7* ORG_FS С(25) Счет контрагента От Кого Для выписки - счет, по которому выписка 
8 ORG_FI С(14) ИНН Контрагента От Кого 
9*/ ORG_FB С(9) БИК контрагента От Кого 
10 ORG_FKS С(25) Кор. Счет контрагента От Кого 
11 ORG_FBN C(80) Название банка Контрагента От Кого 
12 ORG_FBSN С(25) Название населенного пункта Банка Контрагента От Кого 
13 OR_FBSNT С(5) Краткое название типа населенного пункта Банка контрагента От Кого 
14- ORG_TR С(15) Краткий код Контрагент Кому 
15 ORG_TN C(255) Наименование контрагента Кому Кому платеж 
16 ORG_TC С(3) Код страны Контрагента Кому 
17*/ ORG_TS С(25) Счет контрагента Кому 
18 ORG_TI С(14) ИНН Контрагента Кому 
19*/ ORG_TB С(9) БИК контрагента Кому 
20 ORG_TKS С(25) Кор. Счет контрагента Кому 
21 ORG_TBN C(80) Название банка Контрагента Кому 
22 ORG_TBSN С(25) Название населенного пункта Банка Контрагента Кому 
23 OR_TBSNT С(5) Краткое название типа населенного пункта Банка контрагента Кому 
24 NOTE C(255) Назначение платежа 
25*/ CURR С(3) Валюта (код) Цифровой код (для рубля России - 810) 
26*/ SUMMA_DOC N(18,2) Сумма документа Для документа 
27- ST_NDS N(8,4) Ставка НДС Для документа 
28- SUMMA_NDS N(18,2) Сумма НДС Для документа 
29- DATE_PAY Date Срок платежа 
30 APP_PAY N(1,0) Тип платежа 0 - Почтой, 
1 - телеграф, 
2 - электронно, 
3 - (не заполняется) 
31* STATM_ID N(10,0) ID выписки Для выписки - уникальный номер выписки. Для документа - номер выписки, которой соответствует документ. Документы "привязываются " к выпискам именно по этому полю. 
31/* TURN_DB N(18,2) Оборот по дебету Для выписки 
32/* TURN_KR N(18,2) Оборот по кредиту Для выписки 
33/* REST_IN N(18,2) Входящий остаток Для выписки 
34/* REST_OUT N(18,2) Исходящий остаток Для выписки 
44 PayerKPP С(9) КПП плательщика (102) PayerKPP 
45 ReceiverKPP С(9) КПП получателя (103) ReceiverKPP 
46 Stat1256 С(2) Показатель статуса (101) Stat1256 
47 CBCcode С(19) Код бюджетной классификации (104) CBCcode 
48 OKATOcode С(11) Код ОКАТО (105) OKATOcode 
49 PayGrndParam С(2) Показатель основания платежа (106) PayGrndParam 
50 TaxPeriodParam1 С(2) Показатель налогового периода (107), символы 1-2 (107) = TaxPeriodParam1 + '.' + TaxPeriodParam2 + '.' + TaxPeriodParam3 
51 TaxPeriodParam2 С(2) Показатель налогового периода (107), символы 4-5 
52 TaxPeriodParam3 С(4) Показатель налогового периода (107), символы 7-10 
53 DocNumParam С(15) Показатель номера документа (108) Разложить в поля DocNumParam1 (первые 2 символа), DocNumParam2(остальные символы) 
54 DocDateParam Date Показатель даты документа (109) Разложить в поля DocDateParam1 (dd), DocDateParam2 (mm), DocDateParam3 (yyyy) 
55 PayTypeParam C(2) Показатель типа платежа (110) PayTypeParam 


Примечания: 

* Поле обязательно к заполнению для всех типов документов данного формата 
*/   Поле обязательно к заполнению для первого из 2-х типов документов данного формата (аналогично - другие подобные символы) 
- Поле на данный момент не заполняется (не обрабатывается), оставлено в формате на будущее 
Есть ресурс который осуществлял предобработку этого файла в вид удобоваримый галактике.
Изображение

Uploaded with ImageShack.us

После установки последних обновлений от 30.06.10, последнего VIP'а и сборки этого ресурса предобработка производиться перестала.
Вызов шел через ФРО-Операции-Ввод банковской выписки
Хочу предупредить сразу, товарищи! Код не мой, я только пытаюсь научиться разбиратсья во всех взаимосвязях между обновлениями атлантиса, сборкой ресурсов и
вечными танцами с бубнеом над исходниками после обновлений. Камрады, помогите понять почему эта зараза не хочет делать то что она должна.
Ниже привожу исходники ресурса предобработки.

vyp.vip

Код: Выделить всё

#include VypScript.vih
interface IBankVypScript '' EscClose;

Var
  Handle : LongInt;
  Sch, CurSch, D_OPl1 : String;
  Flag : Byte;
Table Struct jPrev "Таблица для превью данных"
 (
   NoDoc : String,
   NameKorr : String,
   MFOKorr : String,
   AccKorr : String,
   SodPr : String,
   Sum_D : Double,
   Sum_K : Double,
   D_Opl : string,
   inn   : string
 )
;

  create view
    as select
    *
    from
    jPrev
    ;


Function BeforeImport(asFileName : string; abDbf : boolean; adDate : date;
                      awTipVip : word; acBankOrVal : comp; acBankDocF : comp;
                      awMakeRound : word; afTypeRound : double) : boolean;
{
!  intinit;
  Handle := DBFOpen(asFileName, stOpen);
  StartNewVisual(vtNumericVisual,vfTimer,'Идет обработка',1);
    if dbfGetfirst(Handle)=tsOK
      Do
       {
         Flag  := dbfGetFieldValue(Handle,'Typ_Doc');      
         If Flag=1 
          {
            CurSch := dbfGetFieldValue(Handle,'Org_FS');  
            d_OPl1:=dbfGetFieldValue(Handle,'Date_Doc');
          }  
         If Flag=0
          {
            ClearBuffer(#jPrev);
            Sch := dbfGetFieldValue(Handle,'Org_FS'); 
            jPrev.NoDoc:= dbfGetFieldValue(Handle,'Num_Doc');
            jPrev.SodPr:= dbfGetFieldValue(Handle,'Note');
!            message (dbfGetFieldValue(Handle,'Date_Doc'));
            jPrev.D_Opl:= D_Opl1;
            If Sch=CurSch
             {
              jPrev.NameKorr:= dbfGetFieldValue(Handle,'Org_TN');
              jPrev.MFOKorr := dbfGetFieldValue(Handle,'Org_TB');
              jPrev.AccKorr := dbfGetFieldValue(Handle,'Org_TS');
              jPrev.Sum_K   := dbfGetFieldValue(Handle,'Summa_Doc');
              jPrev.inn     := dbfGetFieldValue(Handle,'Org_ti');
             }
            Else 
             {
              jPrev.NameKorr:= dbfGetFieldValue(Handle,'Org_FN');
              jPrev.MFOKorr := dbfGetFieldValue(Handle,'Org_FB');
              jPrev.AccKorr := dbfGetFieldValue(Handle,'Org_FS');
              jPrev.Sum_D   := dbfGetFieldValue(Handle,'Summa_Doc');
              jPrev.inn     := dbfGetFieldValue(Handle,'Org_fi');
             }
           Insert current jPrev;
          }      
       }While dbfGetNext(Handle)=tsOK 
    DbfClose(Handle);
    Handle := DBFOpen(asFileName,stCreate);
    DbfAddField(Handle, 'Nodoc', dbChar,12,0);
    DbfAddField(Handle, 'SodPr', dbChar,255,0);
    DbfAddField(Handle, 'D_Opl', dbchar,10,0);
    DbfAddField(Handle, 'NameKorr', dbChar,255,0);
    DbfAddField(Handle, 'MFOKorr', dbChar,9,0);
    DbfAddField(Handle, 'AccKorr', dbChar,25,0);
    DbfAddField(Handle, 'Sum_D', dbNum,15,2);
    DbfAddField(Handle, 'Sum_K', dbNum,15,2);
    DbfAddField(Handle, 'Acc', dbChar,25,0);
    DbfAddField(Handle, 'inn', dbChar,25,0);
    If GetFirst jPrev=TsOK
     Do
      {
       dbfPutFieldValue(Handle,'NoDoc',jPrev.Nodoc);
       dbfPutFieldValue(Handle,'SodPr',jPrev.SodPr);
       dbfPutFieldValue(Handle,'D_Opl',jPrev.D_Opl);
       dbfPutFieldValue(Handle,'NameKorr',jPrev.NameKorr);
       dbfPutFieldValue(Handle,'MFOKorr',jPrev.MFOKorr);
       dbfPutFieldValue(Handle,'AccKorr',jPrev.AccKorr);
       dbfPutFieldValue(Handle,'Sum_K',jPrev.Sum_K);
       dbfPutFieldValue(Handle,'Sum_D',jPrev.Sum_D);
       dbfPutFieldValue(Handle,'Acc' ,CurSch);
       dbfPutFieldValue(Handle,'inn',trim(jPrev.inn));
       DBFInsertRecord(Handle);
      }While GetNext jPrev=TsOk
  StopVisual('',0);
  DbfClose(Handle);
  delete all jprev;
  showerrors;
  exitproc;
  beforeimport := true;
}
//:= DBFGetFieldValue(handle, 'DETAILS')

procedure AfterImport;
{
exit;
}
Function VidPlatIsDogRef: boolean;
{
exit;
}
 HandleEvent
  cmInit:
  {
    abort;
  }

  end;
end.
vypscript.vih

Код: Выделить всё

//------------------------------------------------------------------------------
//                                                      (c) корпорация Галактика
// Галактика 5.85 - Финансовый контур
// Интерфейс пред- и постобработки файла банковской выписки
//------------------------------------------------------------------------------

!#ifdef ComponentVersion
#Component "F_BankDocF"
!#end

#doc
  Объект пред- и постобработки файла банковской выписки
#end

ObjInterface OBankVypScript;

#doc
 Предобработка файла банковской выписки
#end

  Function BeforeImport(asFileName  : string;   // Путь и имя файла с выпиской
                        abDbf       : boolean;  // true - DBF-формат, false - TXT-формат
                        adDate      : date;
                        awTipVip    : word;     // 0 - рублевая, 1 - валютная, 2 - ???
                        acBankOrVal : comp;     // if (awTipVip = 2) KlVal.nRec else CashBank.nRec
                        acBankDocF  : comp;     // BankDocF.nRec
                        awMakeRound : word;     // 0 - нет, 1 - >= 0.5, 2 - в большую сторону
                        afTypeRound : double    // 0.01, 0.1, 1, 10, 100 и т.д.
                       ) : boolean;

#doc
  Постобработка файла банковской выписки
#end
  
  Procedure AfterImport;

#doc
  Необходимость выполнения распределения платежа по договору, ссылка на который передана через поле "Тип платежа"
#end
  
  Function VidPlatIsDogRef: boolean;
End;

VipInterface IBankVypScript implements OBankVypScript
  #ifdef Atl51
  Licensed (Free)
  #end
;

Re: Предобработка банковской выписки

Добавлено: 08 июл 2010, 09:55
edward_K
для начала заходим в сервис - утилиты - запуск внешнего интерфейса
ищем F_BANKDOCF::IBANKVYPSCRIPT - из какого ресурса? Не из вашего - значит не так собрали
ищем просто все IBANKVYPSCRIPT - несколько раз нашли?
в vip не хватает

Код: Выделить всё

#Component "F_BankDocF"
Вообще компонента менялась достаточно давно.
Смотрим также GAL810\exe\GalDoc\F_BankDocF.chm
Могли переделать и на точки расширения(и это было бы правильным), но следов этого я пока не нашел.