gifts2017

Хитрость. Использование БУЛЕВО при OLE обмене/подключении из 7.7 к 8

Опубликовал Дмитрий Неважнов (bsturtle) в раздел Обмен - Перенос данных из 1С7.7 в 1C8.X

Как известно, при OLE обмене доступны только типы СТРОКА, ЧИСЛО, ДАТА. А вот БУЛЕВО (ИСТИНА, ЛОЖЬ) использовать при подключении из 7.7 к 8 не получается. Как же быть? Есть хитрость, как использовать тип булево в семерке при обмене с 1С8! :)

Дано:

В восьмерке читаем документ "РеализацияТоваровУслуг" у которого есть реквизит "СуммаВключаетНДС" типа булево и нам необходимо превратить его в семерочный СуммаВклНДС тип число (1 или 0). Например:

Если ОбъектРеализацияТоваровУслуг1С8.СуммаВключаетНДС = истина ....


- так не прокатит, в семерке нет понятия "истина".

Как выкрутился я:

В 77 завел две переменные:

Перем ИСТИНА_8
Перем ЛОЖЬ_8
ИСТИНА_8 = СоединениеСбАЗОЙ8.ЗначениеИзСтрокиВнутр("{""B"",1}")
ЛОЖЬ_8 = СоединениеСбАЗОЙ8.ЗначениеИзСтрокиВнутр("{""B"",0}")


Теперь в 7.7 есть булево! Теперь можно делать так:

Если ОбъектРеализацияТоваровУслуг1С8.СуммаВключаетНДС = истина_8 Тогда
   
Документ77.СуммаВклНДС = 1;
Иначе
   
Документ77.СуммаВклНДС=0
КонецЕсли;

P.S.

Если в восьмерке выполнить код "ЗначениеВстрокуВнутр(Истина)", то строковое значение будет={"B",1}"
Аналогично узнаем строковый "аналог" ЛОЖЬ = 
{"B",0}"
Пользуемся этим в семерке, делая обратное преобразование. :)

 

Конечно же, я не сам дошел до этого.. Где-то один раз на форумах видел.. по-моему, на мисте. Но больше не встречал нигде.
Решил донести в массы. Надеюсь, что не открыл Америки ))
Не судите строго. За плюсы, если заслужил - "респекты!" 

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Alxd (salexdv) 28.09.11 17:40
К чему этот велосипед, нельзя просто написать
Если ОбъектРеализацияТоваровУслуг1С8.СуммаВключаетНДС = 1 Тогда
?
2. Alxd (salexdv) 28.09.11 17:44
Или (если проверка на ложь)
Если ОбъектРеализацияТоваровУслуг1С8.СуммаВключаетНДС <> 1 (=0) Тогда 

Уж куда проще и понятнее
3. Александр Лыткин (TrinitronOTV) 29.09.11 12:04
Alxd пишет:

Или (если проверка на ложь)

согласен
4. Сергей Шевченко (demon_infernal) 05.10.11 17:35
нашел в справке по встроенному языку 7.7
В OLE Automation TRUE и FALSE имеют соответственно значе­ния: -1 (минус единица) и 0.
5. Николай Грунский (nicklson) 05.10.11 19:12
Сдается мне, что для данного примера правильнее будет так:


документ77.СуммаВклНДС = Число(Сред(СоединениеСбАЗОЙ8.ОбъектРеализацияТоваровУслуг1С8.СуммаВключаетНДС)8,1);
6. Николай Грунский (nicklson) 05.10.11 19:14
Пардон, вечно запятые забываю:

документ77.СуммаВклНДС = Число(Сред(СоединениеСбАЗОЙ8.ОбъектРеализацияТоваровУслуг1С8.СуммаВключаетНДС),8,1);
7. Андрей Гореликов (alon) 07.10.11 11:31
(6)С чего ты взял, что это вдруг заработает? Может нужно где-то ЗначениеВстрокуВнутр использовать?
8. Николай Грунский (nicklson) 07.10.11 12:18
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа