-- Шаблон создан мастером бланков
-- 26.04.2005 10:11:49
--
БланкСШаблоном [10.06.2005] "Список журналов операций", РЕДАКТОР РПО_ЖО;

cbDef:Object;
RbAll:Object;
RbScheme:Object;
RbUser:Object;
Top:Section;
Main:Section;
btnОчистить  :Object;
btnУмолчание:Object;
btnПроверить:Object;
btnСохранить:Object;
noError:L;

var Flag1:L=[False];
var InitB:L=[False];

var DefНом[]:S;
var DefНаим[]:S;


НомПр:S="08.Пр";
var НаимПр:S="Журнал по прочим операциям";

var пп[]:I=$;       --
var СчУсл[]:S="("+ПОЗИЦИЯ[$].Сч+")"+if(ПОЗИЦИЯ[$].КБК="" and ПОЗИЦИЯ[$].ВД="?","","&("+if(ПОЗИЦИЯ[$].КБК="","*",ПОЗИЦИЯ[$].КБК)+"."+ПОЗИЦИЯ[$].ВД+".???.??.*)");
var АнУсл[]:S=if(ПОЗИЦИЯ[$].Показатель="",ПОЗИЦИЯ[$].АнУслДоп,if(ПОЗИЦИЯ[$].АнУслДоп="",ПОЗИЦИЯ[$].Показатель,"("+ПОЗИЦИЯ[$].Показатель+")&("+ПОЗИЦИЯ[$].АнУслДоп+")"));

var ТипКБК:S;

var A:S="+";
var D:S="-";

var Buf   []:S;
var BufVoc[]:S;
var BufAcc[]:S;
var Color[]:I;
var NoVerify:L;
 Last:Record;

--
--Процедуры и функции -------------

Proc СТДНастр(OWA:I;n:I);
var OA,i:I;
  OA=OpenArray(OWA,n,'ПОЗИЦИЯ','Ном');
   try
    DeleteAllRecords(OA);
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "1"       );  i=PutFieldS(OA,i,'Наим','Журнал операций по счету "Касса"'                                                                                                  );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.201.34.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "2-201.11");  i=PutFieldS(OA,i,'Наим','Журнал операций с безналичными денежными средствами (Денежные средства учреждения на счетах казначейства)'                         );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.201.11.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "2-201.21");  i=PutFieldS(OA,i,'Наим','Журнал операций с безналичными денежными средствами (Денежные средства учреждения на банковских счетах)'                           );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.201.21.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "2-201.?3");  i=PutFieldS(OA,i,'Наим','Журнал операций с безналичными денежными средствами (Денежные средства учреждения в пути)'                                         );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.201.?3.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "2-201.26");  i=PutFieldS(OA,i,'Наим','Журнал операций с безналичными денежными средствами (Аккредитивы)'                                                                 );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.201.26.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "2-201.27");  i=PutFieldS(OA,i,'Наим','Журнал операций с безналичными денежными средствами (Денежные средства учреждения в иностранной валюте)'                           );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.201.27.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "2-210.02");  i=PutFieldS(OA,i,'Наим','Журнал операций с безналичными денежными средствами (Расчеты с финансовым органом по поступлениям в бюджет)'                       );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.210.02.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "2-210.03");  i=PutFieldS(OA,i,'Наим','Журнал операций с безналичными денежными средствами (Расчеты с финансовым органом по наличным денежным средствам)'                 );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.210.03.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "2-304.05");  i=PutFieldS(OA,i,'Наим','Журнал операций с безналичными денежными средствами (Расчеты по платежам из бюджета с органами, организующими исполнение бюджетов)');   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.304.05.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "3-ДенДок");  i=PutFieldS(OA,i,'Наим','Журнал операций расчетов с подотчетными лицами (денежные документы)'                                                               );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.208.??.*");i=PutFieldS(OA,i,'АнУслДоп', "ДЕНДОК.*");   i=PutFieldS(OA,i,'Показатель', "МОЛ.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "3-Прочие");  i=PutFieldS(OA,i,'Наим','Журнал операций расчетов с подотчетными лицами (кроме денежных документов)'                                                        );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.208.??.*");i=PutFieldS(OA,i,'АнУслДоп', "~ДЕНДОК.*");  i=PutFieldS(OA,i,'Показатель', "МОЛ.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "4"       );  i=PutFieldS(OA,i,'Наим','Журнал операций расчетов с поставщиками и подрядчиками'                                                                            );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.206.??.*|*.?.302.2?.*|*.?.302.3?.*|*.?.302.7?.*|*.?.302.8?.*|*.?.302.9?.*");  i=PutFieldS(OA,i,'Показатель', "К.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "5-205"   );  i=PutFieldS(OA,i,'Наим','Журнал операций расчетов с дебиторами по доходам (расчеты по доходам)'                                                             );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.205.??.*");                                            i=PutFieldS(OA,i,'Показатель', "К.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "5-209"   );  i=PutFieldS(OA,i,'Наим','Журнал операций расчетов с дебиторами по доходам (расчеты по ущербу имуществу)'                                                    );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.209.??.*");                                            i=PutFieldS(OA,i,'Показатель', "К.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "6"       );  i=PutFieldS(OA,i,'Наим','Журнал операций расчетов по оплате труда'                                                                                          );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.302.1?.*|*.?.303.02.*|*.?.303.06.*|*.?.303.07.*|*.?.303.08.*|*.?.303.09.*|*.?.303.10.*|*.?.303.11.*|*.?.304.02.*|*.?.304.03.*");
--    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "7"       );  i=PutFieldS(OA,i,'Наим','Журнал операций по выбытию и перемещению нефинансовых активов'                                                                     );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"-*.?.104.??.*");-- /~(*.106.?4|*.271)"); аммортизация, кроме прихода с аммортизацией (не пишу кредит на случай конфликтов)
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "7"       );  i=PutFieldS(OA,i,'Наим','Журнал операций по выбытию и перемещению нефинансовых активов'                                                                     );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.104.??.*");--i=PutFieldS(OA,i,'Знак', "+" ); --Весь дебет аммортизации(дебет кредитового есть расход)
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "7"       );  i=PutFieldS(OA,i,'Наим','Журнал операций по выбытию и перемещению нефинансовых активов'                                                                     );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.101.??.*|*.?.102.??.*|*.?.103.??.*|*.?.105.??.*|*.?.106.??.*|*.?.107.??.*");     i=PutFieldS(OA,i,'Знак', "-" );
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "8-101"   );  i=PutFieldS(OA,i,'Наим','Журнал по прочим операциям (Основные средства)'                                                                                    );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"+*.?.101.??.*|*.?.102.??.*|*.?.103.??.*/*.?.304.04.*|*.401.10.*|*.?.107.??.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "8-105"   );  i=PutFieldS(OA,i,'Наим','Журнал по прочим операциям (Материальные запасы)'                                                                                  );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"+*.?.105.??.*/~(*.?.106.?4.*|*.?.208.??.*|*.?.302.??.*)");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "8-109"   );  i=PutFieldS(OA,i,'Наим','Журнал по прочим операциям (Изготовление готовой продукции)'                                                                       );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"+*.?.109.??*/~(*.?.302.??.*|*.?.208.??.*|*.?.10?.??.*)")  ;
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "8-201.35");  i=PutFieldS(OA,i,'Наим','Журнал по прочим операциям (Денежные документы)'                                                                                   );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.201.35.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "8-202"   );  i=PutFieldS(OA,i,'Наим','Журнал по прочим операциям (Средства на счетах бюджета)'                                                                           );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.202.??.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "8-207"   );  i=PutFieldS(OA,i,'Наим','Журнал по прочим операциям (Расчеты по кредитам, займам)'                                                                          );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.207.??.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "8-210.01");  i=PutFieldS(OA,i,'Наим','Журнал по прочим операциям (Расчеты по НДС по приобретенным материальным ценностям, работам, услугам)'                             );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.210.01.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "8-210.05");  i=PutFieldS(OA,i,'Наим','Журнал по прочим операциям (Расчеты с прочими дебиторами)'                                                                         );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.210.05.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "8-211"   );  i=PutFieldS(OA,i,'Наим','Журнал по прочим операциям (Внутренние расчеты по поступлениям)'                                                                   );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.211.??.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "8-212"   );  i=PutFieldS(OA,i,'Наим','Журнал по прочим операциям (Внутренния ресчеты по выбытия)'                                                                        );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.212.??.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "8-215"   );  i=PutFieldS(OA,i,'Наим','Журнал по прочим операциям (Вложения в финансовые активы)'                                                                         );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.215.??.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "8-302.6?");  i=PutFieldS(OA,i,'Наим','Журнал по прочим операциям (Расчеты по пенсиям, пособиям, социальному обеспечению)'                                                );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.302.6?.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "8-303.03");  i=PutFieldS(OA,i,'Наим','Журнал по прочим операциям (Расчеты по налогу на прибыль)'                                                                         );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.303.03.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "8-303.04");  i=PutFieldS(OA,i,'Наим','Журнал по прочим операциям (Расчеты по налогу на добавленную стоимость)'                                                           );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.303.04.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "8-303.05");  i=PutFieldS(OA,i,'Наим','Журнал по прочим операциям (Расчеты по прочим платежам в бюджет)'                                                                  );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.303.05.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "8-303.12");  i=PutFieldS(OA,i,'Наим','Журнал по прочим операциям (Расчеты по налогу на имущество)'                                                                       );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.303.12.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "8-303.13");  i=PutFieldS(OA,i,'Наим','Журнал по прочим операциям (Расчеты по земельному налогу)'                                                                         );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.303.13.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "8-304.06");  i=PutFieldS(OA,i,'Наим','Журнал по прочим операциям (Расчеты с прочими кредиторами)'                                                                        );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.304.06.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "8-401.30");  i=PutFieldS(OA,i,'Наим','Журнал по прочим операциям (Финансовый результат прошлых лет)'                                                                     );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.401.30.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "8-401.40");  i=PutFieldS(OA,i,'Наим','Журнал по прочим операциям (Доходы будущих периодов)'                                                                              );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.401.40.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "8-401.50");  i=PutFieldS(OA,i,'Наим','Журнал по прочим операциям (Расходы будущих периодов)'                                                                             );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.401.50.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "9-501"   );  i=PutFieldS(OA,i,'Наим','Журнал по санкционированию (Лимиты бюджетных обязательств)'                                                                        );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.501.??.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "9-502"   );  i=PutFieldS(OA,i,'Наим','Журнал по санкционированию (Принятые обязательства)'                                                                               );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.502.??.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "9-503"   );  i=PutFieldS(OA,i,'Наим','Журнал по санкционированию (Бюджетные ассигнования)'                                                                               );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.503.??.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "9-504"   );  i=PutFieldS(OA,i,'Наим','Журнал по санкционированию (Сметные назначения)'                                                                                   );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.504.??.*");
---    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "9-505"   );  i=PutFieldS(OA,i,'Наим','Журнал по санкционированию ()'                                                                                   );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.505.??.*");
    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "9-506"   );  i=PutFieldS(OA,i,'Наим','Журнал по санкционированию (Право на принятие обязательств)'                                                                       );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.506.??.*");
  --  i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "9-507"   );  i=PutFieldS(OA,i,'Наим','Журнал по санкционированию ()'                                                                                   );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.507.??.*");
--    i=InsertRecord(OA); i=PutFieldS(OA,i,'Ном', "9-508"   );  i=PutFieldS(OA,i,'Наим','Журнал по санкционированию ()'                                                                                   );   i=PutFieldS(OA,i,'ВД',  '?');   i=PutFieldS(OA,i,'Сч',"*.?.508.??.*");

   Finally
   CloseWorkArea(OA);
   end;


end;

Proc ИнитБаза;
var OWA,n:I;
OWA=OpenWorkArea("РПО_ЖО","ТипДоступа","ТипДоступа=0");
РАБ.ЖО2.InitB=False;
try
 if Records(OWA)=0 then РАБ.ЖО2.InitB=true; fi;
finally
CloseWorkArea(OWA);
end;
if РАБ.ЖО2.InitB then
 OWA=OpenWorkArea("РПО_ЖО","ТипДоступа");
 try
   BeginChanging(OWA);
   try
    n=InsertRecord(OWA);
    n=PutFieldS(OWA,n,'ИмяНастройки','Стандартная настройка');
    n=PutFieldI(OWA,n,'ТипДоступа',0);
    n=PutFieldL(OWA,n,'Умолч',False);
    СТДНастр(OWA,n);
    EndChanging(OWA);
    if РАБ.ЖО2.Last=nil then РАБ.ЖО2.Last=GetRecordKey(OWA,n); fi;
   except
   CancelChanging(OWA);
   end;
   РАБ.ЖО2.InitB=False;
 finally
 CloseWorkArea(OWA);
 end;
fi;

if РАБ.ЖО2.Flag1 then Exit; fi;

OWA=OpenWorkArea("РПО_ЖО","ТипДоступа","Ukey="+RecordToString(РАБ.ЖО2.Last));
РАБ.ЖО2.InitB=False;
try
 if Records(OWA)=0 then РАБ.ЖО2.InitB=true; fi;
finally
CloseWorkArea(OWA);
end;

if РАБ.ЖО2.InitB then
  Message("Последняя настройка журналов утеряна, выберите настройку журналов",mtError);
  РАБ.ЖО2.Last=OpenCardFile("РПО_ЖО","(ТипДоступа=0) Or ((ТипДоступа=1) And (ИмяДоступа='"+GetScheme+"')) OR ((ТипДоступа=2) AND (ИмяДоступа='"+UserName(ИМЯБАЗЫ("РПО_ЖО"))+"'))");
  РАБ.ЖО2.InitB=False;
fi;

end;


Proc УникУмолч;
var F:S;
var OWA,i:I;
  if ТипДоступа=0 then cbDef.Enabled=False; Exit; else  cbDef.Enabled=True; fi;
  F="(ТипДоступа="+Str(ТипДоступа)+") AND Умолч";
  if ТипДоступа<>0 then F=F+" AND (ИмяДоступа='"+ИмяДоступа+"')" ; fi;
  OWA=OpenWorkArea("РПО_ЖО","UpdateTime",F );
  try
   for i=1 to  Records(OWA) do
     if GetRecordKey(OWA,i)<>Текущая then
      if Умолч then
       Умолч=False;
      fi;
      cbDef.Enabled=False;
     fi;
   od;
  finally
    CloseWorkArea(OWA);
  end;
end;

Proc УдалитьПустыеСтроки;
var Iter:I;
 Iter=1;
 While (Iter<=ПОЗИЦИЯ) do
  if ПОЗИЦИЯ[Iter].Ном="" and
     ПОЗИЦИЯ[Iter].Наим="" and
     ПОЗИЦИЯ[Iter].Сч="" and
     ПОЗИЦИЯ[Iter].Показатель="" and
     ПОЗИЦИЯ[Iter].КБК="" and
     ПОЗИЦИЯ[Iter].АнУслДоп="": DeleteFrame(ПОЗИЦИЯ,Iter);
    else
     Iter=Iter+1;
  fi;
 od;
end;

Proc Очистить;
var i,n:I;
n=Позиция;
for i= 1 to n do
  DeleteFrame(Позиция,1);
od;
end;

Proc Инициализация;
 ClearVariable(DefНом);
 ClearVariable(DefНаим);
 DefНом[1]='01'; DefНаим[1]='Журнал операций по счету "Касса"';
 DefНом[2]='02'; DefНаим[2]='Журнал операций с безналичными денежными средствами';
 DefНом[3]='03'; DefНаим[3]='Журнал операций расчетов с подотчетными лицами';
 DefНом[4]='04'; DefНаим[4]='Журнал операций расчетов с поставщиками и подрядчиками';
 DefНом[5]='05'; DefНаим[5]='Журнал операций расчетов с дебиторами по доходам';
 DefНом[6]='06'; DefНаим[6]='Журнал операций расчетов по оплате труда';
 DefНом[7]='07'; DefНаим[7]='Журнал операций по выбытию и перемещению нефинансовых активов';
 DefНом[8]='08'; DefНаим[8]='Журнал по прочим операциям';
end;

Proc Умолчание;
Var OWADef,OADef,OWA1,OA1,num,i,s,n1: I;
var found:L;
Очистить;
OWADef=OpenWorkArea("РПО_ЖО","ТипДоступа");
found=True;
try
 SetFilter(OWADef,"Умолч and (ТипДоступа=2) and (ИмяДоступа='"+UserName(ИМЯБАЗЫ("РПО_ЖО"))+"')");
 if Records(OWADef)=0 then SetFilter(OWADef,"Умолч and (ТипДоступа=1) and (ИмяДоступа='"+GetScheme+"')"); fi;
 if Records(OWADef)>0 then
  OADef=OpenArray(OWADef,1,"ПОЗИЦИЯ","Ном");
  try
    s=Records(OADef);
    for i=1..s do
      InsertFrame(Позиция, Позиция+1);
      Позиция[Позиция].Ном=GetFieldS(OADef,i,'Ном');
      Позиция[Позиция].Наим=GetFieldS(OADef,i,'Наим');
      Позиция[Позиция].ВД=GetFieldS(OADef,i,'ВД');
      Позиция[Позиция].Сч=GetFieldS(OADef,i,'Сч');
      Позиция[Позиция].Знак=GetFieldS(OADef,i,'Знак');
      Позиция[Позиция].Показатель=GetFieldS(OADef,i,'Показатель');
      Позиция[Позиция].КБК=GetFieldS(OADef,i,'КБК');
      Позиция[Позиция].АнУслДоп=GetFieldS(OADef,i,'АнУслДоп');
    od;
  finally
  CloseWorkArea(OADef);
  end;
 else
  EditorCancel;
  OWA1=OpenWorkArea("РПО_ЖО","","UKEY="+RecordToString(Current));
  try
    BeginChanging(OWA1);
    try
      СТДНастр(OWA1,1);
      EndChanging(OWA1);
    except
      Cancelchanging(OWA1);
    end;
  finally
    CloseWorkArea(OWA1);
  end;
 fi;
finally
CloseWorkArea(OWADef);
end;

end;

Func ПроверитьУсловия(Iter1:I; Iter2:I):L;
var Acc,Sgn,Mask:S;
var FlagAcc:L;
var z:i;
 if POS("/",СчУсл[Iter1])>0 or POS("/",СчУсл[Iter2])>0 then ^True; fi;
 if POS("+",СчУсл[Iter1])>0 or POS("+",СчУсл[Iter2])>0 then ^True; fi;
 if POS("-",СчУсл[Iter1])>0 or POS("-",СчУсл[Iter2])>0 then ^True; fi;
 FlagAcc=False;
 ClearVariable(Buf);
 if Length(СчУсл[Iter1])+Length(СчУсл[Iter2])>254:
    z=0;
    for Account Acc=СчУсл[Iter1],Sort do
     z=z+1;
     Buf[z]=Acc;
    od;
    for Account Acc=СчУсл[Iter2],Sort do
     if not SearchInArray(Buf,Acc,True)=-1: FlagAcc=True; Break; fi;
    od;
   else
    for Account Acc=СчУсл[Iter1]+"&"+СчУсл[Iter2] do
     FlagAcc=True;
     Break;
    od;
 fi;
 if ПОЗИЦИЯ[Iter1].Ном=ПОЗИЦИЯ[Iter2].Ном then
 -- Проверка условий для двойных журналов
    if ПОЗИЦИЯ[Iter1].Показатель<>ПОЗИЦИЯ[Iter2].Показатель then
       Trace("Ошибка! Показатель журнала № "+ПОЗИЦИЯ[Iter1].Ном+" не совпадают в строках "+Str(Iter1)+" и "+Str(Iter2));
      ^False;
    fi;
    if ПОЗИЦИЯ[Iter1].АнУслДоп<>ПОЗИЦИЯ[Iter2].АнУслДоп then
       Trace("Ошибка! Аналитические условия журнала № "+ПОЗИЦИЯ[Iter1].Ном+" не совпадают в строках "+Str(Iter1)+" и "+Str(Iter2));
       ^False;
    fi;
    if FlagAcc then
       Trace("Ошибка! Условия на счета журнала № "+ПОЗИЦИЯ[Iter1].Ном+" пересекаются в строках "+Str(Iter1)+" и "+Str(Iter2));
       ^False;
    fi;
 fi;


 if FlagAcc=False: ^True; fi;
 if АнУсл[Iter1]="" and АнУсл[Iter2]="" and ПОЗИЦИЯ[Iter1].Ном<>ПОЗИЦИЯ[Iter2].Ном: Trace("Ошибка! Условия отбора проводок (по счетам) журнала № "+ПОЗИЦИЯ[Iter1].Ном+" пересекаются с условиями отбора проводок журнала № "+ПОЗИЦИЯ[Iter2].Ном); ^False; fi;
 if ПОЗИЦИЯ[Iter1].Ном<>ПОЗИЦИЯ[Iter2].Ном then
    for Sign Sgn=Раб.Бюджет2005.Объединить(АнУсл[Iter1],АнУсл[Iter2],"&") do
     Trace("Ошибка! Условия отбора проводок (по счетам и аналитике) журнала № "+ПОЗИЦИЯ[Iter1].Ном+" пересекаются с условиями отбора проводок журнала № "+ПОЗИЦИЯ[Iter2].Ном);
     ^False;
    od;
 fi;

 ^True;
end;

Func Проверить:L;
var Iter,Iter2:I;
 noError=True;
 УдалитьПустыеСтроки;
 if ПОЗИЦИЯ<1: InsertFrame(ПОЗИЦИЯ,1); fi;
 ClearTrace(True);
 for Iter=1..ПОЗИЦИЯ do
  if ПОЗИЦИЯ[Iter].Ном="": Message("Введите номер журнала",mtError); Template.Field="Ном"; Template.Frame=Iter; noError=False; ^False; fi;
  if ПОЗИЦИЯ[Iter].Наим="": Message("Введите наименование журнала",mtError); Template.Field="Наим"; Template.Frame=Iter; noError=False; ^False; fi;
  if ПОЗИЦИЯ[Iter].ВД="": ПОЗИЦИЯ[Iter].ВД="?"; fi;
  if ПОЗИЦИЯ[Iter].Сч="": Message("Введите субсчет журнала",mtError); Template.Field="Сч"; Template.Frame=Iter; noError=False; ^False; fi;
 od;
-- if НомПр="": Message("Введите номер журнала",mtError); Template.Field="НомПр";  noError=False; ^False; fi;
 Try
  ShowProgress(ПОЗИЦИЯ,"Проверка....");
  for Iter=1..ПОЗИЦИЯ do
   ProgressPos(Iter);
   for Iter2=Iter+1..ПОЗИЦИЯ do
    if ПроверитьУсловия(Iter,Iter2)=False: noError=False; fi;
   od;
  od;
 Finally
  CloseProgress;
 end;
 ^noError;
end;

Func ОпределитьЖО(Сч_:S; Ан_:S):S;
var Acc:S;
var Iter:I;
 if Сч_="": ^""; fi;
 for Iter=1..ПОЗИЦИЯ do
  for Account Acc="("+СчУсл[Iter]+")&("+Сч_+")" do ^ПОЗИЦИЯ[Iter].Ном; od;
 od;
 ^"";
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Func A_OnEnter(FieldName: String; Iter: Integer): logical;
  InsertFrame(ПОЗИЦИЯ,Iter+1);
 ^False;
end;

Func D_OnEnter(FieldName: String; Iter: Integer): logical;
 DeleteFrame(ПОЗИЦИЯ,Iter);
 if ПОЗИЦИЯ<1: InsertFrame(ПОЗИЦИЯ,1); fi;
 ^False;
end;

Func Ном_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
var n:i;
 if Value="": ^True; fi;
-- for n=1..ПОЗИЦИЯ do
--  if ПОЗИЦИЯ[n].Ном=Value and n<>Iter: Message("Повторный ввод номера журнала",mtError); ^False; fi;
-- od;
-- if Value=НомПр: Message("Повторный ввод номера журнала",mtError); ^False; fi;
 ^True;
end;

Func Ном_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n,iter:i;
var Value,FieldName:S;
 Template.HideEditor(False);
 FieldName=AsString(Template.Field);
 Iter=AsInteger(Template.Frame);
 ClearVariable(Buf);
 for n=1..8 do Buf[n]=DefНом[n]+" --"+DefНаим[n]; od;
 n=Alternate("Выбор журнала операций",buf);
 if n=0: ^Cur; fi;
 Value=SubStr(Buf[n],1,2);
 if Ном_OnVerify(FieldName,Iter,Value)=False: ^Cur; fi;
 ПОЗИЦИЯ[Iter].Ном=Value;
 ПОЗИЦИЯ[Iter].Наим=SubStr(Buf[n],Pos(" --",Buf[n])+3,255);
 ^Cur;
end;

Func ВД_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 tmp=Раб.КБК.Список("","","ВД+?");
 if tmp="": ^False; fi;
 ПОЗИЦИЯ[Iter].ВД=tmp;
 ^False;
end;

Proc ВД_OnExit(FieldName: String; Iter: Integer);
 if ПОЗИЦИЯ[Iter].ВД="": ПОЗИЦИЯ[Iter].ВД="?"; fi;
end;

Func Знак_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="Проводки по дебету/кредиту счета журнала";
 Buf[2]="Только проводки по дебету счета журнала";
 Buf[3]="Только проводки по кредиту счета журнала";
 n=Alternate("Условие отбора проводок",Buf,-1,1,12);
 if n=1: ПОЗИЦИЯ[Iter].ЗНАК="";
   |n=2: ПОЗИЦИЯ[Iter].ЗНАК="+";
   |n=3: ПОЗИЦИЯ[Iter].ЗНАК="-";
 fi;
 Return False;
end;


Func Сч_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
var z:N;
 if POS("/",Value)>0 then ^True; fi;
 if POS("+",Value)>0 then ^True; fi;
 if POS("-",Value)>0 then ^True; fi;
 Try
  z=Saldo(Value,1.1.100);
 Except
  Raise;
  ^False;
 end;
 ^True;
end;

Func Сч_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var n,iter:i;
var tmp,FieldName,Value:S;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 tmp=Раб.КБК.Список("","","СЧ5 ИГ");
 if Match(tmp,"???."): tmp="*.?."+tmp+"??.*";
   |Match(tmp,"???.??"): tmp="*.?."+tmp+".*";
 fi;
 ПОЗИЦИЯ[Iter].Сч=Раб.Бюджет2005.Объединить(ПОЗИЦИЯ[Iter].Сч,tmp,"|");
 ^Cur;
end;

Proc Сч_OnExit(FieldName: String; Iter: Integer);
var tmp:S;
 if POS("/",ПОЗИЦИЯ[Iter].Сч)>0 then Exit; fi;
 if POS("+",ПОЗИЦИЯ[Iter].Сч)>0 then Exit; fi;
 if POS("-",ПОЗИЦИЯ[Iter].Сч)>0 then Exit; fi;
 if not ПОЗИЦИЯ[Iter].Сч="":
    tmp=Раб.Бюджет2005.СписокСправ(ПОЗИЦИЯ[Iter].Сч,0,"");
    if not Раб.Бюджет2005.ПроверитьНаборСлов(tmp,"|",ПОЗИЦИЯ[Iter].Показатель,"",""): ПОЗИЦИЯ[Iter].Показатель=""; fi;
   else
    ПОЗИЦИЯ[Iter].Показатель="";
 fi;
end;

Func Показатель_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:s;
var n:i;

 if ПОЗИЦИЯ[Iter].Сч="": Message("Введите субсчет журнала",mtError); Template.Field="Сч"; ^False; fi;
 Раб.Бюджет2005.СписокСправ(ПОЗИЦИЯ[Iter].Сч,0,"");
 CopyArray(Раб.Бюджет2005.BufСправ,BufVoc);
 if LengthOfArray(BufVoc)=0: Message("Список справочников, пуст", mtWarning); ^False; fi;
 n=Alternate("Список справочников",BufVoc,-1,1,12);
 if n=0: ^False; fi;
 tmp=SubStr(BufVoc[n],1,Pos(" --",BufVoc[n])-1);
 ПОЗИЦИЯ[Iter].Показатель=tmp;
 ^False;
end;

Func КБК_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="ФКР --Классификация расходов";
 Buf[2]="КД --Классификация доходов";
 Buf[3]="КИФД --Классификация источников финансирования дефицитов";
 n=Alternate("Тип классификации",Buf,-1,1,12);
 if n=0: ^False; fi;
 ПОЗИЦИЯ[Iter].КБК=Раб.КБК.ВыбратьМаскуКБК(SubStr(Buf[n],1,Pos(" --",Buf[n])-1),"",ПОЗИЦИЯ[Iter].КБК,False);
 ^False;
end;

Func АнУслДоп_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
var z:N;
 Try
  z=Turn("{"+Value+"}",1.1.100,1.1.100);
 Except
  Raise;
  ^False;
 end;
 ^True;
end;

Func АнУслДоп_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter:I;
var tmp,FieldName,Value:S;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 FieldName=AsString(Template.Field);
 tmp=AnaElection("*");
 if tmp="": ^Cur; fi;
 Value=Раб.Бюджет2005.Объединить(ПОЗИЦИЯ[Iter].АнУслДоп,tmp,"&");
 if АнУслДоп_OnVerify(FieldName,Iter,Value)=False: ^Cur; fi;
 ПОЗИЦИЯ[Iter].АнУслДоп=Value;
 ^Cur;
end;

Func НомПр_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
var n:i;
 if Value="": ^True; fi;
 for n=1..ПОЗИЦИЯ do
  if ПОЗИЦИЯ[n].Ном=Value: Message("Повторный ввод номера журнала",mtError); ^False; fi;
 od;
 ^True;
end;
--Обработчики событий полей шаблона-----
--
--
--Обработчики событий объектов шаблона-----
Proc btnПроверить_OnClick(Sender: String);
 if Проверить: Message("Ошибок не обнаружено",mtInformation); else Message("Обнаружены ошибки в условиях отбора",mtError);  fi;
end;

Func OnVerify: Logical;
var OWA,i:i;
var F:string;
var Res:L;
 if Flag1 then ^True; fi;
 Res=True;
 if ТипДоступа=1 then ИмяДоступа=GetScheme ;
    |ТипДоступа=2: ИмяДоступа=UserName(ИМЯБАЗЫ("РПО_ЖО")); 
 fi;
 F="(ТипДоступа="+Str(ТипДоступа)+") AND Умолч";
 if ТипДоступа<>0 then F=F+" AND (ИмяДоступа='"+ИмяДоступа+"')" ; fi;

 if ИмяНастройки='' then
   Message('Настройка не имеет имени'+Chr(13)+'Заполните имя настройки',mtError);
   Template.Field='ИмяНастройки';
   ^False;
 fi;
 iF ПОЗИЦИЯ<1 then  InsertFrame(ПОЗИЦИЯ,1); fi;

 OWA=OpenWorkArea("РПО_ЖО","UpdateTime",F );
 try
  for i= 1 to Records(OWA) do
    if Умолч and GetRecordKey(OWA,i)<>Текущая then
       Message('Настройка по умолчанию для данного уровня доступа уже существует',mtError);
       Res=False;
    fi;
  od;
  SetFilter(OWA,'ИмяНастройки="'+ИмяНастройки+'"');
  for i= 1 to Records(OWA) do
    if GetRecordKey(OWA,i)<>Текущая then
       Message('Настройка с таким именем уже существует'+Chr(13)+'Переименуйте настройку',mtError);
       Template.Field='ИмяНастройки';
       Res=False;
    fi;
  od;

 finally
 CloseWorkArea(OWA);
 end;
Return Res;
end;

Proc btnСохранить_OnClick(Sender: String);
If OnVerify:EditorApply;fI;
end;

Proc btnПрочитать_OnClick(Sender: String);
var rec:Record;
rec=OpenCardFile("РПО_ЖО","(ТипДоступа=0) Or ((ТипДоступа=1) And (ИмяДоступа='"+GetScheme+"')) OR ((ТипДоступа=2) AND (ИмяДоступа='"+UserName(ИМЯБАЗЫ("РПО_ЖО"))+"'))",Текущая);
rec=Current(rec);
end;

Proc btnУмолчание_OnClick(Sender: String);
 if Умолч: Message("Данные настройки являются набором настроек по умолчанию",mtError); exit; fi;
 if EnqOkCancel("Текущая настройка будет утеряна, продолжить операцию восстановления настройки по умолчанию ?")=cmCancel: Message("Операция восстановления настроек по умолчанию отменена"); Exit; fi;
 Умолчание;
end;

Proc btnОчистить_OnClick(Sender: String);
 if EnqOkCancel("Очистить таблицу настроек ?")=cmCancel: Exit; fi;
 Очистить;
 if ПОЗИЦИЯ<1: InsertFrame(ПОЗИЦИЯ,1); fi;
end;

Proc btnЗакрыть_OnClick(Sender: String);
 ИнитБаза;
 if Проверить: noVerify=True; Close; fi;
end;
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
var OWA,i:integer;
if ПОЗИЦИЯ<1: InsertFrame(ПОЗИЦИЯ,1); fi;
Инициализация;
end;

Proc OnClose(Destroy: Logical);
 ИнитБаза;
 if NoVerify=false: Проверить; fi;
 ClearTrace(True);
end;

Proc OnRead;
var OWA,OWA1,n,r,r1:i;
var F:String;
var msg:string;
var re:Record;
Flag1=True;
ИнитБаза;
УдалитьПустыеСтроки;
If РАБ.ЖО2.InitB then Exit;   fi;
if CurrentState=crdusInserted and ПОЗИЦИЯ>0 then ИмяНастройки=''; Умолч=False; fi;
iF ПОЗИЦИЯ<1 then
  InsertFrame(ПОЗИЦИЯ,1);
  Умолчание;
  ТипДоступа=0;
  Умолч=False;
fi;

msg="";
re=nil;
if (ТипДоступа=1) and (ИмяДоступа<>GetScheme) then msg="Данные настройки предназначенны для другой схемы доступа"; fi;
if (ТипДоступа=2) and (ИмяДоступа<>UserName(ИмяБазы("РПО_ЖО"))) then msg="Данные настройки предназначенны для другого пользователя"; fi;
if msg<>"" then
   n=Enquiry("Нет доступа",msg,"Сделать копию;Выбрать другие настройки",mtWarning );
   if n=0 then Close ;
     |n=1:
        OWA=OpenWorkArea("РПО_ЖО","UpdateTime");
         OWA1=OpenWorkArea("РПО_ЖО","UpdateTime");
        try
        r=GetRecordNumber(OWA,Текущая);
         BeginChanging(OWA1);
         r1=InsertRecord(OWA1);
         CopyRecord(OWA,OWA1,r,r1) ;
          if ТипДоступа=1: r1=PutFieldS(OWA1,r1,"ИмяДоступа",GetScheme);
            |ТипДоступа=2: r1=PutFieldS(OWA1,r1,"ИмяДоступа",UserName(ИмяБазы("РПО_ЖО")));
            fi;
         re=GetRecordKey(OWA1,r1);
         EndChanging(OWA1);
        finally
        CloseWorkArea(OWA1);
        CloseWorkArea(OWA);
        end;
     |n=2:
        btnПрочитать_OnClick("");
        Exit;
     end;
  end;
if re<>nil:  re=Current(re); fi;
УникУмолч;
 if ПОЗИЦИЯ<1: InsertFrame(ПОЗИЦИЯ,1); fi;
Last=Текущая;
Flag1=False;
end;

Proc Радио_OnChange(Sender: String);
УникУмолч;
end;


Proc btnИмпорт_OnClick(Sender: String);
var i:I;
Очистить;
  for i=1 to LengthofArray(РАБ.ЖО.Ном) do
    InsertFrame(Позиция,Позиция+1);
    Позиция[i].Ном=Раб.Жо.Ном[i];
    Позиция[i].Наим=Раб.Жо.Наим[i];
    Позиция[i].ВД=Раб.Жо.ВД[i];
    Позиция[i].Знак=Раб.Жо.Знак[i];
    Позиция[i].Сч=Раб.Жо.Сч[i];
    Позиция[i].Показатель=Раб.Жо.Показатель[i];
    Позиция[i].КБК=Раб.Жо.КБК[i];
    Позиция[i].АнУслДоп=Раб.Жо.АнУслДоп[i];
  od;
end;


Конец