|
Конвертация данных 2.1 не работает проверка перед выгрузкой | ☑ | ||
---|---|---|---|---|
0
I_learn_1c
03.04.25
✎
18:29
|
Всем доброго вечера,
Сориентируйте плиз как описать в ПКО перед выгрузкой условие про ставку НДС. Гружу документ из ERP в УПП. Надо передать ставку НДС. Проблема, что в ERP ставка указана в ТЧ в каждой строчке, а в УПП реквизит в шапке. Решили, что если в доке в ERP во всех строчках ставка одинаковая, то ее и пишем в УПП. в ПКО по выгрузке этого документа в обработчике Перед выгрузкой прописано следующее МассивСтавкиНДС = Новый Массив; Для Каждого _Строка Из Источник.Расходы Цикл Если МассивСтавкиНДС.Количество() = 0 Тогда МассивСтавкиНДС.Добавить(_Строка.СтавкаНДС); ИначеЕсли МассивСтавкиНДС[0] <> _Строка.СтавкаНДС Тогда МассивСтавкиНДС.Добавить(_Строка.СтавкаНДС); КонецЕсли КонецЦикла; Если МассивСтавкиНДС.Количество() = 1 Тогда Если МассивСтавкиНДС[0] = Перечисления.СтавкиНДС.БезНДС Тогда ИмяСтавкаНДС = "БезНДС"; ИначеЕсли МассивСтавкиНДС[0] = Перечисления.СтавкиНДС.НДС18 Тогда ИмяСтавкаНДС = "НДС18"; ИначеЕсли МассивСтавкиНДС[0] = Перечисления.СтавкиНДС.НДС18_118 Тогда ИмяСтавкаНДС = "НДС18_118"; ИначеЕсли МассивСтавкиНДС[0] = Перечисления.СтавкиНДС.НДС10 Тогда ИмяСтавкаНДС = "НДС10"; ИначеЕсли МассивСтавкиНДС[0] = Перечисления.СтавкиНДС.НДС10_110 Тогда ИмяСтавкаНДС = "НДС10_110"; ИначеЕсли МассивСтавкиНДС[0] = Перечисления.СтавкиНДС.НДС0 Тогда ИмяСтавкаНДС = "НДС0"; ИначеЕсли МассивСтавкиНДС[0] = Перечисления.СтавкиНДС.НДС20 Тогда ИмяСтавкаНДС = "НДС20"; ИначеЕсли МассивСтавкиНДС[0] = Перечисления.СтавкиНДС.НДС20_120 Тогда ИмяСтавкаНДС = "НДС20_120"; ИначеЕсли МассивСтавкиНДС[0] = Перечисления.СтавкиНДС.НДС5 Тогда ИмяСтавкаНДС = "НДС5"; ИначеЕсли МассивСтавкиНДС[0] = Перечисления.СтавкиНДС.НДС5_105 Тогда ИмяСтавкаНДС = "НДС5_105"; ИначеЕсли МассивСтавкиНДС[0] = Перечисления.СтавкиНДС.НДС7 Тогда ИмяСтавкаНДС = "НДС7"; ИначеЕсли МассивСтавкиНДС[0] = Перечисления.СтавкиНДС.НДС7_107 Тогда ИмяСтавкаНДС = "НДС7_107"; КонецЕсли; Сообщить(МассивСтавкиНДС[0]); Сообщить(МассивСтавкиНДС[0] = Перечисления.СтавкиНДС.НДС20); Сообщить("Имя ставка: "+ИмяСтавкаНДС); ВходящиеДанные.Вставить("УчитыватьНДС", Истина); ВходящиеДанные.Вставить("СтавкаНДС", ИмяСтавкаНДС); КонецЕсли; Сообщить() - само собой для тестов, проверки. Проблема - не работает условие МассивСтавкиНДС[0] = Перечисления.СтавкиНДС.НДС20 и аналогичные ему. В доке в ЕРП ставка 20%, а в "сообщить" выводит: 20% Нет Имя ставка: В чем может быть проблема? В модуле формы внешней обработки такой же код обрабатывает без проблем, сравнивает, результат "истина". В обработчике какие-то ограничения на сравнение ссылок? |
|||
1
I_learn_1c
03.04.25
✎
18:35
|
изначально не было такого дикого условия Если, хотела просто получать имя ставки НДС.
было: ОбъектМетаданных = МассивСтавкиНДС[0].Метаданные(); ИндексЗначения = Перечисления[ОбъектМетаданных.Имя].Индекс(МассивСтавкиНДС[0]); ИмяСтавки = ОбъектМетаданных.ЗначенияПеречисления[ИндексЗначения].Имя; но тоже не работало в конвертации именно, писало - Ошибка при вызове метода контекста (Индекс) во внешней обработке опять же все без проблем отрабатывало. |
|||
2
laeg
03.04.25
✎
18:53
|
А зачем такие сложности ?
Самый простой пример, берем ставку из первой строки: ПКС Источника пустое, Приемника СтавкаНДС ПередВыгрузкой Значение = Источник.ТабличнаяЧасть[0].СтавкаНДС; |
|||
3
big
03.04.25
✎
19:03
|
(0) При всяких-любых вариантах надо в УПП делать то количество документов, сколько ставок НДС есть в документе ERP. Не выдумывать ничего, а просто сделать так, чтобы всё работало. Как там оно будет с нумерацией и поиском - это есть часть решения задачи. Если по другому - будут глюки, и глюки будут постоянно.
|
|||
4
big
03.04.25
✎
19:04
|
(2) За такое решение надо жизни лишать. Причем в течение лет эдак пяти, каждый день и ночь тоже! (((
|
|||
5
I_learn_1c
03.04.25
✎
19:08
|
(2) но ведь все равно придется писать что-то типа
Если Источник.ТабличнаяЧасть[0].СтавкаНДС = Перечисления.СтавкиНДС.НДС20 Тогда Значение = "НДС20"; ............ КонецЕсли; сразу Значение = Источник.ТабличнаяЧасть[0].СтавкаНДС; не отрабатывает |
|||
6
I_learn_1c
03.04.25
✎
19:10
|
(3) без пафоса не? я не выдумываю, есть ТЗ - делаю. вопрос чисто технически почему не срабатывает проверка условия в обработчике.
если вдруг будут разные ставки, то в УПП Ставка вообще не заполнится, зайдут и поправят руками тогда, но это скорее исключение редкое |
|||
7
big
03.04.25
✎
19:16
|
(5) Вы при сравнении данных из (0) типы данных смотрели, которые сравниваете? Скорее всего там сравнение того не с тем.
|
|||
8
big
03.04.25
✎
19:20
|
(6) Никакого пафоса, ради Б*га, избавьте от этого. Просто, следуя по ТЗ, имеется живой вариант присутствия различного НДС в одном документе. Скажете, что это в данной организации невозможно, потому что они так не делают? Хм... А потом начнут делать )))
ИМХО это огромный косяк и ГЛЮК изначально в обмене - ориентироваться на первую строку документа. Это просто *****!!! Так делать нельзя и втопку такие ТЗ - это всё самому дороже обойдётся. |
|||
9
Доминошник
03.04.25
✎
19:29
|
(0) Весьма похоже на то, что нужно сравнивать не с перечислением "СтавкиНДС" а со справочником "СтавкиНДС"
Об этом же говорится в (7) |
|||
10
laeg
03.04.25
✎
20:15
|
(4) Конкретики ноль, одни сопли.
я написал простейший пример, как без кучи условий и кода конвертировать значение а какие условия и как брать данные - вопрос уже 10-ый Главное что бы было ПКО для СтавокНДС |
|||
11
I_learn_1c
04.04.25
✎
09:17
|
(7) (9) справочника Ставки НДС тут нет.
ПеречислениеСсылка.СтавкиНДС в приемнике и ПеречислениеСсылка.СтавкиНДС в источнике. (8)ориентироваться на первую строку - предложили тут. в моем варианте - на всякий случай проверяю все строки, если одинаковая ставка, то заполняю, если нет - останется пустым (собственно и сейчас поле пустое в принципе, правила до меня писали). (10) никаких соплей, просто при этом варианте тоже придется писать сравнение, чтобы определить что писать в Значение = "ИмяСтавки". и хотя сравнивается ПеречислениеСсылка.СтавкиНДС (из входящих данных или из первой строки не важно) и ПеречислениеСсылка.СтавкиНДС для приемника, правило есть для ставок, но почему-то сравнение выдает Ложь. При написании сравнения в "Перед выгрузкой" там даже не важно ведь по идее есть правило или нет, код на стороне выгрузки же выполняется. так и почему сравнение в обработке работает, а в обработчике в конвертации нет? |
|||
12
I_learn_1c
04.04.25
✎
10:41
|
в общем если кому-то тоже нужно
чтобы работало сравнение в обработчике в конвертации нужно указать еще ".ПеречислениеСтавкаНДС" к переменной в которой какое-то значение перечисления указано. То есть, сравнение получается вида Если Источник.СтавкаНДС.ПеречислениеСтавкаНДС = Перечисления.СтавкиНДС.НДС20 Тогда .... в этом случае сравнение работает |
|||
13
Доминошник
04.04.25
✎
12:51
|
(12) Как и говорили ранее - "Справочник.СтавкиНДС" 😂
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |