{~ExchExport_FAIP

  exchange #2801

  выгрузка (экспорт) поля FAIP из документа aDocXml (шапка ЭД),
  в раздел aTopicFKXml в поле aItemFKName для классов 11,75,118.

  exchange #2802
  выгрузка ФОИП кода для ЭД классов: 43,80,75,195

  exchange #2803
  выгрузка для класса 195

  название поля ФАИП в ЭД: PL_FAIP_OBJ_ID и PL_FAIP_OBJ_CODE.
  значение экспортируется из PL_FAIP_OBJ_CODE.

  поскольку это относится к ТФФ13, то для ТФФ14 и выше поле будет,
  и здесь версию схемы не проверяем.

  класс ЭД проверяем, если параметр aCheckClassED =true.
  по умолчанию класс не проверяется.

  exchange #2823
  добавлена выгрузка ФАИП кода для эд классов: 11,75,194,221,222 (ZV и RN)
}
procedure ExchExport_FAIP( aDocXml, aTopicFKXml: Variant;
                           aItemFKName: string;
                           aCheckClassED: boolean = FALSE);
begin

    try
      if aCheckClassED then
        if NOT (VarToStr( aDocXml.GetAttribute( 'DOCUMENTCLASS_ID'))
                  in [ '11','75','118','195','194','221','222'])
          then EXIT;

      aTopicFKXml.SetAttribute(
                      aItemFKName,
                      VarToStr( aDocXml.GetAttribute( 'PL_FAIP_OBJ_CODE')));

      except
        ExceptionLog( 'Сбой ExchExport_FAIP');
    end;

end;


{~ExchExport_FAIP_Code

  выгрузка (экспорт) кода ФАИП по ID (aFAIP_ID),
  в раздел aTopicFKXml в поле aItemFKName.}
procedure ExchExport_FAIP_Code( aFAIP_ID: string;
                                aTopicFKXml: Variant;
                                aItemFKName: string);
begin

    try
      if ( LENGTH( TRIM( aFAIP_ID)) <= 0)
        then aTopicFKXml.SetAttribute(
                      aItemFKName,
                      '')
        else aTopicFKXml.SetAttribute(
                      aItemFKName,
                      QueryField(  ' select code C from pl_faip_obj'
                                  +' where id=?',
                                   [ TRIM( aFAIP_ID)],
                                   'C'));

      except
        ExceptionLog( 'Сбой ExchExport_FAIP_Code');
    end;

end;


{~ExchExport_FAIP_Code_By_GrantinvestmentID

  выгрузка (экспорт) кода ФАИП из записи кода субсидии aGrantinvestmentID,
  в раздел aTopicFKXml в поле aItemFKName.

  рекомендуется версия АЦК-Ф не ниже 2.34.0.177}
procedure ExchExport_FAIP_Code_By_GrantinvestmentID(
                                aGrantinvestmentID: string;
                                aTopicFKXml: Variant;
                                aItemFKName: string);
begin

    try
      if ( LENGTH( TRIM( aGrantinvestmentID)) <= 0)
        then aTopicFKXml.SetAttribute(
                      aItemFKName,
                      '')
        else ExchExport_FAIP_Code(
                      QueryField(  ' select pl_faip_obj_id ID'
                                  +' from grantinvestment where id=?',
                                   [ aGrantinvestmentID],
                                   'ID'),
                      aTopicFKXml,
                      aItemFKName);

      except
        ExceptionLog( 'Сбой ExchExport_FAIP_Code_By_GrantinvestmentID');
    end;

end;



{~ExchImport_FAIP_Code

  exchange #2805

  загрузка (импорт) кода ФАИП по коду (aFAIP_Code),
  в документ aDocXml.
  если в файле строка aFAIP_Code пустая, описание кода ФАИП в ЭД aDocXml
  заполняется пустым значением, но ЭД загружается (результат =TRUE).
  если код aFAIP_Code не будет найден в справочнике, в лог пишется что
  код ФАИП не найден в справочнике и эд не должен создаваться.

  результат:
    =TRUE - ЭД должен создаваться
    =FALSE - ЭД не должен создаваться, но загрузка не должна прерываться.

  в параметре aDocInfo описывается ЭД так, чтобы в логе отобразить
  нормальное сообщение.}
function ExchImport_FAIP_Code( aFAIP_Code: string;
                                aDocXml: Variant;
                                aDocInfo: string = ''): boolean;
begin

    try
      Result := TRUE;
      aDocXml.SetAttribute( 'PL_FAIP_OBJ_ID', '');
      aDocXml.SetAttribute( 'PL_FAIP_OBJ_CODE', '');

      // если код в файле не указан, то поля в ЭД пустые, и ЭД создается
      if ( LENGTH( TRIM( aFAIP_Code)) <= 0) then EXIT;

      // ищем код в справочнике - точное совпадение
      if (QueryField( ' select count( * ) N from pl_faip_obj'
                     +' where code=?',
                      [ aFAIP_Code],
                      'N') <> '1') then begin
        // пишем в лог что для ЭД не найден код ФАИП
        if ( LENGTH( TRIM( aDocInfo)) > 0)
          then WriteInfo( FORMAT( 'ЭД %s - не найден код ФАИП %s в справочнике.',
                                   [ aDocInfo,
                                     aFAIP_Code]))
          else WriteInfo( FORMAT( 'Не найден код ФАИП %s в справочнике.',
                                   [ aFAIP_Code]));
        // exchange #2823
        // если код ФАИП в бд не найден - проставляем пустое значение
        // но загрузку продолжаем.
        Result := TRUE;//FALSE;
        EXIT;
      end;

      // код найден - заполняем ID и код
      aDocXml.SetAttribute( 'PL_FAIP_OBJ_ID',
                            QueryField( ' select ID from pl_faip_obj'
                                       +' where code=?',
                                        [ aFAIP_Code],
                                        'ID'));
      aDocXml.SetAttribute( 'PL_FAIP_OBJ_CODE', aFAIP_Code);
      except
        ExceptionLog( 'Сбой ExchImport_FAIP_Code');
    end;

end;


begin
end.
