Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Создание элементов справочника через СОМ соединение          
bizisoft Подменю пользователя
сообщение 25.02.20, 0:19
Сообщение #1

Завсегдатай
****
Группа: Пользователи
Сообщений: 242
Из: Донецк
Спасибо сказали: 19 раз
Рейтинг: 0

Здравствуйте.
Подскажите пожалуйста как через СОМ соединение можно создавать элементы в справочниках.
Пробовал так:
СпрПр = Подключение.NewObject("СправочникСсылка.Производители");
    СпрПр.Наименование = пвПроизводитель.Наименование;
    СпрПр.СтранаПроисхождения = пвПроизводитель.СтранаПроисхождения;
    СпрПр.Записать();


{Форма.ПроверкаИнтернетЗаказов.Форма(4932)}: Ошибка при установке значения атрибута контекста (Наименование)
СпрПр.Наименование = пвПроизводитель.Наименование;
по причине:
Метод не найден


Так тоже не выходит.
СпрПр = Подключение.Справочники.Производители.СоздатьЭлемент();
    СпрПр.Наименование = пвПроизводитель.Наименование;
    СпрПр.СтранаПроисхождения = пвПроизводитель.СтранаПроисхождения;
    СпрПр.Записать();



{Форма.ПроверкаИнтернетЗаказов.Форма(4938)}: Ошибка при вызове метода контекста (Записать)
СпрПр.Записать();
по причине:
Произошла исключительная ситуация (1C:Enterprise 8.2.19.130): Не удалось записать: "Производители"!

Стала закрадываться мысль, что через СОМ нельзя создавать объекты, но на просторах интернета уже несколько раз встречал, что якобы можно проводить документ, хоть и более детальной информации так и не нашел.

Помогите с информацией по этому вопросу, или успокойте, если создавать объекты через СОМ нельзя.


Signature
1С:Предприятие 8.2 (8.2.19.130)
"Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1" (4.1.20.01)
обычные формы.

denis84 Подменю пользователя
сообщение 25.02.20, 8:30
Сообщение #2

Оратор
Иконка группы
Группа: Местный
Сообщений: 428
Из: Украина
Спасибо сказали: 137 раз
Рейтинг: 138.5

bizisoft @ Сегодня, 0:19 * ,
Доброе утро! Все можно делать, по крайней мере у меня в 1С8: УТП получалось. Вот пример создания контрагентов. Подключение по ОЛЕ к 1С:7.7

Процедура ЗагрузитьКонтрагента()
СпрОЛЕ = V77.CreateObject("Справочник.Контрагенты");
СпрОЛЕ.ВыбратьЭлементы();
Пока СпрОЛЕ.ПолучитьЭлемент()=1 Цикл
Если СпрОле.ЭтоГруппа() Тогда
Группа = Справочники.Номенклатура.СоздатьГруппу();
Группа.Код = СпрОле.Код;
Группа.Наименование = СпрОле.Наименование;
Группа.Записать();
КонецЕсли;

ЭлементПоиска = Справочники.Контрагенты.НайтиПоКоду(СпрОЛЕ.Код);
Если ЭлементПоиска.Пустая() Тогда
НовыйЭлемент = Справочники.Контрагенты.СоздатьЭлемент();
//НовыйЭлемент.Родитель = Группа.Ссылка;
//НовыйЭлемент.НоменклатурнаяГруппа = СпрОЛЕ.Наименование;
НовыйЭлемент.Код = СпрОЛЕ.Код;
сообщить(СпрОЛЕ.Код);
НовыйЭлемент.Наименование = СпрОЛЕ.Наименование;
НовыйЭлемент.НаименованиеПолное = СпрОЛЕ.ПолнНаименование;
НовыйЭлемент.Записать();
КонецЕсли;
КонецЦикла;
КонецПроцедуры

denis84 @ Сегодня, 8:21 * ,
Вот пример по ТМЦ:

СпрОЛЕ = V77.CreateObject("Справочник.ТМЦ");
СпрОЛЕ.ВыбратьЭлементы();
Пока СпрОЛЕ.ПолучитьЭлемент()=1 Цикл
Если СпрОле.ЭтоГруппа() Тогда
Группа = Справочники.Номенклатура.НайтиПоКоду(СпрОЛЕ.Код);
Если Группа.Пустая() Тогда
Группа = Справочники.Номенклатура.СоздатьГруппу();
Группа.Код = СпрОле.Код;
Группа.Наименование = СпрОле.Наименование;
Группа.Записать();
КонецЕсли;
КонецЕсли;

ЭлементПоиска = Справочники.Номенклатура.НайтиПоКоду(СпрОЛЕ.Код);
Если ЭлементПоиска.Пустая() Тогда
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.Родитель = Группа.Ссылка;
НовыйЭлемент.НоменклатурнаяГруппа = СпрОЛЕ.Наименование;
НовыйЭлемент.Код = СпрОЛЕ.Код;
сообщить(СпрОЛЕ.Код);
НовыйЭлемент.Наименование = СпрОЛЕ.Наименование;
НовыйЭлемент.НаименованиеПолное = СпрОЛЕ.ПолнНаименование;
НовыйЭлемент.Записать();
КонецЕсли;
КонецЦикла;

Спасибо сказали: bizisoft,

Petre Подменю пользователя
сообщение 25.02.20, 9:10
Сообщение #3

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2905
Из: Київ, Україна
Спасибо сказали: 1147 раз
Рейтинг: 1228.9

bizisoft @ Today, 0:19 * ,
Обратите внимание на данный код:
СпрПр.СтранаПроисхождения = пвПроизводитель.СтранаПроисхождения;

Вы пытаетесь присвоить полю записи в одной базе данных значение (ссылку) из совсем другой базы данных.


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

Спасибо сказали: bizisoft,

stark Подменю пользователя
сообщение 25.02.20, 17:28
Сообщение #4

Говорящий
***
Группа: Пользователи
Сообщений: 58
Из: Киев
Спасибо сказали: 7 раз
Рейтинг: 0

bizisoft @ Сегодня, 0:19 * ,
Делаю просто

Спр=Соединение.Справочники[ИмяСправочника].СоздатьЭлемент();


В догонку
[необходимо зарегистрироваться для просмотра ссылки]

Спасибо сказали: bizisoft,

mut Подменю пользователя
сообщение 25.02.20, 21:49
Сообщение #5

Завсегдатай
****
Группа: Пользователи
Сообщений: 199
Из: Новая Каховка
Спасибо сказали: 203 раз
Рейтинг: 237.5

Попробуйте те поля, которые предопределены указывать в английском варианте, не "Наименование" а "Description" и т.п.

Спасибо сказали: bizisoft,

bizisoft Подменю пользователя
сообщение 25.02.20, 23:07
Сообщение #6

Завсегдатай
****
Группа: Пользователи
Сообщений: 242
Из: Донецк
Спасибо сказали: 19 раз
Рейтинг: 0

Цитата(Petre @ 25.02.20, 10:10) *
Вы пытаетесь присвоить полю записи в одной базе данных значение (ссылку) из совсем другой базы данных.

Как-то совсем забыл, что СОМ соединение не дружит с ссылками.
А как тогда быть с такой ситуацией, когда заполняемый реквизит является ссылкой, как его заполнять в СОМ?

Цитата(denis84 @ 25.02.20, 9:30) *
Доброе утро! Все можно делать, по крайней мере у меня в 1С8: УТП получалось. Вот пример создания контрагентов. Подключение по ОЛЕ к 1С:7.7

Если я правильно понял ваш код, то вы через подключаетесь через OLE (хотя очень похоже на СОМ), через СОМ делаете выборку и полученные данные записываете в базу из которой подключались.

Это немного не то, что мне нужно.
Мне нужно создать запись в базе, к которой я подключаюсь через СОМ.

Т.е. суть такова - например в Основной базе создается элемент справочника и нужно продублировать этот элемент в другой базе, подключившись к ней через СОМ соединение.


Signature
1С:Предприятие 8.2 (8.2.19.130)
"Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1" (4.1.20.01)
обычные формы.

sava1 Подменю пользователя
сообщение 26.02.20, 7:52
Сообщение #7

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

Цитата(bizisoft @ 25.02.20, 23:07) *
вы через подключаетесь через OLE (хотя очень похоже на СОМ)


эт какая разница ? ОЛЕ это реализация СОМ

denis84 Подменю пользователя
сообщение 26.02.20, 8:17
Сообщение #8

Оратор
Иконка группы
Группа: Местный
Сообщений: 428
Из: Украина
Спасибо сказали: 137 раз
Рейтинг: 138.5

bizisoft @ Вчера, 23:07 * ,
При подключении по ОЛЕ запускается отдельный процесс 1с8,а при com нет. Из пустой базы подключаюсь к основной и из нее получаю данные и пишу в новую базу.

Petre Подменю пользователя
сообщение 26.02.20, 9:29
Сообщение #9

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2905
Из: Київ, Україна
Спасибо сказали: 1147 раз
Рейтинг: 1228.9

QUOTE (bizisoft @ 25.02.20, 23:07) *
А как тогда быть с такой ситуацией, когда заполняемый реквизит является ссылкой, как его заполнять в СОМ?

В подключенной же базе и ищите нужную ссылку и присваивайте значению.
Т. е. что-то типа того:
СпрПр = Подключение.Справочники.Производители.СоздатьЭлемент();

СпрПр.Наименование = пвПроизводитель.Наименование;

СпрСт = Подключение.Справочники.Страны.НайтиПоНаименованию(пвПроизводитель.СтранаПроисхождения.Наименование);

СпрПр.СтранаПроисхождения = СпрСт;

СпрПр.Записать();


QUOTE (denis84 @ 26.02.20, 8:17) *
При подключении по ОЛЕ запускается отдельный процесс 1с8,а при com нет.

Вы немного путаете. В терминологии 1с, есть COMСоединитель и AplicationСервер. И то и другое - COM- (или по-старому, OLE-) технология.


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

Спасибо сказали: bizisoft,

denis84 Подменю пользователя
сообщение 26.02.20, 9:42
Сообщение #10

Оратор
Иконка группы
Группа: Местный
Сообщений: 428
Из: Украина
Спасибо сказали: 137 раз
Рейтинг: 138.5

Petre @ Сегодня, 9:29 * ,
Да,согласен. Делаю так Соединение = Новый COMОбъект("V82.Application");

bizisoft Подменю пользователя
сообщение 26.02.20, 10:18
Сообщение #11

Завсегдатай
****
Группа: Пользователи
Сообщений: 242
Из: Донецк
Спасибо сказали: 19 раз
Рейтинг: 0

Решил поэксперементировать со справочником попроще.
КлассификаторСтранМира
Та же петрушка.

Есть подозрение, что обязательный реквизит "Код" автоматически не присваивается.
Попробовал код выполнить без СОМ, просто в базе - таки да, ругается на Код не заполнен.

Тогда не понятно, как тогда присвоить ему нужное значение?
Наверное функция УстановитьНовыйКод() через СОМ работать не будет.


Signature
1С:Предприятие 8.2 (8.2.19.130)
"Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1" (4.1.20.01)
обычные формы.

Petre Подменю пользователя
сообщение 26.02.20, 10:28
Сообщение #12

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2905
Из: Київ, Україна
Спасибо сказали: 1147 раз
Рейтинг: 1228.9

QUOTE (bizisoft @ 26.02.20, 10:18) *
Наверное функция УстановитьНовыйКод() через СОМ работать не будет.

QUOTE
УстановитьНовыйКод (SetNewCode)
...
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер).


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

Спасибо сказали: bizisoft,

bizisoft Подменю пользователя
сообщение 26.02.20, 10:41
Сообщение #13

Завсегдатай
****
Группа: Пользователи
Сообщений: 242
Из: Донецк
Спасибо сказали: 19 раз
Рейтинг: 0

bizisoft @ Сегодня, 11:18 * ,
Я ошибался. УстановитьНовыйКод() работает однако.

Это хорошо, тогда буду пробовать дальше.

Цитата(Petre @ 26.02.20, 10:29) *
В подключенной же базе и ищите нужную ссылку и присваивайте значению.
Т. е. что-то типа того:

А я думал, что объект полученный через СОМ имеющий тип Ссылка невозможно использовать и нужно пользовать только простые типы, т.к. если например запросом получить данные то ссылочный реквизит содержит СОМОбъект.

Petre, а если например я в ОбщииМодули добавлю свой модуль, в котором пропишу свою функцию (например которая ищет Товар по двум параметрам Артикул и Производитель и возвращает результат), и запущу ее через СОМ соединение, в каком контексте она отработает, в контексте текущей базы или в контексте базы к которой подключился?


Signature
1С:Предприятие 8.2 (8.2.19.130)
"Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1" (4.1.20.01)
обычные формы.

sava1 Подменю пользователя
сообщение 26.02.20, 10:51
Сообщение #14

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

Цитата(bizisoft @ 26.02.20, 10:41) *
пропишу свою функцию (например которая ищет Товар по двум параметрам Артикул и Производитель и возвращает результат), и запущу ее через СОМ соединение, в каком контексте она отработает


в контексте подключенной базы и вернет СОМ-объект, поэтому в таких случаях возвращает примитивные типы

Спасибо сказали: bizisoft,

mut Подменю пользователя
сообщение 26.02.20, 11:43
Сообщение #15

Завсегдатай
****
Группа: Пользователи
Сообщений: 199
Из: Новая Каховка
Спасибо сказали: 203 раз
Рейтинг: 237.5

Если связь между базами более-менее постоянная, я, обычно в базе-приемнике, в модуле Внешнего соединения, пишу необходимые методы для формирования данных и вызываю их из исходной базы. Получается проще - получили простые данные - названия или коды и пр., потом уже в контексте принимающей БД делаем поиск, создание и прочее.

Спасибо сказали: bizisoft, stark,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 16.04.24, 16:57
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!