|   |   | 
| 
 | Конвертация данных 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) Как и говорили ранее - "Справочник.СтавкиНДС" 😂     
 | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |