Задать в Приемнике своё значение, которого нет в Источнике. Конвертация данных 1С

Опубликовал Oxana Coffeeholic (perepetulichka) в раздел Обмен - Перенос данных из 1C8 в 1C8

Рассмотрим на примере обмена ЗУП 2.5 - Бухгалтерия 3.0.
В Источнике и в Приемнике есть справочник "Резервы", но в Приемнике есть элемент "Резерв на взносы в Федеральный ФОМС" с кодом "000000004", а в Источнике такого элемента нет.

Суть задачи: Нужно, чтобы при переносе документа "Отражение зарплаты в регламентированном учете" СубконтоДт1 (тип СправочникСсылка.Резервы) имело другое Значение, то есть значение не из Источника.

Рассмотрим картинку:

Нужно, чтобы при условии, когда СчетДт="96" и СчетКт = "69.03.1" тогда СубконтоДт было равно "Резерв на взносы в Федеральный ФОМС". (А не "На оплату предстоящих отпусков", как видно на картинке).

Уточнение: этого не видно на картинке, но на самом деле под СубконтоДт подразумевается СубконтоДт1, а значение "Резерв на взносы в Федеральный ФОМС" - это значение элемента из Приемника.

Ниже на картинке я покажу, как выглядят эти справочники в Источнике и в Приемнике.

Надеюсь, что пояснила понятно.


Теперь в Конвертации данных:


Итог выгрузки:

 

Добавлено 09.11.15:

От обилия красного прямо рябит в глазах. Извините, я не специально!

 

Вариант 2:

Еще один способ. Код останется со значением из источника, если у вас подобная ситуация, обработку правила можно просто отключить.

 

--------------------------------------------------------------------------------------------------------------------------------------------------------------

Запрет выгрузки "Групп" справочников в конвертации данных.

 

См. также

Комментарии
1. Александр Лагунов (kit) 61 28.10.15 18:40 Сейчас в теме
Как пример задания конкретного значения в приёмнике имеет право на существование. А вообще, разве нельзя синхронизировать эти справочники переносом данных из БП 3.0 в ЗУП 2.5?
2. Oxana Coffeeholic (perepetulichka) 271 28.10.15 19:00 Сейчас в теме
(1) kit, можно конечно :)
Но политика нашей организации такова, что Оценочные обязательства и резервы в системе ЗУП давно утверждены и централизованы. Центральный аппарат этим пользуется, им вполне хватает. А регионы только переходят на ЗУП (РИБ), причем в каждой отдельной системе проводки формируют по-разному, да еще и в разные Бухгалтерии (у кого-то 7-ка, у кого-то Бухгалтерия 8.2, у избранных - 8.3), и бухгалтерия требует, чтобы "было как раньше" до перехода.
В общем, они хотят, чтобы справочники в ЗУПе в ЦА и регионах совпадали, так что мы пока не можем из всех бухгалтерий синхронизировать справочники.
Возможно, когда Бухгалтерия так же станет общей, сделаем синхронизацию.
3. Олег Сорокин (Oleg_nsk) 135 29.10.15 06:50 Сейчас в теме
Аналогичную задачу решал добавлением параметра объекта в который записывал код, а свойство выводил в "отказ = истина". При загрузке объекта, если свойство не задано, а параметр существует - выполнял поиск элемента справочника по значению параметра.
4. Андрей Крутских (K_A_O) 481 30.10.15 12:13 Сейчас в теме
А еще можно написать Выражение=...
Выполнится на стороне приемника
5. Кирилл Бондаренко (karapuzzzz) 57 04.11.15 12:18 Сейчас в теме
Ради одного элемента такое делать (создавать ПКО) нет необходимости.
Самый идеальный вариант это сделать элементы предопределенными и синхронизировать по значению. Использовать в коде конструкции с проверками кода или наименования элементов очень и очень плохое занятие.
Другой вариант (раз уж связываемся с кодом или наименованием) это передавать наименование значения реквизита как строку через параметр. И уже после загрузки данных анализировать значение параметра и в зависимости от него подставлять необходимое значение в реквизит.
6. Олег (olbu) 11.12.15 09:46 Сейчас в теме
Сам с аналогичным заданием "мучился", все же КД - "темная лошадка", или просто я "не умею ее готовить"...
7. Александр Алексеев (pas86) 20.07.16 06:33 Сейчас в теме
Всем привет. А может кто подскажет?
Есть у меня Реквизит в табличной части Источника, но его нет в Табличной части Приемника. Как правильно его передать через параметр?
Источник это реквизит СубконтоНУ, тип справочник ФизЛицо.
Приемник должен быть СубконтоБУ и тип справочник Контрагент(Поиск по наименованиею). Но НЕ во всех местах. Где-то в СубконтоБУ, по определённому мной условию, должно остаться физ.лицо из реквизита Источника СубконтоБУ.
8. Oxana Coffeeholic (perepetulichka) 271 20.07.16 10:53 Сейчас в теме
(7) pas86, возможно стоит пойти путём произвольного алгоритма?

Делаешь выборку в источнике, обходишь её и в случае (пример):

Если Выборка.СчетДт = ПланыСчетов.Хозрасчетный.ОбщехозяйственныеРасходы Тогда


в твоей таблице значений для "СубконтоБУ" задаешь Выборка.Физлицо

У тебя ведь для каждого счета заданы свои субконто. Вот в зависимости от этого и можно сформировать полученную таблицу ВыборкиДанных.
9. Сергей Назаров (N_s_s) 31.01.17 16:05 Сейчас в теме
Добрый день, подскажите, как мне можно перенести элемент из источника в приемник, если в источнике элемент непосредственно не задан, определяется так:

	// Заполнить список выбора номенклатуры
	ЭлементыФормы.ВидНоменклатуры.СписокВыбора.Добавить("Товар");
	ЭлементыФормы.ВидНоменклатуры.СписокВыбора.Добавить("Услуга");
	// ДАЛИОНПРО – начало
	ЭлементыФормы.ВидНоменклатуры.СписокВыбора.Добавить("Комплект");
	ЭлементыФормы.ВидНоменклатуры.СписокВыбора.Добавить("Продукция");	
	// ДАЛИОНПРО – конец
	// ДалионУМ - начало
	Если Алкоголь ИЛИ Константы.УчитыватьАлкоголь.Получить() Тогда
		ЭлементыФормы.ВидНоменклатуры.СписокВыбора.Добавить("Алкоголь");
	КонецЕсли;
	
	Если Сертификат ИЛИ Константы.ИспользоватьПодарочныеСертификаты.Получить() Тогда
		ЭлементыФормы.ВидНоменклатуры.СписокВыбора.Добавить("Сертификат");
	КонецЕсли;
	
	Если ТабачныеИзделия Или Константы.ИспользоватьМеханизмМРЦДляSet10.Получить() Тогда
		ЭлементыФормы.ВидНоменклатуры.СписокВыбора.Добавить("Табак");
	КонецЕсли;
...Показать Скрыть


Меня интересуют только товар и услуги, для их выгрузки использую в обработке перед выгрузкой следующий код:

Если Источник.Услуга = "Да" Тогда
	Значение = "Товар";
Иначе 
	Значение = "Услуга"
КонецЕсли;
...Показать Скрыть


Но вот как проанализировать при загрузке не пойму.
10. Oxana Coffeeholic (perepetulichka) 271 31.01.17 21:06 Сейчас в теме
Значение в данном случае немного не то.
Пример использования "Значение": у вас есть справочник "Организации", у которого и Коды и Наименование в двух разных системах по одной организации отличаются, тогда вы можете снять поиск с Кода, а в Наименование вписываете Значение = "ООО Ромашка"; (то Наименование, которое есть в базе-приемнике). И тогда при загрузке система найдет организацию с наименованием "ООО Ромашка".

Насколько я понимаю, свойство ".Услуга" вы берете у какого-то реквизита, например "Номенклатура", которая выгружается.

Моё мнение, вам нужно в ПКО документа "После загрузки":
Пример:

Форма = Объект.Ссылка.ПолучитьФорму("ФормаДокумента");
Если Объект.Номенклатура.Услуга Тогда
ЭлементыФормы.ВидНоменклатуры.СписокВыбора.Добавить("Товар");
Иначе
ЭлементыФормы.ВидНоменклатуры.СписокВыбора.Добавить("Услуга");
КонецЕсли;

11. Сергей Назаров (N_s_s) 01.02.17 15:36 Сейчас в теме
Что то пошло не так:

Ошибка при вызове метода контекста (ПолучитьФорму): Элемент не выбран!
12. Oxana Coffeeholic (perepetulichka) 271 01.02.17 15:59 Сейчас в теме
(11)
Форма = Объект.ПолучитьФорму("ФормаДокумента");
Если Объект.Номенклатура.Услуга Тогда 
Форма.ЭлементыФормы.ВидНоменклатуры.СписокВыбора.Добавить("Товар"); 
Иначе 
Форма.ЭлементыФормы.ВидНоменклатуры.СписокВыбора.Добавить("Услуга"); 
КонецЕсли;
...Показать Скрыть
13. Oxana Coffeeholic (perepetulichka) 271 01.02.17 16:20 Сейчас в теме
Проверила в ЗУПе (обычные формы) по документу "Начисление по больничному листу", у нас на форме два реквизита: ПервыйГодРасчета, ВторойГодРасчета.
Всё норм записалось.



14. Сергей Назаров (N_s_s) 01.02.17 16:26 Сейчас в теме
ОписаниеОшибки = Ошибка при вызове метода контекста (ПолучитьФорму): Недопустимое значение параметра (параметр номер '1')

теперь вот так.. не понимаю сути того что пытаюсь сделать. Что в данном случае объект? источник?
15. Oxana Coffeeholic (perepetulichka) 271 01.02.17 16:42 Сейчас в теме
(14) у вас это вообще документ? Возможно у вас справочник? ...тогда получайте форму справочника ("ФормаЭлемента").
Я привела для вас пример, на основании которого подстройте свой код.
Объект в данном случае - Объект.

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

Ниже приведен кусок из моего xml файла:
<ПослеЗагрузки>Форма = Объект.ПолучитьФорму("ФормаДокумента");
Форма.ЭлементыФормы.ПервыйГодРасчета.Значение = 2040;
Форма.ЭлементыФормы.ВторойГодРасчета.Значение = 2060;
РаботаСДиалогамиЗК.ЗаписатьГодыРасчетаСреднего2011(Объект, Форма);</ПослеЗагрузки>
16. Oxana Coffeeholic (perepetulichka) 271 01.02.17 16:57 Сейчас в теме
(14)
Что в данном случае объект?


Ссылка - указатель, Объект - объект (мы с ним работаем, мы у него изменяем значения и тп), это как бы основы.
ДокОбъект = СсылкаНаДок.ПолучитьОбъект();


Все, что вы хотели бы сделать с объектом, например из внешней обработки, вы можете вписать в событие "После загрузки".
17. Сергей Назаров (N_s_s) 02.02.17 11:39 Сейчас в теме
Попытался сам разобраться, но не очень получается. Давайте я ещё раз обрисую ситуацию.
У меня есть база источник, в ней у меня непосредственно нет видов номенклатуры, но есть элемент у справочника номенклатура "Услуга", если он установлен значит выгружаемый элемент услуга, если не установлен значит товар.
Есть база приемник, в ней у справочника номенклатура есть элемент вид номенклатуры, мне нужно каким то образом объяснить базе приемнику какой вид номенклатуры должен стать у загружаемого элемента.
Посмотрел через отладку событие после загрузки, не вижу возможности там присвоить, точнее не присвоить а там провести анализ, ведь там у нас только объект.
Если НЕ Объект.ЭтоГруппа Тогда 
			Если Услуга Тогда 
				Объект.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоКоду("000000002");	
			Иначе 
				Объект.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоКоду("000000001");	; 
			КонецЕсли;
КонецЕсли; 
...Показать Скрыть

Что за анализ должен здесь быть, как мне понять какой там вид на базе источнике?

или может мне при выгрузке как то присвоить можно значение
18. Oxana Coffeeholic (perepetulichka) 271 02.02.17 14:38 Сейчас в теме
(17)
Если НЕ Объект.ЭтоГруппа Тогда 
            Если Объект.Номенклатура.Услуга Тогда 
                Объект.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоКоду("000000002");    
            Иначе 
                Объект.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоКоду("000000001");    ; 
            КонецЕсли;
КонецЕсли;
...Показать Скрыть
19. Oxana Coffeeholic (perepetulichka) 271 02.02.17 15:00 Сейчас в теме
Или сразу в конвертации свойств Документа у ВидНоменклатуры укажите:

Если ОбъектКоллекции.Номенклатура.Услуга Тогда
Значение = "000000002";
Иначе
Значение = "000000001";
КонецЕсли;

Источник = "";
ИмяПКО = "ВидНоменклатуры";

Далее создайте правило для справочника "ВидыНоменлатуры".

У свойства "Код" установите:

Значение = Источник;
Свойство Наименование - отключите!