Перечисление в Справочник

1. applesound 1 27.05.19 11:30 Сейчас в теме
Добрый день.
Использую: Конвертация данных, редакция 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. user633533_encantado 11 27.05.19 11:37 Сейчас в теме
(1) Ищи по наименованию, передавай строку и потом кодом устанавливай соответствие.
3. applesound 1 27.05.19 12:08 Сейчас в теме
(2) Пробывал - не работает, где-то ошибка.

Искать объект приёмника по внутреннему идентификатору объекта источника - убрал галку
Автоматически генерировать новый номер или код, если он не задан - поставил галку

ПКС:
Источник: Пусто
Приёмник: Наименование
галка: Поиск объекта при загрузке по свойству

Перед выгрузкой:

Если Строка(Источник) = "БезНДС"
    Тогда
    Значение = "Без НДС";
ИначеЕсли
    Строка(Источник)= "НДС18"
    Тогда
    Значение = "18%";
КонецЕсли;
4. dhurricane 27.05.19 13:11 Сейчас в теме
(3) Возможно ошибка именно в том, что Источник Вы приводите к строке. Попробуйте сравнивать непосредственно со значением перечисления:
Если Источник = Перечисления.СтавкиНДС.БезНДС Тогда 
   Значение = "Без НДС"; 
ИначеЕсли Источник = Перечисления.СтавкиНДС.НДС18 Тогда 
   Значение = "18%"; 
КонецЕсли;
5. applesound 1 27.05.19 13:27 Сейчас в теме
6. dhurricane 27.05.19 13:34 Сейчас в теме
(5) А в документе-источнике оно заполнено? Проверьте, быть может есть где-то расхождения в наименовании справочника ставок и значении поиска? Пробелы, например, есть между числом и знаком "%".
7. applesound 1 27.05.19 14:12 Сейчас в теме
(6)
Временное решение:
Тут явно видно отсутствие пробелов. Решение не очень подходит, так-как есть организация у которой накладные с НДС и Без НДС.

ПКО: Приходная накладаная
После загрузки

Для Каждого Строка Из Объект.Расходы Цикл
	Строка.ЕдиницаИзмерения = Строка.Номенклатура.ЕдиницаИзмерения;
	Если Объект.Организация.ВидСтавкиНДСПоУмолчанию = Перечисления.ВидыСтавокНДС.БезНДС Тогда
		Строка.СтавкаНДС = Справочники.СтавкиНДС.НайтиПоНаименованию("Без НДС");
	Иначе
		Строка.СтавкаНДС = Справочники.СтавкиНДС.НайтиПоНаименованию("20%");
	КонецЕсли;
	Объект.Записать();
КонецЦикла;

Для Каждого Строка Из Объект.Запасы Цикл
	Если Объект.Организация.ВидСтавкиНДСПоУмолчанию = Перечисления.ВидыСтавокНДС.БезНДС Тогда
		Строка.СтавкаНДС = Справочники.СтавкиНДС.НайтиПоНаименованию("Без НДС");
	Иначе
		Строка.СтавкаНДС = Справочники.СтавкиНДС.НайтиПоНаименованию("20%");
	КонецЕсли;
	Объект.Записать();
КонецЦикла;
Показать
27. Xershi 1484 27.05.19 16:59 Сейчас в теме
9. Xershi 1484 27.05.19 14:42 Сейчас в теме
(3) скрин скинь. Явно не туда впихнул.
в (4) написали на ПКС, а у тебя похоже для ПКО
8. D_e_X_T_e_R 573 27.05.19 14:34 Сейчас в теме
А если сделать через выражение? Типа:

Перед выгрузкой:

Если Источник = Перечисления.СтавкиНДС.БезНДС Тогда 
   Выражение = "Справочники.ВашСправочник.НайтиПоНаименованию("Наименование элемента справочника в приемнике")"; 
КонецЕсли;


Касательно заполнения строки выражение могу ошибаться, тут лучше справку глянуть, но обычно этот способ отрабатывает безотказно, если в источнике заполнены данные для условия, а приемнике есть соответствие.
10. applesound 1 27.05.19 14:47 Сейчас в теме
Добавил в ПКС Наименования для
ПКО СтавкиНДС (ПеречислениеСсылка.СтавкиНДС в СправочникСсылка.СтавкиНДС)
Прикрепленные файлы:
ПравилаОбменаДанными.xml
11. D_e_X_T_e_R 573 27.05.19 14:58 Сейчас в теме
(10)Выражение это строка, полностью, то есть Справочники.СтавкиНДС и т.д. нужно передавать строкой. Как то так
Выражение = "Справочники.СтавкиНДС.НайтиПоНаименованию(""БезНДС"")";
12. applesound 1 27.05.19 15:05 Сейчас в теме
(11) исправил ПКС_СтавкиНДС_Наименование_ПередВыгрузкойСвойства

Если Источник = Перечисления.СтавкиНДС.БезНДС Тогда
Выражение = "Справочники.СтавкиНДС.НайтиПоНаименованию("Без НДС")";
КонецЕсли;

При загрузке получил сообщение об ошибке:

Начало выгрузки: 27.05.2019 14:02:22

Ошибка в обработчике события ПередВыгрузкой (свойства)
ПКО = СтавкиНДС (Перечисление: Ставки НДС)
ПКС = 1 (--> Наименование)
Объект = Без НДС (Ставки НДС)
СвойствоПриемника = Наименование (Строка)
Обработчик = ПередВыгрузкойСвойства
ОписаниеОшибки = Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(17,60)}: Ожидается символ ';'
ПозицияМодуля = Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8929)
КодСообщения = 55

Ошибка при выгрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1694)}: Ошибка в обработчике события ПередВыгрузкой (свойства)
ПКО = СтавкиНДС (Перечисление: Ставки НДС)
ПКС = 1 (--> Наименование)
Объект = Без НДС (Ставки НДС)
СвойствоПриемника = Наименование (Строка)
Обработчик = ПередВыгрузкойСвойства
ОписаниеОшибки = Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(17,60)}: Ожидается символ ';'
ПозицияМодуля = Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8929)
КодСообщения = 55
13. D_e_X_T_e_R 573 27.05.19 15:06 Сейчас в теме
(12)
Ожидается символ ';'

Ошибка экранирования кавычек
30. Andy13 28.05.19 10:11 Сейчас в теме
(10) То что закомментированно - верно.
Сопоставляешь перечисление в источнике и наименование в приемнике.
Вопрос только в том, правильное ли наименование?
Проверь, лучше через консоль запросов - какие там наименования в приемнике?
И хорошо бы посмотреть что выгружается в файл. На небольших данных. Один документ к примеру.
14. D_e_X_T_e_R 573 27.05.19 15:12 Сейчас в теме
А если так:
Выражение = "Справочники.СтавкиНДС.НайтиПоНаименованию(" + "БезНДС" + ");";


Это не ошибка была, там точку с запятой забыл прописать:
Выражение = "Справочники.СтавкиНДС.НайтиПоНаименованию(""БезНДС"");";
Вот так должно отработать, вариант выше тоже должен прокатить.
15. applesound 1 27.05.19 15:25 Сейчас в теме
Ошибка при загрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(9069)}: Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(1,46)}: Ожидается символ ')'
16. D_e_X_T_e_R 573 27.05.19 15:30 Сейчас в теме
В правиле, после Выражение = "Справочники.СтавкиНДС.НайтиПоНаименованию(""БезНДС"");";
написать Сообщить(Выражение);
Что при выгрузке напишет в окне сообщений?
17. applesound 1 27.05.19 15:39 Сейчас в теме
Ошибка при загрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(9069)}: Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(1,53)}: Ошибка в выражении
18. D_e_X_T_e_R 573 27.05.19 15:42 Сейчас в теме
(17)это при загрузке.
При выгрузке в окне сообщений должен был выйти результат выражения, чтобы увидеть какую строку он в итоге передает.
Я поэтому и написал, что перед выгрузкой должна выглядеть так:

Если Источник = Перечисления.СтавкиНДС.БезНДС Тогда 
    Выражение = "Справочники.СтавкиНДС.НайтиПоНаименованию(""БезНДС"");"; 
    Сообщить(Выражение);
КонецЕсли;
19. applesound 1 27.05.19 15:52 Сейчас в теме
(18)
Начало выгрузки: 27.05.2019 14:38:24
Справочники.СтавкиНДС.НайтиПоНаименованию("Без НДС");

Окончание выгрузки: 27.05.2019 14:38:25
20. D_e_X_T_e_R 573 27.05.19 15:54 Сейчас в теме
(19)с виду все норм. А какую ошибку при загрузке сейчас выдает?
21. applesound 1 27.05.19 15:57 Сейчас в теме
(20)

Ошибка при загрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(9069)}: Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(1,53)}: Ошибка в выражении
22. D_e_X_T_e_R 573 27.05.19 16:01 Сейчас в теме
(21)
Ошибка в выражении

а дальше?
23. applesound 1 27.05.19 16:05 Сейчас в теме
это всё
Прикрепленные файлы:
24. D_e_X_T_e_R 573 27.05.19 16:07 Сейчас в теме
а в журнале регистрации тоже самое?
25. D_e_X_T_e_R 573 27.05.19 16:26 Сейчас в теме
если да, то ставить точку останова в строке 9069 модуля объекта обработки и отладчиком смотреть, какое значение туда попадает, так можно попробовать отловить ошибку.
26. applesound 1 27.05.19 16:36 Сейчас в теме
Подозреваю есть в КД2 механизм, способный сопоставлять различающиеся данные.
28. herfis 498 27.05.19 17:16 Сейчас в теме
(0) Могу предложить два адекватных с моей точки зрения варианта:
1) ПКО для ПКС "СтавкаНДС" оставляешь пустым, а в "Перед выгрузкой" пишешь свитч как в (4), только присваиваешь не названия, а коды элементов справочника приемника. Тут просто работает фича СКД, что когда не указано ПКО для справочника то делается попытка сопоставления по коду.
2) написать полноценное ПКО для поиска по коду или названию. Для названия источником будет строка. Одно ПКС "Наименование" с галкой поиска по нему и в "перед выгрузкой" Значение = Источник. И с комплектом галок, чтобы по этому ПКО происходил только поиск, но ничего не создавалось и не перезаписывалось.
29. Wern03 20 28.05.19 00:15 Сейчас в теме
"Источник" в ПКС это не свойство, а объект. т.е. Если ПКО это приходная накладная, то и "Источник" в ПКС этого объекта это ссылка на накладную. Потому сравнивать его со значением перечисления бесполезно. Потому нужно не "Если Источник = Перечисления.СтавкиНДС.БезНДС Тогда", а что то вроде "Если Источник.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС Тогда" если ставка ндс это реквизит шапки. Ну или что то вроде "Если ОбъектКоллекции.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС Тогда" если ставка ндс это реквизит табличной части.
31. applesound 1 28.05.19 11:10 Сейчас в теме
Разобрался. Возможно кому-то пригодится.
Имею:
Источник Перечисление: НДС20, НДС20_120, БезНДС
Приёмник Справочник: 20%, 20% / 120%, Без НДС
1.Привожу наименование справочника к наименованию перечисления.
2.ПКС_СтавкиНДС_Наименование_ПередВыгрузкойСвойства пишу Значение = Строка(Источник);
тут же проверяю галку Поиск объекта при загрузке по свойству
3.ПКО_СтавкиНДС Настройки снимаю галку Искать объект приёмника по внутреннему идентификатору объекта источника.
4.В ПКО_ПриходнаяНакладная добавляем ПКС_ПриходнаяНакладная_Товары_СтавкаНДС

После этого данные состыкуются
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот