Подмена выгружаемого объекта
всем доброго дня.
есть задача - перенести справочник.Номенклатура, но не просто перенести, а с подвохом )
есть РегистрСведений, в котором одно измерение и один ресурс = оба - СправочникСсылка.Номенклатура.
Условие - при выгрузке Номенклатуры искать её в этом РегистреСведений и если найдено, то подменять выгружаемый объект на другой.
например, выгружаю номенклатуру "А" - ищу её в РегистреСведений - нахожу - соответственно мне нужно выгрузить номенклатуру "Б".
P.S. возможно я описал задачу некорректно или непонятно...
есть задача - перенести справочник.Номенклатура, но не просто перенести, а с подвохом )
есть РегистрСведений, в котором одно измерение и один ресурс = оба - СправочникСсылка.Номенклатура.
Условие - при выгрузке Номенклатуры искать её в этом РегистреСведений и если найдено, то подменять выгружаемый объект на другой.
например, выгружаю номенклатуру "А" - ищу её в РегистреСведений - нахожу - соответственно мне нужно выгрузить номенклатуру "Б".
P.S. возможно я описал задачу некорректно или непонятно...
По теме из базы знаний
- ОбменComXML
- Выгрузка-загрузка любых данных из 1С (и измененных) в XML между похожими конфигурациями (ФАЙЛ, HTTP, COM) ЛЮБЫХ баз 1С 8.1-8.3 с обработкой и поиском данных по произвольным полям поиска
- Конвертация данных 2. Использование исходящих и входящих данных. Свойство "Получить из входящих данных"
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(6) Andrefan,
не так выразился
Чтобы у справочника был подчиненный регистр сведений - это что-то новенькое...
не так выразился
По поводу (4): как получаешь переменную ВыгружаемаяСсылка?
Запрос = Новый Запрос("ВЫБРАТЬ
| СверткаНоменклатуры.КУдалению,
| СверткаНоменклатуры.Оригинал
|ИЗ
| РегистрСведений.СверткаНоменклатуры КАК СверткаНоменклатуры
|ГДЕ
| СверткаНоменклатуры.КУдалению = &Номенклатура
| И НЕ СверткаНоменклатуры.Оригинал = &Номенклатура");
Запрос.УстановитьПараметр("Номенклатура",Источник.Ссылка);
ТЧ = Запрос.Выполнить().Выгрузить();
Сообщить("Количество записей = " + ТЧ.Количество());
Если НЕ ТЧ.Количество() = 0 Тогда
ВыгружаемаяСсылка = ТЧ.Получить(0).Оригинал;
// тут выполняю (точнее пытаюсь выполнять) действия
//оприоре - только одна запись
КонецЕсли;
Показать
(9) compreSSor, выгружаешь найденную номенклатуру (ВыгружаемаяСсылка) с помощью ВыгрузитьПоПравилу(). А затем отказ:
Правило, по которому будет выгружаться ВыгружаемаяСсылка должно быть другое, надо Вам будет создать новое, в котором не будет отмены выгрузки. И надо будет подумать, чтобы оно срабатывало только на передаваемую номенклатуру, а не всю номенклатуру из справочника выгружала. Думаю, надо передавать в исходных данных какой-то флаг:
...
ВыгружаемаяСсылка = ТЧ.Получить(0).Оригинал;
ВыгрузитьПоПравилу(...);
КонецЕсли;
Отказ = Истина;
Правило, по которому будет выгружаться ВыгружаемаяСсылка должно быть другое, надо Вам будет создать новое, в котором не будет отмены выгрузки. И надо будет подумать, чтобы оно срабатывало только на передаваемую номенклатуру, а не всю номенклатуру из справочника выгружала. Думаю, надо передавать в исходных данных какой-то флаг:
ИсхДанные = СоздатьОбъект("СписокЗначений");
ИсхДанные.Установить("ФлагВыгрНом", 0);
ВыгрузитьПоПравилу(ВыгружаемаяСсылка, , ИсхДанные, , "ЭтоНовоеПравилоНоменклатура");
забыл ещё одну вещь - у Номенклатуры есть подчиненный РегистрСведений.Штрихкоды - так вот было бы ОЧЕНЬ круто перенести и штрихкоды, но под одной номенклатурой.
Номенклатура - А (штрихкод - 123456) = Номенклатура - Х (штрихкод - 999999)
Номенклатура - Б (штрихкод - 123457) = Номенклатура - Х (штрихкод - 999999)
Номенклатура - В (штрихкод - 123458) = Номенклатура - Х (штрихкод - 999999)
Итог - выгружена ТОЛЬКО номенклатура "Х" и у неё 4 штрихкода:
- 999999
- 123456
- 123457
- 123458
Номенклатура - А (штрихкод - 123456) = Номенклатура - Х (штрихкод - 999999)
Номенклатура - Б (штрихкод - 123457) = Номенклатура - Х (штрихкод - 999999)
Номенклатура - В (штрихкод - 123458) = Номенклатура - Х (штрихкод - 999999)
Итог - выгружена ТОЛЬКО номенклатура "Х" и у неё 4 штрихкода:
- 999999
- 123456
- 123457
- 123458
Если в отладчике посмотреть и убедиться, что по определенному параметру возвращается тип СправчоникСсылка.Номенклатура, то возможно конвертация ругается на другую номенклатуру, для которой результат запроса пустой, то есть в переменной ВыгружаемаяСсылка = Неопределено. Такое может быть? Если да, то после запроса поставь условие Если ВыгружаемаяСсылка = Неопределено Тогда Отказ = Истина КонецЕсли.
Доброго времени суток!
у меня справочник контрагенты... Там 2 элемента, с разными УИ соответственно. Как мне при загрузке заменить переносимый элемент на другой? В каком обработчике это можно сделать?
При выгрузке - я понял так:в ПКО перед выгрузкой проверить, что это не тот объект, найти нужный и присвоить его источнику?
а при загрузке? использовать Перед загрузкой?
у меня справочник контрагенты... Там 2 элемента, с разными УИ соответственно. Как мне при загрузке заменить переносимый элемент на другой? В каком обработчике это можно сделать?
При выгрузке - я понял так:в ПКО перед выгрузкой проверить, что это не тот объект, найти нужный и присвоить его источнику?
а при загрузке? использовать Перед загрузкой?
(13) olbu, как видно в (4) нельзя изменить значение Источник.
Если compreSSor не против обсуждения Вашего, olbu, вопроса в его теме, тогда вот что.
В правиле перед выгрузкой Вы должны убедится что Источник - это тот неугодный Вам контрагент (например, можно проверить его код). Если это так - отказ от выгрузки.
Как-то так:
Если compreSSor не против обсуждения Вашего, olbu, вопроса в его теме, тогда вот что.
В правиле перед выгрузкой Вы должны убедится что Источник - это тот неугодный Вам контрагент (например, можно проверить его код). Если это так - отказ от выгрузки.
Как-то так:
Отказ = Источник.Код = "00000001";
(15) _qqq, Спасибо за ответ, но возможно я не полно описал проблемку: есть контр "А" и контр "Б", так вот, при загрузке, если встречается "А", его тупо нужно заменить на "Б", я пробую ПКО после загрузки, при этом результат достигается, но вот выскакивает ошибка: "не найден метод записать"...
(22) olbu, мне всегда казалось логичнее разобраться со всеми вопросами по выгрузке данных перед выгрузкой. После загрузки бывает нужно, например, присвоить некоторым реквизитам значения, которые существуют только в приемнике. Но чтобы объект менять - это как коней менять на переправе - и невозможно, и не логично.
(16) olbu, я решил задачу таким образом (только в моём случае не Контрагенты, а Номенклатура):
- создал ПКО - "Номенклатура" - синхронизировал все реквизиты как полагается;
- скопировал это правило и обозвал "НоменклатураВыгрузка";
- в правиле "Номенклатура" в обработчике "ПередВыгрузгой" написал следующее:
у меня прокатило на 100% - только ещё нужно помнить, что существует некое количество РегистровСведений, которые содержат информацию по объектам, которые выгружаться не будут, но информацию нужно сохранить...
- создал ПКО - "Номенклатура" - синхронизировал все реквизиты как полагается;
- скопировал это правило и обозвал "НоменклатураВыгрузка";
- в правиле "Номенклатура" в обработчике "ПередВыгрузгой" написал следующее:
Если "Моё условие = ИСТИНА" Тогда
ВыгрузитьПоПравилу(НовыйИсточник,,,,"НоменклатураВыгрузка");
//где НовыйИсточник = СправочникНоменклатура.Ссылка - это ссылка на ту номенклатуру, на которую я буду заменять текущую
Иначе
ВыгрузитьПоПравилу(Источник,,,,"НоменклатураВыгрузка");
//в этом случае - я выгружу номенклатуру как есть - безовсяких изменений
КонецЕсли;
Отказ = ИСТИНА;
Показатьу меня прокатило на 100% - только ещё нужно помнить, что существует некое количество РегистровСведений, которые содержат информацию по объектам, которые выгружаться не будут, но информацию нужно сохранить...
Убился с задачей, чтобы во всех случаях один из складов (первый) загружался как другой (второй). Т.е. по сути слияние в приемнике, там "первого" нет, есть только "второй". Узнал интересную вещь - оказывается если менять источник "Перед выгрузкой" - выполняется корректная замена "первого" на "второй", а вот если "При выгрузке", тогда меняются только реквизиты (они получаются из "второго", а ссылка и код приходят из "первого". Создается очень похожий дубль, у которого код и ссылка из "второго".
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот