КД 2 перенос всех данных по организации

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

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

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

Показать


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

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

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

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

вроде работает как надо (еще тестирую)
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. uriah 18 03.02.22 15:10 Сейчас в теме
(1)
Конфы то идентичные, а настроен план счетов по разному. Пример: счет 20.01 в базе источник 3 субконто Склад, в базе Применике - Продукция. И таких счетов несколько с разными настройками.

Настройки плана счетов должны быть идентичны.
Выбрать одну базу как основную, вторую загружать, устанавливая данные по первой.
3. Docaru 1 03.02.22 15:11 Сейчас в теме
(2)если я поменяю в источнике вид сбконто, то данные потеряются. это самый простой способ, понимаю. Но мы же не ищем легких путей )
4. uriah 18 03.02.22 15:16 Сейчас в теме
(3)
если я поменяю в источнике вид сбконто, то данные потеряются. это самый простой способ, понимаю. Но мы же не ищем легких путей )

Не менять данные в источнике, а устанавливать при загрузке в приемнике.
5. nomad_irk 76 03.02.22 15:17 Сейчас в теме
(4).....и тем самым превратить базу-приемник в кашу? :)
7. uriah 18 03.02.22 15:22 Сейчас в теме
(5)
и тем самым превратить базу-приемник в кашу? :)

Тогда нужно готовить базу источник, приводить в соответствие с приемником.
9. nomad_irk 76 03.02.22 15:25 Сейчас в теме
(7)тут уже должна быть "битва двух якодзун", в том плане какая база(источник или приемник) должна подстроиться.
в любом случае, одно из субконто при передаче потеряется, т.к. не соответствует по типу.
6. Docaru 1 03.02.22 15:22 Сейчас в теме
вот пример ошибки. Какого ражна он пытается записать субконто Продукция, если я не прописывал для этого документа правил менять ИмяПКОВидСубконто!? Везде по умолчанию стоит в ПКО ВидыСубконтоХозрасчетные
Прикрепленные файлы:
8. nomad_irk 76 03.02.22 15:23 Сейчас в теме
(6)необходимо в базе приемнике проверять тип субконто при загрузке и установке. Если соответствует принятому типу, то устанавливать.

Либо база источник должна "подстроится" под базу-приемник.
Docaru; uriah; +2 Ответить
10. Docaru 1 03.02.22 15:26 Сейчас в теме
(8)идея интересная. это можно было бы сделать универсально для всех документов. Есть вариант такого исполнения?
11. nomad_irk 76 03.02.22 15:31 Сейчас в теме
(10)При загрузке данных, глобальным обработчиком формируете соответствие субконто счетам и храните в глобальных переменных.
При загрузке самих данных проверяете на соответствие типу.

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


Текст:

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

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

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

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

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

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

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

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

Для Каждого ТекТЧ ИЗ МассивТЧ Цикл
	Для Каждого Строка ИЗ Объект[ТекТЧ] Цикл
		АналитикаСтруктура = Новый Структура;
		Для Каждого ТекВид ИЗ ВидыАналитики Цикл
			Для Каждого ВидУчета Из ВидыУчета Цикл
				СоответствиеСубконто = Параметры["СоответствияСубконто" + ВидУчета].Получить(Строка["Счет" + ТекВид + ВидУчета]);
				Если СоответствиеСубконто = Неопределено Тогда
					Продолжить;
				КонецЕсли;
				Для Сч = 1 ПО 3 Цикл				
					Если ЗначениеЗаполнено(Строка["Субконто" + ТекВид + Сч]) Тогда
						НомерСубконто = СоответствиеСубконто.Получить(ТипЗнч(Строка["Субконто" + ТекВид + Сч]));
						Если НЕ НомерСубконто = Неопределено Тогда
							ЗначениеСубконто = Строка["Субконто" + ТекВид + ВидУчета + Сч];
							Если ЗначениеСубконто = Неопределено Тогда
								ОписаниеТипов = Новый ОписаниеТипов(ТипЗнч(Строка["Субконто" + ТекВид + Сч]));
								ЗначениеСубконто = ОписаниеТипов.ПривестиЗначение(ЗначениеСубконто);
							КонецЕсли;
							АналитикаСтруктура.Вставить("Субконто" + ТекВид + ВидУчета + НомерСубконто, ЗначениеСубконто);
						КонецЕсли;
					Иначе
						НомерСубконто = СоответствиеСубконто.Получить(Тип("СправочникСсылка.ПодразделенияОрганизаций"));
						Если НЕ НомерСубконто = Неопределено И НомерСубконто = Сч Тогда
							АналитикаСтруктура.Вставить("Субконто" + ТекВид + ВидУчета + Сч, КЦ);
						КонецЕсли;
					КонецЕсли;
				КонецЦикла;		
				
				НомерСубконто = СоответствиеСубконто.Получить(Тип("СправочникСсылка.ПодразделенияОрганизаций"));
				Если (ТипЗнч(Строка["Счет" + ТекВид + ВидУчета]) = Тип("ПланСчетовСсылка.Хозрасчетный") И НЕ Строка["Счет" + ТекВид + ВидУчета].ПринадлежитЭлементу(Счет68)) И НЕ НомерСубконто = Неопределено Тогда
					Если ЗначениеЗаполнено(Строка["Подразделение" + ТекВид]) Тогда
						АналитикаСтруктура.Вставить("Субконто" + ТекВид + ВидУчета + НомерСубконто, Строка["Подразделение" + ТекВид]);
					Иначе
						АналитикаСтруктура.Вставить("Субконто" + ТекВид + ВидУчета + НомерСубконто, КЦ);
					КонецЕсли;
				//Иначе
				//	АналитикаСтруктура.Вставить("Субконто" + ТекВид + ВидУчета + Сч);
				КонецЕсли;					
				
				//Если ТекВид = "Кт" И (ТипЗнч(Строка["Счет" + ТекВид + ВидУчета]) = Тип("ПланСчетовСсылка.Хозрасчетный") И НЕ Строка["Счет" + ТекВид + ВидУчета].ПринадлежитЭлементу(Счет68)) Тогда
				//	НомерСубконто = СоответствиеСубконто.Получить(Тип("СправочникСсылка.ПодразделенияОрганизаций"));
				//	Если НЕ НомерСубконто = Неопределено Тогда
				//		Если ЗначениеЗаполнено(Строка.ПодразделениеКт) Тогда
				//			АналитикаСтруктура.Вставить("Субконто" + ТекВид + ВидУчета + НомерСубконто, Строка.ПодразделениеКт);
				//		Иначе
				//			АналитикаСтруктура.Вставить("Субконто" + ТекВид + ВидУчета + НомерСубконто, КЦ);
				//		КонецЕсли;
				//	КонецЕсли;
				//КонецЕсли;
				
				Если ТипЗнч(Строка["Счет" + ТекВид + ВидУчета]) = Тип("ПланСчетовСсылка.Хозрасчетный") И Строка["Счет" + ТекВид + ВидУчета].ПринадлежитЭлементу(Счет68) Тогда
					НомерСубконто = СоответствиеСубконто.Получить(Тип("СправочникСсылка.Организации"));
					Если НЕ НомерСубконто = Неопределено Тогда
						АналитикаСтруктура.Вставить("Субконто" + ТекВид + ВидУчета + НомерСубконто, ПустаяОрганизация);
					КонецЕсли;
				КонецЕсли;
			КонецЦикла;
		КонецЦикла;
		ЗаполнитьЗначенияСвойств(Строка, АналитикаСтруктура);
	КонецЦикла;
КонецЦикла;
Показать
Прикрепленные файлы:
12. Docaru 1 03.02.22 15:49 Сейчас в теме
(11)прикольно. надо подумать. В моем варианте есть еще один большой недостаток - база хоть и подставляет значение, но там по факту получается пустая ссылка. Может проще тогда призагрузке движений по хозрасчетному делать "попытку", потом документы все равно придется все перепроводить. Знаете куда попытку воткнуть лучше? Останется проблема только с ручными корректировками
13. nomad_irk 76 03.02.22 16:33 Сейчас в теме
(12)Через попытку - не получится(либо придется лезть в дебри обработки УниверсальныйОбменДаннымиXML и там разбираться, куда втыкать эту самую попытку), потому что при выгрузке ничего не известно про приемник, а в приемнике - ничего не известно про входящие данные, пока эти данные не "олицетворятся".

Проверка на тип субконто в уже загруженном объекте нужна по большей части для того, чтобы оставить субконто не совпадающего типа пустыми, либо когда типы совпадают, но порядок - разный(в источнике, скажем, 2-ое субконто, а в приемнике - 3-е)
14. Docaru 1 03.02.22 16:49 Сейчас в теме
(13)тут порядок врооде не нарушен. но еще на одни грабли в итоге наткнулся - в базе приемнике есть НЕпредопределнный вид субконто. Мой вариант послал меня нафиг. буду изучать ваш. спасибо
15. Docaru 1 03.02.22 17:10 Сейчас в теме
(13)не совсем понял по вашему коду где происходит подстановка "нужного" субконто. ткните плиз пальцем
16. nomad_irk 76 03.02.22 17:36 Сейчас в теме
(15)
..........
СоответствиеСубконто = Параметры["СоответствияСубконто" + ВидУчета].Получить(Строка["Счет" + ТекВид + ВидУчета]);
                Если СоответствиеСубконто = Неопределено Тогда
                    Продолжить;
                КонецЕсли;
                Для Сч = 1 ПО 3 Цикл
........
Показать


Для вашего случая, возможно придется несколько адаптировать, у меня не было ситуации, когда типы субконто не совпадали.
17. Docaru 1 07.02.22 16:37 Сейчас в теме
в общем, если кому интересно, решил проблему следующим образом: в КС Субкотно ДТ/КТ ПКО движений Хозрасчетный ПриВыгрузке написал следующее
Если ОбъектКоллекции.СчетДТ.Код = "26" Тогда 

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

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

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

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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот