Получение и сравнение перечисления через COM соединение

1. Black Cat 32 22.04.16 16:49 Сейчас в теме
Добрый день !
Делаю перегрузку реализаций и поступлений из УТ 11.2 в БП 2.0 через COM. Обработка запускается в БП. Нужно получить значение перечисления "ТипыНалогообложенияНДС", применяемого в документе поступления. Конструкция вида:
Если ДокумИст.НалогообложениеНДС = COMБаза.Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС Тогда
  НовыйДокум.УчитыватьНДС=Истина;
Иначе
  НовыйДокум.УчитыватьНДС=Ложь;
КонецЕсли;

Не работает. Всегда выдает ложь.
COMБаза - собственно УТ 11, подключенная через COM к БП.
НовыйДокум - пустой документ поступление в БП.
ДокумИст - документ поступления переданный по COM из УТ 11/
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Boneman 298 22.04.16 16:58 Сейчас в теме
(1) Black Cat, там по индексу надо сравнивать
4. Denis_CFO 48 22.04.16 16:59 Сейчас в теме
(1) Black Cat, вот так попробуйте:
XMLString(COMБаза.Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС) = "Облагается"
rusakov1969; ivangrant; alec_kr; +3 Ответить
5. sssss_aaaaa_2011 22.04.16 17:02 Сейчас в теме
(1) Black Cat, так и должно быть. Через COM передаются только примитивные типы (число и строка), а не ссылки на метаданные.
6. Boneman 298 22.04.16 17:03 Сейчас в теме
(1) Black Cat,
вот тебе пример реализации,
переделай себе
Функция ОпределитьЮрФизЛицо(ЭлементОле)


	ИндексОле = БазаДанныхРарус.Перечисления.ФормыСобственности.Индекс(ЭлементОле.ФормаСобственности);
	ЭтоЮрЛицо = (ИндексОле = БазаДанныхРарус.Перечисления.ФормыСобственности.Индекс(БазаДанныхРарус.Перечисления.ФормыСобственности.ЮридическоеЛицо));
	ЮрФизЛицо = ?(ЭтоЮрЛицо, Перечисления.ЮридическоеФизическоеЛицо.ЮридическоеЛицо, Перечисления.ЮридическоеФизическоеЛицо.ФизическоеЛицо);
	Возврат ЮрФизЛицо;
	
	
КонецФункции
Показать
triton_tver; biimmap; ivangrant; Andy_NTG; gglvov; Alex_Bratushka; +6 Ответить
8. Denis_CFO 48 22.04.16 17:07 Сейчас в теме
(6) Boneman, это работает, когда две конфигурации одинаковые... (значения перечисления) а у ТС определенно разные...
9. Boneman 298 22.04.16 17:11 Сейчас в теме
(8) Denis_CFO, они не могут быть одинаковые.
Для того индекс значения и вычисляем - он является примитивным типом, спокойно передается по оле,
и дальше последней строкой определяем результат, в зависимости от индекса.

Хоть 100 вариантов там будет,
пример не для тупого копипаста приведен, а для того чтобы понять как это работает.
В моем случае - там всего 2 значения, 0 и 1.
10. Denis_CFO 48 22.04.16 17:13 Сейчас в теме
(9) Boneman, Ну звиняй тогда, значит у меня не получилось, попробую ещё. Обычно вытаскиваю значение перечисления в виде строки и им пользуюсь. Никогда не подводило.
12. Boneman 298 22.04.16 17:16 Сейчас в теме
(10) Denis_CFO, строкой тоже можно,
только это не совсем универсально. Переименуют название и перестанет работать.
Даже в (7) ссылка на ИТС, там официальные примеры именно по индексам.
13. утюгчеловек 38 23.04.16 15:11 Сейчас в теме
(12) Boneman,
Не согласен с тем, что это не универсально. Пример:
В Базе 1 в перечислении ТипыНалогообложенияНДС объявлено два значения ПродажаОблагаетсяНДС и ПродажаНеОблагаетсяНДС
В Базе 2 в перечислении ТипыНалогообложенияНДС тоже объявлено два значения, но в другом порядке.
Какой вариант сравнит верно - по индексу или по строке?

Пример 2:
В Базе 1 в перечислении ТипыНалогообложенияНДС объявлено два значения "ПродажаОблагаетсяНДС" и "ПродажаНеОблагаетсяНДС"
В Базе 2 в перечислении ТипыНалогообложенияНДС тоже объявлено два значения: "ПродажаНДС" и "ПродажаБезНДС"
Стоит ли доверять сравнению по индексу, или лучше выбросить исключение? Ведь нет стропроцентной уверенности, что сопоставление будет корректным? А что если в перечислении в базе 2 - более двух значений?

(1) Black Cat, конечно зависит от того одинаковые ли версии конфигурации. И если да, то вариант по индексу подойдет. Но вдруг одна база шагнет на версию дальше чем вторая - и возникнут различия в названии объектов метаданных и/или синонимов? Считаю что правильнее будет как-то так:

Если Строка(ДокумИст.НалогообложениеНДС) = COMБаза.String(COMБаза.Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС) Тогда
  НовыйДокум.УчитыватьНДС=Истина;
ИначеЕсли Строка(ДокумИст.НалогообложениеНДС) = COMБаза.String(COMБаза.Перечисления.ТипыНалогообложенияНДС.ПродажаНЕОблагаетсяНДС) Тогда
  // ...
Иначе
  ВызватьИсключение "непредвиденное значение реквизита";
КонецЕсли;
Slypower; ir-ish-ka; +2 Ответить
11. Boneman 298 22.04.16 17:13 Сейчас в теме
(8) Denis_CFO, в моем примере, это выдержка из выгрузки, из отраслевой конфы автосалона, переписанной на 90% в типовую бухню.
Ничего там идентичного в конфигурациях нет.
7. dmitrichenko.ivan 6 22.04.16 17:05 Сейчас в теме
Соединитель = Новый COMОбъект("V8.COMConnector");
Соединение = Соединитель.connect("File=c:\InfoBaseDirectory");
ЭлементПеречисления = Соединение.Справочники.Справочник1.НайтиПоКоду(1).Реквизит1;
ВозможныеЗначения = ЭлементПеречисления.Метаданные().ЗначенияПеречисления;
НомерЭлементаПеречисления = ВозможныеЗначения.Индекс(ВозможныеЗначения.Найти(Соединение.XMLString(ЭлементПеречисления)));
Если НомерЭлементаПеречисления = 0 Тогда
    Сообщить("ЗначениеПеречисления1");
ИначеЕсли НомерЭлементаПеречисления = 1 Тогда
    Сообщить("ЗначениеПеречисления2");
КонецЕсли;
Показать


http://its.1c.ru/db/metod8dev/content/2261/hdoc
3. ipoloskov 162 22.04.16 16:59 Сейчас в теме
Я использовал функцию COMБаза.Перечисления.ТипыНалогообложенияНДС.Индекс(Значение_Перечисления)
Manticor; Boneman; +2 Ответить
14. Black Cat 32 29.04.16 12:50 Сейчас в теме
Всем спасибо за помощь !
Сделал вот таким способом:
Если (COMБаза.XMLСтрока(ДокумV8Ист.НалогообложениеНДС) = "ПродажаОблагаетсяНДС") Тогда
			НовыйДокум.УчитыватьНДС=Истина;
		Иначе
			НовыйДокум.УчитыватьНДС=Ложь;
		КонецЕсли;
dunaev.anton; ab_initio; mi13; HaIIpuKoJIe; Xo66ut; abrams_n; fedel_lozovski; maxos1978; Diamante; join2us; Manticor; +11 Ответить
15. SV6 05.09.19 13:15 Сейчас в теме
Решение куда проще и изящней
Сравнение = мВнешниеСоеденение.NewObject("СравнениеЗначений");
Если Сравнение.Сравнить(мВнешниеСоеденение.Справочники.Организации.НайтиПоКоду("000000001"), мВнешниеСоеденение.Справочники.Организации.НайтиПоКоду("000000001"))=0 Тогда
  Сообщить("А равны ведь, епта!");
КонецЕсли;


откопал тут
https://forum.mista.ru/topic.php?id=805694
Mallok; Slypower; fedel_lozovski; vadim.semyonov.rzn; vladnet; +5 Ответить
16. mcgoen 22.01.24 14:24 Сейчас в теме
Если перечисления идентичны, то подойдет такой вариант:
КОМСоединение.Перечисления.ВашеПеречислениеВДругойБазе[XMLСтрока(ПеречислениеИзВашейБазы)];

По сути в квадратных скобках передается наименование перечисления без пробелов, например
Перечисления.Статусы["КОтгрузке"]
, что программой будет воспринято как
Перечисления.Статусы.КОтгрузке
- это очень удобно и быстро
17. user1880116 22.01.24 14:50 Сейчас в теме
(16)
это очень удобно и быстро
Итак, мы получили ответ на вопрос, заданный всего 5 лет назад. Кто же побъет этот рекорд монументальности размышлений?
18. mcgoen 24.01.24 06:44 Сейчас в теме
(17)
Вопросы и ответы на форуме не имеют срока давности, многие гуглят информацию и попадают в эту ветку, как и я, когда искал решение.
19. user1880116 24.01.24 08:30 Сейчас в теме
(18)
не имеют срока давности
И ни платформа у нас не меняется ни законодательство, решения не устаревают и методология неизменна. Да и типовые никто не исправляет. Всё так.
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)