БЛАНКСШАБЛОНОМ "Основная информация (реквизиты предприятия)";

Нач :Date = B.S;
Кон :Date = B.F;
АН:С=B.AN;А:С="{"+АН+"}";
DatWarning:С;
Дн:Ц=День(Кон);М:С;Г:Ц=Год(Нач);
Ме:с;Ккн:С=Ме+" "+СТР(ГОД(Нач));
Период:с;Пер:С;
PeriodMess:С=IF(Период=" "," ",Пер);
О:С;Б:С;В:С;Т:С;П:С;Е:С;Ж:С;З:С;Л:С;Н:С;Д:С;Р:С; -- ИНН
ИНН:С=О+Б+В+Т+П+Е+Ж+З+Л+Н+Д+Р;
Й:С;Ц:С;У:С;Ы:С;Ч:С;Х:С;Ф:С;Ш:С;Щ:С;	 -- КПП

Ввод_ИНН   :String = "";
Ввод_ИННФЛ :String = "";
Ввод_КПП   :String = "";
Ввод_ИМНС  :String = "";

ОГРН:String;
ОГРНИП:String;
ОКАТО:String;
БИК:С;
КСчет:С;

СтатусЛица:Integer=[0]; -- 0 - Юр.лицо; 1 - физлицо

ИННЮрЛицо:Logical=if(СтатусЛица=0,true,false);
ИННФизЛицо:Logical=if(СтатусЛица=1,true,false);
ОГРНЮрЛицо:Logical=if(СтатусЛица=0,true,false);
ОГРНИПФизЛицо:Logical=if(СтатусЛица=1,true,false);

Текст1:с="2ВВЕДИТЕ ИДЕНТИФИКАЦИОННЫЙ НОМЕР НАЛОГОПЛАТЕЛЬЩИКА!0";
--Текст2:с="НЕТ В РЕКВИЗИТАХ!";
Текст2:с=""; -- Убрано "НЕТ В РЕКВИЗИТАХ!" по просьбам пользователей.
Текст:с=IF(О<="   " ИЛИ Б<="   " ИЛИ В<="   " ИЛИ Т<="	 " ИЛИ П<="   "
	 ИЛИ Е<="   " ИЛИ Ж<="	 " ИЛИ З<="   " ИЛИ Л<="   " ИЛИ Н<="	"ИЛИ Д<="   " ИЛИ Р<="	 ",
	 Текст1," ");

НалКод:с=IF(О<="   " ИЛИ Б<="	" ИЛИ В<="   " ИЛИ Т<="   " ИЛИ П<="   "
	  ИЛИ Е<="   " ИЛИ Ж<="   " ИЛИ З<="   " ИЛИ Л<="   " ИЛИ Н<="	 ",
	  Текст2,О+Б+В+Т+П+Е+Ж+З+Л+Н+Д+Р);
КПП:С=IF(Й<="	" ИЛИ Ц<="   " ИЛИ У<="   " ИЛИ Ы<="   " ИЛИ Ч<="   "
	  ИЛИ Х<="   " ИЛИ Ф<="   " ИЛИ Ш<="   " ИЛИ Щ<="   ",
	  Текст2,Й+Ц+У+Ы+Ч+Х+Ф+Ш+Щ);

КПП_:С=IF(Й<="	 " ИЛИ Ц<="   " ИЛИ У<="   " ИЛИ Ы<="	" ИЛИ Ч<="   "
	  ИЛИ Х<="   " ИЛИ Ф<="   " ИЛИ Ш<="   " ИЛИ Щ<="   ",
	  '',Й+Ц+У+Ы+Ч+Х+Ф+Ш+Щ);

ПолнИмя1:С;
ПолнИмя2:С;
КорИмя:С;ПолнИмя:С=ПолнИмя1+" "+ПолнИмя2;
РСчет:С;
Банк:С;
ЮрАдр:С;
Телефон:С;
Факс:С;
Телекс:С;
ДолжРук:С;
ИмяРук:С;
ДолжБух:С;
ИмяБух:С;
ДолжКас:С;
ИмяКас:С;
Адрес:С;
Исполнитель:С;
ТелИсп:С;
Учредители:с;
ОргПрав:с;
Форма:с;
Отрасль:С;
Мц:С;Гц:С;
НалИнсп1:С;
НалИнсп2:С;


Код1:С=[О];
Код2:С=[Б];
Код3:С=[В];
Код4:С=[Т];
Код:С=Код1+Код2+Код3+Код4;
ОКПО:С;
ОКВЭД:С;
КОПФ:С;
КФС:С;
ОКОНХ:С;
ОКДП:С;
ОКУД:С;
СОАТО:С;
СтатОрг1:с;
СтатОрг2:с;
Мин:с;
СООГУ:Ч;
Ас:с;
АсОКПО:Ч;
ВышестОрг:С;
ВышестАдр:С;
ВышОКПО:С;
ОКОНХПроч:С;
Респ:с;
Индекс:с;
Район:с;
ГородС:с;
НаселПункт:с;
КодГород:с;
Улица:с;
Дом:с;
Корпус:с;
Квартира:с;
КомуОтчет1:с;
КомуОтчет2:с;
К:ч;
Прочим:с;
ПрАдрес:с;
Зрп:Ч;
ПенсКод:С ;
СоцКод:С ;
КодПодчин:С ;
ЗанКод:С ;
МедКод:С ;
КомуОтчет1=IF(К=1,НалИнсп1,IF(К=2,СтатОрг1,IF(К=3,ВышестОрг,IF(К=4,Прочим,""))));
КомуОтчет2=IF(К=1,НалИнсп2,IF(К=2,СтатОрг2,IF(К=3,ВышестАдр,IF(К=4,ПрАдрес,""))));

--Реквизиты свидетельства о постановке на учет:

Серия:String;
ДатаВыдачи:Date;
Выдано:string;
КодВыд:String;
--
Вис	:Date	 = 01.01.1988+1461*Цел((Кон-01.01.1990)/1461);
ДоВис	:Integer = Кон-Вис;
ГД	:Date	 = Вис+IF(ДоВис<367,0,IF(ДоВис<732,366,IF(ДоВис<1097,731,1096)));
ОстДней :Integer = ГД+365+IF(ДоВис<367,1,0)-Кон;
ТекДень :Integer = Кон-ГД+1;

--Г:ч=88+4*ЦЕЛ((Кон-01.01.90)/1461)+ЦЕЛ((ДоВис-183)/365);
Y	      = Г-IF(ОстДней>0,0,1)-1900;
DatWarning :с = IF(Нач<ГД ИЛИ Нач>Кон, "!Проверьте соответствие начальной и конечной дат",
				       "Дата документа (например, платежки) задается в поле Конечная дата");
М  :String = Месяца(Мес(Кон));
Ме :String = Месяц(Мес(Кон-1));

func ПолучитьГД(аОкончание :Date):Date;
  var Вис   :Date;
  var ДоВис :Integer;

  Вис	  = 01.01.1988+1461*Цел((аОкончание-01.01.1990)/1461);
  ДоВис   = аОкончание-Вис;
  Return(Вис+IF(ДоВис<367,0,IF(ДоВис<732,366,IF(ДоВис<1097,731,1096))));
end;

func ПолучитьПериод(аНачало :Date; аОкончание :Date):String;
  var Вис	     :Date;
  var ДоВис, ОстДней :Integer;

  Вис	  = 01.01.1988+1461*Цел((аОкончание-01.01.1990)/1461);
  ДоВис   = аОкончание-Вис;
  ОстДней = ПолучитьГД(аОкончание)+365+IF(ДоВис<367,1,0)-аОкончание;

  Return(If(ОстДней=0,	 If(Mon(аОкончание)-Mon(аНачало)=1, Месяц(Mon(аОкончание)-1), "год"),
	 If(ОстДней=92,  If(Mon(аОкончание)-Mon(аНачало)=1, Месяц(Mon(аОкончание)-1), "9 месяцев"),
	 If(ОстДней=184, If(Mon(аОкончание)-Mon(аНачало)=1, Месяц(Mon(аОкончание)-1), "1-е полугодие"),
	 If(ОстДней=275, If(Mon(аОкончание)-Mon(аНачало)=1, Месяц(Mon(аОкончание)-1), "1 квартал"),
	 If(Mon(аОкончание)-Mon(аНачало)=1, Месяц(Mon(аОкончание)-1), " "))))));
end;

func ПолучитьКвартал(аОкончание :Date):String;
  var Вис	     :Date;
  var ДоВис, ОстДней :Integer;

  Вис	  = 01.01.1988+1461*Цел((аОкончание-01.01.1990)/1461);
  ДоВис   = аОкончание-Вис;
  ОстДней = ПолучитьГД(аОкончание)+365+IF(ДоВис<367,1,0)-аОкончание;

  Return(If(ОстДней=0,	 "4",
	 If(ОстДней=92,  "3",
	 If(ОстДней=184, "2",
	 If(ОстДней=275, "1", " ")))));
end;

func ПолучитьНачалоКвартала(аНачало :Date; аКвартал :String):Date;
  var Кварт :Integer;

  Кварт = 0;
  if аКвартал<>"" then
    аКвартал = SubStr(аКвартал, 1, 1);
    Try
      Кварт = Int(аКвартал);
    Except
    End;
  end;
  Return(if(Кварт=4: Dat(1,10, Г)
	   |Кварт=3: Dat(1, 7, Г)
	   |Кварт=2: Dat(1, 4, Г)
	   |Кварт=1: Dat(1, 1, Г), аНачало));
end;

Квартал :String = ПолучитьКвартал(Кон);
Период	:String = ПолучитьПериод(Нач, Кон);
Пер	:String = If(Период="год", "Годовая отчетность за "+Стр(Год(Нач))+" год.",
				   "Квартальная отчетность за "+Период);
НачПР	:Date	= Дат(День(Нач), Мес(Нач), Год(Нач)-1);
КонПР	:Date	= Дат(День(Кон), Мес(Кон), Год(Кон)-1);

Proc Jump (Об:S;Iter:I);
  КорИмя =ПолнИмя1;
End;

-- Возвращает true, если есть хоть одна запись с нашими реквизитами.
func НайтиРеквизиты:Logical;
var РО:Integer;
var рез:Logical;
  рез=false;
  РО=OpenWorkArea('Контрагент','НАШЕ','НАШЕ');
  Try
    if records(РО)>0: 
      рез=true;
    fi;
  Finally
    CloseWorkArea(РО);
  End;
  ^рез;
end;

Proc SaveUL (Об:S);
 if банк="": message("Пожалуйста, укажите наименование банка");шаблон.поле="банк";
--   |РСчет="":message("Пожалуйста, укажите расчетный счет");шаблон.поле="Рсчет";
  else
   if НайтиРеквизиты:
     message('Реквизиты предприятия уже присутствуют в картотеке.');
   else
     Раб.документы.РСчет   = РСчет   ;	Раб.документы.КСчет   = КСчет;	 Раб.документы.Банк    = Банк;
     Раб.документы.Адрес   = Адрес  ;	Раб.документы.ЮрАдр   = ЮрАдр;
     Раб.документы.ПолнИмя1= ПолнИмя1;	Раб.документы.КорИмя  = КорИмя;
     Раб.документы.Телефон = Телефон;	Раб.документы.Факс    = Факс;
     Раб.документы.ДолжРук = ДолжРук;	Раб.документы.ИмяРук  = ИмяРук;
     Раб.документы.ДолжБух = ДолжБух;	Раб.документы.ИмяБух  = ИмяБух;
     Раб.документы.ДолжКас = ДолжКас;	Раб.документы.ИмяКас  = ИмяКас;
     Раб.документы.НалКод  = НалКод;	Раб.документы.КПП     = КПП;
     Раб.документы.НаимНал = НалИнсп1;	Раб.документы.КодНал  = Код;	 Раб.документы.БИК     = БИК;
     Раб.документы.ОКАТО   = ОКАТО;	Раб.документы.ОКПО    = ОКПО;	 Раб.документы.ОКОНХ   = ОКОНХ;
     Раб.документы.ОРГПРАВ = ОРГПРАВ;	Раб.документы.ФСОБСТВ = Форма;	 Раб.документы.ОТРАСЛЬ = ОТРАСЛЬ;
     Раб.документы.МРЕГИСТР= Мц;	Раб.документы.ГРЕГИСТР= Гц;

     Раб.документы.SaveUL;
   fi;
  fi;
End;

Func OpenB (Об:S;Iter:I):L;
   OpenBlank("B");
  ^False;
End;

ПРОЦ Docs(Об:S);

  Раб.Бух.Docs("Реквизиты предприятия","3_0");

КОНЕЦ;

ПРОЦ Отмена(Obj:s);
   Close;
КОНЕЦ;

Proc СохранитьОИ(Об:String);
var PathFile:String;
 PathFile='info.dbt';
 if ВыборФайла(PathFile,"Выбор файла для записи")=cmOK:
     if WriteVarInDBT(PathFile,false):
       message('Данные бланка сохранены');
     fi;

 fi;
End;

Proc СчитатьОИ(Об:String);
var PathFile:String;
 PathFile='info.dbt';
 if ВыборФайла(PathFile,"Выбор файла для чтения")=cmOK:
   if ExistFile(PathFile):
     if ReadVarFromDBT(PathFile):
       message('Данные бланка считаны');
     fi;
   else
     message('Такой файл не существует! Информация не загружена!');
   fi;
 fi;
End;

Func ВыборДатыВыдачи(Клетка:String;Итер:Integer):Logical;
var tmpd:Date;
  tmpd=Календарь(ДатаВыдачи);
  if tmpd<>1.1.100:
    ДатаВыдачи=tmpd;
  fi;
  ^False;
end;

proc СтатусЛица_ПриИзменении(Переключатель:String);
  if СтатусЛица=0:
    Д='';
    Р='';
  fi;
end;

func СимволСтроки(aStr :String; aNumber :Integer):String;
  var vSimb :String;

  vSimb='';
  if aNumber>=1 then
    vSimb = SubStr(aStr, aNumber, 1);
  end;
  Return(vSimb);
end;

func ВводПоКлеткам_ПриОбзоре(Field :String; Iter :Integer; Column :Integer; Value :String):String;
  var vStr :String;
  var vLen :Integer;

  if Input(vStr, 'Введите необходимое значение')=cmOk then
    if Field = 'Ввод_ИНН' then
      vStr = SubStr(vStr, 1, 10);
      vLen = Length(vStr);
      О    = СимволСтроки(vStr, vLen-9);
      Б    = СимволСтроки(vStr, vLen-8);
      В    = СимволСтроки(vStr, vLen-7);
      Т    = СимволСтроки(vStr, vLen-6);
      П    = СимволСтроки(vStr, vLen-5);
      Е    = СимволСтроки(vStr, vLen-4);
      Ж    = СимволСтроки(vStr, vLen-3);
      З    = СимволСтроки(vStr, vLen-2);
      Л    = СимволСтроки(vStr, vLen-1);
      Н    = СимволСтроки(vStr, vLen);
    |  Field = 'Ввод_ИННФЛ' then
      vStr = SubStr(vStr, 1, 12);
      vLen = Length(vStr);
      О    = СимволСтроки(vStr, vLen-11);
      Б    = СимволСтроки(vStr, vLen-10);
      В    = СимволСтроки(vStr, vLen-9);
      Т    = СимволСтроки(vStr, vLen-8);
      П    = СимволСтроки(vStr, vLen-7);
      Е    = СимволСтроки(vStr, vLen-6);
      Ж    = СимволСтроки(vStr, vLen-5);
      З    = СимволСтроки(vStr, vLen-4);
      Л    = СимволСтроки(vStr, vLen-3);
      Н    = СимволСтроки(vStr, vLen-2);
      Д    = СимволСтроки(vStr, vLen-1);
      Р    = СимволСтроки(vStr, vLen);
    |  Field = 'Ввод_КПП' then
      vStr = SubStr(vStr, 1, 9);
      vLen = Length(vStr);
      Й    = СимволСтроки(vStr, vLen-8);
      Ц    = СимволСтроки(vStr, vLen-7);
      У    = СимволСтроки(vStr, vLen-6);
      Ы    = СимволСтроки(vStr, vLen-5);
      Ч    = СимволСтроки(vStr, vLen-4);
      Х    = СимволСтроки(vStr, vLen-3);
      Ф    = СимволСтроки(vStr, vLen-2);
      Ш    = СимволСтроки(vStr, vLen-1);
      Щ    = СимволСтроки(vStr, vLen);
    |  Field = 'Ввод_ИМНС' then
      vStr = SubStr(vStr, 1, 4);
      vLen = Length(vStr);
      Код1 = СимволСтроки(vStr, vLen-3);
      Код2 = СимволСтроки(vStr, vLen-2);
      Код3 = СимволСтроки(vStr, vLen-1);
      Код4 = СимволСтроки(vStr, vLen);
    end;
  end;
  Template.HideEditor(false);
  Return("");
end;

func ВводПоКлеткам_ПриВходе(Field :String; Iter :Integer):Logical;
  ВводПоКлеткам_ПриОбзоре(Field, Iter, 0, '');
  Return(False);
end;

MNS_ErrorField	  :String = [""];

proc SetFocusOnError;
  var vObject :Object;
  if MNS_ErrorField <> "" then
    if FindObject("ИНФО.ОИ" + '.Template', vObject) then
      vObject.Field  = MNS_ErrorField;
      MNS_ErrorField = "";
    end;
  end;
end;

Проц ПриОткрытии(Создать: Логич);
  SetFocusOnError;
end;


КОНЕЦ