Коллеги, друзья, добрый день. Стоит задача слияния двух баз БП 3 КОРП. Свежий релиз, с кучей доработок. Конфы идентичные. Знаю, вопрос избитый. НО! У меня все таке 2 вопроса.
1. есть живые очевидцы переноса через РИБ? Много видел статей с мануалами, но сложилось впечатление, что ни кто так не делал по факту.
2. Так как привык делать все напролом, то делаю правила на КД. Все вроде красиво, НО. как всегда НО... Конфы то идентичные, а настроен план счетов по разному. Пример: счет 20.01 в базе источник 3 субконто Склад, в базе Применике - Продукция. И таких счетов несколько с разными настройками. На что у меня хватило мозгов:
Создал новое ПКО чдВидыСубконтоХозрасчетные в котором прописал Источник Склад, Применик - Продукция.
В ПКО документа в КС Хозрасчетный у Субконто (ДТ и КТ) в событии Перед выгрузкой прописал:

```1c
    ИмяПКОВидСубконто = "ВидыСубконтоХозрасчетные";
    Если ОбъектКоллекции.СчетДТ.Код = "20.01" Тогда

    Для Каждого Суб Из ОбъектКоллекции.СубконтоДТ Цикл
    Если ТипЗнч(Суб.Значение) = Тип("СправочникСсылка.Склады") Тогда

    ИмяПКОВидСубконто = "чдВидыСубконтоХозрасчетные";

    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
```

все вроде работает. Но когда выгружается другой документ, нде нет этого правила, КД упорно берет ПКО чдВидыСубконтоХозрасчетные и так же сопоставляет Скалд=Продукция. Естественно выгрузка вываливает ошибку что такое субконто не подходит (смотрел файл выгрузки и реально видел такое сопоставление). Подскажите - может есть другой способ эту проблему обойти? или ЧЯДНТ
---
в общем, если кому интересно, решил проблему следующим образом: в КС Субкотно ДТ/КТ ПКО движений Хозрасчетный ПриВыгрузке написал следующее

```1c
    Если ОбъектКоллекции.СчетДТ.Код = "26" Тогда

    Для Каждого Суб Из ОбъектКоллекции.СубконтоДТ Цикл
    Если ТипЗнч(Суб.Значение) = Тип("СправочникСсылка.Склады") //Тогда
    и ВидСубконто = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады Тогда

    ВидСубконто = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.НайтиПоНаименованию("Подразделения");
    Субконто = Справочники.ПодразделенияОрганизаций.НайтиПоНаименованию(Суб.Значение.Наименование);
    КлючИЗначение = Новый Структура(ВидСубконто,Субконто);
    КонецЕсли;
    КонецЦикла;
    ИначеЕсли ОбъектКоллекции.СчетДТ.Код = "91.02" или ОбъектКоллекции.СчетДТ.Код = "91.01" Тогда

    Для Каждого Суб Из ОбъектКоллекции.СубконтоДТ Цикл
    Если ТипЗнч(Суб.Значение) = Тип("СправочникСсылка.Склады") //Тогда
    и ВидСубконто = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады Тогда

    ВидСубконто = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.НоменклатурныеГруппы;
    Субконто = Справочники.НоменклатурныеГруппы.НайтиПоНаименованию(Суб.Значение.Наименование);
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
```

вроде работает как надо (еще тестирую)
---
Конфы то идентичные, а настроен план счетов по разному. Пример: счет 20.01 в базе источник 3 субконто Склад, в базе Применике - Продукция. И таких счетов несколько с разными настройками.
Настройки плана счетов должны быть идентичны.
Выбрать одну базу как основную, вторую загружать, устанавливая данные по первой.
---
если я поменяю в источнике вид сбконто, то данные потеряются. это самый простой способ, понимаю. Но мы же не ищем легких путей )
---
если я поменяю в источнике вид сбконто, то данные потеряются. это самый простой способ, понимаю. Но мы же не ищем легких путей )
Не менять данные в источнике, а устанавливать при загрузке в приемнике.
---
.....и тем самым превратить базу-приемник в кашу? :)
---
и тем самым превратить базу-приемник в кашу? :)
Тогда нужно готовить базу источник, приводить в соответствие с приемником.
---
тут уже должна быть "битва двух якодзун", в том плане какая база(источник или приемник) должна подстроиться.
в любом случае, одно из субконто при передаче потеряется, т.к. не соответствует по типу.
---
вот пример ошибки. Какого ражна он пытается записать субконто Продукция, если я не прописывал для этого документа правил менять ИмяПКОВидСубконто!? Везде по умолчанию стоит в ПКО ВидыСубконтоХозрасчетные
---
необходимо в базе приемнике проверять тип субконто при загрузке и установке. Если соответствует принятому типу, то устанавливать.

Либо база источник должна "подстроится" под базу-приемник.
---
идея интересная. это можно было бы сделать универсально для всех документов. Есть вариант такого исполнения?
---
При загрузке данных, глобальным обработчиком формируете соответствие субконто счетам и храните в глобальных переменных.
При загрузке самих данных проверяете на соответствие типу.

Как-то так(скрины):

Текст:

```1c
    ОтражениеВУчете = Объект.ОтражениеВУчете.Выгрузить();
    Запросы.ОтражениеВУчетеНУ.УстановитьПараметр("ДанныеТЧ", ОтражениеВУчете);
    Объект.ОтражениеВУчете.Загрузить(Запросы.ОтражениеВУчетеНУ.Выполнить().Выгрузить());

    ОсновныеНачисления = Объект.ОсновныеНачисления.Выгрузить();
    Запросы.ОсновныеНачисленияНУ.УстановитьПараметр("ДанныеТЧ", ОсновныеНачисления);
    Объект.ОсновныеНачисления.Загрузить(Запросы.ОсновныеНачисленияНУ.Выполнить().Выгрузить());

    ДополнительныеНачисления = Объект.ДополнительныеНачисления.Выгрузить();
    Запросы.ДополнительныеНачисленияНУ.УстановитьПараметр("ДанныеТЧ", ДополнительныеНачисления);
    Объект.ДополнительныеНачисления.Загрузить(Запросы.ДополнительныеНачисленияНУ.Выполнить().Выгрузить());

    МассивТЧ = Новый Массив;
    МассивТЧ.Добавить("ОтражениеВУчете");
    МассивТЧ.Добавить("ОсновныеНачисления");
    МассивТЧ.Добавить("ДополнительныеНачисления");

    ВидыАналитики = Новый Массив;
    ВидыАналитики.Добавить("Дт");
    ВидыАналитики.Добавить("Кт");

    ВидыУчета = Новый Массив;
    ВидыУчета.Добавить(");
    ВидыУчета.Добавить("НУ");

    КЦ = Справочники.ПодразделенияОрганизаций.НайтиПоРеквизиту("С_КадровыйНомер", 555555555);
    ПустаяОрганизация = Справочники.Организации.ПустаяСсылка();

    Счет68 = ПланыСчетов.Хозрасчетный.НайтиПоКоду("68");

    Для Каждого ТекТЧ ИЗ МассивТЧ Цикл
    Для Каждого Строка ИЗ Объект[ТекТЧ] Цикл
    АналитикаСтруктура = Новый Структура;
    Для Каждого ТекВид ИЗ ВидыАналитики Цикл
    Для Каждого ВидУчета Из ВидыУчета Цикл
    СоответствиеСубконто = Параметры["СоответствияСубконто" + ВидУчета].Получить(Строка["Счет" + ТекВид + ВидУчета]);
    Если СоответствиеСубконто = Неопределено Тогда
    Продолжить;
    КонецЕсли;
    Для Сч = 1 ПО 3 Цикл
    Если ЗначениеЗаполнено(Строка["Субконто" + ТекВид + Сч]) Тогда
    НомерСубконто = СоответствиеСубконто.Получить(ТипЗнч(Строка["Субконто" + ТекВид + Сч]));
    Если НЕ НомерСубконто = Неопределено Тогда
    ЗначениеСубконто = Строка["Субконто" + ТекВид + ВидУчета + Сч];
    Если ЗначениеСубконто = Неопределено Тогда
    ОписаниеТипов = Новый ОписаниеТипов(ТипЗнч(Строка["Субконто" + ТекВид + Сч]));
    ЗначениеСубконто = ОписаниеТипов.ПривестиЗначение(ЗначениеСубконто);
    КонецЕсли;
    АналитикаСтруктура.Вставить("Субконто" + ТекВид + ВидУчета + НомерСубконто, ЗначениеСубконто);
    КонецЕсли;
    Иначе
    НомерСубконто = СоответствиеСубконто.Получить(Тип("СправочникСсылка.ПодразделенияОрганизаций"));
    Если НЕ НомерСубконто = Неопределено И НомерСубконто = Сч Тогда
    АналитикаСтруктура.Вставить("Субконто" + ТекВид + ВидУчета + Сч, КЦ);
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;

    НомерСубконто = СоответствиеСубконто.Получить(Тип("СправочникСсылка.ПодразделенияОрганизаций"));
    Если (ТипЗнч(Строка["Счет" + ТекВид + ВидУчета]) = Тип("ПланСчетовСсылка.Хозрасчетный") И НЕ Строка["Счет" + ТекВид + ВидУчета].ПринадлежитЭлементу(Счет68)) И НЕ НомерСубконто = Неопределено Тогда
    Если ЗначениеЗаполнено(Строка["Подразделение" + ТекВид]) Тогда
    АналитикаСтруктура.Вставить("Субконто" + ТекВид + ВидУчета + НомерСубконто, Строка["Подразделение" + ТекВид]);
    Иначе
    АналитикаСтруктура.Вставить("Субконто" + ТекВид + ВидУчета + НомерСубконто, КЦ);
    КонецЕсли;
    //Иначе
    // АналитикаСтруктура.Вставить("Субконто" + ТекВид + ВидУчета + Сч);
    КонецЕсли;

    //Если ТекВид = "Кт" И (ТипЗнч(Строка["Счет" + ТекВид + ВидУчета]) = Тип("ПланСчетовСсылка.Хозрасчетный") И НЕ Строка["Счет" + ТекВид + ВидУчета].ПринадлежитЭлементу(Счет68)) Тогда
    // НомерСубконто = СоответствиеСубконто.Получить(Тип("СправочникСсылка.ПодразделенияОрганизаций"));
    // Если НЕ НомерСубконто = Неопределено Тогда
    // Если ЗначениеЗаполнено(Строка.ПодразделениеКт) Тогда
    // АналитикаСтруктура.Вставить("Субконто" + ТекВид + ВидУчета + НомерСубконто, Строка.ПодразделениеКт);
    // Иначе
    // АналитикаСтруктура.Вставить("Субконто" + ТекВид + ВидУчета + НомерСубконто, КЦ);
    // КонецЕсли;
    // КонецЕсли;
    //КонецЕсли;

    Если ТипЗнч(Строка["Счет" + ТекВид + ВидУчета]) = Тип("ПланСчетовСсылка.Хозрасчетный") И Строка["Счет" + ТекВид + ВидУчета].ПринадлежитЭлементу(Счет68) Тогда
    НомерСубконто = СоответствиеСубконто.Получить(Тип("СправочникСсылка.Организации"));
    Если НЕ НомерСубконто = Неопределено Тогда
    АналитикаСтруктура.Вставить("Субконто" + ТекВид + ВидУчета + НомерСубконто, ПустаяОрганизация);
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    ЗаполнитьЗначенияСвойств(Строка, АналитикаСтруктура);
    КонецЦикла;
    КонецЦикла;
```
---
прикольно. надо подумать. В моем варианте есть еще один большой недостаток - база хоть и подставляет значение, но там по факту получается пустая ссылка. Может проще тогда призагрузке движений по хозрасчетному делать "попытку", потом документы все равно придется все перепроводить. Знаете куда попытку воткнуть лучше? Останется проблема только с ручными корректировками
---
Через попытку - не получится(либо придется лезть в дебри обработки УниверсальныйОбменДаннымиXML и там разбираться, куда втыкать эту самую попытку), потому что при выгрузке ничего не известно про приемник, а в приемнике - ничего не известно про входящие данные, пока эти данные не "олицетворятся".

Проверка на тип субконто в уже загруженном объекте нужна по большей части для того, чтобы оставить субконто не совпадающего типа пустыми, либо когда типы совпадают, но порядок - разный(в источнике, скажем, 2-ое субконто, а в приемнике - 3-е)
---
тут порядок врооде не нарушен. но еще на одни грабли в итоге наткнулся - в базе приемнике есть НЕпредопределнный вид субконто. Мой вариант послал меня нафиг. буду изучать ваш. спасибо
---
не совсем понял по вашему коду где происходит подстановка "нужного" субконто. ткните плиз пальцем
---
```1c
    ..........
    СоответствиеСубконто = Параметры["СоответствияСубконто" + ВидУчета].Получить(Строка["Счет" + ТекВид + ВидУчета]);
    Если СоответствиеСубконто = Неопределено Тогда
    Продолжить;
    КонецЕсли;
    Для Сч = 1 ПО 3 Цикл
    ........
```

Для вашего случая, возможно придется несколько адаптировать, у меня не было ситуации, когда типы субконто не совпадали.
---
в общем, если кому интересно, решил проблему следующим образом: в КС Субкотно ДТ/КТ ПКО движений Хозрасчетный ПриВыгрузке написал следующее

```1c
    Если ОбъектКоллекции.СчетДТ.Код = "26" Тогда

    Для Каждого Суб Из ОбъектКоллекции.СубконтоДТ Цикл
    Если ТипЗнч(Суб.Значение) = Тип("СправочникСсылка.Склады") //Тогда
    и ВидСубконто = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады Тогда

    ВидСубконто = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.НайтиПоНаименованию("Подразделения");
    Субконто = Справочники.ПодразделенияОрганизаций.НайтиПоНаименованию(Суб.Значение.Наименование);
    КлючИЗначение = Новый Структура(ВидСубконто,Субконто);
    КонецЕсли;
    КонецЦикла;
    ИначеЕсли ОбъектКоллекции.СчетДТ.Код = "91.02" или ОбъектКоллекции.СчетДТ.Код = "91.01" Тогда

    Для Каждого Суб Из ОбъектКоллекции.СубконтоДТ Цикл
    Если ТипЗнч(Суб.Значение) = Тип("СправочникСсылка.Склады") //Тогда
    и ВидСубконто = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады Тогда

    ВидСубконто = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.НоменклатурныеГруппы;
    Субконто = Справочники.НоменклатурныеГруппы.НайтиПоНаименованию(Суб.Значение.Наименование);
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
```

вроде работает как надо (еще тестирую)