365-П: формирование документа и подтверждений на поручение налогового органа

Автор:sokols
Дата:24.01.2012
Просмотров:4166
Скачиваний:1698
Оценка:, Оценок - 3
Сохранить в файле

Обсудить в форуме

Описание

Пока не реализованный на текущий момент функционал - формирование документа в РС-Банке и файлов подтверждений PB1 и PB2. PB2 можно просто удалить, если документ реально проведётся, а не будет поставлен на картотеку; PB1 формируется всегда; документ, сформированный по поручению налоговой, кладётся в отложенные.
В макросе поправить значения переменных Indir, OutDir.

Текст примера

 /*****************************************************************************
  24.01.12 SS Формирование документов по постановлениям налоговых органов
  Сергей Соколов (sokols@narod.ru), ЗАО КБ "ИС Банк", +7 (495) 744-08-51
*****************************************************************************/

import rslx;
file pno() txt;
file pb1() txt write;
file pb2() txt write;
file rd(regdoc) key 3;
file d(postdoc) write;

var
  {oper},
  {curdate},
  acc,
  InDir  = "..\\365\\WORK\\IN\\",
  OutDir = "..\\365\\WORK\\OUT\\",
  ИНННП,
  parms,
  sfname,
  fname;

macro StrToDate(sDate)
var
  dd, mm, yy;
  DateSplit(sDate, dd, mm, yy);
  return String(yy:o:4, "-", mm:o:2, "-", dd:o:2);
end;

macro FindClient(inn)
  rd.RDKind = 100;
  rd.RegNum = inn;
  rd.Client = "";
  if(GetGE(rd) and (rd.RegNum == inn))
    return rd.Client;
  else
    return 0;
  end;
end;

macro WritePB1
var OK = TRUE;
  OK = OK and insert(pb1, sfname + "###");
  OK = OK and insert(pb1, "10@@@");
  OK = OK and insert(pb1, String(StrToDate(Date()), "@@@"));
  OK = OK and insert(pb1, String(Time(), "@@@"));
  OK = OK and insert(pb1, "===");
  return(OK);
end;

macro WritePB2
var OK = TRUE;
  OK = OK and insert(pb2, sfname + "###");
  OK = OK and insert(pb2, String("35;Документ поставлен в картотеку 2 в связи ",
    "с отсутствием средств на расчетном счете ",  acc, "@@@"));
  OK = OK and insert(pb2, String(StrToDate(Date()), "@@@"));
  OK = OK and insert(pb2, String(Time(), "@@@"));
  OK = OK and insert(pb2, "===");
  return(OK);
end;


macro Init
  parms = ActiveX("Scripting.Dictionary");

  if(not SelectFile(fname, InDir + "pno*.txt"))
    [Файл не выбран];
    Exit;
  end;

  SplitFile(fname, sfname, NULL);

  if(not open(pno, fname))
    [Файл не открыт];
    Exit;
  end;

  if(not open(pb1, OutDir + "PB1_" + sfname + ".TXT"))
    [Файл не открыт];
    Exit;
  end;

  if(not open(pb2, OutDir + "PB2_" + sfname + ".TXT"))
    [Файл не открыт];
    Exit;
  end;
end;

macro ReadPNO;
var pos, s, parm, val;
  while(next(pno))
    s = pno.str;
    pos = Index(s, ":");
    if(pos > 0)
      parm = SubStr(s, 1, pos - 1);
      val = SubStr(s, pos + 1);
      parms.Add(parm, val);
    end;
  end;
end;

macro SetValues
  d.Oper = {oper};
  d.Account_Payer = acc = d.Real_Payer = parms.Item("НомСчПл");
  d.MFO_Receiver = parms.Item("БИКБПол");
  d.Account_Receiver = parms.Item("НомСчПол");
  d.Sum = Double(parms.Item("СумПоруч")) / 100;
  d.Dispatch = 0;
  d.Numb_Document = parms.Item("НомПоруч");
  d.Date_Document = d.Date_Value = {curdate};
  d.Kind_Oper = 1;
  d.Payer = parms.Item("Плательщ");
  d.Receiver = parms.Item("НаимПол");
  d.Bank_Receiver = parms.Item("БанкПол");
  d.Ground  = parms.Item("НазнПл");
  d.OKPO_Payer = ИНННП = parms.Item("ИНННП");
  d.OKPO_Receiver = parms.Item("ИННПол");
  d.Payment = parms.Item("ОчерПл");
  d.Shifr_Oper = parms.Item("ВидОп");
  d.KPP_Payer = parms.Item("КППНП");
  d.KPP_Receiver = parms.Item("КПППол");
  d.ComposerStatus = parms.Item("Статус");
  d.BudjClassifCode = parms.Item("КБК");
  d.OKATO = parms.Item("ОКАТО");
  d.TaxGround = parms.Item("ОснПл");
  d.TaxPeriod = parms.Item("СрокУплТр");
  d.TaxNumber = parms.Item("НомТреб");
  d.TaxDate = parms.Item("ДатаТреб");
  d.TaxPaymentType = parms.Item("ТипПлат");
  d.Date_Enter = {curdate};
  insert(d);
end;

macro main()
  Init();
  ReadPNO;
  SetValues();
  if(FindClient(ИНННП))
    WritePB1();
    WritePB2();
    close(pb1);
    close(pb2);
  end;
end;

main;