8.х Чтение данных из БД 8.2

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем TODD22, 13 май 2011.

  1. TopicStarter Overlay
    TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.759
    Симпатии:
    147
    Баллы:
    104
    Есть 2 базы одна на 8.1 другая на 8.2(УФ).
    В обеих базах есть справочник физ лиц. То есть надо искать элемент справочника в другой базе и получать по этому физ лицу ссылку. Затем выбор
    Подключиться получилось.
    Не у кого нет примера работы с данными из com?
  2. yzek
    Offline

    yzek Опытный в 1С

    Регистрация:
    13 окт 2010
    Сообщения:
    713
    Симпатии:
    0
    Баллы:
    26
    Ну как-то так:
    Код:
    Соединение = Новый COMОбъект("V82.COMConnector");
    Попытка        
    База_82 = Соединение.Connect("File="""+Путь+""";USR="""+Пользователь+""";PWD="""+Пароль+"""");//если файловый
    База_82  = Соединение.Connect("Srvr="""+НазваниеСервера+""";"+"Ref="""+НазваниеБазы+""";USR="""+Пользователь+""";PWD="""+Пароль+"""");//если серверный
    Предупреждение("Все ОК!");
    Исключение
    Предупреждение("Не удалось!");
    КонецПопытки;
    
    
    
    все База_82 - это подключенная база
    а дальше как вариант
    Код:
    СсылкаКонтрагент = База_82.Справочники.Контрагенты.НайтиПоНаименованию(Наименование);
    
    вот только не помню V81.COMConnector или V82.COMConnector )))))
  3. TopicStarter Overlay
    TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.759
    Симпатии:
    147
    Баллы:
    104
    Подсоеденится получается. Не получается найти в справочнике элемент по наименованию.
  4. yzek
    Offline

    yzek Опытный в 1С

    Регистрация:
    13 окт 2010
    Сообщения:
    713
    Симпатии:
    0
    Баллы:
    26
    Как ищете? Что не получается?
    Код выложите.
  5. TopicStarter Overlay
    TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.759
    Симпатии:
    147
    Баллы:
    104
    Вот так же как и сдесь. СсылкаКонтрагент имеет тип COMОбъект. Если его в табло раскрыть там нет нужных мне значений.
    Я вот думаю может дело в клиент серверном взаимодействие?
  6. Wok
    Offline

    Wok

    Регистрация:
    12 май 2011
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    А какие значения нужны? У этого COMОбъект есть и код и наименование и уникальный идентификатор
  7. yzek
    Offline

    yzek Опытный в 1С

    Регистрация:
    13 окт 2010
    Сообщения:
    713
    Симпатии:
    0
    Баллы:
    26
    Все работает как часы. И в файловом и в серверном варианте.
  8. TopicStarter Overlay
    TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.759
    Симпатии:
    147
    Баллы:
    104
    Код:
    Сотр = ЭлементыФормы.Сотрудник.Значение;
    Сотр = Сотр.Фамилия+" "+Сотр.Имя+" "+Сотр.Отчество;
    СсылкаНаСотрудника = Соединение.Справочники.ФизическиеЛица.НайтиПоНаименованию(Сотр);
    
    
    Вот такой код возвращает мне COMОбъект. Как мне теперь из ком объекта получить ссылку которую я бы передал параметром в запрос?
    Может у кого нибудь есть пример кода где выполняется чтение и работа с данными через COM а то поискав на скорую руку нашёл только как подключатся. С этим проблем нет. Проблема с работой.

    З.Ы. Блин когда пишешь раз в месяц навыки теряются напрочь. Ведь помню делал... А как не помню....
  9. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.400
    Симпатии:
    40
    Баллы:
    54
    Здраствуйте!
    Соберите все данные по физ. лицам одним запросом из базы к которой подключились. а потом обрабатывайте во второй.
    Ниже представлен код для синхронизации коэффициентов в справочнике "Номенклатура", подрихтуйте под свои нужды.
    Код:
    V8 = Новый COMОбъект("V82.COMConnector");
    
    Попытка
    
    Если КлиентСервер Тогда
    
    Connect = v8.Connect("srvr = " + Сервер + "; ref = " + База + "; usr = " + Пользователь + "; pwd = " + Пароль + "");
    
    Иначе
    Connect = V8.Connect("File= """ +  ИмяКаталогаБазы + """; usr = """ + Пользователь + """; pwd = """ + Пароль + """;");
    КонецЕсли; 
    
    Исключение
    Сообщить(ОписаниеОшибки());
    Возврат;
    КонецПопытки;
    
    Запрос = Connect.NewObject("Запрос");
    Запрос.Текст = "ВЫБРАТЬ
    |	Номенклатура.Код,
    |	Номенклатура.Коэффициент,
    |	Номенклатура.Наименование
    |ИЗ
    |	Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |	Номенклатура.Коэффициент <> 0";
    
    Результат = Запрос.Выполнить().Выгрузить();
    
    Для каждого Номенклатура из Результат Цикл
    
    ЭлементНоменклатуры = Справочники.Номенклатура.НайтиПоКоду(Номенклатура.Код);
    Если ЭлементНоменклатуры = Справочники.Номенклатура.ПустаяСсылка() Тогда
    Сообщить("Номенклатура " + """" + СокрП(Номенклатура.Наименование) + """" + " не обнаружена", СтатусСообщения.ОченьВажное);
    Продолжить;
    КонецЕсли;
    
    Если НЕ ЭлементНоменклатуры.Коэффициент = 0 Тогда
    Сообщить("Для номенклатуры " + """" + СокрП(Номенклатура.Наименование) + """" + " коэффициент уже задан", СтатусСообщения.Внимание);
    Продолжить;
    КонецЕсли;
    
    ТекущийОбъект = ЭлементНоменклатуры.ПолучитьОбъект();
    
    Попытка
    ТекущийОбъект.Заблокировать();
    Исключение
    Сообщить("Номенклатура " + """" + СокрП(Номенклатура.Наименование) + """" + " редактируется, запись отменена", СтатусСообщения.Важное);
    Продолжить;
    КонецПопытки;
    
    ТекущийОбъект.Коэффициент = Номенклатура.Коэффициент;
    ТекущийОбъект.Записать();
    
    ТекущийОбъект.Разблокировать();
    
    Сообщить("Номенклатура " + """" + СокрП(Номенклатура.Наименование) + """" + " записана");
    
    КонецЦикла;
    
    PS: Ссылки в разных базах будут отличаться, выберите реквизит который будет уникальным для Вас, от него и отталкиваетесь, "Ссылка" не может быть уникальной, я бы выбрал "Код", но можно и UUID повытаскивать, и точно такой же писать в новой, но я бы не стал, работал бы с кодом, этого, как правило, всегда хватает.
  10. TopicStarter Overlay
    TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.759
    Симпатии:
    147
    Баллы:
    104
    Как из ComОбъекта получить ссылку?
    Я в БД ищу нужного мне человека:
    Код:
    СсылкаНаСотрудника = Соединение.Справочники.ФизическиеЛица.НайтиПоНаименованию(Сотр);
    
    В ссылке на сотрудника у меня лежит COMОбъект. Как мне ссылку передать как параметр в запрос?
    То есть как передать параметр я знаю. Как из COMОбъект сделать ссылку не понимаю.... :(
  11. TopicStarter Overlay
    TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.759
    Симпатии:
    147
    Баллы:
    104
    Ну вроде как получилось...
    Вопрос по запросу.
    Может кто нибудь подскажет...
    Есть запрос:
    Код:
    ВЫБРАТЬ
    Анкета.Респондент КАК Пациент,
    Анкета.Ответственный КАК Врач,
    Анкета.Состав.(
    НомерСтроки,
    Вопрос,
    Ответ,
    ОткрытыйОтвет
    )
    ИЗ
    Документ.Анкета КАК Анкета
    ГДЕ
    Анкета.Респондент.Физлицо.Наименование = &Физлицо
    И Анкета.ПометкаУдаления = ЛОЖЬ
    И Анкета.Проведен = ИСТИНА
    
    Мне надо что бы в итоге данные имели вид:
    Врач
    1 Вопрос Ответ
    2 Вопрос Ответ
    Врач
    1 Вопрос Ответ
    2 Вопрос Ответ
    3 Вопрос Овтет

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