uses
  'QueryTools',
  'Un_ToolsXml',
  'Un_Tools',
  'Un_Const',
  'Un_Progress',
  'Un_System',
  'Un_Log',
  'Un_Debug';


{~CfgIKCreateDoc5
  запускаемый скрипт на диалоги из конфигурации.

  exchange #2866
  переработка кода скрипта под новый редактор конфигуратора в эксче.
  теперь при вызове скрипта сюда передаются все параметры, которые указаны
  как подпараметры для параметра скрипта.
  все что возвращается сохраняется в значениях для параметра скрипта и в
   подпараметрах.

  пример xml вызова скрипта:
  <PARAMS
    INI_FILE="D:\work\AzkScript_184_2_35\FK2009\Exp_FK_IR.cfg"
    org_caption="ООО&quot;Кулебакикадастрсъемка&quot;"
    org_taxcode="5251007924"
    org_kpp="525101001"
    org_id="1000004099"/>

  результат выбора орг:
  <PARAMS
    INI_FILE="D:\work\AzkScript_184_2_35\FK2009\Exp_FK_IR.cfg"
    org_caption="ООО&quot;Кулебакикадастрсъемка&quot;"
    org_taxcode="5251007924"
    org_kpp="525101001"
    org_id="1000004099">
    <RESULT
      org_caption="тест"
      org_kpp="123654561"
      org_taxcode="1233333333"
      org_id="1000004164"/>
  </PARAMS>

  особенность в том, что параметр в конфиге имеет два определения: caption и ID.

  caption - это название параметра в конфиге, которое отбражается в
  редакторе в качестве названия параметра, а ID - это внутренний идентификатор
  параметра для обмена со скриптом.
  отказ от парсинга строки, переданной в атрибуте config как commatext
  объекта TStringList, упрощает и ускоряет работу скрипта и увеличивает гибкость
  передачи параметров, поскольку при этом допускаются вложенные элементы.

  если ID указан - передается id в качестве названия параметра (атрибута)
  и он же определяет имя параметра (атрибута) в результате.
  если же ID не указывается, то в качестве обмена фигурирует caption.

  проблема в том, что при отказе передачи параметров в атрибуте Config,
  и при переходе на атрибуты, требуется обязательное указание строк в
  параметрах ID, поскольку кирилица и пробелы в названиях атрибутов не
  допускаются.}
function CfgIKCreateDoc5( aXml: Variant): boolean;
var
  xXmlDoc: Variant;
  xFormDfmFileName: string;
  xForm : TFormCustom;
  cbList: TCheckListBox;
//  xOrgXml: Variant;
//  xConfig: TStringList;
  xDirRoot: string;
  xCfgNode: Variant;
  xConfig: TStringList;
  s: string;

  procedure DoAdd_( aStr: string);
  begin
    if (LENGTH( s) > 0) then s := s + ',';
    s := s + aStr;
  end;

begin
  Result := FALSE;

  InitializeSystem( '');
  InitializeLog;
  InitializeDebug;
                       //showmessage(axml.xml);
  try
    // инициализация глою.переменных
    // загружается конфиг файл
    QueryInitialization;
    try
      xXmlDoc := aXml.documentElement;
{
xConfig := TStringList.Create;
xConfig.text:= axml.xml;
xConfig.savetofile('c:\temp\test_cfg_in.xml');
xConfig.Free;
}
      xDirRoot:= ExtractFilePath( VarToStr( xXmlDoc.GetAttribute( 'INI_FILE')));

      xConfig:= NIL;
      xForm := NIL;
      try
        xConfig:= TStringList.Create;
        xConfig.CommaText := VarToStr( xXmlDoc.GetAttribute( 'CONFIG'));

        xForm := TFormCustom.Create(Application);
        xFormDfmFileName := xDirRoot + 'Forms\Form_IK_CreateDoc5.dfm';
//showmessage( xFormDfmFileName);
        if not FileExists( xFormDfmFileName) then EXIT;
        LoadForm( xFormDfmFileName, xForm);
        cbList:= TCheckListBox( xForm.FindComponent( 'cbList'));

        cbList.Items.Clear;
        cbList.Items.Add( 'ZR');
        cbList.Items.Add( 'ZS');
        cbList.Items.Add( 'ZN');
        cbList.Items.Add( 'ZV');

        s := TRIM( xConfig.Values[ 'param_CreateDoc5']);
        cbList.Checked[ 0] := (POS( 'ZR', s) > 0);
        cbList.Checked[ 1] := (POS( 'ZS', s) > 0);
        cbList.Checked[ 2] := (POS( 'ZN', s) > 0);
        cbList.Checked[ 3] := (POS( 'ZV', s) > 0);

        if (xForm.ShowModal = mrOk) then begin
          s := '';
          if cbList.Checked[ 0] then DoAdd_( 'ZR');
          if cbList.Checked[ 1] then DoAdd_( 'ZS');
          if cbList.Checked[ 2] then DoAdd_( 'ZN');
          if cbList.Checked[ 3] then DoAdd_( 'ZV');
          // добавляем раздел доп.параметров: результат будет в любом случае
          xCfgNode := xXmlDoc.appendChild(
                            xXmlDoc.ownerDocument.createElement( 'RESULT'));
          xCfgNode.SetAttribute( 'param_CreateDoc5', s);
          Result := TRUE;
        end;
        finally
          xConfig.Free;
          xForm.Free;
      end;
      finally
        QueryFinalization;
        FinalizeDebug;
    end;
    except
      ExceptionHandler;
  end;
end;

begin
end.
