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

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

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

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

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

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

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

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


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


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

 

Добавлено 09.11.15:

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

 

Вариант 2:

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

 

—————————————————————————————————————————————————————

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

 

21 Comments

  1. kit

    Как пример задания конкретного значения в приёмнике имеет право на существование. А вообще, разве нельзя синхронизировать эти справочники переносом данных из БП 3.0 в ЗУП 2.5?

    Reply
  2. perepetulichka

    (1) kit, можно конечно 🙂

    Но политика нашей организации такова, что Оценочные обязательства и резервы в системе ЗУП давно утверждены и централизованы. Центральный аппарат этим пользуется, им вполне хватает. А регионы только переходят на ЗУП (РИБ), причем в каждой отдельной системе проводки формируют по-разному, да еще и в разные Бухгалтерии (у кого-то 7-ка, у кого-то Бухгалтерия 8.2, у избранных — 8.3), и бухгалтерия требует, чтобы «было как раньше» до перехода.

    В общем, они хотят, чтобы справочники в ЗУПе в ЦА и регионах совпадали, так что мы пока не можем из всех бухгалтерий синхронизировать справочники.

    Возможно, когда Бухгалтерия так же станет общей, сделаем синхронизацию.

    Reply
  3. Oleg_nsk

    Аналогичную задачу решал добавлением параметра объекта в который записывал код, а свойство выводил в «отказ = истина». При загрузке объекта, если свойство не задано, а параметр существует — выполнял поиск элемента справочника по значению параметра.

    Reply
  4. K_A_O

    А еще можно написать Выражение=…

    Выполнится на стороне приемника

    Reply
  5. karapuzzzz

    Ради одного элемента такое делать (создавать ПКО) нет необходимости.

    Самый идеальный вариант это сделать элементы предопределенными и синхронизировать по значению. Использовать в коде конструкции с проверками кода или наименования элементов очень и очень плохое занятие.

    Другой вариант (раз уж связываемся с кодом или наименованием) это передавать наименование значения реквизита как строку через параметр. И уже после загрузки данных анализировать значение параметра и в зависимости от него подставлять необходимое значение в реквизит.

    Reply
  6. olbu

    Сам с аналогичным заданием «мучился», все же КД — «темная лошадка», или просто я «не умею ее готовить»…

    Reply
  7. pas86

    Всем привет. А может кто подскажет?

    Есть у меня Реквизит в табличной части Источника, но его нет в Табличной части Приемника. Как правильно его передать через параметр?

    Источник это реквизит СубконтоНУ, тип справочник ФизЛицо.

    Приемник должен быть СубконтоБУ и тип справочник Контрагент(Поиск по наименованиею). Но НЕ во всех местах. Где-то в СубконтоБУ, по определённому мной условию, должно остаться физ.лицо из реквизита Источника СубконтоБУ.

    Reply
  8. perepetulichka

    (7) pas86, возможно стоит пойти путём произвольного алгоритма?

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

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

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

    У тебя ведь для каждого счета заданы свои субконто. Вот в зависимости от этого и можно сформировать полученную таблицу ВыборкиДанных.

    Reply
  9. N_s_s

    Добрый день, подскажите, как мне можно перенести элемент из источника в приемник, если в источнике элемент непосредственно не задан, определяется так:

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

    Показать

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

    Если Источник.Услуга = «Да» Тогда
    Значение = «Товар»;
    Иначе
    Значение = «Услуга»
    КонецЕсли;

    Но вот как проанализировать при загрузке не пойму.

    Reply
  10. perepetulichka

    Значение в данном случае немного не то.

    Пример использования «Значение»: у вас есть справочник «Организации», у которого и Коды и Наименование в двух разных системах по одной организации отличаются, тогда вы можете снять поиск с Кода, а в Наименование вписываете Значение = «ООО Ромашка»; (то Наименование, которое есть в базе-приемнике). И тогда при загрузке система найдет организацию с наименованием «ООО Ромашка».

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

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

    Пример:

    Форма = Объект.Ссылка.ПолучитьФорму(«ФормаДокумента»);

    Если Объект.Номенклатура.Услуга Тогда

    ЭлементыФормы.ВидНоменклатуры.СписокВыбора.Добавить(«Товар»);

    Иначе

    ЭлементыФормы.ВидНоменклатуры.СписокВыбора.Добавить(«Услуга»);

    КонецЕсли;

    Reply
  11. N_s_s

    Что то пошло не так:

    Ошибка при вызове метода контекста (ПолучитьФорму): Элемент не выбран!

    Reply
  12. perepetulichka

    (11)

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

    Проверила в ЗУПе (обычные формы) по документу «Начисление по больничному листу», у нас на форме два реквизита: ПервыйГодРасчета, ВторойГодРасчета.

    Всё норм записалось.





    Reply
  14. N_s_s

    ОписаниеОшибки = Ошибка при вызове метода контекста (ПолучитьФорму): Недопустимое значение параметра (параметр номер ‘1’)

    теперь вот так.. не понимаю сути того что пытаюсь сделать. Что в данном случае объект? источник?

    Reply
  15. perepetulichka

    (14) у вас это вообще документ? Возможно у вас справочник? …тогда получайте форму справочника («ФормаЭлемента»).

    Я привела для вас пример, на основании которого подстройте свой код.

    Объект в данном случае — Объект.

    Так же вы можете открыть файл выгрузки и ознакомиться с ним.

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

    Ниже приведен кусок из моего xml файла:

    <ПослеЗагрузки>Форма = Объект.ПолучитьФорму(«ФормаДокумента»);
    Форма.ЭлементыФормы.ПервыйГодРасчета.Значение = 2040;
    Форма.ЭлементыФормы.ВторойГодРасчета.Значение = 2060;
    РаботаСДиалогамиЗК.ЗаписатьГодыРасчетаСреднего2011(Объект, Форма);</ПослеЗагрузки>
    Reply
  16. perepetulichka

    (14)

    Что в данном случае объект?

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

    ДокОбъект = СсылкаНаДок.ПолучитьОбъект();

    Все, что вы хотели бы сделать с объектом, например из внешней обработки, вы можете вписать в событие «После загрузки».

    Reply
  17. N_s_s

    Попытался сам разобраться, но не очень получается. Давайте я ещё раз обрисую ситуацию.

    У меня есть база источник, в ней у меня непосредственно нет видов номенклатуры, но есть элемент у справочника номенклатура «Услуга», если он установлен значит выгружаемый элемент услуга, если не установлен значит товар.

    Есть база приемник, в ней у справочника номенклатура есть элемент вид номенклатуры, мне нужно каким то образом объяснить базе приемнику какой вид номенклатуры должен стать у загружаемого элемента.

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

    Если НЕ Объект.ЭтоГруппа Тогда
    Если Услуга Тогда
    Объект.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоКоду(«000000002»);
    Иначе
    Объект.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоКоду(«000000001»); ;
    КонецЕсли;
    КонецЕсли; 

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

    или может мне при выгрузке как то присвоить можно значение

    Reply
  18. perepetulichka

    (17)

    Если НЕ Объект.ЭтоГруппа Тогда
    Если Объект.Номенклатура.Услуга Тогда
    Объект.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоКоду(«000000002»);
    Иначе
    Объект.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоКоду(«000000001»);    ;
    КонецЕсли;
    КонецЕсли;
    Reply
  19. perepetulichka

    Или сразу в конвертации свойств Документа у ВидНоменклатуры укажите:

    Если ОбъектКоллекции.Номенклатура.Услуга Тогда

    Значение = «000000002»;

    Иначе

    Значение = «000000001»;

    КонецЕсли;

    Источник = «»;

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

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

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

    Значение = Источник;

    Свойство Наименование — отключите!

    Reply
  20. avz_1C

    Спасибо.

    Reply
  21. allo4kapower

    Спасите пожалуйста)))

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

    Я так понимаю мне нужно написать код в ПКС, но что писать вообще не пойму.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *