Имя: Пароль:
1C
1С v8
Перенос из 7.7 в 8.2 через OLE
0 Sun125
 
03.03.12
11:37
Переношу справочник из 7.7 в 8.2 через OLE.
Подскажите,пожалуйста,как прочитать ТЗ, которая представлена в 7.7 в виде строки?
в 7.7 эта ТЗ считывается методом: ТЗ = ЗначениеИзСтроки(Нормативы)
как это сделать 8.2?
1 Rie
 
03.03.12
11:42
(0) В 7.7 в глобальном модуле завести экспортируемую переменную (например, глСтрокаТЗ) и

База77.глСтрокаТЗ = Нормативы;
ТЗ77 = База77.EvalExpr("ЗначениеИзСтроки(глСтрокаТЗ)");
2 andrewks
 
03.03.12
12:04
(1) в принципе, если конфу менять нельзя, можно какую-нибудь из уже имеющихся заюзать, а потом вернуть на место
3 andrewks
 
03.03.12
12:11
(1) кстати, а зачем вообще глоб.переменная?
4 Мимохожий Однако
 
03.03.12
12:16
Проще напрямую читать объекты и формировать свою ТЗ или массив
5 Sun125
 
03.03.12
12:20
(1) ТЗ77 - это COMобъект. Как его можно считать в нормальную ТЗ на 8-ке?
6 Мимохожий Однако
 
03.03.12
12:23
(5)"ТЗ77 - это COMобъект". Враки.
через ОЛЕ можно перенести только базовые типы.
7 Sun125
 
03.03.12
12:23
(4) КАК из этого сформировать свою ТЗ?)
{"ТаблицаЗначений","2",{"0","","0","0","0","","2",{{"КолвоКомнат","Колво комнат","1","0","0",{},"","0",{{"Строка","1 комнат"},{"Строка","2 комнат"},{"Строка","3 комнат"},{"Строка","4 комнат"},{"Строка","5 комнат"},{"Строка","6 комнат"}}},{"Прописано0","Нет","1","5","1",{},"","0",{{"Число","0"},{"Число","0"},{"Число","0"},{"Число","0"},{"Число","0"},{"Число","0"}}},{"Прописано1","1","1","4","2",{},"","0",{{"Число","0"},{"Число","0"},{"Число","0"},{"Число","0"},{"Число","0"},{"Число","0"}}},{"Прописано2","2","1","4","3",{},"","0",{{"Число","0"},{"Число","0"},{"Число","0"},{"Число","0"},{"Число","0"},{"Число","0"}}},{"Прописано3","3","1","4","4",{},"","0",{{"Число","0"},{"Число","0"},{"Число","0"},{"Число","0"},{"Число","0"},{"Число","0"}}},{"Прописано4","4","1","4","5",{},"","0",{{"Число","0"},{"Число","0"},{"Число","0"},{"Число","0"},{"Число","0"},{"Число","0"}}},{"Прописано5","5","1","4","6",{},"","0",{{"Число","0"},{"Число","0"},{"Число","0"},{"Число","0"},{"Число","0"},{"Число","0"}}},{"Прописано6",">5","1","4","7",{},"","0",{{"Число","0"},{"Число","0"},{"Число","0"},{"Число","0"},{"Число","0"},{"Число","0"}}}}}}
8 Мимохожий Однако
 
03.03.12
12:24
Ты посмотри откуда эту ТЗ берет семерка. И возьми напрямую через ОЛЕ.
9 Sun125
 
03.03.12
12:24
(6) ну как, в отдлачике смотрю...что comобъект
10 andrewks
 
03.03.12
12:25
(5) а что, ТЗ77.ВыбратьСтроки(); не работает?
11 Sun125
 
03.03.12
12:25
(8) Семерка берет вот так ТЗ = ЗначениеИзСтроки(Нормативы). При открытии формы
12 Мимохожий Однако
 
03.03.12
12:25
Покажи не ТЗ, а строку Нормативы.
13 Мимохожий Однако
 
03.03.12
12:27
Незачем кидать в ТЗ, а потом героически расшифровывать.
14 Rie
 
03.03.12
12:28
(2) Да, в общем-то, незачем - если не забыть удвоить кавычки :-)
15 Rie
 
03.03.12
12:30
(12) Видимо, в (7) и есть эта строка. Кто-то очень "умно" решил обойтись без подчинённого справочника и упаковать "табличную часть" в строку.
16 Мимохожий Однако
 
03.03.12
12:32
На (10) клиент не ответил.
17 Мимохожий Однако
 
03.03.12
12:34
Если информация нужна только в открытой форме, то возможно, она не нужна в 8-ке
18 Rie
 
03.03.12
12:35
(6) IDispatch и прочие интерфейсы - тоже переносятся через OLE.
19 Мимохожий Однако
 
03.03.12
12:37
(18)Сбрось примерчик
20 Sun125
 
03.03.12
12:41
Все получилось, спасибо!
База.глСтрокаТЗ = СпрНаборТарифов.Нормативы;
           ТЗ77 = База.EvalExpr("ЗначениеИзСтроки(глСтрокаТЗ)");
           ТЗ77.ВыбратьСтроки();
           Пока ТЗ77.ПолучитьСтроку()=1 Цикл
               Сообщить(ТЗ77.Прописано1);
           КонецЦикла;
21 Rie
 
03.03.12
12:45
(19)

База77 = СоздатьОбъект("V77.Application");
База77.Initialize(База77.RMTrade,"","");
спрНоменклатура = База77.CreateObject("Справочник.Номенклатура");
спрЕдиницы = База77.CreateObject("Справочник.Единицы");
спрНоменклатура.ВыбратьЭлементы();
Пока спрНоменклатура.ПолучитьЭлемент()=1 Цикл
   Если спрНоменклатура.ЭтоГруппа()=0 Тогда
       спрЕдиницы.ИспользоватьВладельца(спрНоменклатура.ТекущийЭлемент()); // передаём интерфейс
       спрЕдиницы.ВыбратьЭлементы();
       Пока спрЕдиницы.ПолучитьЭлемент()=1 Цикл
           Сообщить(спрЕдиницы.Наименование);
       КонецЦикла;
       Прервать;
   КонецЕсли;
КонецЦикла;
22 Мимохожий Однако
 
03.03.12
14:38
Что и требовалось доказать. Развернули объекты на ОЛЕ - источнике и взяли базовые значения.
(20)ТЗ77.Прописано1 - строковое значение
(21)спрЕдиницы.Наименование  - строковое значение.
... спасибо за примерчики.
23 Rie
 
03.03.12
14:55
(22) При чём тут спрЕдиницы.Наименование? Речь о спрНоменклатура.ТекущийЭлемент() - интерфейс передаётся по OLE как параметр.
24 Мимохожий Однако
 
03.03.12
15:08
ОК. Возможно, я не силён в терминологии...Однако в любом случае все действия идут на стороне ОЛЕ-клиента,а в 8-ку передаются базовые типы. И спрЕдиницы и спрНоменклатура - ОЛЕ объекты.
25 DrShad
 
03.03.12
15:20
какие еще интерфейсы? вы о чем?
26 EvgeniuXP
 
03.03.12
15:24
вот интересно: а сохранить ТЗ в текстовый файл (7.7) и прочитать в 8.х - будет работать? :)
27 DrShad
 
03.03.12
15:25
конечно будет
28 Rie
 
03.03.12
15:27
(24)Я не понял, что ты имеешь в виду. В примере из (21) я методу ИспользоватьВладельца передал в качестве параметра OLE-объект. И он корректно его обработал.
Ограничения у 1С на параметры имеются (особенно у 7-ки). Но в данных случаях - всё работает.
2 + 2 = 3.9999999999999999999999999999999...