8.х ОБМЕН com-соединение

Тема в разделе "Обмен данными в "1С:Предприятие 8"", создана пользователем wirg, 12 июл 2009.

  1. TopicStarter Overlay
    wirg
    Offline

    wirg

    Регистрация:
    23 май 2008
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    В модуле внешней базы прописал

    ПроЦедура КомЗаписатьВидыРаспределенияПоПроектам(Код,Наименование) Экспорт

    МенджерНоменклатура=Справочники.ВидыРаспределенияПоПроектам.НайтиПоКоду(Код);

    Если ЗначениеЗаполнено(МенджерНоменклатура.Код) тогда
    Объект=МенджерНоменклатура.Ссылка.ПолучитьОбъект();
    Объект.Наименование=Наименование;
    Объект.Код=Код;
    Объект.Записать();
    иначе
    Объект=Справочники.ВидыРаспределенияПоПроектам.СоздатьЭлемент();
    Объект.Наименование=Наименование;
    Объект.Код=Код;
    Объект.Записать();

    КонецЕсли;




    Конецпроцедуры

    Осуществляю подключение к внешней базе

    Соединение=Новый COMОбъект("V81.COMConnector");
    Попытка
    ////серверный вариант

    Торговля=Соединение.Connect("Srvr=""192.168.0.8"";ref=trade;Usr=""Администратор"";Pwd=""32"";");


    Исключение
    Предупреждение("Ошибка открытия базы!!!");
    Сообщить(ОписаниеОшибки());
    Торговля=Неопределено;
    Возврат;
    КонецПопытки;

    Передаю данные из текущей базы во внешнюю

    Торговля.ВидыРаспределенияПоПроектам(Код,Наименование);

    Выдает ошибку

    Ошибка при выполнении обработчика - '{ОбщийМодуль.С(251)}: Метод объекта не обнаружен (ВидыРаспределенияПоПроектам)'
    по причине:
    {ОбщийМодуль.С(251)}: Метод объекта не обнаружен (КомЗаписатьВидыНоменклатуры)

    Подскажите вариант решения.
  2. sergey
    Offline

    sergey Курильщик

    Регистрация:
    13 апр 2006
    Сообщения:
    365
    Симпатии:
    0
    Баллы:
    26
    По тексту не понятно, откуда вообще берется процедура КомЗаписатьВидыНоменклатуры
    Вижу только КомЗаписатьВидыРаспределенияПоПроектам(Код,Наименование)
  3. TopicStarter Overlay
    wirg
    Offline

    wirg

    Регистрация:
    23 май 2008
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    опечатался, просто для каждого справочника при зхаписи вызывается процедура его сверки с внешней базой и пишется в нее
  4. sergey
    Offline

    sergey Курильщик

    Регистрация:
    13 апр 2006
    Сообщения:
    365
    Симпатии:
    0
    Баллы:
    26
    Т.е. у вас КомЗаписатьВидыНоменклатуры и КомЗаписатьВидыРаспределенияПоПроектам - одна и та же процедура?
  5. TopicStarter Overlay
    wirg
    Offline

    wirg

    Регистрация:
    23 май 2008
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    Есть варианты решения?
  6. sergey
    Offline

    sergey Курильщик

    Регистрация:
    13 апр 2006
    Сообщения:
    365
    Симпатии:
    0
    Баллы:
    26
    Тогда давайте по-порядку.
    Почему в описании процедуры у Вас 2 параметра: Код,Наименование
    А при ее вызове передавать пытаетесь 3 параметра: Код,Наименование,ТипНоменклатуры

    И второй вопрос, хотя, дело. конечно ваше: зачем дополнительно менять внешнюю базу, а не описать действия процедуры
    сразу в текущей? Или там эта процедура используется для чего-то еще?
  7. TopicStarter Overlay
    wirg
    Offline

    wirg

    Регистрация:
    23 май 2008
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    Первое написание -это была опечатка.

    Пробовал описать действия в текущей базе и вызывать, но при вызове тоже ошибка в модуле прописано в свойствах, что внешнее соединение, клиент и сервер, а при вызове из вне например Торговля.НазваниеМодуля.ИмяПроцедуры(параметры выдает ошибку), если модуль сделать глобальным тоже не удается найти процедуру и никаких действий не происходит.
    Самое интересное, что получить объект по коду удается и изменения вносятся, а создатьэлемент, выдает ошибку описаную в первом сообщении

    Событие вызывается при записи соответствующего справочника.
    Главная идея полная синхронизация баз, без УРБД в части справочников.
    Очень много описаний получения данных из внешней базы и запись их в текущую, а наоборот мало
  8. sergey
    Offline

    sergey Курильщик

    Регистрация:
    13 апр 2006
    Сообщения:
    365
    Симпатии:
    0
    Баллы:
    26
    Попробуйте для интереса прописать процедуру в модуле приложения внешней базы для начала.
    Остальное оставить как было. Что выдает?

    просто так и не понял, в какой момент ругань?
  9. TopicStarter Overlay
    wirg
    Offline

    wirg

    Регистрация:
    23 май 2008
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    Пишет
    {ОбщийМодуль.С(251)}: Поле объекта не обнаружено (С)
    Торговля.С.КомЗаписатьВидыНоменклатуры(Код,Наименование,ТипНоменклатуры);
  10. sergey
    Offline

    sergey Курильщик

    Регистрация:
    13 апр 2006
    Сообщения:
    365
    Симпатии:
    0
    Баллы:
    26
    Далее:
    ...
    Код:
    ВидыРаспр_Т=Торговля.Справочники.ВидыРаспределенияПоПроектам.НайтиПоКоду(Код);
    Если ВидыРаспр_Т.Пустая() Тогда
    Объект_Т=Торговля.Справочники.ВидыРаспределенияПоПроектам.СоздатьЭлемент();
    Объект_Т.Наименование=Наименование;
    Объект_Т.Код=Код;
    Объект_Т.Записать();
    Иначе
    Объект_Т=ВидыРаспр_Т.ПолучитьОбъект();
    Объект_Т.Наименование=Наименование;
    Объект_Т.Код=Код;
    Объект_Т.Записать();
    КонецЕсли;
    
    
    
    
  11. TopicStarter Overlay
    wirg
    Offline

    wirg

    Регистрация:
    23 май 2008
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    Практически

    МенджерНоменклатура=Справочники.ВидыРаспределенияПоПроектам.НайтиПоКоду(Код);

    Если ЗначениеЗаполнено(МенджерНоменклатура.Код) тогда
    Объект=МенджерНоменклатура.Ссылка.ПолучитьОбъект();
    Объект.Наименование=Наименование;
    Объект.Код=Код;
    Объект.Записать();
    иначе
    Объект=Справочники.ВидыРаспределенияПоПроектам.СоздатьЭлемент();
    Объект.Наименование=Наименование;
    Объект.Код=Код;
    Объект.Записать();

    КонецЕсли;
  12. sergey
    Offline

    sergey Курильщик

    Регистрация:
    13 апр 2006
    Сообщения:
    365
    Симпатии:
    0
    Баллы:
    26
    опечатался
    см исправленное постом выше
  13. TopicStarter Overlay
    wirg
    Offline

    wirg

    Регистрация:
    23 май 2008
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    т.е. необходимо во внешней базе написать процедуру, которую ты написал и вызывать ее из текущей?
    но это в принципе тот же код, что и первоначально, и скорее всего ошибка будет таже
  14. sergey
    Offline

    sergey Курильщик

    Регистрация:
    13 апр 2006
    Сообщения:
    365
    Симпатии:
    0
    Баллы:
    26
    Нет.
    Все, что написал пишется в текущей базе. И интерактивно во внешней ищется обращением через соединение "Торговля". Через него же меняется/создается.

    Т.е. я предложил аналог процедуры(с которой проблема) внешней базы, прописанный в текущей.
  15. TopicStarter Overlay
    wirg
    Offline

    wirg

    Регистрация:
    23 май 2008
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    Все написал как было описано выше, но 1с говорит, что метод ПолучитьОбъект() и СоздатьЭлемент() не обнаружен. Пробовал CreateItem(), тоже не катит.

    Может конфой любой поможете с примером соединения в одной базой и другой конфой с событием призаписи элемента справочника любого на wirg@rambler.ru ???

    :unsure:
  16. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    Во вложении пример обработки. Делает следующее - 2 БД - УТ и БП. Подразумевалось, что обработка запускается из БП. Обрращется через соединение к УТ. И перебирая справочник номенклатуры из УТ, устанавливает такие же коды в справочнике БП. Дяля примера тебе подойдет.

    Вложения:

  17. TopicStarter Overlay
    wirg
    Offline

    wirg

    Регистрация:
    23 май 2008
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    Интресно но описание такое же как у меня, только у меня запись во внешней базе должная происходить, а не в текущей. Поэтому данный пример не подходит, мне необходимо писать элемент во внешнюю базу из текущей, а 1с говорит, что такого метода нет, хотя по коду данный элемент она находит, а получитьобъект() не может.


    Сейчас при записи в моделе объекта виды номенклатуры прописн вызов следующей процедуры
    (Торговля-это установленное соединения, которое я вызываю заранее перед этим)

    ПроЦедура КомЗаписатьВидыНоменклатуры(Код,Наименование,ТипНоменклатуры,Торговля) Экспорт

    МенджерНоменклатура=Торговля.Справочники.ВидыНоменклатуры.НайтиПоКоду(Код);

    Если не МенджерНоменклатура.Пустая() тогда
    Объект=МенджерНоменклатура.Ссылка.ПолучитьОбъект();
    Объект.Description=Наименование;
    Объект.Code=Код;
    Объект.ТипНоменклатуры=Перечисления.ТипыНоменклатуры[ТипНоменклатуры];
    Объект.Записать();
    иначе
    Объект=Торговля.Справочники.ВидыНоменклатуры.СоздатьЭлемент();

    Объект.Description=Наименование;
    Объект.Code=Код;
    Объект.ТипНоменклатуры=Перечисления.ТипыНоменклатуры[ТипНоменклатуры];
    Объект.Записать();

    КонецЕсли;



    КонецПроцедуры

    Попробуйте на демо базах написать подобное, может у вас работает, а у моей платформы глюки?
  18. TopicStarter Overlay
    wirg
    Offline

    wirg

    Регистрация:
    23 май 2008
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    Всем спасибо тема закрыта, перенес весь код в модуль справочников и все заработало.

Поделиться этой страницей