[РЕШЕНО] Запрос в 1С 8.2 из внешней базы 8.1

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Мариночка, 24 фев 2014.

  1. TopicStarter Overlay
    Мариночка
    Offline

    Мариночка

    Регистрация:
    24 фев 2014
    Сообщения:
    29
    Симпатии:
    0
    Баллы:
    1
    Добрый день! Надеюсь на вашу помощь! Мне необходимо, чтобы данные справочника из внешней базы выгружались на форму и из них можно было бы потом выбирать.
    Сейчас пришла вот к чему.
    Код:
    &НаКлиенте
    Процедура ВыгрузитьИзБух(Команда)
        Выгрузка();
    КонецПроцедуры
    
    &НаСервере
    Процедура Выгрузка()
    
        Коннектор81 = Новый COMОбъект("V81.COMConnector");
       
        Попытка
    СтрокаПодключения = Коннектор81.Connect("Srvr=nkp-sb;Ref=s1v81tc;Usr=АдминистраторФилиала;Pwd=12345;");
    
    //Попытка
    // Соединение81 = Коннектор81.Connect(СтрокаПодключения);
    Исключение
    Предупреждение("Произошла ошибка подключения к базе");
    Возврат;
    КонецПопытки;
    
    Запрос = СтрокаПодключения.NewObject("Запрос");
    Запрос.Текст = "ВЫБРАТЬ
        |ОсновныеСредства.Наименование,
        |ОсновныеСредства.Код
        |ИЗ
        |Справочник.ОсновныеСредства КАК ОсновныеСредства
        |ГДЕ
        |ОсновныеСредства.Ссылка В ИЕРАРХИИ(&Группа)";
       
        Запрос.УстановитьПараметр("Группа", ВычислительнаяТехника);
    
        Результат = Запрос.Выполнить().Выбрать();
    //ЭтаФорма.Список.Загрузить(Результат);
    
    Список = Новый ТаблицаЗначений;
    //Список.Колонки.Добавить("Наименование");
    
    
    Пока Результат.Следующий() Цикл
        //Список = Результат.Наименование;
          НовСтр = Список.Добавить();
          НовСтр.Наименование = Результат.Наименование;
    КонецЦикла;
    

    Столкнулась с ошибками.
    1 Не могу выбрать данные только одной группы справочника "Вычисл.техника"
    2. Не выгружаются данные на форму.
    А вообще хотелось бы, чтобы при нажатии на кнопку открывалась другая форма, куда уже выгружались данные.
  2. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    1. Запрос.УстановитьПараметр("Группа", ВычислительнаяТехника); вот тут ВычислительнаяТехника - это что? я так подразумеваю, что вы туда немного не то передаете. Должно быть Тип Элемент Справочника
    2. Наверное запрос путой возвращен, потому и нет данных на форме
  3. TopicStarter Overlay
    Мариночка
    Offline

    Мариночка

    Регистрация:
    24 фев 2014
    Сообщения:
    29
    Симпатии:
    0
    Баллы:
    1
    Вычисл.техника это название группы. А запрос не пустой .. проверяла в отладчике.. Получается если на форме поставить реквизвит Список с типом ТЗ, то ничего не выходит.
  4. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    Само слово "Вычислительная техника" это название группы? или ВычислительнаяТехника - это ссылка на элемент справочника. Покажите, где вы заполняете это поле. Ну это я для ясности спрашиваю.

    Список = Новый ТаблицаЗначений; - это просто таблица значений, где вы ее на форму выводите?
  5. TopicStarter Overlay
    Мариночка
    Offline

    Мариночка

    Регистрация:
    24 фев 2014
    Сообщения:
    29
    Симпатии:
    0
    Баллы:
    1
    С группой разобралась))) и с выгрузкой.... только наименование и код выходят в одну колонку((( а нужно в 2... И как при выборе это значение добавить в табличную часть в колонки наименование и код???
    Код:
    &НаКлиенте
    Процедура ВыгрузитьИзБух(Команда)
        ВыбратьЭлемент = ВыбратьИзСписка(Выгрузка(), Элементы.НоменклатураНоменклатура);
    КонецПроцедуры
    
    &НаСервере
    Функция Выгрузка()
    
        Коннектор81 = Новый COMОбъект("V81.COMConnector");
      
        Попытка
    СтрокаПодключения = Коннектор81.Connect("Srvr=nkp-sb;Ref=s1v81tc;Usr=АдминистраторФилиала;Pwd=12345;");
    
    //Попытка
    // Соединение81 = Коннектор81.Connect(СтрокаПодключения);
    Исключение
    Предупреждение("Произошла ошибка подключения к базе");
    //Возврат;
    КонецПопытки;
    
    Запрос = СтрокаПодключения.NewObject("Запрос");
    Запрос.Текст = "ВЫБРАТЬ
        |ОсновныеСредства.Наименование,
        |ОсновныеСредства.Код
        |ИЗ
        |Справочник.ОсновныеСредства КАК ОсновныеСредства
        |ГДЕ
        |ОсновныеСредства.Ссылка В ИЕРАРХИИ(&Группа)";
      
        Запрос.УстановитьПараметр("Группа",СтрокаПодключения.Справочники.ОсновныеСредства.НайтиПоНаименованию("Вычислительная техника"));
    
        Результат = Запрос.Выполнить().Выбрать();
    //ЭтаФорма.Список.Загрузить(Результат);
    
    Список = Новый СписокЗначений;
    //Список.Колонки.Добавить("Наименование");
    //Список.Колонки.Добавить ("Код");
    
    Пока Результат.Следующий() Цикл
      
        //Список = Результат.Наименование;
          //НовСтр = Список.Добавить();
          //НовСтр.Наименование = Результат.Наименование;
          //НовСтр.Код = Результат.Код;
        
        Список.Добавить(Результат.Наименование);
      
         Список.Добавить(Результат.Код);
       
    КонецЦикла;
    Возврат Список
    

    Вложения:

    • 1.png
      1.png
      Размер файла:
      70,3 КБ
      Просмотров:
      9
  6. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    в одну колонку, потоу что вы так выводите в список
    Код:
    Список.Добавить(Результат.Наименование);
     
         Список.Добавить(Результат.Код);
  7. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    Почему не хотите сделать Таблицу значений и выводить ее в табличное поле?
    Таблица у вас уже готова, вы же результат запроса выгружаете в нее, зачем такой финт ушами?
  8. TopicStarter Overlay
    Мариночка
    Offline

    Мариночка

    Регистрация:
    24 фев 2014
    Сообщения:
    29
    Симпатии:
    0
    Баллы:
    1
    Ну я пробовала выгружать через ЗначениеВРеквизитФормы, но он ругался)))
  9. TopicStarter Overlay
    Мариночка
    Offline

    Мариночка

    Регистрация:
    24 фев 2014
    Сообщения:
    29
    Симпатии:
    0
    Баллы:
    1
    А вообще можно этот код использовать в обычных формах? Или что то поменять надо? (с обычными не дружу...)
  10. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    в толстом клиенте попроще значения передавать. В клиентсерверном да, вроде беда была с передачей ТЗ на форму. В приципе можете создать Табличную часть и загрузить туда, а она уже на форме отобразиться
  11. TopicStarter Overlay
    Мариночка
    Offline

    Мариночка

    Регистрация:
    24 фев 2014
    Сообщения:
    29
    Симпатии:
    0
    Баллы:
    1
  12. TopicStarter Overlay
    Мариночка
    Offline

    Мариночка

    Регистрация:
    24 фев 2014
    Сообщения:
    29
    Симпатии:
    0
    Баллы:
    1
    А как выгрузить таблицу значений на форму в обычном режиме?
    Код:
    Процедура ДействияФормыВыгрузитьИзБухгалтерии(Кнопка)
    Выгрузка();
        //ВыбранныйЭлСписка = ВыбратьИзСписка(Выгрузка(), ЭлементыФормы.НадписьНаименование);
    КонецПроцедуры
    &НаСервере
    Процедура Выгрузка()
    
        Коннектор81 = Новый COMОбъект("V81.COMConnector");
       
        Попытка
    СтрокаПодключения = Коннектор81.Connect("Srvr=nkp-sb;Ref=s1v81tc;Usr=АдминистраторФилиала;Pwd=Solaris07;");
    
    //Попытка
    // Соединение81 = Коннектор81.Connect(СтрокаПодключения);
    Исключение
    Предупреждение("Произошла ошибка подключения к базе");
    //Возврат;
    КонецПопытки;
    
    Запрос = СтрокаПодключения.NewObject("Запрос");
    Запрос.Текст = "ВЫБРАТЬ
        |ОсновныеСредства.Наименование,
        |ОсновныеСредства.Код
        |ИЗ
        |Справочник.ОсновныеСредства КАК ОсновныеСредства
        |ГДЕ
        |ОсновныеСредства.Ссылка В ИЕРАРХИИ(&Группа)";
       
        Запрос.УстановитьПараметр("Группа",СтрокаПодключения.Справочники.ОсновныеСредства.НайтиПоНаименованию("Вычислительная техника"));
       
    
    
    Выборка = Запрос.Выполнить().Выгрузить();   
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Код");
    ТЗ.Колонки.Добавить("Наименование");
    //ТЗ.Колонки.Добавить("Цена");
    
    Для каждого н из Выборка Цикл
    стр = ТЗ.Добавить();
    стр.Код = н.Код;
    стр.Наименование = н.Наименование;
    //стр.Цена = н.Цена;
    КонецЦикла;
    ЭтаФорма.ЭлементыФормы.ТЗ.Значение = ТЗ;
    //Возврат ТЗ;
    //КонецФункции
    КонецПроцедуры;
    
    На форме табличное поле с типом таблица значений. Либо идеальным вариантом было бы как выпадающий список или открывалась бы отдельная форма с этой ТЗ. 1.png
  13. Светлана5291
    Offline

    Светлана5291 Опытный в 1С

    Регистрация:
    6 фев 2013
    Сообщения:
    156
    Симпатии:
    0
    Баллы:
    26
    решено
    Последнее редактирование: 20 окт 2014
  14. Светлана5291
    Offline

    Светлана5291 Опытный в 1С

    Регистрация:
    6 фев 2013
    Сообщения:
    156
    Симпатии:
    0
    Баллы:
    26
    Решено.
    Код:
    Процедура ВыгрузитьИзСФУНажатие(Элемент)
        Выгрузка();
    КонецПроцедуры
    Процедура Выгрузка()
       Коннектор81 = Новый COMОбъект("V81.COMConnector");
     
       Попытка
    СтрокаПодключения = Коннектор81.Connect("Srvr=nkp-sb;Ref=s1v81tc;Usr=АдминистраторФилиала;Pwd=Solaris07;");
    //Попытка
    // Соединение81 = Коннектор81.Connect(СтрокаПодключения);
    Исключение
    Предупреждение("Произошла ошибка подключения к базе");
    //Возврат;
    КонецПопытки;
    Запрос = СтрокаПодключения.NewObject("Запрос");
    Запрос.Текст = "ВЫБРАТЬ
             |ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Материалы,
             |ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстатокДт КАК КоличествоКонечныйОстатокДт,
             |ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт КАК СуммаКонечныйОстатокДт,
             |ХозрасчетныйОстаткиИОбороты.Субконто2.Код КАК Код
    |ИЗ
             |РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , , , , , Субконто3 В (&ВыбСклад)) КАК ХозрасчетныйОстаткиИОбороты
    |ГДЕ
             |ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстатокДт > 0";
           
      // Для выгрузке по складу Ек-тов
    Если  ПараметрыСеанса.ТекущийПользователь.Наименование = "Молдованов Д.В." Тогда
    Запрос.УстановитьПараметр("ВыбСклад", СтрокаПодключения.Справочники.Склады.НайтиПоНаименованию ("Склад (программист) Св-товарный"));
    иначе
    Запрос.УстановитьПараметр("ВыбСклад", СтрокаПодключения.Справочники.Склады.НайтиПоНаименованию ("склад НКПИТ"));
    конецесли; 
     
    Выборка = Запрос.Выполнить().Выгрузить(); 
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Материалы");
    ТЗ.Колонки.Добавить("Код");
    ТЗ.Колонки.Добавить("Количество");
    ТЗ.Колонки.Добавить("Сумма");
    ТЗ.Колонки.Добавить("Стоимость");
    Для каждого н из Выборка Цикл
    стр = ТЗ.Добавить();
    стр.Материалы = н.Материалы.НаименованиеПолное;
    стр.Количество = н.КоличествоКонечныйОстатокДт;
    стр.Код = н.Код;
    стр.Сумма = Окр(н.СуммаКонечныйОстатокДт,2);
    стр.Стоимость = Окр(стр.Сумма/стр.Количество,2);
    КонецЦикла;
    ВыбСтр = ТЗ.ВыбратьСтроку();
    Если ВыбСтр<>Неопределено Тогда
    ЭлементыФормы.НаименованиеСФУ.Значение = ВыбСтр.Материалы;
    ЭлементыФормы.КодСФУ.Значение = ВыбСтр.Код;
    ЭлементыФормы.ЦенаСФУ.Значение = ВыбСтр.Стоимость;
    КонецЕсли;
    //КонецЕсли;
    КонецПроцедуры;
    Последнее редактирование модератором: 20 окт 2014

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