<?xml version="1.0" encoding="windows-1251"?>
<registry>
	<node path="%root%\Ресурсы\Макросы\Слои\ЭкспортИмпортДанных">
		<value type="7" name="Экспорт">//Макрос экспорта данных одного слоя в заданный формат
//Входные параметры, обрабатываемые скриптом экспорта:
//    LayerData - датасет с данными слоя, которые нужно экспортировать (обязательный)
//    ExportCode - код экспорта  (обязательный)
//    LayerAlias - алиас слоя (необязательный - если нет, то вычитывается из конфигурации экспорта первый попавшийся для заданного кода экспорта)
//    $Version.Сборка - сборка версий для вычисления слоя формата (необязательный - если нет, то используются текущие версии слоев источников)
//
//Выходные параметры:
//    Format.ExportLayer - экспортированный слой (преобразованный к формату экспорта)
//    Format.Param - параметр форматтера
//
//Выходные параметры, используемые при повторных вызовах (также могут использоваться как входные):    
//    Format.&lt;ТипФорматтера&gt;.* - параметры форматтера (конкретные параметры зависят от типа форматтера) 
//

включить "\библиотеки\libru.lib"; 
включить "\библиотеки\Layers.lib";
включить "\библиотеки\Reports.lib";
включить "\Макросы\Слои\ВспомогательныеФункции.abl";
включить "\Макросы\Слои\ПоддержкаСлойницы.abl";
включить "\Макросы\Слои\ЭкспортИмпортДанных\ФункцииЭкспортаИмпортаДанных.abl";

Экспорт(Параметры: IVariables);

константы
  кПутьКМакросамЭкспорта = "\Ресурсы\Макросы\Слои\ЭкспортИмпортДанных\СкриптыЭкспорта\";

переменные
  //Слои
  Слой_КонфигурацияЭкспорта: ILayer;
  Слой_Источник: ILayer;
  Слой_Формата: ILayer;
  //Параметры экспорта
  КодЭкспорта: целое;
  ДанныеСлоя: СтатическиеДанные;
  //Конфигурация экспорта
  КонфигурацияЭкспорта: СтатическиеДанные;
  АлиасСлояФормата: строка;
  АлиасСлояДанных: строка;
  Формат: строка;
  ПараметрЭкспорта: строка;
  
  Источники: IVariables;
  ПараметрыСлояФормата: IVariables;  
  Менеджер: ILayersMan;
  ДанныеСлояЛок: СтатическиеДанные;  
  ДанныеСлояФормата: СтатическиеДанные;
  
начало
  Менеджер := ПолучитьМенеджерСлоев;
  //Параметры экспорта
  ДанныеСлоя := Параметры.Values('LayerData');
  КодЭкспорта := Параметры.Values('ExportCode');
  АлиасСлояДанных := Параметры.Values('LayerAlias'); 
  //Считываем конфигурацию экспорта
  Слой_КонфигурацияЭкспорта := Менеджер.CreateLayerByAlias("Платформа.Слои.ЭкспортИмпорт.КонфигурацияЭкспорта");
  Слой_КонфигурацияЭкспорта.OpenWithCalculate;
  КонфигурацияЭкспорта := Слой_КонфигурацияЭкспорта.LayerData;
  если не КонфигурацияЭкспорта.Locate("Код;СлойДанных", МассивИз(КодЭкспорта, АлиасСлояДанных), 0) тогда
    если не КонфигурацияЭкспорта.Locate("Код", МассивИз(КодЭкспорта), 0) тогда
      ВызватьОшибку("Не найден экспорт с кодом "+ ФорматироватьКлассификатор(ЦелоеВСтроку(КодЭкспорта), "00.00.00.00"));
  //Заполняем параметры для вызова
  АлиасСлояДанных := КонфигурацияЭкспорта.ПолеПоИмени("СлойДанных").КакСтрока;
  если АлиасСлояДанных = "" тогда
    АлиасСлояДанных := Параметры.Values('LayerAlias');
  АлиасСлояФормата := КонфигурацияЭкспорта.ПолеПоИмени("СлойФормата").КакСтрока;
  Формат := КонфигурацияЭкспорта.ПолеПоИмени("Формат").КакСтрока;
  ПараметрЭкспорта := КонфигурацияЭкспорта.ПолеПоИмени("Параметр").КакСтрока;
  //Создаем слой источника и заполняем экспортируемыми данными 
  Слой_Источник := Менеджер.CreateLayerByAlias(АлиасСлояДанных);
  Слой_Источник.OpenEmpty;
  ДанныеСлояЛок := Слой_Источник.LayerData;
  ДанныеСлояЛок.PumpData(ДанныеСлоя, ""); 
  
  //Возможно, перед экспортом необходимо преобразовать данные в другой формат. 
  //Делаем это при помощи специального вычислимого слоя
  если АлиасСлояФормата &lt;&gt; "" тогда
  начало
    Слой_Формата := Менеджер.CreateLayerByAlias(АлиасСлояФормата);
    //Подсовываем слою формата слой-источник в качестве источника для вычислений
    Источники := CreateVariables;
    Источники.Values(АлиасСлояДанных) := Слой_Источник;
    Слой_Формата.Open;
    ПараметрыСлояФормата := Слой_Формата.ContextParams;
    //Если в параметрах задана сборка версий, то нужно ее передать слою формата, чтобы он передал ее своим источникам
    если Параметры.CheckParam("$Version.Сборка") тогда      
      ПараметрыСлояФормата.Values("$Version.Сборка") := Параметры.Values("$Version.Сборка"); 
    если Параметры.CheckParam("$BudgetRef") тогда      
      ПараметрыСлояФормата.Values("$BudgetRef") := Параметры.Values("$BudgetRef");
    //Возможно, указано ограничение данных по признаку принятия
    если Параметры.CheckParam("$Layer.Сотояние") тогда      
      ПараметрыСлояФормата.Values("$Layer.Сотояние") := Параметры.Values("$Layer.Сотояние"); 
    //Возможно, указано ограничение данных по коду района
    если Параметры.CheckParam("$Layer.Район") тогда начало     
      ПараметрыСлояФормата.Values("$Layer.Район") := Параметры.Values("$Layer.Район");
      ПараметрыСлояФормата.Values('$Layer.Район.Ограничение') := "=";
    конец;
    
    Слой_Формата.CalculateFromSource(Источники);
    
    //Если требуется сортировать данные, формируем индекс сортировки
    если Параметры.CheckParam("СортироватьДанные") тогда 
      если Параметры.Values("СортироватьДанные") тогда начало
        ДанныеСлояФормата := Слой_Формата.LayerData;
        ДанныеСлояФормата.IndexFieldNames := ФормироватьИндексДляСлоя(Слой_Формата);
      конец;
  конец
  иначе
    Слой_Формата := Слой_Источник;  
   
  //Настройка параметров для вызова форматтера  
  Параметры.Values("Format.ExportLayer") := Слой_Формата;
  Параметры.Values("Format.Param") := ПараметрЭкспорта;
  
  ExecScript(КорневойУзелРеестра+кПутьКМакросамЭкспорта+ПолучитьИмяМакросаИмпортаЭкспорта(Формат, "МакросЭкспорта"), Параметры);   
конец.
</value>
		<param value="Экспорт" type="1" name="AccessCount">62</param>
		<param value="Экспорт" type="2" name="AccessDate">42020.5614367593</param>
		<param value="Экспорт" type="3" name="crc32">$890C9FF9</param>
		<param value="Экспорт" type="3" name="installversion">1.0</param>
		<param value="Экспорт" type="3" name="version">35.058.00</param>
		<param value="Экспорт" type="3" name="Export">SKVORTSOVV\skvortsov\16.01.2015 13:43:03</param>
	</node>
</registry>
