Добрый день !
Делаю перегрузку реализаций и поступлений из УТ 11.2 в БП 2.0 через COM. Обработка запускается в БП. Нужно получить значение перечисления "ТипыНалогообложенияНДС", применяемого в документе поступления. Конструкция вида:
Если ДокумИст.НалогообложениеНДС = COMБаза.Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС Тогда
НовыйДокум.УчитыватьНДС=Истина;
Иначе
НовыйДокум.УчитыватьНДС=Ложь;
КонецЕсли;
Не работает. Всегда выдает ложь.
COMБаза - собственно УТ 11, подключенная через COM к БП.
НовыйДокум - пустой документ поступление в БП.
ДокумИст - документ поступления переданный по COM из УТ 11/
(8) Denis_CFO, они не могут быть одинаковые.
Для того индекс значения и вычисляем - он является примитивным типом, спокойно передается по оле,
и дальше последней строкой определяем результат, в зависимости от индекса.
Хоть 100 вариантов там будет,
пример не для тупого копипаста приведен, а для того чтобы понять как это работает.
В моем случае - там всего 2 значения, 0 и 1.
(9) Boneman, Ну звиняй тогда, значит у меня не получилось, попробую ещё. Обычно вытаскиваю значение перечисления в виде строки и им пользуюсь. Никогда не подводило.
(10) Denis_CFO, строкой тоже можно,
только это не совсем универсально. Переименуют название и перестанет работать.
Даже в (7) ссылка на ИТС, там официальные примеры именно по индексам.
(12) Boneman,
Не согласен с тем, что это не универсально. Пример:
В Базе 1 в перечислении ТипыНалогообложенияНДС объявлено два значения ПродажаОблагаетсяНДС и ПродажаНеОблагаетсяНДС
В Базе 2 в перечислении ТипыНалогообложенияНДС тоже объявлено два значения, но в другом порядке.
Какой вариант сравнит верно - по индексу или по строке?
Пример 2:
В Базе 1 в перечислении ТипыНалогообложенияНДС объявлено два значения "ПродажаОблагаетсяНДС" и "ПродажаНеОблагаетсяНДС"
В Базе 2 в перечислении ТипыНалогообложенияНДС тоже объявлено два значения: "ПродажаНДС" и "ПродажаБезНДС"
Стоит ли доверять сравнению по индексу, или лучше выбросить исключение? Ведь нет стропроцентной уверенности, что сопоставление будет корректным? А что если в перечислении в базе 2 - более двух значений?
(1) Black Cat, конечно зависит от того одинаковые ли версии конфигурации. И если да, то вариант по индексу подойдет. Но вдруг одна база шагнет на версию дальше чем вторая - и возникнут различия в названии объектов метаданных и/или синонимов? Считаю что правильнее будет как-то так:
Если Строка(ДокумИст.НалогообложениеНДС) = COMБаза.String(COMБаза.Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС) Тогда
НовыйДокум.УчитыватьНДС=Истина;
ИначеЕсли Строка(ДокумИст.НалогообложениеНДС) = COMБаза.String(COMБаза.Перечисления.ТипыНалогообложенияНДС.ПродажаНЕОблагаетсяНДС) Тогда
// ...
Иначе
ВызватьИсключение "непредвиденное значение реквизита";
КонецЕсли;
(8) Denis_CFO, в моем примере, это выдержка из выгрузки, из отраслевой конфы автосалона, переписанной на 90% в типовую бухню.
Ничего там идентичного в конфигурациях нет.
Всем спасибо за помощь !
Сделал вот таким способом:
Если (COMБаза.XMLСтрока(ДокумV8Ист.НалогообложениеНДС) = "ПродажаОблагаетсяНДС") Тогда
НовыйДокум.УчитыватьНДС=Истина;
Иначе
НовыйДокум.УчитыватьНДС=Ложь;
КонецЕсли;