Задать в Приемнике своё значение, которого нет в Источнике. Конвертация данных 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 не будет опубликован. Обязательные поля помечены *