Перечисление в Справочник
Добрый день.
Использую: Конвертация данных, редакция 2.1 (2.1.8.2)
Источник: Комплексная автоматизация, редакция 1.1 (1.1.115.1)
Приёмник: Управление нашей фирмой, редакция 1.6 (1.6.17.161)
Переношу документ Приходная накладная, а именно поле СтавкаНДС.
В источнике это Перечисление: НДС20, НДС20_120, БезНДС и т.д
В приёмнике это Справочник без предопределённых объектов: 20%, 20% / 120%, Без НДС
Как их друг с другом можно сопоставить?
Использую: Конвертация данных, редакция 2.1 (2.1.8.2)
Источник: Комплексная автоматизация, редакция 1.1 (1.1.115.1)
Приёмник: Управление нашей фирмой, редакция 1.6 (1.6.17.161)
Переношу документ Приходная накладная, а именно поле СтавкаНДС.
В источнике это Перечисление: НДС20, НДС20_120, БезНДС и т.д
В приёмнике это Справочник без предопределённых объектов: 20%, 20% / 120%, Без НДС
Как их друг с другом можно сопоставить?
По теме из базы знаний
- Принципы проектирования справочников номенклатуры в 1С: Управление Предприятием 2 (ERP 2.4.6)
- Конвертация ставок НДС: из Перечисления в Справочник (правила обмена в конвертации 2.0)
- Загрузка справочников: Контрагентов, Партнеров, Договоров, Банковских счетов из Excel в 1С УТ 11, Управление предприятием ERP 2
- Несколько альтернативных универсальных способов подбора ссылок при переносах данных
- Универсальный шаблон для загрузки данных из Excel и подбора ссылок в любой конфигурации
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) Пробывал - не работает, где-то ошибка.
Искать объект приёмника по внутреннему идентификатору объекта источника - убрал галку
Автоматически генерировать новый номер или код, если он не задан - поставил галку
ПКС:
Источник: Пусто
Приёмник: Наименование
галка: Поиск объекта при загрузке по свойству
Перед выгрузкой:
Искать объект приёмника по внутреннему идентификатору объекта источника - убрал галку
Автоматически генерировать новый номер или код, если он не задан - поставил галку
ПКС:
Источник: Пусто
Приёмник: Наименование
галка: Поиск объекта при загрузке по свойству
Перед выгрузкой:
Если Строка(Источник) = "БезНДС"
Тогда
Значение = "Без НДС";
ИначеЕсли
Строка(Источник)= "НДС18"
Тогда
Значение = "18%";
КонецЕсли;
(3) Возможно ошибка именно в том, что Источник Вы приводите к строке. Попробуйте сравнивать непосредственно со значением перечисления:
Если Источник = Перечисления.СтавкиНДС.БезНДС Тогда
Значение = "Без НДС";
ИначеЕсли Источник = Перечисления.СтавкиНДС.НДС18 Тогда
Значение = "18%";
КонецЕсли;
(6)
Временное решение:
Тут явно видно отсутствие пробелов. Решение не очень подходит, так-как есть организация у которой накладные с НДС и Без НДС.
ПКО: Приходная накладаная
После загрузки
Временное решение:
Тут явно видно отсутствие пробелов. Решение не очень подходит, так-как есть организация у которой накладные с НДС и Без НДС.
ПКО: Приходная накладаная
После загрузки
Для Каждого Строка Из Объект.Расходы Цикл
Строка.ЕдиницаИзмерения = Строка.Номенклатура.ЕдиницаИзмерения;
Если Объект.Организация.ВидСтавкиНДСПоУмолчанию = Перечисления.ВидыСтавокНДС.БезНДС Тогда
Строка.СтавкаНДС = Справочники.СтавкиНДС.НайтиПоНаименованию("Без НДС");
Иначе
Строка.СтавкаНДС = Справочники.СтавкиНДС.НайтиПоНаименованию("20%");
КонецЕсли;
Объект.Записать();
КонецЦикла;
Для Каждого Строка Из Объект.Запасы Цикл
Если Объект.Организация.ВидСтавкиНДСПоУмолчанию = Перечисления.ВидыСтавокНДС.БезНДС Тогда
Строка.СтавкаНДС = Справочники.СтавкиНДС.НайтиПоНаименованию("Без НДС");
Иначе
Строка.СтавкаНДС = Справочники.СтавкиНДС.НайтиПоНаименованию("20%");
КонецЕсли;
Объект.Записать();
КонецЦикла;
Показать
А если сделать через выражение? Типа:
Перед выгрузкой:
Касательно заполнения строки выражение могу ошибаться, тут лучше справку глянуть, но обычно этот способ отрабатывает безотказно, если в источнике заполнены данные для условия, а приемнике есть соответствие.
Перед выгрузкой:
Если Источник = Перечисления.СтавкиНДС.БезНДС Тогда
Выражение = "Справочники.ВашСправочник.НайтиПоНаименованию("Наименование элемента справочника в приемнике")";
КонецЕсли;
Касательно заполнения строки выражение могу ошибаться, тут лучше справку глянуть, но обычно этот способ отрабатывает безотказно, если в источнике заполнены данные для условия, а приемнике есть соответствие.
Добавил в ПКС Наименования для
ПКО СтавкиНДС (ПеречислениеСсылка.СтавкиНДС в СправочникСсылка.СтавкиНДС)
ПКО СтавкиНДС (ПеречислениеСсылка.СтавкиНДС в СправочникСсылка.СтавкиНДС)
Прикрепленные файлы:
ПравилаОбменаДанными.xml
(11) исправил ПКС_СтавкиНДС_Наименование_ПередВыгрузкойСвойства
Если Источник = Перечисления.СтавкиНДС.БезНДС Тогда
Выражение = "Справочники.СтавкиНДС.НайтиПоНаименованию("Без НДС")";
КонецЕсли;
При загрузке получил сообщение об ошибке:
Начало выгрузки: 27.05.2019 14:02:22
Ошибка в обработчике события ПередВыгрузкой (свойства)
ПКО = СтавкиНДС (Перечисление: Ставки НДС)
ПКС = 1 (--> Наименование)
Объект = Без НДС (Ставки НДС)
СвойствоПриемника = Наименование (Строка)
Обработчик = ПередВыгрузкойСвойства
ОписаниеОшибки = Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(17,60)}: Ожидается символ ';'
ПозицияМодуля = Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8929)
КодСообщения = 55
Ошибка при выгрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1694)}: Ошибка в обработчике события ПередВыгрузкой (свойства)
ПКО = СтавкиНДС (Перечисление: Ставки НДС)
ПКС = 1 (--> Наименование)
Объект = Без НДС (Ставки НДС)
СвойствоПриемника = Наименование (Строка)
Обработчик = ПередВыгрузкойСвойства
ОписаниеОшибки = Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(17,60)}: Ожидается символ ';'
ПозицияМодуля = Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8929)
КодСообщения = 55
Если Источник = Перечисления.СтавкиНДС.БезНДС Тогда
Выражение = "Справочники.СтавкиНДС.НайтиПоНаименованию("Без НДС")";
КонецЕсли;
При загрузке получил сообщение об ошибке:
Начало выгрузки: 27.05.2019 14:02:22
Ошибка в обработчике события ПередВыгрузкой (свойства)
ПКО = СтавкиНДС (Перечисление: Ставки НДС)
ПКС = 1 (--> Наименование)
Объект = Без НДС (Ставки НДС)
СвойствоПриемника = Наименование (Строка)
Обработчик = ПередВыгрузкойСвойства
ОписаниеОшибки = Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(17,60)}: Ожидается символ ';'
ПозицияМодуля = Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8929)
КодСообщения = 55
Ошибка при выгрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1694)}: Ошибка в обработчике события ПередВыгрузкой (свойства)
ПКО = СтавкиНДС (Перечисление: Ставки НДС)
ПКС = 1 (--> Наименование)
Объект = Без НДС (Ставки НДС)
СвойствоПриемника = Наименование (Строка)
Обработчик = ПередВыгрузкойСвойства
ОписаниеОшибки = Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(17,60)}: Ожидается символ ';'
ПозицияМодуля = Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8929)
КодСообщения = 55
(10) То что закомментированно - верно.
Сопоставляешь перечисление в источнике и наименование в приемнике.
Вопрос только в том, правильное ли наименование?
Проверь, лучше через консоль запросов - какие там наименования в приемнике?
И хорошо бы посмотреть что выгружается в файл. На небольших данных. Один документ к примеру.
Сопоставляешь перечисление в источнике и наименование в приемнике.
Вопрос только в том, правильное ли наименование?
Проверь, лучше через консоль запросов - какие там наименования в приемнике?
И хорошо бы посмотреть что выгружается в файл. На небольших данных. Один документ к примеру.
А если так:
Это не ошибка была, там точку с запятой забыл прописать:
Выражение = "Справочники.СтавкиНДС.НайтиПоНаименованию(""БезНДС"");";
Вот так должно отработать, вариант выше тоже должен прокатить.
Выражение = "Справочники.СтавкиНДС.НайтиПоНаименованию(" + "БезНДС" + ");";
Это не ошибка была, там точку с запятой забыл прописать:
Выражение = "Справочники.СтавкиНДС.НайтиПоНаименованию(""БезНДС"");";
Вот так должно отработать, вариант выше тоже должен прокатить.
(17)это при загрузке.
При выгрузке в окне сообщений должен был выйти результат выражения, чтобы увидеть какую строку он в итоге передает.
Я поэтому и написал, что перед выгрузкой должна выглядеть так:
При выгрузке в окне сообщений должен был выйти результат выражения, чтобы увидеть какую строку он в итоге передает.
Я поэтому и написал, что перед выгрузкой должна выглядеть так:
Если Источник = Перечисления.СтавкиНДС.БезНДС Тогда
Выражение = "Справочники.СтавкиНДС.НайтиПоНаименованию(""БезНДС"");";
Сообщить(Выражение);
КонецЕсли;
(0) Могу предложить два адекватных с моей точки зрения варианта:
1) ПКО для ПКС "СтавкаНДС" оставляешь пустым, а в "Перед выгрузкой" пишешь свитч как в (4), только присваиваешь не названия, а коды элементов справочника приемника. Тут просто работает фича СКД, что когда не указано ПКО для справочника то делается попытка сопоставления по коду.
2) написать полноценное ПКО для поиска по коду или названию. Для названия источником будет строка. Одно ПКС "Наименование" с галкой поиска по нему и в "перед выгрузкой" Значение = Источник. И с комплектом галок, чтобы по этому ПКО происходил только поиск, но ничего не создавалось и не перезаписывалось.
1) ПКО для ПКС "СтавкаНДС" оставляешь пустым, а в "Перед выгрузкой" пишешь свитч как в (4), только присваиваешь не названия, а коды элементов справочника приемника. Тут просто работает фича СКД, что когда не указано ПКО для справочника то делается попытка сопоставления по коду.
2) написать полноценное ПКО для поиска по коду или названию. Для названия источником будет строка. Одно ПКС "Наименование" с галкой поиска по нему и в "перед выгрузкой" Значение = Источник. И с комплектом галок, чтобы по этому ПКО происходил только поиск, но ничего не создавалось и не перезаписывалось.
"Источник" в ПКС это не свойство, а объект. т.е. Если ПКО это приходная накладная, то и "Источник" в ПКС этого объекта это ссылка на накладную. Потому сравнивать его со значением перечисления бесполезно. Потому нужно не "Если Источник = Перечисления.СтавкиНДС.БезНДС Тогда", а что то вроде "Если Источник.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС Тогда" если ставка ндс это реквизит шапки. Ну или что то вроде "Если ОбъектКоллекции.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС Тогда" если ставка ндс это реквизит табличной части.
Разобрался. Возможно кому-то пригодится.
Имею:
Источник Перечисление: НДС20, НДС20_120, БезНДС
Приёмник Справочник: 20%, 20% / 120%, Без НДС
1.Привожу наименование справочника к наименованию перечисления.
2.ПКС_СтавкиНДС_Наименование_ПередВыгрузкойСвойства пишу Значение = Строка(Источник);
тут же проверяю галку Поиск объекта при загрузке по свойству
3.ПКО_СтавкиНДС Настройки снимаю галку Искать объект приёмника по внутреннему идентификатору объекта источника.
4.В ПКО_ПриходнаяНакладная добавляем ПКС_ПриходнаяНакладная_Товары_СтавкаНДС
После этого данные состыкуются
Имею:
Источник Перечисление: НДС20, НДС20_120, БезНДС
Приёмник Справочник: 20%, 20% / 120%, Без НДС
1.Привожу наименование справочника к наименованию перечисления.
2.ПКС_СтавкиНДС_Наименование_ПередВыгрузкойСвойства пишу Значение = Строка(Источник);
тут же проверяю галку Поиск объекта при загрузке по свойству
3.ПКО_СтавкиНДС Настройки снимаю галку Искать объект приёмника по внутреннему идентификатору объекта источника.
4.В ПКО_ПриходнаяНакладная добавляем ПКС_ПриходнаяНакладная_Товары_СтавкаНДС
После этого данные состыкуются
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот