БЛАНКСШАБЛОНОМ "Счет короткий",
РЕДАКТОР Счет;
USES Раб.Документы,Раб.Обл, Раб.Бух, Инфо.ОИ,Раб.Сис;

 секДаты:Section;
 секДатыРез:Section;

 ТекстПоУмолчанию:String='Оплата производится в рублях по курсу ЦБ РФ на день платежа';

 ВсегоОпл:Numeric=СуммаМассива(КолПозСч[].Всего,КолПозСч);
 Налог:Numeric=ВсегоОпл-СуммаМассива(КолПозСч[].Сумма,КолПозСч);
 СуммаСНДС[]:Numeric=КолПозСч[$].СуммаНДС+КолПозСч[$].Сумма;

 ВводПокупРучной:Logical; -- false - Покупатель из картотеки, true - ручной ввод покупателя

 ВсегоСЛО:С=if(ВсегоОпл=0,"",Раб.Бух.СуммаПрописью(ВсегоОпл,Валюта));

 КорИмя:String=Рекв.ПолнИмя;
 ФИО   :String=МОЛ.ФАМИЛИЯ+' '+МОЛ.ИНИЦИАЛЫ;
 СФильтром:Logical; -- Выбор ТМЦ с фильтром

 ТекстВалюта:String=if(Валюта='','РУБ',Валюта);

 ТекстОплата:String=[if(UP(Валюта)<>'РУБ' and Валюта<>'',ТекстПоУмолчанию,'')];

 -- Флаги выбора товара из разных картотек
 ТипВыбора:Integer=[0]; -- 0 - ТМЦ, 1 - ОСиНА, 2 - Текст

 ФлТМЦ:String=if(ТипВыбора=0,'V','');
 ФлОСИНА:String=if(ТипВыбора=1,'V','');
 флТекст:String=if(ТипВыбора=2,'V','');
 ----------------------

 КНПлюс:String="+";
 КНМинус:String="-";
 КНФильтр:String="";

 Кл:String='';

ДолжнРук:String=if(Рук=nil,Рекв.ДолжнРук,Рук.Должность.Долж);
ДолжнБух:String=if(Бух=nil,Рекв.ДолжнБух,Бух.Должность.Долж);
ФИОРук:String=if(Рук=nil,Рекв.ФИОРук,Рук.Фамилия[Дата]+' '+Рук.ИНИЦИАЛЫ);
ФИОБух:String=if(Бух=nil,Рекв.ФИОБух,Бух.Фамилия[Дата]+' '+Бух.ИНИЦИАЛЫ);


func Контр(Об:String;Итер:Integer):Logical;
var temp:Record;
  If Об = "КорИмя" :
       temp=ОткрытьКартотеку("Контрагент","Наше");
       if temp<>nil:Рекв=temp;fi;
       Банк=РАБ.Обл.ПервЗапись("БАНК_СЧЕТА","", "Умолчание and КонтрАгент="+RecordToString(Рекв));
       ^False;
  |  Об = "Пост" :
      if not ВводПокупРучной:
          temp=ОткрытьКартотеку('Контрагент','Покупатель или ДИК');
          if temp<>nil:
               РеквП=temp;
               Пост=Раб.Обл.GetCardS('Контрагент',temp,'ПолнИмя');
               Адрес=Раб.Обл.GetCardS('Контрагент',temp,"ФактАдрес");
          fi;
          ^False;
       else ^True;
      fi;
  Fi;
end;

proc Пересчет(Клетка:String;Итер:Integer);
  if КолПозСч=0:InsertFrame(КолПозСч,КолПозСч+1);fi;
  if Клетка="Цена" or Клетка="Колич":
      КолПозСч[Итер].Сумма=КолПозСч[Итер].Колич*КолПозСч[Итер].Цена;
      КолПозСч[Итер].СуммаНДС=КолПозСч[Итер].Сумма*КолПозСч[Итер].НДС%;
      КолПозСч[Итер].Всего=КолПозСч[Итер].Сумма+КолПозСч[Итер].СуммаНДС;
    |Клетка="НДС":
      КолПозСч[Итер].СуммаНДС=КолПозСч[Итер].Сумма*КолПозСч[Итер].НДС%;
      КолПозСч[Итер].Всего=КолПозСч[Итер].Сумма+КолПозСч[Итер].СуммаНДС;
    |Клетка="Всего":
      КолПозСч[Итер].СуммаНДС=КолПозСч[Итер].НДС/(100+КолПозСч[Итер].НДС)*КолПозСч[Итер].Всего;
      КолПозСч[Итер].Сумма=КолПозСч[Итер].Всего-КолПозСч[Итер].СуммаНДС;
      КолПозСч[Итер].Цена=КолПозСч[Итер].Сумма/КолПозСч[Итер].Колич;
  fi;
end;

Func ВыборТовара_ПриВходе(Об:String;Итер:Integer):Logical;
var TMPRec:Record;
var карт,фильтр:string;
  If КолПозСч = 0 : ВставитьРамку(КолПозСч,КолПозСч+1); Fi;
  if ТипВыбора=1: Карт="УчетКарточкаОС";фильтр="";
    |ТипВыбора=0:
       Карт="ТМЦ";
       if Раб.Сис.Ver69:
         Фильтр="";
       else
         Фильтр="Товар ИЛИ Материал ИЛИ Услуга";
       fi;
    |ТипВыбора=2: ^True;
  fi;
  if СФильтром: TMPRec = Раб.документы.ВыборСФильтром(Карт,"Коммент",Фильтр);
   else TMPRec = ОткрытьКартотеку(Карт,Фильтр);
  fi;

   If TMPRec = NIL : 
   | True :
         If КолПозСч = 0 :
          ВставитьРамку(КолПозСч,КолПозСч+1);
         Fi;
   if Карт="ТМЦ":
        Раб.Документы.TMSelect(TMPRec);
        КолПозСч[Итер].ТМЦ = TMPRec;
        КолПозСч[Итер].Наим = Раб.Документы.НаимТМЦ;
        КолПозСч[Итер].НДС      = Раб.Документы.НДСТМЦ;
        КолПозСч[Итер].ЕдИзм= Раб.Документы.ЕдИзмТМЦ;
   |Карт="УчетКарточкаОС":
        Раб.Документы.OCSelect(TMPRec);
        КолПозСч[Итер].Наим = Раб.Документы.НаимОС;
        Fi;
   Fi;
 ^False;
end;

func MOLSEL(Об:String;Итер:Integer):Logical;
   МОЛ=ОткрытьКартотеку("Сотрудники","МОЛ");        --ОткрытьКартотеку("ФизЛицо","МОЛ");
  ^False;
end;

proc Сл(Об:String);
  Номер=Раб.Обл.СЛЕД("Счет","Номер");
end;

proc ПриСчитывании;
  If Раб.Обл.НоваяЗапись('СЧЕТ',Current):
       Дата=Сегодня;
       Номер=Раб.Обл.СледСУчетомГода("Счет","Номер","Дата");
       НомерБум=СТР(Номер);
       if Рекв=nil:Рекв=РАБ.Обл.ПервЗапись("Контрагент","","Наше");fi;
       if Банк=nil:
         Банк=РАБ.Обл.ПервЗапись("БАНК_СЧЕТА","", "Умолчание and КонтрАгент="+RecordToString(Рекв));
       fi;
       if Валюта="":Валюта="РУБ";fi;
       if BlankExist("РАБ.ТСС.БИБ.SQL"):Изсистемы=2;fi;
    |True :
       If Рекв = Nil :
          Рекв=РАБ.Обл.ПервЗапись("Контрагент","","Наше");
          Банк=РАБ.Обл.ПервЗапись("БАНК_СЧЕТА","","Умолчание and КонтрАгент="+RecordToString(Рекв));
       Fi;
       If НомерБум = "" :
         НомерБум=СТР(Номер);
       Fi;
  Fi;
  секДаты.Visible = Изсистемы <> 2;
  секДатыРез.Visible = Изсистемы = 2;
end;

proc НомерБ(Field:String;Iter:Integer);
var WW:Integer;
  WW = ЦЕЛ(НомерБум);
  If WW > 0 And  Номер <> WW :
   Номер=WW;
  Fi;
end;

Proc ВосстРекв;
var Robl:Integer;
  Robl=OpenWorkArea("Контрагент","ПолнИмя","ПолнИмя='"+Пост+"'");
  Try
  if Records(Robl)<>0:
      Адрес=GetFieldS(RObl,1,"ЮрАдрес");
  fi;
  Finally
    CloseWorkArea(Robl);
  End;
End;

var СписокДокументов[]:String;

proc ИмпортИзСчетФ;
var ВыбрЗап:Record;
var Robl,RSubObl,НомЗап,i,Кол:Integer;
  ВыбрЗап=OpenCardFile('СЧЕТФАКТ');
  if ВыбрЗап<>Nil:
      Robl=OpenWorkArea('СЧЕТФАКТ','НомерБум','');
      Try

        -- Основная часть
        НомЗап=GetRecordNumber(Robl,ВыбрЗап);
        Рекв=GetFieldR(Robl,НомЗап,'Рекв');
        РеквП=GetFieldR(Robl,НомЗап,'РеквП');
        Банк=РАБ.Обл.ПервЗапись("БАНК_СЧЕТА","", "Умолчание and КонтрАгент="+RecordToString(Рекв));
        Пост=GetFieldS(Robl,НомЗап,"Покуп");
        Валюта=GetFieldS(Robl,НомЗап,"Валюта");
        Адрес=GetFieldS(Robl,НомЗап,"Адрес");

        ClearVariable(КОЛПОЗСЧ);

        -- Табличная часть
        RSubObl=OpenArray(Robl,НомЗап,'КОЛНАИМ','');
        Try
          кол=Records(RSubObl);
          for i=1..кол do
            InsertFrame(КОЛПОЗСЧ,КОЛПОЗСЧ+1);
            КОЛПОЗСЧ[i].Наим  =GetFieldS(RSubobl,i,'Наим');
            КОЛПОЗСЧ[i].Колич =GetFieldN(RSubobl,i,'КОЛИЧ');
            КОЛПОЗСЧ[i].Цена  =GetFieldN(RSubobl,i,'ЦЕНА');
            КОЛПОЗСЧ[i].НДС   =GetFieldN(RSubobl,i,'НДС');
            КОЛПОЗСЧ[i].ЕдИзм =GetFieldS(RSubobl,i,'ЕДИЗМ');
            КОЛПОЗСЧ[i].Сумма   =GetFieldN(RSubobl,i,'Сумма');
            КОЛПОЗСЧ[i].СуммаНДС=GetFieldN(RSubobl,i,'СуммаНДС');
            КОЛПОЗСЧ[i].Всего   =GetFieldN(RSubobl,i,'Всего');
          end;
        Finally
          CloseWorkArea(RSubobl);
        End;
      Finally
        CloseWorkArea(Robl);
      End;
  fi;
end;

proc ИмпортИзНакладной;
var ВыбрЗап:Record;
var Robl,RSubObl,НомЗап,i,Кол:Integer;
  ВыбрЗап=OpenCardFile('Накладная');
  if ВыбрЗап<>Nil:
      Robl=OpenWorkArea('Накладная','НомерБум','');
      Try

        -- Основная часть
        НомЗап=GetRecordNumber(Robl,ВыбрЗап);
        Рекв=GetFieldR(Robl,НомЗап,'Рекв');
        РеквП=GetFieldR(Robl,НомЗап,'РеквП');
        ВарНалПр=GetFieldI(Robl,НомЗап,'ВарНалПр');
        НалПр=GetFieldN(Robl,НомЗап,'НалПр');
        Валюта=GetFieldS(Robl,НомЗап,"Валюта");
        Пост=GetFieldS(Robl,НомЗап,"Пост");
        if Пост<>'':
          ВосстРекв;
        fi;

        ClearVariable(КОЛПОЗСЧ);

        -- Табличная часть
        RSubObl=OpenArray(Robl,НомЗап,'ПОЗИЦИИ','');
        Try
          кол=Records(RSubObl);
          for i=1..кол do
            InsertFrame(КОЛПОЗСЧ,КОЛПОЗСЧ+1);
            КОЛПОЗСЧ[i].Наим  =GetFieldS(RSubobl,i,'ТМЦС');
            КОЛПОЗСЧ[i].Колич =GetFieldN(RSubobl,i,'КОЛИЧ');
            КОЛПОЗСЧ[i].Цена  =GetFieldN(RSubobl,i,'ЦЕНА');
            КОЛПОЗСЧ[i].НДС   =GetFieldN(RSubobl,i,'НДС');
            КОЛПОЗСЧ[i].ЕдИзм =GetFieldS(RSubobl,i,'ЕДИЗМС');
            КОЛПОЗСЧ[i].Сумма =GetFieldN(RSubobl,i,'Сумма');
            КОЛПОЗСЧ[i].СуммаНДС =GetFieldN(RSubobl,i,'СуммаНДС');
            КОЛПОЗСЧ[i].Всего =GetFieldN(RSubobl,i,'Всего');
          end;
        Finally
          CloseWorkArea(RSubobl);
        End;
      Finally
        CloseWorkArea(Robl);
      End;
  fi;
end;

proc ЗаполнитьСписок;
  ClearVariable(СписокДокументов);
  СписокДокументов[1]='         Счет-фактуры';
  СписокДокументов[2]='           Накладной';
  СписокДокументов[3]='            Торг-12';
End;


proc ИмпортИзТорг12;
var ВыбрЗап:Record;
var Robl,RSubObl,НомЗап,i,Кол:Integer;
  ВыбрЗап=OpenCardFile('ТНакладная');
  if ВыбрЗап<>Nil:
      Robl=OpenWorkArea('ТНакладная','НомерБум','');
      Try

        -- Основная часть
        НомЗап=GetRecordNumber(Robl,ВыбрЗап);
        Рекв=GetFieldR(Robl,НомЗап,'Рекв');
        РеквП=GetFieldR(Robl,НомЗап,'ОТПРАВИТЕЛЬ');
        Банк=РАБ.Обл.ПервЗапись("БАНК_СЧЕТА","", "Умолчание and КонтрАгент="+RecordToString(Рекв));
        Валюта='РУБ';
        ВарНалПр=0;

        Пост=РеквП.ПолнИмя;
        Адрес=РеквП.ФактАдрес;


        ClearVariable(КОЛПОЗСЧ);

        -- Табличная часть
        RSubObl=OpenArray(Robl,НомЗап,'ПОЗИЦИИ','');
        Try
          кол=Records(RSubObl);
          for i=1..кол do
            InsertFrame(КОЛПОЗСЧ,КОЛПОЗСЧ+1);
            КОЛПОЗСЧ[i].Наим  =GetFieldS(RSubobl,i,'НАИМ');
            КОЛПОЗСЧ[i].Колич =GetFieldN(RSubobl,i,'Нетто');
            КОЛПОЗСЧ[i].Цена  =GetFieldN(RSubobl,i,'ЦЕНА');
            КОЛПОЗСЧ[i].НДС   =GetFieldN(RSubobl,i,'НДС');
            КОЛПОЗСЧ[i].ЕдИзм =GetFieldS(RSubobl,i,'ЕДИЗМ');
            КОЛПОЗСЧ[i].Сумма =GetFieldN(RSubobl,i,'Сумма');
            КОЛПОЗСЧ[i].СуммаНДС =GetFieldN(RSubobl,i,'СуммаНДС');
            КОЛПОЗСЧ[i].Всего =GetFieldN(RSubobl,i,'СУМСНДС');
          end;
        Finally
          CloseWorkArea(RSubobl);
        End;
      Finally
        CloseWorkArea(Robl);
      End;
  fi;
end;

Proc Импорт(Об:String);
var  НомерВыбора:Integer;
  ЗаполнитьСписок;
  НомерВыбора=Alternate('Импорт из:',СписокДокументов,18);
  if НомерВыбора=1:
       ИмпортИзСчетФ;
    |НомерВыбора=2:
       ИмпортИзНакладной;
    |НомерВыбора=3:
       ИмпортИзТорг12;
  fi;
End;

Func ПриПроверке:Logical;
  ИтСумма=ВсегоОпл;
  НДС=Налог;
  ^True;
End;

proc Отмена(Об:String);
  EditorCancel;
  Close;
end;

proc Запомнить(Об:String);
  EditorApply;
  Close;
end;


func ВыборРеквизитов(Надпись:String;Iter:Integer):Logical;
var R: Record;
var S: String;
var Filter: String;

  Filter = "Контрагент="+RecordToString(Рекв);
  R = OpenCardFile("Банк_Счета", Filter);
  if R <> Nil:
    S = GetCardFieldS("Банк_Счета", R, "Город");
    Банк = R;
  end; --R <> Nil:
  return False;
end;

proc Помощь='Помощь';
  Раб.Сис.ShowHelpContext(236);
end;

func Фильтр_ПриВходе(Поле:String;Итер:Integer):Logical;
  СФильтром=true;
  ВыборТовара_ПриВходе(Поле,Итер);
  СФильтром=false;
  ^false;
end;

func КНПлюс_ПриВходе(Поле:String;Итер:Integer):Logical;
  InsertFrame(КолПозСч,КолПозСч+1);
  ^false;
end;


func КНМИНУС_ПриВходе(Поле:String;Итер:Integer):Logical;
  DeleteFrame(КолПозСч,Итер);
  ^false;
end;

func ФлВыбора_ПриВходе(Поле:String;Итер:Integer):Logical;
  if Поле='флТМЦ':
      ТипВыбора=0;
    |Поле='флОСиНА':
      ТипВыбора=1;
    |Поле='флТекст':
      ТипВыбора=2;
  fi;
  ^false;
end;

func ПокупательТекст_ПриВходе(Поле:String;Итер:Integer):Logical;
  ВводПокупРучной=not ВводПокупРучной;
  ^false;
end;

func Получ_ПриВходе(Поле:String;Итер:Integer):Logical;
var rec:record;
  rec=Раб.Документы.ВыборСФильтром('Контрагент','ПолнИмя','Покупатель ИЛИ ДИК');
  if rec<>nil:
       РеквП=rec;
       Пост=Раб.Обл.GetCardS('Контрагент',rec,'ПолнИмя');
       Адрес=Раб.Обл.GetCardS('Контрагент',rec,"ФактАдрес");
  fi;
  ^false;
end;

func ВыборВалюты_Входе(Поле:String;Итер:Integer):Logical;
  Валюта=Раб.Бух.ВыбратьВалюту(Валюта);
  ^false;
end;

func ФИО_ПриВходе(Поле:String;Итер:Integer):Logical;
var tmp:record;
  tmp=OpenCardFile('Сотрудники','МОЛ');
  if tmp<>nil:
    if Поле='ФИОРук':
        Рук=tmp;
      |Поле='ФИОБух':
        Бух=tmp;
    fi;
  fi;
  ^false;
end;

Proc ФИОРук_OnExit(FieldName: String; Iter: Integer);
 if FieldName="ФИОРук": ClearVariable(Рук);
   |FieldName="ФИОБух": ClearVariable(Бух);
 fi;
end;


Proc OnOpen(Create: Logical);
  Раб.Настр_Печать.Cfg("","Документы.счета.счетн.cfg");
end;


КОНЕЦ