# Произвольные выборки из 1С

Для настройки нужно в Меню в поисковой строке ввести - "Настройка параметров обмена с 1С*".

Для загрузки сущностей, не относящих к справочникам и документам, есть возможность загрузить данные в произвольном виде в физическую таблицу СЭД.

![Рисунок 1 Закладка Произв выборки](../media/Закладка Произв выборки.PNG) 

Например, создаем таблицы `odata."ManagementStructure"`, `odata."ManagementStructureDetail"`  для хранения справочника / руководителей Управленческой структуры 1С. Для загрузки данных в них, пишем название сущности,

**Catalog_нп_СтруктурныеЕдиницыКомпании**

Указываем поля для выборки:

`$select=Ref_Key,Parent_Key,Code,Description,Сформировано,ДатаСоздания,Расформировано,ДатаРасформирования,Руководитель_Key, Сотрудники/ФизическоеЛицо_Key,Сотрудники/LineNumber`

А также саму функцию, которая заберет данные из указанной сущности:

функцию `select odata."LoadManagementStructure"("_body_") as "resultText"`

## Порядок загрузки

В столбце **"Порядок загрузки"** указывается порядок выполнения операции выгрузки произвольных выборок.

## Переменные для типа "Дата"

Для указания параметров загрузки документов и вложений с типом «Дата» введены следующие переменные:

{{LastDay}} – переменная для определения количества дней, за которое нужно выбрать данные для загрузки. Значение задается в настройках учетной политики в константе "ЗаСколькоПоследнихДнейЗагружатьДокументыИз1С". Например, ?$filter=Date gt datetime'{{LastDay}}' со значением константы 10 – за последние 10 дней будут загружаться данные

{{FirstDayMonth}} – переменная для определения даты, до которой нужно загружать документы прошлого месяца. Значение задается в настройках учетной политики в константе "ДоКакогоЧислаЗагружатьДокументыИз1С_ЗаПрошлыйМесяц". Например, ?$filter=Date gt datetime'{{ FirstDayMonth }}' со значением константы 15 – до 15.12.22 будут загружаться данные с 01.12.22

{{YesterDay}} – переменная, обозначающая предыдущий день от текущего. Например, ?$filter=ДатаСоздания ge datetime'{{YesterDay}}' – если сегодня 15.12.22, то документы для загрузки будут выбраны за 14.12.22

## Внесение данных в документ "Исключения для рассылок"

Для загрузки данных в документ [«Исключения для рассылок»](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/Исключения%20из%20рассылки/) сотрудников, например, находящихся в декретном отпуске необходимо настроить произвольные выборки в следующей очередности выполнения:

![Больничные](../media/bolnicnye.png)

1. _Выгрузка Больничных по беременности и родам_
   
Выбирается сущность в 1С **Document_БольничныйЛист**

В параметр для запроса сущности в 1С указывается: `?$filter=ДатаНачала le datetime'{{ToDay}}' and ДатаОкончания ge datetime'{{ToDay}}' and ПричинаНетрудоспособности eq 'ПоБеременностиИРодам' and DeletionMark eq false and ДокументРассчитан eq true&$format=json&$select=Ref_Key,Сотрудник_Key,ДатаНачала,ДатаОкончания`

где:

**?$filter** - Фильтр отбирает записи, в которых Дата начала меньше, чем Сегодняшний день, а Дата окончания больше.

**Причина нетрудоспособности = 'ПоБеременностиИРодам'**, документ не помечен на удаление, рассчитан

**&$select** - Поля мы выбираем только `Ref_Key,Сотрудник_Key,ДатаНачала,ДатаОкончания` для уменьшения времени обращения к данным.

2. _Выгрузка Отпусков по уходу_

Выбирается сущность сущность в 1С **Document_ОтпускПоУходуЗаРебенком**

В параметр для запроса сущности в 1С указывается: `?$filter=DeletionMark eq false&$select=Ref_Key,Сотрудник_Key,ОсновнойСотрудник_Key,ДатаНачала,ДатаОкончания,Начисления/Ref_Key,Начисления/РабочееМесто_Key`

где:

**?$filter** Фильтр отбирает все документы не помеченные на удаление

**&$select** Поля мы выбираем только `Ref_Key,Сотрудник_Key,ОсновнойСотрудник_Key,ДатаНачала,ДатаОкончания,Начисления/Ref_Key,Начисления/РабочееМесто_Key` для уменьшения времени обращения к данным

**Начисления/РабочееМесто_Key** – здесь также хранится код сотрудника, в случае если в шапке документа указан основной сотрудник, а в табличной части - совместитель

3.	_Выгрузка возврат из отпуска по уходу_

Выбирается сущность сущность в 1С **Document_ВозвратИзОтпускаПоУходуЗаРебенком**

В параметр для запроса сущности в 1С указывается: `?$select=Ref_Key,ДатаВозврата,Сотрудник_Key,ОсновнойСотрудник_Key,Начисления/Ref_Key,Начисления/РабочееМесто_Key`

где:

**&$select** Поля мы выбираем только Ref_Key,ДатаВозврата,Сотрудник_Key,ОсновнойСотрудник_Key,Начисления/Ref_Key,Начисления/РабочееМесто_Key для уменьшения времени обращения к данным

**Начисления/РабочееМесто_Key** – здесь также хранится код сотрудника, в случае если в шапке документа указан основной сотрудник, а в табличной части - совместитель

4.	_Выгрузка изменений оплаты - возврат до 1,5_

Выбирается сущность сущность в 1С **Document_ИзменениеУсловийОплатыОтпускаПоУходуЗаРебенком**

В параметр для запроса сущности в 1С указывается: `?$filter=Posted eq true and ДатаИзменения le datetime'{{ToDay}}' and ДатаОкончанияПособияДоПолутораЛет ge datetime'{{ToDay}}'&$select=Ref_Key,ДатаИзменения,Сотрудник_Key,ОсновнойСотрудник_Key,ПрименениеПлановыхНачислений/Ref_Key,ПрименениеПлановыхНачислений/РабочееМесто_Key,ПрименениеПлановыхНачислений/Применение`

где:

**?$filter** Фильтр отбирает проведенные документы, у которых Дата изменения меньше, чем Сегодняшний день и Дата Окончания пособия до полутора лет больше, чем Сегодняшний день
 
**&$select** Поля мы выбираем только Ref_Key,ДатаИзменения,Сотрудник_Key,ОсновнойСотрудник_Key,ПрименениеПлановыхНачислений/Ref_Key,ПрименениеПлановыхНачислений/РабочееМесто_Key,ПрименениеПлановыхНачислений/Применение
для уменьшения времени обращения к данным

**ПрименениеПлановыхНачислений/РабочееМесто_Key** – здесь также хранится код сотрудника, в случае если в шапке документа указан основной сотрудник, а в табличной части - совместитель

Для всех выше указан сущностей в столбец **"Функция для обработки ответа от 1С"** указывается функция, которая заберет данные из указанной сущности:

`select * from odata."loadReadListExceptions" ("_body_")`

## Выгрузка остатков отпусков в личный кабинет сотрудника

Для загрузки остатков отпусков необходимо:

* Со стороны 1С необходимо опубликовать сущности `InformationRegister_ЗаработанныеПраваНаОтпуска` и `InformationRegister_ДанныеОтпусковКарточкиСотрудника`
* В Настройке параметров 1С на закладке "Произвольные выборки из 1С" добавить строку с 
сущностью `InformationRegister_ЗаработанныеПраваНаОтпуска`
* В параметры для запроса сущности указать 
`?$filter=Period le datetime'{{ToDay}}'&$select=Period,Сотрудник_Key,ВидЕжегодногоОтпуска_Key,КоличествоДней,ДатаНачала,ДатаОкончания`
* В функцию для обработки указать 
```sql
select * from odata."LoadUsingVacations"("_body_") as "resultText"
```

