При переносе данных из ЗиК 7.7 в ЗиУП 8.3 переносятся данные только по сотрудникам, работающим на дату переноса.

Помогите, что требуется доработать в выборке сотрудников из 7.7, чтобы выгружались данные по всем сотрудникам, включая уволенных.

Сам код выборки из типовых правил переноса такой:

```1c
    ИсключатьУволенных = 0;
    ПринудительноОбновитьВыборку = ВходящиеДанные;

    Если ПустоеЗначение(ПринудительноОбновитьВыборку) = 1 Тогда
    СписокСотр = ОПД_Структура_Получить(Параметры.ВременноеХранилище, "СотрудникиОрганизаций");
    Если ЗначениеЗаполнено(СписокСотр) = 1 Тогда
    Возврат СписокСотр;
    КонецЕсли;
    КонецЕсли;

    СписокСотр = СоздатьОбъект("СписокЗначений");
    СписокСотрудников = СоздатьОбъект("СписокЗначений");

    Если Параметры.ПереноситьНачисленияПредыдущейПрограммы = 1 Тогда

    СпрСотрудники = СоздатьОбъект("Справочник.Сотрудники");
    СпрСотрудники.ПорядокКодов();
    СпрСотрудники.ВыбратьЭлементы(0);
    Пока СпрСотрудники.ПолучитьЭлемент() = 1 Цикл

    Если СпрСотрудники.ЭтоГруппа() = 1 Тогда
    Продолжить;
    КонецЕсли;

    Если (ЗначениеЗаполнено(Параметры.СотрудникДляОтладки) = 1) И (Параметры.СотрудникДляОтладки <> СпрСотрудники.ОсновнойЭлемент) Тогда
    Продолжить;
    КонецЕсли;

    СотрудникСтруктура = ";

    Периодический = СоздатьОбъект("Периодический");
    Периодический.ИспользоватьОбъект("СостояниеФизлица",СпрСотрудники.ТекущийЭлемент());
    Периодический.ВыбратьЗначения();
    Пока Периодический.ПолучитьЗначение()=1 Цикл

    Если Найти("ПриказОПриемеНаРаботу,ПриказОЗачисленииВСпискиЧасти",Периодический.ТекущийДокумент().Вид()) = 0 Тогда
    Продолжить
    КонецЕсли;

    Док = Периодический.ТекущийДокумент();
    Если (Док.Выбран()=0) Или (ПустоеЗначение(Периодический.Значение)=1) Тогда
    Продолжить;
    КонецЕсли;
    ДатаПриема = Док.ДатаПриема;
    СотрудникСтруктура = Сотрудник_Заполнить(СпрСотрудники.ТекущийЭлемент(), ДатаПриема);
    СписокСотрудников.ДобавитьЗначение(СотрудникСтруктура);

    КонецЦикла;

    Если ПустоеЗначение(СотрудникСтруктура) = 1 Тогда
    СотрудникСтруктура = Сотрудник_Заполнить(СпрСотрудники.ТекущийЭлемент(), Параметры.ДатаОкончанияУчета);
    СписокСотрудников.ДобавитьЗначение(СотрудникСтруктура);
    КонецЕсли;

    КонецЦикла;

    Запрос = СоздатьОбъект("Запрос");

    ДатаНачалаПериода = Дата(2000,01,01);
    ДатаОкончанияПериода = Параметры.ДатаОкончанияУчета;

    СписокВР = СоздатьОбъект("СписокЗначений");
    СписокВР.ДобавитьЗначение(ВидРасчета.ЛицензионныеВыплаты);
    СписокВР.ДобавитьЗначение(ВидРасчета.ВыплатыЗаОтчуждениеИсключительныхПрав);
    СписокВР.ДобавитьЗначение(ВидРасчета.ОплатаПоДоговору);

    ТекстЗапроса =
    "//{{ЗАПРОС(ДоходЗаПериод)
    |Период С ДатаНачалаПериода ПО ДатаОкончанияПериода;
    |Сотрудник = ЖурналРасчетов.Зарплата.Объект;
    |ВидРасч = ЖурналРасчетов.Зарплата.ВидРасч;
    |Результат = ЖурналРасчетов.Зарплата.Результат;
    |Группировка Сотрудник без групп;
    |Условие(ВидРасч в СписокВР);
    |"//}}ЗАПРОС
    ;

    Если Запрос.Выполнить(ТекстЗапроса) =1 Тогда
    Пока Запрос.Группировка(1)=1 Цикл
    Если (ЗначениеЗаполнено(Параметры.СотрудникДляОтладки) = 1) И (Параметры.СотрудникДляОтладки <> Запрос.Сотрудник) Тогда
    Продолжить;
    КонецЕсли;
    СотрудникСтруктура = Сотрудник_Заполнить(Запрос.Сотрудник, Параметры.ДатаОкончанияУчета, 1);
    СписокСотрудников.ДобавитьЗначение(СотрудникСтруктура);
    КонецЦикла;
    КонецЕсли;

    Иначе

    ФизлицаДляПроверки = СоздатьОбъект("СписокЗначений");

    Периодический = СоздатьОбъект("Периодический");
    СпрСотрудники = СоздатьОбъект("Справочник.Сотрудники");
    СпрСотрудники.ВыбратьЭлементы();
    Пока СпрСотрудники.ПолучитьЭлемент()=1 Цикл

    Если СпрСотрудники.ЭтоГруппа()=1 Тогда
    Продолжить;
    КонецЕсли;

    Если (ЗначениеЗаполнено(Параметры.СотрудникДляОтладки) = 1) И (Параметры.СотрудникДляОтладки <> СпрСотрудники.ОсновнойЭлемент) Тогда
    Продолжить;
    КонецЕсли;

    Периодический.ИспользоватьОбъект("СостояниеФизлица",СпрСотрудники.ТекущийЭлемент());
    СостояниеФЗ = Периодический.ЗначениеНаДату(Параметры.МесяцНачалаЭксплуатации);
    Если ПустоеЗначение(СостояниеФЗ)=0 Тогда
    СписокСотр.ДобавитьЗначение(СпрСотрудники.ТекущийЭлемент());
    Иначе
    ФизлицаДляПроверки.ДобавитьЗначение(СпрСотрудники.ТекущийЭлемент());
    КонецЕсли;

    КонецЦикла;

    Для Сч = 1 По СписокСотр.РазмерСписка() Цикл
    Сотрудник = СписокСотр.ПолучитьЗначение(Сч);
    СотрудникСтруктура = Сотрудник_Заполнить(Сотрудник, Параметры.МесяцНачалаЭксплуатации);
    СписокСотрудников.ДобавитьЗначение(СотрудникСтруктура);
    КонецЦикла;

    Если ФизлицаДляПроверки.РазмерСписка()>0 Тогда

    СписокСотр = СоздатьОбъект("СписокЗначений");

    ДатаНачалаПериода = НачГода(Параметры.МесяцНачалаЭксплуатации);
    ДатаОкончанияПериода = Параметры.МесяцНачалаЭксплуатации - 1;

    Если ДатаОкончанияПериода > ДатаНачалаПериода Тогда

    // Проверим начисления в журнале расчетов.
    СотрудникОтбор = СпрСотрудники.ТекущийЭлемент();
    Запрос=СоздатьОбъект("Запрос");

    СписокВР = СоздатьОбъект("СписокЗначений");
    Для Сч = 1 По ГруппаРасчетов.БольничныеЛисты.Количество() Цикл
    ВР = ГруппаРасчетов.БольничныеЛисты.ПолучитьРасчет(Сч);
    СписокВР.ДобавитьЗначение(ВР);
    КонецЦикла;
    Для Сч = 1 По ГруппаРасчетов.РасходыЗаСчетФСС.Количество() Цикл
    ВР = ГруппаРасчетов.РасходыЗаСчетФСС.ПолучитьРасчет(Сч);
    Если СписокВР.НайтиЗначение(ВР)=0 Тогда
    СписокВР.ДобавитьЗначение(ВР);
    КонецЕсли;
    КонецЦикла;

    ТекстЗапроса = "//{{ЗАПРОС(ДоходЗаПериод)
    |с ДатаНачалаПериода по ДатаОкончанияПериода;
    |Сотрудник = ЖурналРасчетов.Зарплата.Объект.ОсновнойЭлемент;
    |ВидРасч = ЖурналРасчетов.Зарплата.ВидРасч;
    |Результат = ЖурналРасчетов.Зарплата.Результат;
    |Группировка Сотрудник без групп;
    |Условие((ВидРасч в СписокВР) И (Результат <> 0));
    |Условие(Сотрудник в ФизлицаДляПроверки);
    |"//}}ЗАПРОС
    ;

    Если Запрос.Выполнить(ТекстЗапроса) =1 Тогда
    Пока Запрос.Группировка(1)=1 Цикл
    СписокСотр.ДобавитьЗначение(Запрос.Сотрудник);
    КонецЦикла;
    КонецЕсли;

    КонецЕсли;

    Для Сч = 1 По СписокСотр.РазмерСписка() Цикл
    Сотрудник = СписокСотр.ПолучитьЗначение(Сч);
    СотрудникСтруктура = Сотрудник_Заполнить(Сотрудник, Параметры.МесяцНачалаЭксплуатации);
    СписокСотрудников.ДобавитьЗначение(СотрудникСтруктура);
    КонецЦикла;

    СписокСотр = СоздатьОбъект("СписокЗначений");
    ДатаПереноса = Параметры.МесяцНачалаЭксплуатации;
    Док = СоздатьОбъект("Документ.ДоговорГраждПравХаракт");
    Док.ВыбратьДокументы();
    Пока Док.ПолучитьДокумент()=1 Цикл

    Если Док.ПБОЮЛ = 1 Тогда
    Продолжить;
    КонецЕсли;

    Если Док.Проведен() <> 1 Тогда
    Продолжить;
    КонецЕсли;

    Если (Док.ТипДоговора <> Перечисление.ТипДоговора.ДоговорПодряда) И (Док.ТипДоговора <> Перечисление.ТипДоговора.АвторскийДоговор) Тогда
    Продолжить;
    КонецЕсли;

    Если (ПустоеЗначение(Док.Окончание) = 0) И (Док.Окончание < ДатаПереноса) Тогда
    Продолжить;
    КонецЕсли;

    Если Док.Начало > ДатаПереноса Тогда
    Продолжить;
    КонецЕсли;

    Если СписокСотр.НайтиЗначение(Док.Сотрудник) = 0 Тогда
    СписокСотр.ДобавитьЗначение(Док.Сотрудник);
    КонецЕсли;

    КонецЦикла;

    Для Сч = 1 По СписокСотр.РазмерСписка() Цикл
    Сотрудник = СписокСотр.ПолучитьЗначение(Сч);
    СотрудникСтруктура = Сотрудник_Заполнить(Сотрудник, Параметры.МесяцНачалаЭксплуатации,1);
    СписокСотрудников.ДобавитьЗначение(СотрудникСтруктура);
    КонецЦикла;

    КонецЕсли;

    КонецЕсли;

    ОПД_Структура_Установить(Параметры.ВременноеХранилище, "СотрудникиОрганизаций", СписокСотрудников);

    Возврат СписокСотрудников;
```
---
состав сотрудников не изменился Тогда, скорее всего, вносить изменения надо не в правила, а в код обработки V77Exp.ert.

Наиболее перспективным мне кажется правка функции Сотрудники_Выборка(), в самом начале которой есть интересная переменная:

```1c
    Функция Сотрудники_Выборка(
    ИсходящиеДанные = ", ВходящиеДанные = ", Источник = ", Приемник = ", ТипПриемника = ", Значение = ", Выражение = ",
    Пусто = ", ВыборкаДанных = ", Объект = ", КоллекцияОбъектов = ", ОбъектКоллекции = ", ИмяПКО = ", ИмяПКОВидСубконто = ",
    НомерПКО = ", НомерПКС = ", Правило = ", КлючВыгружаемыхДанных = ", НеЗапоминатьВыгруженные = ", НеЗамещатьОбъектПриЗагрузке = ",
    ВсеОбъектыВыгружены = ", ТолькоПолучитьУзелСсылки = ", РежимЗаписи = ", РежимПроведения = ", СтандартнаяОбработка = ",
    НеЗамещать = ", НеОчищать = ", УзелСсылки = ", УзелКоллекцииОбъектов = ", УзелОбъектаКоллекции = ", УзелСвойства = ",
    ВидСубконто = ", Субконто = ", Отказ = ")

    ИсключатьУволенных = ИсходящиеДанные;
```
 Функция вызывается в коде много раз и в основном с первым параметром, равным 1, т.е. - "уволенных исключать".

Так что либо исправлять во всех (или только в нужных) вызовах 1 на 0, или просто тупо заменить в самой функции:

```1c
    // ИсключатьУволенных = ИсходящиеДанные;
    ИсключатьУволенных = 0;
```
 и смотреть - что получится.
---
что требуется доработать в выборке сотрудников из 7.7, чтобы выгружались данные по всем сотрудникам, включая уволенных. Возможно, что для этого достаточно будет закомментировать несколько строк в проверке состояния физлица:

```1c
    Периодический.ИспользоватьОбъект("СостояниеФизлица",СпрСотрудники.ТекущийЭлемент());
    СостояниеФЗ = Периодический.ЗначениеНаДату(Параметры.МесяцНачалаЭксплуатации);
    // Если ПустоеЗначение(СостояниеФЗ)=0 Тогда
    СписокСотр.ДобавитьЗначение(СпрСотрудники.ТекущийЭлемент());
    // Иначе
    // ФизлицаДляПроверки.ДобавитьЗначение(СпрСотрудники.ТекущийЭлемент());
    // КонецЕсли;
```
---
нет, состав сотрудников не изменился
---
состав сотрудников не изменился Тогда, скорее всего, вносить изменения надо не в правила, а в код обработки V77Exp.ert.

Наиболее перспективным мне кажется правка функции Сотрудники_Выборка(), в самом начале которой есть интересная переменная:

```1c
    Функция Сотрудники_Выборка(
    ИсходящиеДанные = ", ВходящиеДанные = ", Источник = ", Приемник = ", ТипПриемника = ", Значение = ", Выражение = ",
    Пусто = ", ВыборкаДанных = ", Объект = ", КоллекцияОбъектов = ", ОбъектКоллекции = ", ИмяПКО = ", ИмяПКОВидСубконто = ",
    НомерПКО = ", НомерПКС = ", Правило = ", КлючВыгружаемыхДанных = ", НеЗапоминатьВыгруженные = ", НеЗамещатьОбъектПриЗагрузке = ",
    ВсеОбъектыВыгружены = ", ТолькоПолучитьУзелСсылки = ", РежимЗаписи = ", РежимПроведения = ", СтандартнаяОбработка = ",
    НеЗамещать = ", НеОчищать = ", УзелСсылки = ", УзелКоллекцииОбъектов = ", УзелОбъектаКоллекции = ", УзелСвойства = ",
    ВидСубконто = ", Субконто = ", Отказ = ")

    ИсключатьУволенных = ИсходящиеДанные;
```
 Функция вызывается в коде много раз и в основном с первым параметром, равным 1, т.е. - "уволенных исключать".

Так что либо исправлять во всех (или только в нужных) вызовах 1 на 0, или просто тупо заменить в самой функции:

```1c
    // ИсключатьУволенных = ИсходящиеДанные;
    ИсключатьУволенных = 0;
```
 и смотреть - что получится.
---
в правилах первым делом увидел эту переменную. Изменение в правилах ИсключатьУволенных = 0 результата не дало, про обработку не смотрел. Проверю сейчас.
---
да, все верно, нужно было модуль V77Exp.ert обновить из правил обмена. Все получилось. Спасибо.