07.10.20 — 12:53
Как передать строку в исходящие данные?!
Есть живой пример?
Пишу в ПКО документа:
Перед выгрузкой:
ВходящиеДанные = Новый Структура;
ВходящиеДанные.Вставить(«КодБК», «АХАХАХАХА»);
ИЛИ:
ИсходящиеДанные = Новый Структура;
ИсходящиеДанные .Вставить(«КодБК», «АХАХАХАХА»);
и в формируемом файле нет это строки «АХАХАХАХА» вообще. Каааак сделать то, что только не пробовал уже
1 — 07.10.20 — 13:06
Данные передаются по следующим правилам:
1. ПВД.ИсходящиеДанные -> ПКО.ВходящиеДанные
2. ПКО.ВходящиеДанные -> ПКС.ВходящиеДанные
3. ПКС.ИсходящиеДанные -> ПКО.ВходящиеДанные
2 — 07.10.20 — 13:07
Оно и не должно попадать в файл. Это для передачи между обработчиками при конвертации в источнике.
3 — 07.10.20 — 13:10
Вообще в типовой ситуации вся конвертация производится в источнике. В файл пишется только результат конвертации — готовый образ объектов-приемника для загрузки.
4 — 07.10.20 — 13:12
(2) «Оно и не должно попадать в файл.» ппц а как мне передать произвольную инфу?
В приемнике есть реквизит, которого нет в источнике. Но заполнить надо.
Для понимания например: Если в источнике в поле комментарий написано «Васька дурак» то в приемнике надо Реквизит1 = Справочники.Контрагенты.ВаськаДурак;
В источнике нет справочника контрагенты, в приемнике нет реквизита Комментарий.
Можно реализовать?
5 — 07.10.20 — 13:13
вот хочу куда то записать «Васька дурак», а потом уже ПРИ ЗАГРУЗКЕ это анализировать.
ПОтому что при выгрузке я даже не могу написать СПравочники.Контрагенты. Нет такого…
6 — 07.10.20 — 13:15
в ПКС «Передавать данные в параметр»
7 — 07.10.20 — 13:16
(4) С предопределенными вообще просто. ЕМНИП, оно при загрузке хавает текстовые значения для предопределенных. Для непредопределенных можно создать ПКО, которое будет искать нужные по коду.
Т.е. в ПКС для Реквизит1 пишешь в ПередВыгрузкой
Если Источник.Комментарий = «Васька дурак» Тогда
Значение = «ВаськаДурак»;
КонецЕсли;
8 — 07.10.20 — 13:21
(7) с Васькой это пример. Мне на самом деле в базе источнике надо искать справочник по реквизиту.
Т.е.
Справочники.ВидыНалоговИПлатежейВБюджет.НайтиПоРеквизиту(«КодБК», «Васька дурак»);
Это уже детали.
Я хочу хоть как-то передать текстовую строку, что бы ее анализировать при загрузке можно было.
(6) попробовал так, в файле все равно нет «Васька дурак»
9 — 07.10.20 — 13:21
Если (4) системный пример и надо кучу разных комментариев конвертить в контрагентов, то можно создать ПКО для контрагентов у которого на входе будет строка и просто назначить это ПКО в ПКС «Комментарий». КД очень гибкая, нужно только один раз разобраться и «вхрустнуть» мозги в ее логику.
10 — 07.10.20 — 13:22
(6) а нет вру, через параметр выгрузилось.. щас буду думать как прочитать этот параметр при загрузке
11 — 07.10.20 — 13:24
(8) > Я хочу хоть как-то передать текстовую строку, что бы ее анализировать при загрузке можно было.
Я понял, что ты хочешь. Но КД реализует другую логику — конвертация в источнике. Переть супротив — быть ССЗБ.
12 — 07.10.20 — 13:27
(8) > в базе источнике надо искать справочник по реквизиту
Просто создаешь ПКО для этого справочника, где нужный реквизит отмечаешь как поле поиска, на вход — строка, а в ПКС для этого реквизита пишешь Значение=Источник;
После этого просто назначаешь это ПКО во всех ПКС где надо и в этих ПКС пишешь Значение=<нужное значение>;
В итоге КД будет находить их сама штатно при загрузке плюс это будет переиспользуемое ПКО.
Быдло замкадное
13 — 07.10.20 — 13:28
Получилось через параметр, спасибо (6)
после загрузки объекта:
Объект.Налог = Справочники.ВидыНалоговИПлатежейВБюджет.НайтиПоРеквизиту(«КодБК», ПараметрыОбъекта.Получить(«КодБК»));
09.11.2015
Рассмотрим на примере обмена ЗУП 2.5 — Бухгалтерия 3.0.
В Источнике и в Приемнике есть справочник «Резервы», но в Приемнике есть элемент «Резерв на взносы в Федеральный ФОМС» с кодом «000000004», а в Источнике такого элемента нет.
Суть задачи: Нужно, чтобы при переносе документа «Отражение зарплаты в регламентированном учете» СубконтоДт1 (тип СправочникСсылка.Резервы) имело другое Значение, то есть значение не из Источника.
Рассмотрим картинку:
Нужно, чтобы при условии, когда СчетДт=»96″ и СчетКт = «69.03.1» тогда СубконтоДт было равно «Резерв на взносы в Федеральный ФОМС». (А не «На оплату предстоящих отпусков», как видно на картинке).
Уточнение: этого не видно на картинке, но на самом деле под СубконтоДт подразумевается СубконтоДт1, а значение «Резерв на взносы в Федеральный ФОМС» — это значение элемента из Приемника.
Ниже на картинке я покажу, как выглядят эти справочники в Источнике и в Приемнике.
Надеюсь, что пояснила понятно.
Теперь в Конвертации данных:
Итог выгрузки:
Добавлено 09.11.15:
От обилия красного прямо рябит в глазах. Извините, я не специально!
Вариант 2:
Еще один способ. Код останется со значением из источника, если у вас подобная ситуация, обработку правила можно просто отключить.
—————————————————————————————————————————————————————
Запрет выгрузки «Групп» справочников в конвертации данных.
Правила конвертации объектов | оглавление | Обработчики событий |
Автор учебника: Фирма «1С»
Как мы уже знаем, правила конвертации свойств используются для сопоставления реквизитов обменивающихся объектов. Естественно, что в правиле конвертации задаются реквизит из объекта источника и объекта приемника.
Кроме того, для ссылочных реквизитов можно указать правило конвертации объектов, которое необходимо применить для переноса значения данного реквизита.
Поиск объекта при загрузке по данному свойству — флаг определяющий нужно ли по данному свойству производить поиск объектов в информационной базе приемнике. Если сразу у нескольких реквизитов установлено свойство поиска данных, то условия поиска объединяются по «И». В этом случае правило поиска звучит следующим образом: Найти объект у которых все реквизиты поиска совпадают с источником. (ВНИМАНИЕ!!!! Поиск по уникальному идентификатору, который может быть установлен у правила конвертации объектов более приоритетный, то есть если он установлен то поиск будет выполнен по этому идентификатору).
Отключить обработку данного правила — флаг, позволяет отключить обработку данного свойства, не удаляя его из правил конвертации объектов.
Не замещать значение данного свойства у существующих объектов ИБ — флаг, позволяет отключить обработку данного для объектов информационной базы приемника, которые были найдены по уникальному идентификатору или по полям поиска.
Автоматически приводить значение к длине приемника — флаг, позволяет включить автоматическое приведение Номера или Кода справочника соответствующему значению в приемнике по длине. При этом префиксы сохраняются, а числовые части преобразуются под длину поля в приемнике.
ТОЛЬКО ДЛЯ ОБМЕНА V8 — V8
Функционал, позволяющий передавать дополнительные параметры в информационную базу приемник из источника.
Передавать данные в приемник — флаг определяет куда будут помещены данные при загрузке. Непосредственно в найденный для изменения объект.
Передавать данные в параметр — флаг определяет куда будут помещены данные при загрузке. В отдельное соответствие для данного объекта, но не в сам объект. Этот подход удобен когда нужно передать какое либо значение в приемник, но нет реквизита куда нужно его поместить. Впоследствии анализируя дополнительные параметры можно изменить логику заполнения объекта приемника. В правилах необходимо указать имя параметра куда нужно поместить данные. Для табличных частей и наборов движений для каждой строки формируется отдельная структура в которой хранится информация.
Доступ к этим данным возможен в событии правила конвертации объекта «После загрузки». Например, так:
Если ПараметрыОбъекта <> Неопределено тогда ИмяКонтрагента = ПараметрыОбъекта["ИмяКонтрагента"]; КонецЕсли; // Например, если нужен доступ к параметрам табличной части с именем "Товары" Если ПараметрыОбъекта <> Неопределено тогда ТаблицаПараметровТовары = ПараметрыОбъекта["ТоварыТабличнаяЧасть"]; Если ТаблицаПараметровТовары <> Неопределено Тогда Для Каждого СтрокаПараметров Из ТаблицаПараметровТовары Цикл ИмяНоменклатуры = СтрокаПараметров.ИмяНоменклатуры; КонецЦикла; КонецЕсли; КонецЕсли;
Выгружать элементы группы через промежуточный файл — флаг определяет как выгружать объекты данного типа, через промежуточный файл (экономично с точки зрения оперативной памяти) или напрямую через память (оптимально по скорости, но при больших объемах передаваемых данных оперативная память может закончится).
На закладке «Дополнительно» можно редактировать вхождение правила в определенную группу, а так же его описание. Наименование правила формируется автоматически и недоступно для изменения.
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Нажмите одну из кнопок, чтобы поделиться:
Правила конвертации объектов | оглавление | Обработчики событий |
Перенести реквизит ТЧ источника в реквизит приемника.
Автор VladimirMelnychenko, 04 ноя 2016, 14:02
0 Пользователей и 1 гость просматривают эту тему.
Добрый день.
Прошу помочь с решением одной проблемы.
Необходимо перенести платежные поручения (входящие/исходящие) из базы БУ в УНФ. Столкнулся с одной проблемой, в базе УНФ есть реквизит «СтатьяДДС» и в БУ есть данный реквизит, но вот проблема в том что в БУ данный реквизит («СтатьяДДС») присутствует еще и в табличной части «Расшифровка платежа», а в УНФ он один на весь документ. Нужно заполнить реквизит УНФ значением данного реквизита в первой строке табличной части «Расшифровка платежа».
Написал в модуле ПКО при выгрузке (код ниже), выдает ошибку «Значение не является значением объектного типа (Статья)», скажите пожалуйста как можно решить данную проблему?
Если Источник.СтатьяДвиженияДенежныхСредств.Пустая() = Истина Тогда
Приемник.Статья = Источник.РасшифровкаПлатежа[0].СтатьяДвиженияДенежныхСредств;
КонецЕсли;
Приемник: ДокументСсылка.ПоступлениеНаСчет
Добавлено: 04 ноя 2016, 17:26
Если Источник.СтатьяДвиженияДенежныхСредств.Пустая() Тогда
Значение = Источник.РасшифровкаПлатежа[0].СтатьяДвиженияДенежныхСредств;
КонецЕсли;
Так работает.
Если Источник.СтатьяДвиженияДенежныхСредств.Пустая() Тогда
Если Источник.РасшифровкаПлатежа.Количество() > 0 Тогда
Значение = Источник.РасшифровкаПлатежа[0].СтатьяДвиженияДенежныхСредств;
КонецЕсли;
Иначе
Значение = Источник.СтатьяДвиженияДенежныхСредств;
КонецЕсли;
Получил помощь — скажи СПАСИБО.
Разобрался сам — расскажи другим.
Доброе утро. Не сталкивался серьезно с конвертацией данных. Встретилась незнакомая задача: Конвертация производится между базами на платформе 1С 7.7. В объекте-приемнике у меня есть ряд реквизитов, которых нет в объекте-источнике (например, подразделение организации). При переносе эти данные, соответственно, не заполняются, что мешает проведению документа. Вопрос: как мне заполнить эти реквизиты? Какое событие сработает в 1С 7.7? Мне достаточно, если в приемнике сработает код типа:
вот и размести этот код в обработчике после загрузки объекта в приемник
Не срабатывает, даже «Сообщить(«!»);» не срабатывает. Вот как выглядит событие В справке написано, что это событие работает только для платформы 8.х
Делайте отдельной обработкой после загрузки или в той же конвертации в общем обработчике После загрузки данных
для 7.7 необходимо включить флажок «Выгружать модуль обработки выгрузки для платформы 7.7» и указать в какой файл выгружать этот модуль. после сохранения правил надо код этого файла вставить в обработку выгрузки данных их 7.7
этот код в 7.7 не скомпилируется. тогда уж Спр = создатьОбъект(«Справочник.Подразделения»); Спр.НайтиПоКоду(«00000001»); Объект.Подразделение = Спр.ТекущийЭлемент; но чтобы это работало, надо опять же выгрузить модуль обработки _загрузки_
(3, 4, 5) Большое вам спасибо. Получилось. Создал процедуру «после загрузки объекта», выгрузил тексты модулей, заменил модуль в обработке импорта. Работает.
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
В конфигурации 1С «Конвертация данных» не так просто передать данные из источника в приемник, если в источнике И приемнике эти данные не закреплены за каким либо реквизитом. Иными словами нельзя создать ПКС с пустыми полями «Источник» и «Приемник». Для того чтобы передать такие данные их необходимо непосредственно записать в файл обмена. Для этого в ПКО в обработчике «При выгрузке» прописываем примерно следующий код:
//запишем в файл обмена
ДопИнформация = СоздатьУзел(«ДопИнформация»);
УстановитьАтрибут(ДопИнформация, «Металл»,Металл);
УстановитьАтрибут(ДопИнформация, «Наполнение»,Наполнение);
ДобавитьПодчиненный(Приемник, ДопИнформация);
В файле обмена при выгрузке появится соответствующий узел
Теперь для того чтобы эти данные использовать, в ПКО того же самого объекта, в любом из обработчков:
- Поля поиска;
- Перед загрузкой;
- При загрузке;
пропишем примерно следующий код:
//проверим наличие доп свойств, если они
есть это продукция
Пока ФайлОбмена.Прочитать() Цикл
ИмяУзла = ФайлОбмена.ЛокальноеИмя;
ТипУзла = ФайлОбмена.ТипУзла;
Если ИмяУзла =
«ДопИнформация» И (ТипУзла = одТипУзлаXML_НачалоЭлемента) Тогда
Металл = одАтрибут(ФайлОбмена, одТипСтрока, «Металл»);
Наполнение = одАтрибут(ФайлОбмена, одТипСтрока,
«Наполнение»);
Харка = ОбрСоздания.вПолучитьПродукцию(Наименование,Металл,Наполнение);
Если ЗначениеЗаполнено(Харка) Тогда
СсылкаНаОбъект = Харка[ИмяСвойства];
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
На этом все.
Важно обратить внимание на процедуру одАтрибут.
Читает значение атрибута по имени из указанного объекта, приводит значение к указанному примитивному типу
Параметры:
- Объект — объект типа XMLЧтение, спозиционированный на начале элемента, атрибут которого требуется получить
- Тип — Значение типа Тип. Тип атрибута
- Имя — Строка. Имя атрибута
На чтение 5 мин. Просмотров 714 Опубликовано 15.12.2019
Как мы уже знаем, правила конвертации свойств используются для сопоставления реквизитов обменивающихся объектов. Естественно, что в правиле конвертации задаются реквизит из объекта источника и объекта приемника.
Кроме того, для ссылочных реквизитов можно указать правило конвертации объектов, которое необходимо применить для переноса значения данного реквизита.
Поиск объекта при загрузке по данному свойству — флаг определяющий нужно ли по данному свойству производить поиск объектов в информационной базе приемнике. Если сразу у нескольких реквизитов установлено свойство поиска данных, то условия поиска объединяются по «И». В этом случае правило поиска звучит следующим образом: Найти объект у которых все реквизиты поиска совпадают с источником. (ВНИМАНИЕ. Поиск по уникальному идентификатору, который может быть установлен у правила конвертации объектов более приоритетный, то есть если он установлен то поиск будет выполнен по этому идентификатору).
Отключить обработку данного правила — флаг, позволяет отключить обработку данного свойства, не удаляя его из правил конвертации объектов.
Не замещать значение данного свойства у существующих объектов ИБ — флаг, позволяет отключить обработку данного для объектов информационной базы приемника, которые были найдены по уникальному идентификатору или по полям поиска.
Автоматически приводить значение к длине приемника — флаг, позволяет включить автоматическое приведение Номера или Кода справочника соответствующему значению в приемнике по длине. При этом префиксы сохраняются, а числовые части преобразуются под длину поля в приемнике.
ТОЛЬКО ДЛЯ ОБМЕНА V8 — V8
Функционал, позволяющий передавать дополнительные параметры в информационную базу приемник из источника.
Передавать данные в приемник — флаг определяет куда будут помещены данные при загрузке. Непосредственно в найденный для изменения объект.
Передавать данные в параметр — флаг определяет куда будут помещены данные при загрузке. В отдельное соответствие для данного объекта, но не в сам объект. Этот подход удобен когда нужно передать какое либо значение в приемник, но нет реквизита куда нужно его поместить. Впоследствии анализируя дополнительные параметры можно изменить логику заполнения объекта приемника. В правилах необходимо указать имя параметра куда нужно поместить данные. Для табличных частей и наборов движений для каждой строки формируется отдельная структура в которой хранится информация.
Доступ к этим данным возможен в событии правила конвертации объекта «После загрузки». Например, так:
Выгружать элементы группы через промежуточный файл — флаг определяет как выгружать объекты данного типа, через промежуточный файл (экономично с точки зрения оперативной памяти) или напрямую через память (оптимально по скорости, но при больших объемах передаваемых данных оперативная память может закончится).
На закладке «Дополнительно» можно редактировать вхождение правила в определенную группу, а так же его описание. Наименование правила формируется автоматически и недоступно для изменения.
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Подписывайтесь и получайте новые статьи и обработки на почту (не чаще 1 раза в неделю).
Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Нажмите одну из кнопок, чтобы поделиться:
Если установлен флажок При загрузке, то к параметру можно обращаться на стороне загрузки в приемник. Однако такая настройка не означает, что значение параметра будет передано из источника в приемник. Для передачи значения установим флажок Передавать при выгрузке и, при необходимости, укажем правило конвертации значения параметра. Запись в файл обмена передаваемого значения параметра происходит в начале пронесса выгрузки. Поэтому передать из источника в приемник можно только параметры, значение которых установлено в диалоге обработки выгрузки. Передача параметра из источника в приемник доступна ТОЛЬКО при обмене между информационными базами на платформе 1С2Предприятия 8.
При помощи флажка «Передавать параметр при выгрузке» можно передавать только те параметры, которые редактируются в диалоге при выгрузке данных. Если же нужно передать параметр, которые в этом диалоге не присутствует, то нужно вызвать процедуру:
Процедура ПередатьОдинПараметрВПриемник(Имя, ИсходноеЗначениеПараметра, ПравилоКонвертации = «») Экспорт
Иногда требуется передать параметр для строки табличной части в выгрузке конвертации.
Например, такая задача может возникнуть если одна из конфигураций была изменена(добавлен реквизит в табличную часть). В моем случае это конфигурация-приемник. В табличную часть «Товары» документа «Отчет о розничных продажах», конфигурации «Управление торговлей» 10.3 добавлен реквизит «Консультант» типа «Справочник.ФизическиеЛица». В него надо передавать значение реквизита «Продавец» из табличной части «Товары», из конфигурации «Розница» 2.х.
Задачу можно решить, например, обновлением метаданных конфигурации-приемника, но быстрее, в данном случае будет передать это значение через параметр.
В табличной части «Товары» ПКО «Отчет о розничных продажах» создаем новый параметр:
Далее прописываем в обработчик «ПослеЗагрузки» ПКО «Отчет о розничных продажах» следующий код: