Имя: Пароль:
1C
1C 7.7
v7: Не переносится полноенаименование по OLE из 7.8 в 8.3
,
0 РусскийВедун
 
11.02.19
20:58
Из 7.7 подключаюсь по ole к 8.3 и создаю там элемент справочника, все хорошо, но реквизит полноенаименование не могу создать. Вылетает ошибка не найден метод. Перепробовал разные варианты.
в Лоб...
V8 = СоздатьОбъект("V83.Application");  
    
    попытка
        V8.connect("File=""D:\1c_base"";Usr=""Ole"";pwd=""999""");
        Сообщить("Подключились к базе");
    Исключение
        Сообщить("Не подключился!!!!");  
        Сообщить(Описаниеошибки());
    КонецПопытки;    
    Спр = V8.Справочники.Номенклатура;  
    Спр2 = V8.Справочники.Номенклатура;  
    НайденнаяСсылка2 =спр2.найтипореквизиту("КодДругойБазы",кодтмц);
    НайденнаяСсылка =спр.найтипореквизиту("КодДругойБазы",кодрод);
    ед=V8.Справочники.ОКЕИ;
    нужнаяед=ед.найтипоКоду("796");
    если сокрлп(НайденнаяСсылка2.наименование)="" тогда
        
        Если сокрлп(НайденнаяСсылка.наименование) = "" Тогда
            Предупреждение("Не найден код родителя в 1с 8! ");
        Иначе
            Спр2 = V8.Справочники.Номенклатура;  
            
                НовыйЭлемент = Спр2.СоздатьЭлемент();
                //НовыйЭлемент.код = спр.код;
                НовыйЭлемент.КодВоВнешнейИБ= кодтмц;
                НовыйЭлемент.КодДругойБазы= кодтмц;
                НовыйЭлемент.наименование =наименование;        
                
        НовыйЭлемент.ПолноеНаименование = сокрлп(наименование);
                НовыйЭлемент.Родитель    = НайденнаяСсылка;
                новыйэлемент.Артикул=артикул;
                НовыйЭлемент.видтмц    = V8.перечисления.ВидыТМЦ.Материал;
                НовыйЭлемент.базоваяединица    = нужнаяед;
                //НовыйЭлемент.Записать();

            Попытка
                    НовыйЭлемент.Записать();
                //Возврат 1;
            Исключение
                Предупреждение("Не удалось создать ТМЦ в 1с 8!");  
                сообщить(описаниеошибки());
            КонецПопытки;  
            
        КонецЕсли;
    иначе      
        сообщить(найденнаяссылка2.наименование);
        Предупреждение("ТМЦ с таким кодом уже существует в 1с 8!");
    конецесли;


потом пробовал
СтрокаКода = "
            |Ссылка1 = Справочники.Номенклатура.НайтиПоРеквизиту(""КодДругойБазы"","+КодТМЦ+");
            |Объект1 = Ссылка1.ПолучитьОбъект();
            |Объект1.ПолноеНаименование = "+сокрлп(наименование)+";
            |Объект.Записать();";
            V8.выполнить(СтрокаКода);
и

СтрокаКода = "
            |Ссылка1 = Справочники.Номенклатура.НайтиПоРеквизиту(""КодДругойБазы"","+КодТМЦ+");
            |Объект1 = Ссылка1.ПолучитьОбъект();
            |Объект1.ПолноеНаименование = "+сокрлп(наименование)+";
            |Объект.Записать();";
            V8.EXECUTEBATCH(СтрокаКода);

Ошибки поле агрегатного объекта не обнаружено выполнить и executebatch

Может кто-нибудь-знает как такое можно обойти?
1 Злопчинский
 
11.02.19
21:16
НайденнаяСсылка2 =спр2.найтипореквизиту("КодДругойБазы",кодтмц);
- а вот эта хрень случайно в НайденнаяСсылка2 вернет ли 1 или 0 (истина/ложь) - я сомневаюсь что найтиПоРеквизиту возвращает указатель на объект.

я 8-ку не знаю, но попробовал бы как в 77 типа
Если спр2.найтипореквизиту("КодДругойБазы",кодтмц)<>0 Тогда
  НайденнаяСсылка2 = Спр2.ТекущийЭлемент();
КонецЕсли;
2 hhhh
 
11.02.19
21:17
(0) ПолноеНаименование - это функция вообще-то стандартная у объекта. Реквизит смотрите, по другому должен называться.
3 Злопчинский
 
11.02.19
21:21
Хотя, не... налажал я. в СП написано
Возвращаемое значение: СправочникСсылка
4 Злопчинский
 
11.02.19
21:24
Вот это что за хрень:

|Объект1.ПолноеНаименование = "+сокрлп(наименование)+";

наименование - это что? и откуда в 8-ой базе во время выполнения восьмерочного кода будет доступна переменная из 77-контекста?
5 Злопчинский
 
11.02.19
21:28
вот здесь
сообщить(описаниеошибки());
- дословно сообщение об ошибке
6 HawkEye
 
11.02.19
21:36
(0) ты уверен, что в 8-ке у справочника есть реквизит ПолноеНаименование?

зы. даже в 7.7 он не так назывался в типовых...
7 sidalexsandr
 
11.02.19
21:38
(0) 7.8 что ты имеешь ввиду, платформа вроде была 7.7
8 Злопчинский
 
11.02.19
21:50
Справочник.Номенклатура.ПолноеНаименование - в 77 метод такой был, возвращал через слеши полное наименование со всеми родителями.
м.б. 8-как как раз и ругается что она не понимает что такое ПолноеНаименование
9 Ёпрст
 
11.02.19
21:58
(0)

НовыйЭлемент.НаименованиеПолное= сокрлп(наименование);
10 РусскийВедун
 
11.02.19
22:14
(6) да в 8 реквизит есть полноенаименование
11 РусскийВедун
 
11.02.19
22:15
(8) в этом и проблема, что есть и метод и реквизит с таким наименованием
12 Ёпрст
 
11.02.19
22:15
(10) см.(9)
13 РусскийВедун
 
11.02.19
22:17
(4) это с 7 данные. Даже неважно что там. Проблема в полному Меновазин в 8
14 Кулибин
 
11.02.19
22:17
ПолнНаименование м.б.? :-) реквизит, как сейчас, наверное. С полным будет беда,конечно...
15 РусскийВедун
 
11.02.19
22:19
(12) ты уверен , что так сработает?
16 Ёпрст
 
11.02.19
22:20
(15) смотря какая конфа, в типовых, в Номенклатуре - НаименованиеПолное
17 РусскийВедун
 
11.02.19
22:21
Я же говорю,что в этой конфе полное наименование и менять я ее не могу.
18 HawkEye
 
11.02.19
22:25
(17) ну мало ли что ты говоришь ))
давай сюда скрин дерева с реквизитами справочника...
19 Ёпрст
 
11.02.19
22:28
ну а так ?

V8.выполнить("НовыйЭлемент.ПолноеНаименование = сокрлп(наименование)");
20 HawkEye
 
11.02.19
22:29
(19) да ладно тебе, был бы реквизит, отработало бы и как в (0)...
21 РусскийВедун
 
11.02.19
22:29
В (0) уже писал, что выполнить не понимает.
22 Ёпрст
 
11.02.19
22:32
(20) ну это так, на всякий :))
А так да, думаю, что такого реквизита у автора нема.
Автор, кажи скрин с деревом метаданных справочника
23 hhhh
 
12.02.19
05:45
(22) ну, завести реквизит ПолноеНаименование в конфигураторе получается.
24 РусскийВедун
 
12.02.19
13:17
25 Garykom
 
гуру
12.02.19
13:19
(0) СП продать?
26 Garykom
 
гуру
12.02.19
13:23
Глобальный контекст (Global context)
ЗаполнитьЗначенияСвойств (FillPropertyValues)
Синтаксис:

ЗаполнитьЗначенияСвойств(<Приемник>, <Источник>, <СписокСвойств>, <ИсключаяСвойства>)
Параметры:

<Приемник> (обязательный)

Тип: Произвольный.
Значение, чьи свойства будут заполнены значениями соответствующих свойств <Источника>.
Внимание! Значение данного параметра не может быть следующих типов: Неопределено, Null, Число, Строка, Дата, Булево. Дата
<Источник> (обязательный)

Тип: Произвольный.
Значения свойств данного объекта будут установлены в соответствующие свойства <Приемника>.
Внимание! Значение данного параметра не может быть следующих типов: Неопределено, Null, Число, Строка, Дата, Булево.
<СписокСвойств> (необязательный)

Тип: Строка.
Список имен свойств <Источника> и <Приемника>, разделенный запятыми, которые необходимо заполнить.
Если свойства не указаны, то копируются только те, которые представлены и в <Источнике>, и в <Приемнике>.
Если свойства указаны, то они обязательно должны присутствовать в обоих объектах.
Если в <Источнике> или <Приемнике> заданное свойство отсутствует, то будет вызвано исключение.
Параметр игнорируется, если <Источник> задан.
<ИсключаяСвойства> (необязательный)

Тип: Строка.
Список имен свойств <Приемника>, разделенный запятыми, которые необходимо исключить из заполнения.
Если свойство с именем, указанным в исключающих свойствах есть в <Приемнике>, то значение этого свойства скопировано не будет. А если свойства, указанного в исключающих свойствах не окажется в <Приемнике>, то будет вызвано исключение.
Описание:

Копирует значения свойств <Источника> в свойства <Приемника>. Сопоставление производится по именам свойств.
Если указаны копируемые свойства, то в заполнении участвуют только они, параметр <ИсключаяСвойства> игнорируется.
В противном случае, если указан параметр <ИсключаяСвойства>, свойства перечисленные в нем, исключаются из обработки.

Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Примечание:

В режиме совместимости конфигурации Версия8_3_8 и ниже свойство Макет табличного документа скопировано не будет.
27 РусскийВедун
 
13.02.19
08:48
Может кому еще понадобится. Такой код помог...

    оСпр = V8.Справочники.Номенклатура.СоздатьЭлемент();
                
                мСтруктура = V8.NewObject("Структура");  
                мСтруктура.Вставить("КодВоВнешнейИБ", кодтмц);
                мСтруктура.Вставить("КодДругойБазы", кодтмц);
                мСтруктура.Вставить("наименование", наименование);
                мСтруктура.Вставить("ПолноеНаименование", "Мое полное наименование");  
                мСтруктура.Вставить("родитель", найденнаяссылка);
                мСтруктура.Вставить("артикул", артикул);
                мСтруктура.Вставить("видтмц", V8.перечисления.ВидыТМЦ.Материал);
                мСтруктура.Вставить("базоваяединица", нужнаяед);
                V8.ЗаполнитьЗначенияСвойств(оСпр, мСтруктура);
                
                
            Попытка  
                оСпр.Записать();
                //    НовыйЭлемент.Записать();
                //Возврат 1;
            Исключение
                Предупреждение("Не удалось создать ТМЦ в 1с 8!");  
                сообщить(описаниеошибки());
            КонецПопытки;
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.