Конвертация данных передача данных в параметр
Как передать структуру в параметр. Конвертация данных
Описание
В данной статье рассмотрен пример передачи данных из табличной части документа в параметр.
Другое в 1С
Вариант 1
1. Добавить свойство. В правилах конвертации свойства, в обработчике «Перед выгрузкой» прописать свой алгоритм получения данных:
Вместо соответствия вы можете использовать, например, структуру или массив.
2. Данные из параметра можно получить следующим образом:
Вариант 2
1. В свойствах конвертации, в обработчике «Перед выгрузкой данных» инициализируем параметр:
2. Заполним нужный параметр в процессе выгрузки:
3. Передадим параметр в приемник. В обработчике «После выгрузки данных»:
4. После загрузки данных необходимо получить и обработать параметр:
1с конвертация данных передавать данные в параметр
Как мы уже знаем, правила конвертации свойств используются для сопоставления реквизитов обменивающихся объектов. Естественно, что в правиле конвертации задаются реквизит из объекта источника и объекта приемника.
Кроме того, для ссылочных реквизитов можно указать правило конвертации объектов, которое необходимо применить для переноса значения данного реквизита.
Поиск объекта при загрузке по данному свойству — флаг определяющий нужно ли по данному свойству производить поиск объектов в информационной базе приемнике. Если сразу у нескольких реквизитов установлено свойство поиска данных, то условия поиска объединяются по «И». В этом случае правило поиска звучит следующим образом: Найти объект у которых все реквизиты поиска совпадают с источником. (ВНИМАНИЕ. Поиск по уникальному идентификатору, который может быть установлен у правила конвертации объектов более приоритетный, то есть если он установлен то поиск будет выполнен по этому идентификатору).
Отключить обработку данного правила — флаг, позволяет отключить обработку данного свойства, не удаляя его из правил конвертации объектов.
Не замещать значение данного свойства у существующих объектов ИБ — флаг, позволяет отключить обработку данного для объектов информационной базы приемника, которые были найдены по уникальному идентификатору или по полям поиска.
Автоматически приводить значение к длине приемника — флаг, позволяет включить автоматическое приведение Номера или Кода справочника соответствующему значению в приемнике по длине. При этом префиксы сохраняются, а числовые части преобразуются под длину поля в приемнике.
ТОЛЬКО ДЛЯ ОБМЕНА V8 — V8
Функционал, позволяющий передавать дополнительные параметры в информационную базу приемник из источника.
Передавать данные в приемник — флаг определяет куда будут помещены данные при загрузке. Непосредственно в найденный для изменения объект.
Передавать данные в параметр — флаг определяет куда будут помещены данные при загрузке. В отдельное соответствие для данного объекта, но не в сам объект. Этот подход удобен когда нужно передать какое либо значение в приемник, но нет реквизита куда нужно его поместить. Впоследствии анализируя дополнительные параметры можно изменить логику заполнения объекта приемника. В правилах необходимо указать имя параметра куда нужно поместить данные. Для табличных частей и наборов движений для каждой строки формируется отдельная структура в которой хранится информация.
Доступ к этим данным возможен в событии правила конвертации объекта «После загрузки». Например, так:
Выгружать элементы группы через промежуточный файл — флаг определяет как выгружать объекты данного типа, через промежуточный файл (экономично с точки зрения оперативной памяти) или напрямую через память (оптимально по скорости, но при больших объемах передаваемых данных оперативная память может закончится).
На закладке «Дополнительно» можно редактировать вхождение правила в определенную группу, а так же его описание. Наименование правила формируется автоматически и недоступно для изменения.
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Подписывайтесь и получайте новые статьи и обработки на почту (не чаще 1 раза в неделю). |
Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Нажмите одну из кнопок, чтобы поделиться:
Если установлен флажок При загрузке, то к параметру можно обращаться на стороне загрузки в приемник. Однако такая настройка не означает, что значение параметра будет передано из источника в приемник. Для передачи значения установим флажок Передавать при выгрузке и, при необходимости, укажем правило конвертации значения параметра. Запись в файл обмена передаваемого значения параметра происходит в начале пронесса выгрузки. Поэтому передать из источника в приемник можно только параметры, значение которых установлено в диалоге обработки выгрузки. Передача параметра из источника в приемник доступна ТОЛЬКО при обмене между информационными базами на платформе 1С2Предприятия 8.
При помощи флажка «Передавать параметр при выгрузке» можно передавать только те параметры, которые редактируются в диалоге при выгрузке данных. Если же нужно передать параметр, которые в этом диалоге не присутствует, то нужно вызвать процедуру:
Процедура ПередатьОдинПараметрВПриемник(Имя, ИсходноеЗначениеПараметра, ПравилоКонвертации = «») Экспорт
Иногда требуется передать параметр для строки табличной части в выгрузке конвертации.
Например, такая задача может возникнуть если одна из конфигураций была изменена(добавлен реквизит в табличную часть). В моем случае это конфигурация-приемник. В табличную часть «Товары» документа «Отчет о розничных продажах», конфигурации «Управление торговлей» 10.3 добавлен реквизит «Консультант» типа «Справочник.ФизическиеЛица». В него надо передавать значение реквизита «Продавец» из табличной части «Товары», из конфигурации «Розница» 2.х.
Задачу можно решить, например, обновлением метаданных конфигурации-приемника, но быстрее, в данном случае будет передать это значение через параметр.
В табличной части «Товары» ПКО «Отчет о розничных продажах» создаем новый параметр:
Далее прописываем в обработчик «ПослеЗагрузки» ПКО «Отчет о розничных продажах» следующий код:
Конвертация данных передача данных в параметр
Как мы уже знаем, правила конвертации свойств используются для сопоставления реквизитов обменивающихся объектов. Естественно, что в правиле конвертации задаются реквизит из объекта источника и объекта приемника.
Кроме того, для ссылочных реквизитов можно указать правило конвертации объектов, которое необходимо применить для переноса значения данного реквизита.
Функционал, позволяющий передавать дополнительные параметры в информационную базу приемник из источника.
Доступ к этим данным возможен в событии правила конвертации объекта «После загрузки». Например, так:
Выгружать элементы группы через промежуточный файл — флаг определяет как выгружать объекты данного типа, через промежуточный файл (экономично с точки зрения оперативной памяти) или напрямую через память (оптимально по скорости, но при больших объемах передаваемых данных оперативная память может закончится).
На закладке «Дополнительно» можно редактировать вхождение правила в определенную группу, а так же его описание. Наименование правила формируется автоматически и недоступно для изменения.
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Подписывайтесь и получайте новые статьи и обработки на почту (не чаще 1 раза в неделю). |
Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Нажмите одну из кнопок, чтобы поделиться:
Конвертация данных 2.0 Передача произвольных данных (например, ТаблицаЗначений)
Существуют правила обмена между двумя различными конфигурациями 8-ки. Обмен происходит не однократно.
Задача: нужно во время выгрузки сформировать некую таблицу значений, поместить ее в файл обмена и на приемнике ее достать и обработать. Для упрощения: таблица не содержит ссылочных данных.
В каких событиях в КД описывать алгоритмы формирования и обработки данной таблицы? Где и как ее выгрузит ьв файл обмена и загрузить из него? 🙂
Делается это следующим образом (по памяти):
Создаем новое ПКС. В ПКС устанавливаем переключатель как: передать как параметр, задаем имя параметра.
В обработчике события ПриВыгрузке запихиваем то что нам надо, типа:
Значение = МояТаблицаЗначений;
// т.к. это дело сериализируется, должно работать
после уже в обработчике события ПКО «ПослеЗагрузки» (счаз под рукой нет ковертации, вечером дома посмотрю), получаем параметр из входящих параметров и обрабатываем его уже в приемнике. где то так.
(7) Книжечку уже три дня читаю, ковыряюсь 🙂 ПКО с пустым источником создать можно, но у меня и приемник неизвестен (хотя можно указать любой). Интересный вариант, тогда вопрос в каком обработчике формировать ВходящиеДанные для ПКС, не могу никак разобраться.. 🙁
(8) Через них сейчас пробую. Там есть нюансы: Чтобы параметр передавался, нужно также отметить галочку «Диалог» (форма элемента справочника Конвертации, вкладка параметры) и он будет доступен для интерактивного редактирования пользователя (а это не очень красиво, этого не хочется, хотя это ни на что не влияет функционально). Его все равно инициализируешь перед выгрузкой данных. У меня он почему-то не попадает в файл обмена.. отлаживаю..
Предлагали вариант создавать дополнительные узлы в файле после выгрузки данных. Но не понятно, где их потом подбирать при загрузке.
Могу ли я в по этому правило обратитться к элементам структуры СтруктураВхДанных?
Можно передать при желании свойства СтруктураВхДанных в параметры (когда реквизитом-приемником является не реквизит, а параметр)
Если в самом ПКС присваивать значение, то так:
Если из другого места, то это может быть совершенно по другому. Можете скрины привести, если описывать долго
В событии «После обработки»
Если Параметры.ВыгружатьФактическийРасходГСМ Тогда
мКоммент = «Выгрузка из УАТ. Фактический расход по ПЛ»;
Иначе
мКоммент = «Выгрузка из УАТ. Нормативный расход по ПЛ»;
КонецЕсли;
ВыборкаРасход = ВыборкаОрг.Выбрать();
Пока ВыборкаРасход.Следующий() Цикл
Если ВыборкаРасход.Количество = 0 Тогда
Продолжить;
КонецЕсли;
НовСтрока = ТабРасхода.Добавить();
НовСтрока.Номенклатура = ВыборкаРасход.ГСМ;
НовСтрока.Количество = ВыборкаРасход.Количество;
КонецЦикла;
Если ТабРасхода.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
Если Параметры.ВыгружатьФактическийРасходГСМ Тогда
мКоммент = «Выгрузка из УАТ. Фактический расход по ПЛ»;
Иначе
мКоммент = «Выгрузка из УАТ. Нормативный расход по ПЛ»;
КонецЕсли;
ВыборкаРасход = ВыборкаТС.Выбрать();
Пока ВыборкаРасход.Следующий() Цикл
Если ВыборкаРасход.Количество = 0 Тогда
Продолжить;
КонецЕсли;
НовСтрока = ТабРасхода.Добавить();
НовСтрока.Номенклатура = ВыборкаРасход.ГСМ;
НовСтрока.Количество = ВыборкаРасход.Количество;
КонецЦикла;
Сообщить(«Создаем путевой лист:1» );
Если ТабРасхода.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
Сообщить(«Создаем путевой лист:2» );
Если Параметры.ВыгружатьФактРасходВСписание тогда
Сообщить(«Создаем путевой лист:3» );
СтруктураВхДанных.Вставить(«Товары»,ТабРасхода);
ВыгрузитьПоПравилу(,,СтруктураВхДанных,,»ПЛ_В_Списание_ЗаПериод_НЕИспВВыгДанных»);
Иначе
Сообщить(«Создаем путевой лист:4» );
СтруктураВхДанных.Вставить(«Материалы»,ТабРасхода);
ВыгрузитьПоПравилу(,,СтруктураВхДанных,,»ПЛ_В_ТребованиеНакладная_ЗаПериод_НЕИспВВыгДанных»);
КонецЕсли;
КонецЦикла; // ТС
КонецЦикла; // Номенклатурная группа
КонецЦикла; // Подразделение
КонецЦикла; // Организация
КонецЕсли;