-- Шаблон создан мастером бланков
-- 26.10.2005 15:26:26
--
BlankWithTemplate "Общие функции для МНС и Бар-кодов";


  var NumberAsDefaults	:String  = "001";
      MNS_File[]	:String;
      MNS_IndexFile	:Integer;
      MNS_ShortName	:String;
      MNS_FileName	:String;
      MNS_HintHead	:String = "ЭкспортМНС -> "+if(MNS_ShortName<>"", MNS_ShortName+" -> ", "");

      -- Нулевой ИНН для индивидуального предпринимателя без ИНН
      MNS_Предст_ИНН	:String  = "000000000000";
      -- Дополнительные переменные для 2-го формата
      MNS_КодНО 	:String;
      MNS_НаимОИВ	:String;
      MNS_ДокПредст	:String;
      MNS_Свидетельство :String;
      MNS_ОКВЭД 	:String;
      MNS_КАТНП 	:String;

      -- Обработка ошибок - Экспорт ФНС не реалтзован
      Error_Нет_ФНС	:String = "Экспорт в форматы ФНС временно не реализован...";

      -- Обработка ошибок - Общие
      Error_Орг_ИНН	       :String = "Отсутствует ИНН организации";
      Error_Орг_КПП	       :String = "Отсутствует КПП организации";
      Error_Орг_ИННРеорг       :String = "Отсутствует ИНН реорганизованной организации";
      Error_Орг_КППРеорг       :String = "Отсутствует КПП реорганизованной организации";
      Error_Орг_КППОП	       :String = "Отсутствует КПП по месту нахождения организации";
      Error_Орг_Наим	       :String = "Отсутствует наименование организации";
      Error_Орг_Наим_Иностр    :String = "Отсутствует наименование иностранной организации";
      Error_Орг_Телефон        :String = "Отсутствует контактный телефон";
      Error_Мест_Предост       :String = "Отсутствует место предоставления декларации";
      Error_ОбПодр_Наим        :String = "Отсутствует наименование обособленного подразделения";
      Error_ОбПодр_КППОП       :String = "Отсутствует КПП по месту нахождения обособленного подразделения";
      Error_ВидДок	       :String = "Отсутствует вид документа";
      Error_ВидКорр	       :String = "Отсутствует номер корректировки";
      Error_НалПериод	       :String = "Отсутствует налоговый период";
      Error_НомКварт	       :String = "Отсутствует номер квартала";
      Error_НомМес	       :String = "Отсутствует номер месяца";
      Error_Год 	       :String = "Отсутствует год";
      Error_ОтчПериод	       :String = "Отсутствует отчетный период";
      Error_Нал_Наим	       :String = "Отсутствует наименование налогового органа";
      Error_Нал_Код	       :String = "Отсутствует код налогового органа";
      Error_Отпр_ФИО	       :String = "Отсутствует ФИО отправителя";
      Error_Отпр_Долж	       :String = "Отсутствует должность отправителя";
      Error_Отпр_ТФ	       :String = "Отсутствует телефон отправителя";
      Error_Рук_ФИО	       :String = "Отсутствует ФИО руководителя";
      Error_Бух_ФИО	       :String = "Отсутствует ФИО бухгалтера";
      Error_Исп_ФИО	       :String = "Отсутствует ФИО исполнителя";
      Error_Предст_ФИО	       :String = "Отсутствует ФИО представителя";
      Error_Предст_Док	       :String = "Отсутствует наименование документа представителя";
      Error_ПФР_Рег_Номер      :String = "Отсутствует регистрационный номер ПФР";
      Error_ФСС_Рег_Номер      :String = "Отсутствует регистрационный номер ФСС";
      Error_Рег_НомерТФОМС     :String = "Отсутствует регистрационный номер в ТФОМС";
      Error_Страна_Регистр     :String = "Отсутствует страна регистрации (инкорпорации)";
      Error_КодСтр	       :String = "Отсутствует код страны";
      Error_Страна_Пост_Мест   :String = "Отсутствует страна постоянного местонахождения";
      Error_Тип_Налогоплат     :String = "Отсутствует код категории налогоплательщика";

      -- Обработка ошибок - Общие (2-й формат)
      Error_2_ОКПО	       :String = "Отсутствует код по ОКПО";
      Error_2_Отрасль	       :String = "Отсутствует вид деятельности организации";
      Error_2_ОКВЭД	       :String = "Отсутствует ОКВЭД организации";
      Error_2_ОргПрав	       :String = "Отсутствует организационно-правовая форма предприятия";
      Error_2_Форма	       :String = "Отсутствует форма собственности организации";

      Error_2_КОПФ	       :String = "Отсутствует ОКОПФ";
      Error_2_КФС	       :String = "Отсутствует ОКФС";
      Error_2_ОКЕИ	       :String = "Отсутствует ОКЕИ";
      Error_2_СерияСвид        :String = "Отсутствует серия и номер свидетельства о постановке на учет";
      Error_2_ДатаВыд	       :String = "Отсутствует дата выдачи свидетельства о постановке на учет";
      Error_2_ПрСовпад	       :String = "Отсутствует признак совпадения адреса, указанного в учредительных документах, и адреса постоянно действующего исполнительного органа";
      Error_2_КатНал	       :String = "Отсутствует категория налогоплательщика";
      Error_2_АдрУч	       :String = "Отсутствует адрес, указанный в учредительных документах";
      Error_2_АдрИО	       :String = "Отсутствует адрес постоянно действующего исполнительного органа";

      -- Обработка ошибок - "Форменные"
      Error_КБК 	       :String = "Отсутствует код бюджетной классификации";
      Error_ОКАТО	       :String = "Отсутствует код по ОКАТО";
      Error_ОГРН	       :String = "Отсутствует ОГРН организации";
      Error_ОГРНИП	       :String = "Отсутствует ОГРНИП";
      Error_ОКВЭД	       :String = "Отсутствует ОКВЭД организации";
      Error_НомерТел	       :String = "Отсутствует код города и номер контактного телефона";
      Error_Дата	       :String = "Отсутствует дата";
      Error_ВидПлатежа	       :String = "Отсутствует вид платежа";

      Error_Рук_НеНайден       :String = "Отсутствуют сведения о руководителе на стр.'Сведения о физическом лице' (или 'Сведения о должностных лицах организации'), т.к. не задан ИНН руководителя";
      Error_Рук_ТФСлуж	       :String = "Отсутствует служебный телефон руководителя";
      Error_Рук_ТФДом	       :String = "Отсутствует домашний телефон руководителя";
      Error_Рук_ДатаРожд       :String = "Отсутствует дата рождения руководителя";
      Error_Рук_МестоРожд      :String = "Отсутствует место рождения руководителя";
      Error_Рук_Пол	       :String = "Отсутствует пол руководителя";
      Error_Рук_Гражд	       :String = "Отсутствует гражданство руководителя";
      Error_Рук_КодГражд       :String = "Отсутствует код страны руководителя";
      Error_Рук_УдЛичн	       :String = "Отсутствует данные документа, удостоверяющего личность руководителя";
      Error_Рук_КодДок	       :String = "Отсутствует код вида документа, удостоверяющего личность руководителя";
      Error_Рук_СерияНомер     :String = "Отсутствует серия и номер документа, удостоверяющего личность руководителя";
      Error_Рук_КемВыдан       :String = "Отсутствует имя организации, выдавшей документ руководителю";
      Error_Рук_ДатаУдЛичн     :String = "Отсутствует дата выдачи документа руководителю";
      Error_Рук_ПочтИндекс     :String = "Отсутствует почтовый индекс адреса места жительства в РФ руководителя";
      Error_Рук_КодСубьектРФ   :String = "Отсутствует код субъекта Российской Федерации руководителя";
      Error_Рук_Адрес	       :String = "Отсутствует адрес места жительства руководителя в РФ";
      Error_Рук_АдресРез       :String = "Отсутствует адрес места жительства в стране, резидентом которой является руководитель";

      Error_Бух_НеНайден       :String = "Отсутствуют сведения о главном бухгалтере на стр.'Сведения о физическом лице' (или 'Сведения о должностных лицах организации'), т.к. не задан ИНН бухгалтера";
      Error_Бух_ТФСлуж	       :String = "Отсутствует служебный телефон бухгалтера";
      Error_Бух_ТФДом	       :String = "Отсутствует домашний телефон бухгалтера";
      Error_Бух_ДатаРожд       :String = "Отсутствует дата рождения бухгалтера";
      Error_Бух_МестоРожд      :String = "Отсутствует место рождения бухгалтера";
      Error_Бух_Пол	       :String = "Отсутствует пол бухгалтера";
      Error_Бух_Гражд	       :String = "Отсутствует гражданство бухгалтера";
      Error_Бух_КодГражд       :String = "Отсутствует код страны бухгалтера";
      Error_Бух_УдЛичн	       :String = "Отсутствует данные документа, удостоверяющего личность бухгалтера";
      Error_Бух_КодДок	       :String = "Отсутствует код вида документа, удостоверяющего личность бухгалтера";
      Error_Бух_СерияНомер     :String = "Отсутствует серия и номер документа, удостоверяющего личность бухгалтера";
      Error_Бух_КемВыдан       :String = "Отсутствует имя организации, выдавшей документ бухгалтера";
      Error_Бух_ДатаУдЛичн     :String = "Отсутствует дата выдачи документа бухгалтеру";
      Error_Бух_ПочтИндекс     :String = "Отсутствует почтовый индекс адреса места жительства в РФ бухгалтера";
      Error_Бух_СубьектРФ      :String = "Отсутствует субъект Российской Федерации бухгалтера";
      Error_Бух_КодСубьектРФ   :String = "Отсутствует код субъекта Российской Федерации бухгалтера";
      Error_Бух_Адрес	       :String = "Отсутствует адрес места жительства бухгалтера в РФ";
      Error_Бух_АдресРез       :String = "Отсутствует адрес места жительства в стране, резидентом которой является бухгалтер";

      Error_Предст_НеНайден    :String = "Отсутствуют сведения о представителе на стр.'Сведения о физическом лице' (или 'Сведения о должностных лицах организации'), т.к. не задан ИНН представителя";
      Error_Предст_ТФСлуж      :String = "Отсутствует служебный телефон представителя";
      Error_Предст_ТФДом       :String = "Отсутствует домашний телефон представителя";
      Error_Предст_ДатаРожд    :String = "Отсутствует дата рождения представителя";
      Error_Предст_МестоРожд   :String = "Отсутствует место рождения представителя";
      Error_Предст_Пол	       :String = "Отсутствует пол представителя";
      Error_Предст_Гражд       :String = "Отсутствует гражданство представителя";
      Error_Предст_КодГражд    :String = "Отсутствует код страны представителя";
      Error_Предст_УдЛичн      :String = "Отсутствует данные документа, удостоверяющего личность представителя";
      Error_Предст_КодДок      :String = "Отсутствует код вида документа, удостоверяющего личность представителя";
      Error_Предст_СерияНомер  :String = "Отсутствует серия и номер документа, удостоверяющего личность представителя";
      Error_Предст_КемВыдан    :String = "Отсутствует имя организации, выдавшей документ представителю";
      Error_Предст_ДатаУдЛичн  :String = "Отсутствует дата выдачи документа представителю";
      Error_Предст_ПочтИндекс  :String = "Отсутствует почтовый индекс адреса места жительства в РФ представителя";
      Error_Предст_КодСубьектРФ:String = "Отсутствует код субъекта Российской Федерации представителя";
      Error_Предст_Адрес       :String = "Отсутствует адрес места жительства представителя в РФ";
      Error_Предст_АдресРез    :String = "Отсутствует адрес места жительства в стране, резидентом которой является представитель";

      Error_Пред_НеНайден      :String = "Отсутствуют сведения об индивидуальном предпринимателе на стр.'Сведения о физическом лице' (или 'Сведения о должностных лицах организации'), т.к. не задан ИНН индивидуального предпринимателя";
      Error_Пред_ФИО	       :String = "Отсутствует ФИО индивидуального предпринимателя";
      Error_Пред_ИНН	       :String = "Отсутствует ИНН индивидуального предпринимателя";
      Error_Пред_ОГРНИП        :String = "Отсутствует ОГРНИП";
      Error_Пред_ТелефонСл     :String = "Отсутствует служебный телефон индивидуального предпринимателя";
      Error_Пред_ТелефонДом    :String = "Отсутствует домашний телефон индивидуального предпринимателя";
      Error_Пред_ДатаРожд      :String = "Отсутствует дата рождения индивидуального предпринимателя";
      Error_Пред_МестоРожд     :String = "Отсутствует место рождения индивидуального предпринимателя";
      Error_Пред_Пол	       :String = "Отсутствует пол индивидуального предпринимателя";
      Error_Пред_Гражданство   :String = "Отсутствует гражданство индивидуального предпринимателя";
      Error_Пред_КодГражд      :String = "Отсутствует код страны индивидуального предпринимателя";
      Error_Пред_УдЛичн        :String = "Отсутствует данные документа, удостоверяющего личность индивидуального предпринимателя";
      Error_Пред_КодДок        :String = "Отсутствует код вида документа, удостоверяющего личность индивидуального предпринимателя";
      Error_Пред_СерияНомер    :String = "Отсутствует серия и номер документа, удостоверяющего личность индивидуального предпринимателя";
      Error_Пред_КемВыдан      :String = "Отсутствует имя организации, выдавшей документ индивидуальному предпринимателю";
      Error_Пред_ДатаУдЛичн    :String = "Отсутствует дата выдачи документа индивидуальному предпринимателю";
      Error_Пред_ПочтИндекс    :String = "Отсутствует почтовый индекс адреса места жительства в РФ индивидуального предпринимателя";
      Error_Пред_КодСубьектРФ  :String = "Отсутствует код субъекта Российской Федерации индивидуального предпринимателя";
      Error_Пред_Адрес	       :String = "Отсутствует адрес места жительства индивидуального предпринимателя в РФ";
      Error_Пред_АдресРез      :String = "Отсутствует адрес места жительства в стране, резидентом которой является индивидуальный предприниматель";

      Error_ФЛ_НеНайден        :String = "Отсутствуют сведения о физическом лице на стр.'Сведения о физическом лице' (или 'Сведения о должностных лицах организации'), т.к. не задан ИНН физического лица";
      Error_ФЛ_ФИО	       :String = "Отсутствует ФИО физического лица";
      Error_ФЛ_ОГРНИП	       :String = "Отсутствует ОГРНИП";
      Error_ФЛ_ТелефонСл       :String = "Отсутствует служебный телефон физического лица";
      Error_ФЛ_ТелефонДом      :String = "Отсутствует домашний телефон физического лица";
      Error_ФЛ_ДатаРожд        :String = "Отсутствует дата рождения физического лица";
      Error_ФЛ_МестоРожд       :String = "Отсутствует место рождения физического лица";
      Error_ФЛ_Пол	       :String = "Отсутствует пол физического лица";
      Error_ФЛ_Гражданство     :String = "Отсутствует гражданство физического лица";
      Error_ФЛ_КодГражд        :String = "Отсутствует код страны физического лица";
      Error_ФЛ_УдЛичн	       :String = "Отсутствует данные документа, удостоверяющего личность физического лица";
      Error_ФЛ_КодДок	       :String = "Отсутствует код вида документа, удостоверяющего личность физического лица";
      Error_ФЛ_СерияНомер      :String = "Отсутствует серия и номер документа, удостоверяющего личность физического лица";
      Error_ФЛ_КемВыдан        :String = "Отсутствует имя организации, выдавшей документ физическому лицу";
      Error_ФЛ_ДатаУдЛичн      :String = "Отсутствует дата выдачи документа индивидуальному предпринимателю";
      Error_ФЛ_ПочтИндекс      :String = "Отсутствует почтовый индекс адреса места жительства в РФ физического лица";
      Error_ФЛ_КодСубьектРФ    :String = "Отсутствует код субъекта Российской Федерации физического лица";
      Error_ФЛ_Адрес	       :String = "Отсутствует адрес места жительства физического лица в РФ";
      Error_ФЛ_АдресРез        :String = "Отсутствует адрес места жительства в стране, резидентом которой является физическое лицо";

      Error_ИНВ_ДатаВыд        :String = "Отсутствует дата выдачи справки учреждения медико-социальной экспертизы";
      Error_ПолноеФИО_Рук      :String = "Введите ФИО руководителя полностью";
      Error_ПолноеФИО_Бух      :String = "Введите ФИО бухгалтера полностью";
      Error_ПолноеФИО_Предст   :String = "Введите ФИО представителя полностью";

      Error_ОбъектНалогообл    :String = "Отсутствует объект налогообложения";
      Error_ПериодОтч	       :String = "Неправильно задан период отчета";
      Error_Свидетельство      :String = "Отсутствует свидетельство";
      Error_Отрасль	       :String = "Отсутствует код вида предпринимательской деятельности";
      Error_ПочтИндекс	       :String = "Отсутствует почтовый индекс";
      Error_КодСубьектРФ       :String = "Отсутствует код субъекта Российской Федерации";

      Error_РукПредст	       :String = "Заполните либо 'Руководителя', либо 'Представителя'";
      Error_РукПредст_ФИО      :String = "Отсутствует ФИО руководителя/представителя";

      Error_Налоги	       :String = "Отсутствуют налоги, по которым представляется декларация";

      Error_НаимПредставителя  :String = "Отсутствует наименование организации - представителя налогоплательщика";
      Error_КодВидаИмущ        :String = "Отсутствует код вида имущества";
      Error_КадастрНомерЗемУч  :String = "Отсутствует кадастровый номер земельного участка";
      Error_КатегорияЗемель    :String = "Отсутствует категория земель";
      Error_ФлагРазделИмущ     :String = "Установите флаг для выгрузки нужного раздела в рамке 'Нумерация, выгрузка и печать'";
      Error_Шифр	       :String = "Отсутствует шифр";
      Error_КодТарифа	       :String = "Отсутствует код тарифа";
      Error_КолСтраниц	       :String = "Отсутствует количество страниц";

      var vGUID  :String;
      var vFileName  :String;
      var FileNameTXT :String;

  func MNS_Показатель(Показатель :String):String;
    Return(if(Показатель<>"", "Раздел = "+SubStr(Показатель, 2, 5)+", Строка = "+SubStr(Показатель, 7, 5)+", Графа = "+SubStr(Показатель, 12, 2), ""));
  end;

  proc MNS_ClearTemp;
    ClearVariable(ЭкспортМНС.ОбщиеФункции.MNS_File); ClearVariable(ЭкспортМНС.ОбщиеФункции.MNS_IndexFile);
  end;

  func Zapyat(s:String):String;
    var Str1, Str2 :String;
    var I	   :Integer;

    Str1 = Trim(S);
    I	 = Pos(" ",S);
    Str2 = SubStr(Str1, 1, I-1) + ",";
    Str1 = Trim(SubStr(Str1, I, Length(Str1)));
    I	 = Pos(" ",str1);
    Str2 = Str2 + Trim(SubStr(Str1, 1, I)) + ",";
    Str2 = Str2 + Trim(SubStr(Str1, I+1, Length(Str1)));
    return(Str2);
  end;

  func ProbelZapyat(s:String):String;
    var Str1 :String;
    var I	   :Integer;
    Str1 = Trim(S);
    I=pos(" ",Str1);
    while I<>0 do
      Str1=substr(Str1,1,I-1)+","+ substr(Str1,I+1,length(Str1));
      I=pos(" ",Str1);
    end;
    return(Str1);
  end;

  func 
  MNS_ФИО(аФИО :String):String;
    var vResult  :String;
    var I, Index :Integer;

    if аФИО="" then
      vResult = ",,";
    else
      Index = 0;
      for I=1 to WordsCount(аФИО, " ") do
	if vResult<>"" then
	  if I>1 and I<=3 and Index<2 then
	    vResult = vResult+","+ExtractWord(I, аФИО, " ");
	    Index   = Index+1;
	  else
	    vResult = vResult+" "+ExtractWord(I, аФИО, " ");
	  end;
	else
	  vResult   = ExtractWord(I, аФИО, " ");
	end;
      end;
      for I=Index to 1 do
	vResult = vResult+",";
      end;
      if vResult<>"" and Pos(",", vResult)=0 then
	vResult = vResult+",,";
      end;
    end;
    Return(vResult);
  end;

  func MNS_CurrentTime :String;
    var vTime, vHour, vMin, vSec:numeric;

    vTime = Time;
    vHour = Trunc(Time/3600);
    vTime = vTime-vHour*3600;
    vMin  = Trunc(vTime/60);
    vSec  = Time-vMin*60-vHour*3600;
    Return(if(Length(Str(vHour))<2, "0"+Str(vHour), Str(vHour))+
	   if(Length(Str(vMin)) <2, "0"+Str(vMin),  Str(vMin))+
	   if(Length(Str(vSec)) <2, "0"+Str(vSec),  Str(vSec)));
  end;

  func MNS_DateForFile :String;
    Return(Str(Year(Today))+SubStr(DateToString(Today), 4, 2)+SubStr(DateToString(Today), 1, 2)+MNS_CurrentTime);
  end;

  proc MNS_UpdateIndex;
    MNS_IndexFile = LengthOfArray(MNS_File);
  end;

  proc MNS_SaveString(Показатель :String; 
		      Значение	 :String; 
		      Признак	 :String);

    if	  (Признак="О" and Значение= "") then
      Trace(ЭкспортМНС.ОбщиеФункции.MNS_HintHead+"Не задан обязательный показатель "+Показатель);

    elsif (Признак="О" and Значение<>"") or
	  (Признак="Н" and Значение<>"") or
	  (Признак="П") 		 then

      MNS_IndexFile	      = MNS_IndexFile+1;
      MNS_File[MNS_IndexFile] = Показатель+Значение;

    elsif (Показатель="###" and Значение="") or 
	  (Показатель="@@@" and Значение="") or
	  (Показатель="===" and Значение="") then

      if MNS_File[MNS_IndexFile]<>Показатель then
	MNS_IndexFile		= MNS_IndexFile+1;
	MNS_File[MNS_IndexFile] = Показатель;
      end;
    else
    end;
  end;

  proc MNS_AddInArray(Сдвиг	 :String;
		      Показатель :String;
		      Значение	 :String;
		      Кавычка	 :String;
		      Признак	 :String;
		      Тип	 :String);

    if	  (Признак="О" and Значение= "") then
       Trace(ЭкспортМНС.ОбщиеФункции.MNS_HintHead+"Не задан обязательный показатель "+Показатель);

    elsif (Признак="О" and Значение<>"")  or
	  (Признак="Н" and Значение<>"") or
	  (Признак="П") 		 then

       MNS_File[MNS_IndexFile] =Вставить(Сдвиг+Показатель+Значение+Кавычка, MNS_File[MNS_IndexFile], Length(MNS_File[MNS_IndexFile]));
    elsif (Показатель=">"  and Значение="") or
	  (Показатель="</" and Значение<>"") or
	  (Показатель="/>" and Значение="") then

       if MNS_File[MNS_IndexFile]<>Показатель then
	  MNS_File[MNS_IndexFile] =Вставить(Сдвиг+Показатель+Значение+Кавычка, MNS_File[MNS_IndexFile], Length(MNS_File[MNS_IndexFile]));
       end;
    else
    end;
  end;

  proc MNS_SaveStringXML(Сдвиг	    :String;
			 Показатель :String;
			 Значение   :String;
			 Кавычка    :String;
			 Признак    :String;
			 Тип	    :String);

    if	  (Признак="О" and Значение= "") then
      Trace(ЭкспортМНС.ОбщиеФункции.MNS_HintHead+"Не задан обязательный показатель "+Показатель);

    elsif (Признак="О" and Значение<>"")  or
	  (Признак="Н" and Значение<>"") or
	  (Признак="П") 		 then
      MNS_IndexFile	      = MNS_IndexFile+1;
      MNS_File[MNS_IndexFile] = Сдвиг+Показатель+Значение+Кавычка;

    elsif (Показатель=">"  and Значение="") or
	  (Показатель="</" and Значение<>"") or
	  (Показатель="/>" and Значение="") then

      if MNS_File[MNS_IndexFile]<>Показатель then
	MNS_IndexFile		= MNS_IndexFile+1;
	MNS_File[MNS_IndexFile] = Сдвиг+Показатель+Значение+Кавычка;
      end;
    else
    end;
  end;

  ----- Выгрузка в XML-формат в ПФР: РСВ-1
  proc PFR_Error(Показатель  :String;
		  aErrorText  :String;
		  Расшифровка :String);

    var vText :String;

    vText = "";
    Trace(vText+" -> "+aErrorText+" -> '"+Показатель+"'"+if(Расшифровка<>"", "	("+Расшифровка+")")); vText = ""; Расшифровка = "";
  end;

  proc PFR_AddInArray(aValue :String);
    MNS_IndexFile	    = MNS_IndexFile+1;
    MNS_File[MNS_IndexFile] = aValue;
  end;

  proc PFR_AddString(Сдвиг	    :String;	     -- Сколько пробелов слева
		     Показатель     :String;	     -- Имя тега
		     Значение	    :String;	     -- Значение тега
		     Признак	    :String;	     -- Признак обязательности (для проверки и вывода текста ошибки)
		     Тип	    :String;	     -- I,  S,	 N
		     Расшифровка    :String);

    var Value :Numeric;
    Var Tp    :String;
    Var Ln    :Integer;

    var текЗначение :String;
    var локЧисло    :String;
    var локДробь    :String;
    var Кол_Всего   :Integer;
    var Кол_Дробь   :Integer;

    Value = 0;
    Tp=Substr(Тип,1,1);
    Ln=Int(Substr(Тип,3,Length(Тип)-3));
    if Показатель<>"" then
      Кол_Всего = Ln;
      Кол_Дробь = 0;

      if Tp = "I" or Tp="N" then
	локЧисло    = Str(Ln);
	if Pos(".", локЧисло)>0 then
	  Кол_Дробь = Int(ExtractWord(2, локЧисло, "."));
	end;
      end;

      if Значение<>"" then
	if Tp = "S" then

	  Значение = Trim(Значение);
	  if Pos("<", Значение)>0 or Pos(">", Значение)>0 then -- Запрещенные символы!!!
	    PFR_Error("Показатель не должен содержать символы '<', '>'", Показатель, Расшифровка);
	  end;

	| Tp = "I" or Tp="N" then

	  локЧисло	= Значение;
	  локЧисло	= Trim(SubStr(локЧисло, Int(Deb(Length(локЧисло)-Кол_Всего+1)), Кол_Всего));

	  if	Tp = "I" then
	    Значение  = локЧисло;

	  elsif Tp="N" then
	    if Pos(".", локЧисло)>0 then
	      локДробь	= SubStr(ExtractWord(2, локЧисло, "."), 1, Кол_Дробь);
	      локДробь	= локДробь + RepStr("0", Int(Deb(Кол_Дробь-Length(локДробь))));
	    else
	      локДробь	= RepStr("0", Кол_Дробь);
	    end;
	    текЗначение = локЧисло + if(локДробь<>"", "."+локДробь,"");
	    Значение	= текЗначение;
	  end;

	  if Tp="N" then
	    Значение = текЗначение;
	  else
	    Значение = Значение;
	  end;
	end;
      else
	if Признак="Н" then		    -- Присутствие элемента необязательно
	 If (Tp="S" And Значение="")	 or   -- Присутствие элемента необязательно
	    (Tp="I" And Значение="0")	 or   --   вида "0"
	    (Tp="N" and Значение="0.00") then --   вида "0.00"
	   Exit;
	 Fi;
	elsif Признак="П" then		       -- Значения элемента необязательно
	elsif Признак="О" or Признак="O" then -- Обязательное наличие значения показателя, со значением по умолчанию = 0 (ноль)
	  if Tp = "I" or Tp="N" then
	    Значение = "0"+if(Кол_Дробь>0, "."+RepStr("0", Кол_Дробь), "");
	  end;
	end;
      end;

      if Trim(Значение)="" then
	if SubStr(Признак, 1, 1)="О" or SubStr(Признак, 1, 1)="O" then	-- Обязательное наличие значения показателя (признак "О", "О+", "О-")
	  PFR_Error("Не задан обязательный показатель", Показатель, Расшифровка);
	end;
	PFR_AddInArray(Сдвиг+'<'+Показатель+'/>');
      else
	PFR_AddInArray(Сдвиг+'<'+Показатель+'>'+ Up(Значение)+ '</'+Показатель+'>');
      end;
    end;
  end;
  -----

  func MNS_CreateFileName(аИНН	  :String;
			  аКПП	  :String;
			  аИМНС   :String;
			  aYear   :String;
			  aNumber :String;
			  aИмФайл :Logical;
			  аВерсияФормата :String):String;
    var КодНОПолуч : String;
    КодНОПолуч = GetVariableS("ЭКСПОРТМНС.ЭКСПОРТ.Общ_ИФНСОтпр") + аИМНС;

    if aИмФайл then
      -- с 01.10.2008 г.
      FileNameTXT="O"+аИНН+"_"+if(аКПП<>"" and аКПП<>"000000000",аКПП+"_","")+КодНОПолуч+"_"+SubStr(aYear, 3, 2)+"_"+aNumber+".txt";
    else
      -- с 01.07.2007 г. по 01.10.2008 г.
      FileNameTXT="O"+аИНН+"_"+if(аКПП<>"" and аКПП<>"000000000",аКПП+"_","")+SubStr(aYear, 3, 2)+"_"+aNumber+".txt";
      -- до 01.07.2007 г.
      --FileNameTXT="O"+SubStr(аИНН, 5, 5)+SubStr(aYear, 3, 2)+"."+aNumber;
    end;
    Return(FileNameTXT);
  end;

  func MNS_CreateFileNameXML(аИМНС:String;
			     аИНН:String;
			     аКПП:String;
			     aShema:String;
			     aGUID:String;
			     aИмФайл :Logical):String;
    var ДатаФормФайла	:String;
    var FileName :String;
    var КодНОПолуч : String;
    КодНОПолуч = GetVariableS("ЭКСПОРТМНС.ЭКСПОРТ.Общ_ИФНСОтпр") + "_" + аИМНС;
    ДатаФормФайла = substr(datetostring(GetVariableD("ЭКСПОРТМНС.ЭКСПОРТ.ДатаФормирования")),7,4)+substr(datetostring(GetVariableD("ЭКСПОРТМНС.ЭКСПОРТ.ДатаФормирования")),4,2)+substr(datetostring(GetVariableD("ЭКСПОРТМНС.ЭКСПОРТ.ДатаФормирования")),1,2);
    if aИмФайл then
      -- с 01.10.2008 г.
      FileName=substr(aShema,1,3)+ExtractWord(2, aShema,"_")+"_"+КодНОПолуч+"_"+аИНН+if(аКПП<>"000000000",аКПП,"")+"_"+ДатаФормФайла+"_";
    else
      FileName=substr(aShema,1,3)+ExtractWord(2, aShema,"_")+"_"+аИМНС+"_"+аИНН+if(аКПП<>"000000000",аКПП,"")+"_"+ДатаФормФайла+"_";
    end;
    vGUID    = FileName+aGUID;
    vFileName = vGUID + ".xml";
    Return(vFileName);
  end;

  func MNS_CreateFileNameFSSXML(аРегНомерФСС:String;
				аГод	    :String;
				аПериодМ    :String;
				аИмФайл     :Logical):String;

    vFileName=аРегНомерФСС+'_'+аГод+'_'+аПериодМ+".xml";
    Return(vFileName);
  end;

  func MNS_CreateFileNamePFRXML(аГод	    :String ;
				аРегНомерПФР:String;
				аНомерФайла :String;
				аИмФайл     :Logical):String;

    vFileName = "PFR-700-Y-"+аГод+"-ORG-"+аРегНомерПФР+"-DCK-"+аНомерФайла+"-DPT-000000-DCK-00000"+ ".XML";
    Return(vFileName);
  end;

  proc MNS_CreateFile(aFirstPart :Logical;
		      aYear	 :String;
		      aNumber	 :String;
		      aVersion	 :String;
		      aDocCounts :Integer;
		      аИНН	 :String;
		      аКПП	 :String;
		      аИМНС	 :String;
		      аЮрЛицо	 :Logical);

    Hint(MNS_HintHead+"Запись заголовка (общий)");

    if aFirstPart  then MNS_ClearTemp;	  end;
    if Not аЮрЛицо then аКПП = '*******'; end;

    MNS_SaveString("ИдФайл:",	аИНН+"**"+аКПП+MNS_DateForFile,   "О");
    MNS_SaveString("ТипИнф:",	"ОТЧЕТНОСТЬНП", 		  "О");
    MNS_SaveString("ВерсФорм:", aVersion,			  "О");
    MNS_SaveString("ИдПол:",	аИМНС,				  "О");
    MNS_SaveString("ВерсПрог:", "ТУРБО БУХГАЛТЕР 6.9",		  "Н");
    MNS_SaveString("КолДок:",	Str(aDocCounts),		  "О");
    Hint("");
  end;

  proc MNS_CreateFileXML(aFirstPart :Logical;
		      aYear	 :String;
		      aNumber	 :String;
		      aVersion	 :String;
		      aShema	 :String;
		      аТипИнф	 :String;
		      aDocCounts :Integer;
		      аИНН	 :String;
		      аКПП	 :String;
		      аИМНС	 :String;
		      аЮрЛицо	 :Logical);

    Hint(MNS_HintHead+"Запись заголовка (общий)");

    if aFirstPart  then MNS_ClearTemp;	  end;
    MNS_SaveStringXML("","",'<?xml version="1.0" encoding="windows-1251"?>',"","О","");
    MNS_SaveStringXML("","",'<Файл xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance','"',"О","");
    if aVersion="4.01" then
       MNS_SaveStringXML(" ","",'xsi:noNamespaceSchemaLocation="'+aShema,'"',"О","");
    end;
    MNS_SaveStringXML(" ",'ИдФайл="',ВыделитьСлово(1,MNS_CreateFileNameXML(аИМНС,аИНН,аКПП,aShema,aNumber,true),"."),'"',"О","S(100)");
    if aVersion="4.01" then
       MNS_SaveStringXML(" ",'ВерсФорм="',aVersion,'" ',"О","S(5)");
       MNS_AddInArray	(" ",'ТипИнф="',  аТипИнф,'"',"О","S(50)");
       MNS_AddInArray	(" ","",'ВерсПрог="ТУРБО БУХГАЛТЕР 6.9"',"","Н","S(40)");
       MNS_AddInArray	(" ",'КолДок="',Str(aDocCounts),'">',"О","N(9)");
    elsif substr(aVersion,1,1)="5" then
       MNS_SaveStringXML(" ",'ВерсПрог="',"ТУРБО БУХГАЛТЕР 6.9",'" ',"О","S(40)");
       MNS_AddInArray	(" ",'ВерсФорм="',aVersion,'">',"О","S(5)");
    end;
    Hint("");
  end;

  proc MNS_CreateFileFSSXML(aFirstPart :Logical;
			    aYear      :String;
			    aNumber    :String;
			    aVersion   :String;
			    аЮрЛицо    :Logical);

    Hint(MNS_HintHead+"Запись заголовка (общий)");

    --Файл
    if aFirstPart  then MNS_ClearTemp;	  end;
    MNS_SaveStringXML("","",'<?xml version="1.0" encoding="windows-1251"?>',"","О","");
    MNS_SaveStringXML("","",'<?F4FORM version="'+aVersion+'"?>',"","О","");

    Hint("");
  end;

  proc MNS_CreateFilePFRXML(aFirstPart:Logical;
			    aYear     :String;
			    aRegNomPFR:String;
			    aNumber   :String;
			    aVersion  :String;
			    аЮрЛицо   :Logical);

    Hint(MNS_HintHead+"Запись заголовка (общий)");

    --Файл
    if aFirstPart  then MNS_ClearTemp;	  end;
    PFR_AddInArray('<?xml version="1.0" encoding="windows-1251"?>');
    PFR_AddInArray('<ФайлПФР>');
    PFR_AddString ('  ','ИмяФайла', MNS_CreateFileNamePFRXML(aYear, aRegNomPFR, aNumber, true), "O", "S(100)","Имя файла");
    PFR_AddInArray('  '+'<ЗаголовокФайла>');
    PFR_AddString   ('	  ','ВерсияФормата',		"0"+aVersion,	  "O", "S(5)",	"Версия формата");
    PFR_AddString   ('	  ','ТипФайла', 		"ВНЕШНИЙ",	  "O", "S(10)", "ТИП ФАЙЛА");
    PFR_AddInArray  ('	  '+'<ПрограммаПодготовкиДанных>');		  
    PFR_AddString   ('	    ','НазваниеПрограммы',	"ТУРБОБУХГАЛТЕР", "O", "S(40)", "Название программы подготовки данных");
    PFR_AddString   ('	    ','Версия', 		"6.9",		  "O", "S(10)", "Версия программы");
    PFR_AddInArray  ('	  '+'</ПрограммаПодготовкиДанных>');
    PFR_AddString   ('	  ','ИсточникДанных',		"СТРАХОВАТЕЛЬ",   "O", "S(15)", "Источник Данных");
    PFR_AddInArray  ('	'+'</ЗаголовокФайла>');

    Hint("");
  end;

  proc MNS_Sender(aYear       :String;
		  aNumber     :String;
		  аИНН	      :String;
		  аКПП	      :String;
		  аИМНС       :String;
		  аЮрЛицо     :Logical;
		  аНаимЮрЛица :String;
		  аФИООтпр    :String;
		  аДолжОтпр   :String;
		  аТелОтпр    :String;
		  аМылоОтпр   :String;
		  аДатаФорм   :Date);

    Hint(MNS_HintHead+"Запись отправителя");

    if Not аЮрЛицо then аКПП = '*******'; end;

    if Not аЮрЛицо then
      MNS_SaveString("ФИООтпрФЛ:", MNS_ФИО(up(аФИООтпр)), "О");
      MNS_SaveString("ТелОтпр:",   аТелОтпр,	      "П");
      MNS_SaveString("EmailОтпр:", аМылоОтпр,	      "Н");
    else
      MNS_SaveString("НаимОтпрЮл:",Up(trim(аНаимЮрЛица)),   "О");
      MNS_SaveString("ТелОтпр:",   аТелОтпр,	      "П");
      MNS_SaveString("EmailОтпр:", аМылоОтпр,	      "Н");
      MNS_SaveString("ДолжнОтпр:", Up(trim(аДолжОтпр)),     "Н");
      MNS_SaveString("ФИООтпр:",   MNS_ФИО(up(аФИООтпр)), "Н");
    end;
    MNS_SaveString  ("@@@", "", "");
    MNS_SaveString  ("ИдДок:",	   аИНН+"**"+аКПП+aYear+if(Length(aNumber)=8,"","00")+aNumber, "О");
    MNS_SaveString  ("ДатаДок:",   DateToString(аДатаФорм),		 "О");
    Hint("");
  end;

  proc MNS_SenderXML(aYear	 :String;
		  aNumber     :String;
		  аИНН	      :String;
		  аКПП	      :String;
		  аЮрЛицо     :Logical;
		  аНаимЮрЛица :String;
		  аФИООтпр    :String;
		  аДолжОтпр   :String;
		  аТелОтпр    :String;
		  аМылоОтпр   :String;
		  аДатаФорм   :Date);

    Hint(MNS_HintHead+"Запись отправителя");

    MNS_SaveStringXML(" ",'<ИдОтпр'," ","","Н","");
    MNS_AddInArray   (" ",'ДолжОтв="',аДолжОтпр,'"',"Н","S(45)");
    MNS_AddInArray   (" ",'Тлф="',аТелОтпр,'"',"Н","S(20)");
    MNS_AddInArray   (" ",'E-mail="',аМылоОтпр,'"',"Н","S(45)");
    MNS_AddInArray   ("",'>',"","","","");
    MNS_SaveStringXML("  ",'<ФИООтв'," ","","О","");
    MNS_AddInArray   (" ",'Фамилия="', ExtractWord(1, аФИООтпр, " "),'"',"О","S(60)");
    MNS_AddInArray   (" ",'Имя="',     ExtractWord(2, аФИООтпр, " "),'"',"О","S(60)");
    MNS_AddInArray   (" ",'Отчество="',ExtractWord(3, аФИООтпр, " "),'"',"Н","S(60)");
    MNS_AddInArray   ("",'/>',"","","","");
    MNS_SaveStringXML(" ","</","ИдОтпр>","", "","");
    MNS_SaveStringXML(" ",'<Документ'," ","","О","");
    MNS_AddInArray   (" ",'ИдДок="',aNumber,'">',"О","S(36)");

    Hint("");
  end;

  func ЗаменитьСимвол(ИсхСтрока:String;Симв:String;Замена:String):String;
  -- Заменяет символ в исходной строке;
  var i:Integer;
  var рез:String;
    рез = ИсхСтрока;
    i = pos(Симв,рез);
    while i>0 do
      рез = Substr(рез,1,i-1) + Замена + Substr(рез,i+1,length(рез));
      i = pos(Симв,рез);
    end;
    ^рез;
  end;

  proc MNS_SetVariable(КодНО	     :String;
		       НаимОИВ	     :String;
		       ДокПредст     :String;
		       Свидетельство :String;
		       ОКВЭД	     :String;
		       КАТНП	     :String);

    MNS_КодНО	      = КодНО;
    MNS_НаимОИВ       = ЗаменитьСимвол(НаимОИВ,"№","N");
    MNS_ДокПредст     = ДокПредст;
    MNS_Свидетельство = Свидетельство;
    MNS_ОКВЭД	      = ОКВЭД;
    MNS_КАТНП	      = КАТНП;
  end;

  proc MNS_Begin(aFirstPart  :Logical;
		 aFileNumber :String;
		 aVersion    :String;
		 aDocCounts  :Integer;
		 аИНН	     :String;
		 аКПП	     :String;
		 аИМНС	     :String;
		 аОтчГод     :String;
		 аЮрЛицо     :Logical;
		 аНаимЮрЛица :String;
		 аФИООтпр    :String;
		 аДолжОтпр   :String;
		 аТелОтпр    :String;
		 аДатаФорм   :Date);

    var vMail :String;

    MNS_CreateFile(aFirstPart, аОтчГод, aFileNumber, aVersion,aDocCounts, аИНН, аКПП, аИМНС, аЮрЛицо);
    MNS_Sender(аОтчГод, aFileNumber, аИНН, аКПП, аИМНС, аЮрЛицо, аНаимЮрЛица, аФИООтпр, аДолжОтпр, аТелОтпр, vMail, аДатаФорм);

    if aVersion = "2.00" or aVersion = "2.01" then

      if MNS_КодНО<>"-1" and MNS_НаимОИВ<>"-1" then

	MNS_SaveString("НаимНО:",	MNS_НаимОИВ,	   "Н"); MNS_НаимОИВ = "-1";
	MNS_SaveString("КодНО:",	MNS_КодНО,	   "Н"); MNS_КодНО   = "-1";
	MNS_SaveString("НаимОИВ:",	"",		   "П"); MNS_НаимОИВ = "-1";
      end;

      if MNS_ДокПредст<>"-1" and MNS_Свидетельство<>"-1" then

	MNS_SaveString("ДокПредст:",	MNS_ДокПредст,	   "Н"); MNS_ДокПредст	   = "-1";
	MNS_SaveString("Свидетельство:",MNS_Свидетельство, "Н"); MNS_Свидетельство = "-1";
      end;

      if MNS_ОКВЭД<>"-1" and MNS_КАТНП<>"-1" then

	MNS_SaveString("ОКВЭД:",	MNS_ОКВЭД,	   "Н"); MNS_ОКВЭД = "-1";
	MNS_SaveString("КАТНП:",	MNS_КАТНП,	   "Н"); MNS_КАТНП = "-1";
      end;
      if MNS_ОКВЭД<>"-1" then

	MNS_SaveString("ОКВЭД:",	MNS_ОКВЭД,	   "Н"); MNS_ОКВЭД = "-1";
	--MNS_SaveString("КАТНП:",	  MNS_КАТНП,	     "Н"); MNS_КАТНП = "-1";
      end;
      MNS_SaveString  ("КолФОтч:",	Str(aDocCounts),   "О");
    end;
    MNS_SaveString    ("###", "", "");
  end;

  proc MNS_BeginXML(aFirstPart	:Logical;
		 aFileNumber :String;
		 aVersion    :String;
		 aShema      :String;
		 аТипИнф     :String;
		 aDocCounts  :Integer;
		 аИНН	     :String;
		 аКПП	     :String;
		 аИМНС	     :String;
		 аОтчГод     :String;
		 аЮрЛицо     :Logical;
		 аНаимЮрЛица :String;
		 аФИООтпр    :String;
		 аДолжОтпр   :String;
		 аТелОтпр    :String;
		 аДатаФорм   :Date);

    var vMail :String;

    MNS_CreateFileXML(aFirstPart, аОтчГод, aFileNumber, aVersion,aShema,аТипИнф, aDocCounts, аИНН, аКПП, аИМНС, аЮрЛицо);
    if aVersion="4.01" then
       MNS_SenderXML(аОтчГод, aFileNumber, аИНН, аКПП, аЮрЛицо, аНаимЮрЛица, аФИООтпр, аДолжОтпр, аТелОтпр, vMail, аДатаФорм);
    end;
  end;

  proc MNS_BeginFSSXML(aFirstPart  :Logical;
		       aFileNumber :String;
		       aVersion    :String;
		       аОтчГод	   :String;
		       аЮрЛицо	   :Logical;
		       аНаимЮрЛица :String;
		       аФИООтпр    :String;
		       аДолжОтпр   :String;
		       аТелОтпр    :String;
		       аДатаФорм   :Date);

       MNS_CreateFileFSSXML(aFirstPart, аОтчГод, aFileNumber, aVersion, аЮрЛицо);
  end;

  proc MNS_BeginPFRXML(aFirstPart  :Logical;
		       aFileNumber :String;
		       aVersion    :String;
		       аОтчГод	   :String;
		       аРегНомерПФР:String;
		       аЮрЛицо	   :Logical;
		       аНаимЮрЛица :String;
		       аФИООтпр    :String;
		       аДолжОтпр   :String;
		       аТелОтпр    :String;
		       аДатаФорм   :Date);




       MNS_CreateFilePFRXML(aFirstPart, аОтчГод, аРегНомерПФР, aFileNumber, aVersion, аЮрЛицо);
  end;

  proc MNS_End;
    MNS_SaveString("###", "", "");
    MNS_SaveString("@@@", "", "");
    MNS_SaveString("===", "", "");
    Hint("");
  end;

  proc MNS_EndXML;
    MNS_SaveStringXML(" ","</","Документ>","","","");
    MNS_SaveStringXML("","</","Файл>", "","","");
    Hint("");
  end;

  proc MNS_EndFSSXML;
    MNS_SaveStringXML(" ","</","F4REPORT>", "","","");
    Hint("");
  end;

  proc MNS_EndPFRXML;
    PFR_AddInArray(''+'</ФайлПФР>');
    Hint("");
  end;

  func MNS_SaveArrayToFile(aPath   :String;
			   aYear   :String;
			   aNumber :String;
			   аИНН    :String):String;

    var I, vCount,l,n,k :Integer;
    var vFile, vStep	:Integer;
    var vErrorCode	:String;
    var vText		:String;
    var vКПП		:String;
    var vИмФайл 	:Logical;
    var vИМНС		:String;
    var aVersion	:String;

    vText = MNS_HintHead+"Формирование текстового файла. Запись ";
    Hint(vText);
    vErrorCode = "";
    --Догорова для формирования нового имени файла с 01.07.2007.
    if aPath<>"" and aYear<>"" and aNumber<>""	then
      n=GetVariableI("ЭКСПОРТМНС.ЭКСПОРТ.Позиции");
      k=0;
      if n<>0 then
	 for l=1..n do
	     if aNumber=GetVariableS("ЭКСПОРТМНС.ЭКСПОРТ.ПорядковыйНомер["+str(l)+"]") and GetVariableL("ЭКСПОРТМНС.ЭКСПОРТ.Выгружать["+str(l)+"]") then
		k=k+1;
		vИмФайл=GetVariableL("ЭКСПОРТМНС.ЭКСПОРТ.ИмФайл["+str(l)+"]");
		vКПП   =GetVariableS("ЭКСПОРТМНС.ЭКСПОРТ.КПП["+str(l)+"]");
		vИМНС  =GetVariableS("ЭКСПОРТМНС.ЭКСПОРТ.ИМНС["+str(l)+"]");
		MNS_FileName = aPath+if(SubStr(aPath, Length(aPath), 1)="\", "", "\")+MNS_CreateFileName(аИНН, vКПП, vИМНС, aYear, aNumber,vИмФайл, aVersion);
	     end;
	 end;
	 if k=0 then
	    MNS_FileName = aPath+if(SubStr(aPath, Length(aPath), 1)="\", "", "\")+MNS_CreateFileName(аИНН, vКПП, vИМНС, aYear, aNumber,vИмФайл, aVersion);
	 end;
      else
	 MNS_FileName = aPath+if(SubStr(aPath, Length(aPath), 1)="\", "", "\")+MNS_CreateFileName(аИНН, vКПП, vИМНС, aYear, aNumber,vИмФайл, aVersion);
      end;
      Try
	vFile  = TextFileCreate(MNS_FileName, True);
	MNS_End;
	vCount = LengthOfArray(MNS_File);
	vStep  = Int(vCount/4);
	for I=1 to vCount do
	  TextFileWriteLn(vFile, MNS_File[I]);
	  if Int(I/vStep) = (I/vStep) then
	    Hint(vText+Str(I/vCount*100)+"%");
	  end;
	end;
	TextFileClose(vFile);
      Except
	if ErrorCode=5 then vErrorCode="Не правильный путь выгрузки форм"; 
	else
	  vErrorCode="Невозможно создать файл:^M" + MNS_FileName + "^M" + "Если файл открыт в другом окне, то закройте его.";
	end;
      End;
    end;
    --Догорова
--  if aPath<>"" and aYear<>"" and aNumber<>"" then
--	MNS_FileName = aPath+if(SubStr(aPath, Length(aPath), 1)="\", "", "\")+MNS_CreateFileName(аИНН, aYear, aNumber);

--	Try
--	  vFile  = TextFileCreate(MNS_FileName, True);
--	  MNS_End;
--	  vCount = LengthOfArray(MNS_File);
--	  vStep  = Int(vCount/4);
--	  for I=1 to vCount do
--	    TextFileWriteLn(vFile, MNS_File[I]);
--	    if Int(I/vStep) = (I/vStep) then
--	      Hint(vText+Str(I/vCount*100)+"%");
--	    end;
--	  end;
--	  TextFileClose(vFile);
--	Except
--	  if ErrorCode=5 then vErrorCode="Не правильный путь выгрузки форм";
--	  else
--	    vErrorCode="Невозможно создать файл:^M" + MNS_FileName + "^M" + "Если файл открыт в другом окне, то закройте его.";
--	  end;
--	End;Hint("");
    MNS_ClearTemp;
    Return(vErrorCode);
  end;

  func MNS_SaveArrayToFileXML(aPath   :String;
			      aFirst  :Logical;
			      aText   :String;
			      аИМНС   :String;
			      аИНН    :String;
			      аКПП    :String;
			      aShema  :String;
			      aNumber :String):String;

    var I, n, k, l, vCount, vStep :Integer;
    var vErrorCode	 :String;
    var vFile		 :Integer;
    var vText		 :String;
    var vИмФайл 	 :Logical;
    vИмФайл=true;
    vErrorCode = "";

    --Догорова для формирования нового имени файла с 01.10.2008.
    vText = MNS_HintHead+"Формирование файла. Запись ";
    Hint(vText); --Trace(aText);
    if aPath<>"" then
      n=GetVariableI("ЭКСПОРТМНС.ЭКСПОРТ.Позиции");
      k=0;
      if n<>0 then
	 for l=1..n do
	     if aNumber=GetVariableS("ЭКСПОРТМНС.ЭКСПОРТ.ПорядковыйНомер["+str(l)+"]") and GetVariableL("ЭКСПОРТМНС.ЭКСПОРТ.Выгружать["+str(l)+"]") then
		k=k+1;
		vИмФайл=GetVariableL("ЭКСПОРТМНС.ЭКСПОРТ.ИмФайл["+str(l)+"]");
		MNS_FileName = aPath+if(SubStr(aPath, Length(aPath), 1)="\", "", "\")+MNS_CreateFileNameXML(аИМНС,аИНН,аКПП,aShema,aNumber, vИмФайл);
	     end;
	 end;
	 if k=0 then
	    MNS_FileName = aPath+if(SubStr(aPath, Length(aPath), 1)="\", "", "\")+MNS_CreateFileNameXML(аИМНС,аИНН,аКПП,aShema,aNumber, vИмФайл);
	 end;
      else
	 MNS_FileName = aPath+if(SubStr(aPath, Length(aPath), 1)="\", "", "\")+MNS_CreateFileNameXML(аИМНС,аИНН,аКПП,aShema,aNumber, vИмФайл);
      end;
      Try
	MNS_EndXML;
	vCount = LengthOfArray(MNS_File);
	vStep  = Int(vCount/4);
	for I=1 to vCount do
	  WriteLn(MNS_FileName, MNS_File[I], True);
	  If vCount>4:
	    if Int(I/vStep) = (I/vStep) then
	      Hint(aText+Str(I/vCount*100)+"%"); --Trace(aText+Str(I/vCount*100)+"%");
	    end;
	  Fi;
	end;
      Except
	if ErrorCode=5 then vErrorCode="Не правильный путь выгрузки..."; end;
      End;
    end;
    Hint("");
    MNS_ClearTemp;
    Return(vErrorCode);
  end;

  func MNS_SaveArrayToFileFSSXML(aPath	 :String;
				 aFirst  :Logical;
				 aText	 :String;
				 аРегНФСС:String;
				 аГод	 :String ;
				 аПериодМ:String;
				 aNumber :String):String;

    var I, n, k, l, vCount, vStep :Integer;
    var vErrorCode	 :String;
    var vFile		 :Integer;
    var vText		 :String;
    var vИмФайл 	 :Logical;
    vИмФайл=true;
    vErrorCode = "";

    vText = MNS_HintHead+"Формирование файла. Запись ";
    Hint(vText); --Trace(aText);
    if aPath<>"" then
      n=GetVariableI("ЭКСПОРТМНС.ЭКСПОРТ.Позиции");
      k=0;
      if n<>0 then
	 for l=1..n do
	     if aNumber=GetVariableS("ЭКСПОРТМНС.ЭКСПОРТ.ПорядковыйНомер["+str(l)+"]") and GetVariableL("ЭКСПОРТМНС.ЭКСПОРТ.Выгружать["+str(l)+"]") then
		k=k+1;
		vИмФайл=GetVariableL("ЭКСПОРТМНС.ЭКСПОРТ.ИмФайл["+str(l)+"]");
		MNS_FileName = aPath+if(SubStr(aPath, Length(aPath), 1)="\", "", "\")+MNS_CreateFileNameFSSXML(аРегНФСС, аГод, аПериодМ, vИмФайл);
	     end;
	 end;
	 if k=0 then
	    MNS_FileName = aPath+if(SubStr(aPath, Length(aPath), 1)="\", "", "\")+MNS_CreateFileNameFSSXML(аРегНФСС, аГод, аПериодМ, vИмФайл);
	 end;
      else
	 MNS_FileName = aPath+if(SubStr(aPath, Length(aPath), 1)="\", "", "\")+MNS_CreateFileNameFSSXML(аРегНФСС, аГод, аПериодМ, vИмФайл);
      end;
      Try
	MNS_EndFSSXML;
	vCount = LengthOfArray(MNS_File);
	vStep  = Int(vCount/4);
	for I=1 to vCount do
	  WriteLn(MNS_FileName, MNS_File[I], True);
	  If vCount>4:
	    if Int(I/vStep) = (I/vStep) then
	      Hint(aText+Str(I/vCount*100)+"%"); --Trace(aText+Str(I/vCount*100)+"%");
	    end;
	  Fi;
	end;
      Except
	if ErrorCode=5 then vErrorCode="Не правильный путь выгрузки..."; end;
      End;
    end;
    Hint("");
    MNS_ClearTemp;
    Return(vErrorCode);
  end;

  func MNS_SaveArrayToFilePFRXML(aPath	 :String;
				 aFirst  :Logical;
				 aText	 :String;
				 аГод	 :String ;
				 аРегНПФР:String;
				 aNumber :String):String;

    var I, n, k, l, vCount, vStep :Integer;
    var vErrorCode	 :String;
    var vFile		 :Integer;
    var vText		 :String;
    var vИмФайл 	 :Logical;
    vИмФайл=true;
    vErrorCode = "";

    vText = MNS_HintHead+"Формирование файла. Запись ";
    Hint(vText); --Trace(aText);
    if aPath<>"" then
      n=GetVariableI("ЭКСПОРТМНС.ЭКСПОРТ.Позиции");
      k=0;
      if n<>0 then
	 for l=1..n do
	     if aNumber=GetVariableS("ЭКСПОРТМНС.ЭКСПОРТ.ПорядковыйНомер["+str(l)+"]") and GetVariableL("ЭКСПОРТМНС.ЭКСПОРТ.Выгружать["+str(l)+"]") then
		k=k+1;
		vИмФайл=GetVariableL("ЭКСПОРТМНС.ЭКСПОРТ.ИмФайл["+str(l)+"]");
		MNS_FileName = aPath+if(SubStr(aPath, Length(aPath), 1)="\", "", "\")+MNS_CreateFileNamePFRXML(аГод, аРегНПФР, aNumber, vИмФайл);
	     end;
	 end;
	 if k=0 then
	    MNS_FileName = aPath+if(SubStr(aPath, Length(aPath), 1)="\", "", "\")+MNS_CreateFileNamePFRXML(аГод, аРегНПФР, aNumber, vИмФайл);
	 end;
      else
	 MNS_FileName = aPath+if(SubStr(aPath, Length(aPath), 1)="\", "", "\")+MNS_CreateFileNamePFRXML(аГод, аРегНПФР, aNumber, vИмФайл);
      end;
      Try
	MNS_EndPFRXML;
	vCount = LengthOfArray(MNS_File);
	vStep  = Int(vCount/4);
	for I=1 to vCount do
	  WriteLn(MNS_FileName, MNS_File[I], True);
	  If vCount>4:
	    if Int(I/vStep) = (I/vStep) then
	      Hint(aText+Str(I/vCount*100)+"%"); --Trace(aText+Str(I/vCount*100)+"%");
	    end;
	  Fi;
	end;
      Except
	if ErrorCode=5 then vErrorCode="Не правильный путь выгрузки..."; end;
      End;
    end;
    Hint("");
    MNS_ClearTemp;
    Return(vErrorCode);
  end;

End