## Примеры произвольных выгрузок

<table border="1">
  <thead>
    <tr>
      <th>Наименование выборки</th>
      <th>Сущность в 1С</th>
      <th>Параметр для запроса сущности в 1С</th>
      <th>Функция для обработки ответа от 1С</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Выгрузка данных по образованию - формат Диалл Альянс</td>
      <td>Structure</td>
      <td>?Object=units</td>
      <td>select * from odata."LoadEducation"("_body_") as "resultText"</td>
    </tr>
    <tr>
      <td>Выгрузка изменений оплаты - возврат до 1,5</td>
      <td>Document_ИзменениеУсловийОплатыОтпускаПоУходуЗаРебенком</td>
      <td>?$filter=Posted eq true and ДатаИзменения le datetime'{{ToDay}}' and ДатаОкончанияПособияДоПолутораЛет ge datetime'{{ToDay}}'&$select=Ref_Key,ДатаИзменения,Сотрудник_Key,ОсновнойСотрудник_Key,ПрименениеПлановыхНачислений/Ref_Key,ПрименениеПлановыхНачислений/РабочееМесто_Key,ПрименениеПлановыхНачислений/Применение</td>
      <td>select * from odata."loadReadListExceptions" ("_body_")</td>
    </tr>
    <tr>
      <td>Выгрузка Больничных по беременности и родам</td>
      <td>Document_БольничныйЛист</td>
      <td>?$filter=ПричинаНетрудоспособности eq 'ПоБеременностиИРодам' and ДатаНачала gt datetime'2022-09-01T00:00:00' and DeletionMark eq false and ДокументРассчитан eq true&$select=Ref_Key,Сотрудник_Key,ДатаНачала,ДатаОкончания</td>
      <td>select * from odata."loadReadListExceptions" ("_body_")</td>
    </tr>
    <tr>
      <td>Выгрузка Больничных по беременности и родам</td>
      <td>Document_БольничныйЛист_</td>
      <td>?$filter=ДатаНачала le datetime'{{ToDay}}' and ДатаОкончания ge datetime'{{ToDay}}' and ПричинаНетрудоспособности eq 'ПоБеременностиИРодам' and DeletionMark eq false and ДокументРассчитан eq true&$format=json&$select=Ref_Key,Сотрудник_Key,ДатаНачала,ДатаОкончания</td>
      <td>select * from odata."loadReadListExceptions" ("_body_")</td>
    </tr>
    <tr>
      <td>Выгрузка возврат из отпуска по уходу</td>
      <td>Document_ВозвратИзОтпускаПоУходуЗаРебенком</td>
      <td>?$select=Ref_Key,ДатаВозврата,Сотрудник_Key,ОсновнойСотрудник_Key,Начисления/Ref_Key,Начисления/РабочееМесто_Key_</td>
      <td>select * from odata."loadReadListExceptions" ("_body_")</td>
    </tr>
    <tr>
      <td>Выгрузка Отпусков по уходу</td>
      <td>Document_ОтпускПоУходуЗаРебенком</td>
      <td>?$filter=DeletionMark eq false&$select=Ref_Key,Сотрудник_Key,ДатаНачала,ДатаОкончания,ОсновнойСотрудник_Key,Начисления/Ref_Key,Начисления/РабочееМесто_Key</td>
      <td>select * from odata."loadReadListExceptions" ("_body_")</td>
    </tr>
    <tr>
      <td>Остатки дней отпуска сотрудников</td>
      <td>InformationRegister_ЗаработанныеПраваНаОтпуска</td>
      <td>?$filter=Period le datetime'{{ToDay}}'&$select=Period,Сотрудник_Key,ВидЕжегодногоОтпуска_Key,КоличествоДней,ДатаНачала,ДатаОкончания</td>
      <td>select * from odata."LoadUsingVacations"("_body_") as "resultText"</td>
    </tr>
  </tbody>
</table>

