БланкСШаблоном "Список авансов";

ПОКУП:String;
КолАванс:Integer;
Ном[]:String;
Комментарий[]:String;
НВыбора:String="Выбрать";
КОд:String;
Признак:Logical;
Ав:Logical;
Button1:Object;
ВозврСделку:String;
ВозврКоммент:String;
Текст:String;
СкрытьФлаг:Logical;
СсылкаПокуп:String;

флЗакрытьАванс:Object;

ЗакрытьАванс:Logical;

Proc Очистка;
 КолАванс=0;
 ОчиститьПеременную(Ном);
 ОчиститьПеременную(Комментарий);
End;

Func НезакрСчет(САвВс:Numeric;Сд:String):Logical;
var Robl:Integer;
var i,КолЗап:Integer;
var ВсегоС:Numeric;
  ВсегоС=0;
  if СсылкаПокуп<>'':
    Robl=OpenWorkArea("СчетФакт","","Аванс=false and (Покуп='"+Покуп+"' or РеквП="+СсылкаПокуп+") And Сделка='"+СД+"'");
  else
    Robl=OpenWorkArea("СчетФакт","","Аванс=false and Покуп='"+Покуп+"'"+" And Сделка='"+СД+"'");
  fi;
  Try
   КолЗап=Records(Robl);
   if КолЗап<>0:
    for i=1..КолЗап do
      ВсегоС=ВсегоС+GetFieldN(Robl,i,"ВсегоДокСт");
    od;
   fi;
  Finally
   CloseWorkArea(Robl);
  End;
  if ВсегоС<>САвВс:^False;else ^True;fi;
End;

Proc Закрытие(Об:Logical);

End;

Func Выбрать(Об:с;Итер:Integer):Logical;
 ВозврСделку=Ном[Итер];
 ВозврКоммент=Комментарий[Итер];
 Close;
 ^False;
End;

func ПослНомерАванса:String;
var Robl,kol:Integer;
var tmp:string;
 Robl=OpenWorkArea("Счетфакт","Сделка","Аванс");
 Try
  kol=records(robl);
  if kol<>0:tmp=GetFieldS(RObl,kol,"Сделка");
   else tmp='0';
  fi;
 Finally
  CloseWorkArea(Robl);
 End;
 ^Стр(Цел(tmp)+1);
End;

Proc Добавить(Об:с);
var Выбор:Integer;
var Коммент,ПодСчет:String;
   Выбор=Input(Коммент,"Введите комментарий к новому коду авансов");
   if Выбор=CmOk:
       Подсчет=ПослНомерАванса;--Стр(Цел(Код)+1);
       while (Length(ПодСчет)<5) do ПодСчет = '0'+ПодСчет;od;
       ВозврСделку=Подсчет;
       ВозврКоммент=Коммент;
	close;
   fi;
End;

Func ПоискНезакрОтгр:Logical;
var Robl,i,kol:Integer;
var ПредСд,Сд:String;
var Возвр:logical;
 Возвр=true;
 Очистка;
 if СсылкаПокуп<>'':
   Robl=OpenWorkArea("СчетФакт","Сделка","(Покуп='"+Покуп+"' or РеквП="+СсылкаПокуп+") and Сделка>'' and Аванс=false and (ВсегоДок<>ВсегоДокСт or Сто1<>СуммаНДС20 or Сто2<>СуммаНДС10 or Сум1<>Сум1Сторно or Сум2<>Сум2Сторно)");
 else
   Robl=OpenWorkArea("СчетФакт","Сделка","Покуп='"+Покуп+"' and Сделка>'' and Аванс=false and (ВсегоДок<>ВсегоДокСт or Сто1<>СуммаНДС20 or Сто2<>СуммаНДС10 or Сум1<>Сум1Сторно or Сум2<>Сум2Сторно)");
 fi;
 Try
  Kol=Records(Robl);
  if Kol<>0:
   for i=1..Kol do
    if i=1:
     ВставитьРамку(КолАванс,КолАванс+1);
     Ном[КолАванс]=GetFieldS(Robl,i,"Сделка");
     Комментарий[КолАванс]=GetFieldS(Robl,i,"Описание");
     ПредСд=Ном[КолАванс];
    else сд=GetFieldS(Robl,i,"Сделка");
     if сд<>ПредСд:
      ВставитьРамку(КолАванс,КолАванс+1);
      Ном[КолАванс]=сд;
      Комментарий[КолАванс]=GetFieldS(Robl,i,"Описание");
      ПредСд=Ном[КолАванс];
     fi; -- сд<>ПредСд:
    fi; --i=1:
   od;
   else Возвр=false;
  fi;
 Finally
  CloseWorkArea(Robl);
 End;
 ^Возвр;
End;


Proc Открытие(Об:Logical);
var Robl:Integer;
var i,КолЗап,Выбор:Integer;
var Сделка,СделкаПред,Комм,Коммент:String;
var СВс:Numeric;
var Подсчет:String;
  Текст="Выписанные и незакрытые авансы";
  Код="";
  Button1.visible=Ав;
  флЗакрытьАванс.visible=Not Ав;
  if Not Ав: флЗакрытьАванс.visible=СкрытьФлаг;fi;
  Очистка;
  if СсылкаПокуп<>'':
    Robl=OpenWorkArea("СчетФакт","Сделка","Аванс=true and (Покуп='"+Покуп+"' or РеквП="+СсылкаПокуп+")");
  else
    Robl=OpenWorkArea("СчетФакт","Сделка","Аванс=true and Покуп='"+Покуп+"'");
  fi;
  Try
   КолЗап=Раб.Обл.Rec(Robl);
   Свс=0;
   for i=1..КолЗап do
    Сделка=GetFieldS(Robl,i,"Сделка");
    Код=Сделка;
    Комм  =GetFieldS(Robl,i,"Описание");
    if Сделка<>СделкаПред:Свс=0;fi;
    СВс=СВс+GetFieldN(Robl,i,"ВсегоДок");
    if i=1:
	 ВставитьРамку(КолАванс,КолАванс+1);
	 Ном[КолАванс]=Сделка;
	 Комментарий[КолАванс]=Комм;
	 СделкаПред=Сделка;
	 elsif Сделка<>СделкаПред:
		ВставитьРамку(КолАванс,КолАванс+1);
		Ном[КолАванс]=Сделка;
		Комментарий[КолАванс]=Комм;
		СделкаПред=Сделка;
	 fi;
	 if НезакрСчет(СВс,Сделка)=true:УдалитьРамку(КолАванс,КолАванс);fi;
   od;
  Finally
   Раб.Обл.Close(Robl);
  End;
  Подсчет=ПослНомерАванса;--Стр(Цел(Код)+1);
  while (Length(ПодСчет)<5) do ПодСчет = '0'+ПодСчет;od;
  if Признак and КолАванс=0:
   Текст="Выписанные и незакрытые отгрузки";
   if Not ПоискНезакрОтгр:
    if EnqOkCancel("Незакрытые счета-фактуры отсутствуют. Создать новый код аванса?")=CmOk:
	 Выбор=Input(Коммент,"Введите комментарий к новому коду авансов");
	 if Выбор=CmOk:
	    ВозврСделку=ПодСчет;
	    ВозврКоммент=Коммент;
	    close;
	 else
	  ВозврСделку="";
	  ВозврКоммент="";
	  close;
	 fi; --Выбор=CmOk:
    else
     ВозврСделку="";
     ВозврКоммент="";
     close;
    fi; -- EnqOkCancel
  fi; -- Not ПоискНезакрОтгр
 fi; -- Признак
  if КолАванс=0 and Признак=false:
   message("Все авансовые счета-фактуры закрыты");ВозврСделку="";ВозврКоммент="";
   close;
  fi;
End;

Конец