8.х Заполнить таблицу данными запроса из ACCESS

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Sergey-911, 2 окт 2010.

  1. TopicStarter Overlay
    Sergey-911
    Offline

    Sergey-911

    Регистрация:
    1 авг 2007
    Сообщения:
    36
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте уважаемые.
    Для этого на форме расположил табличное поле с именем “ТабличноеПоле”, а также кнопку “ЗаполнитьСAccess”. Дальше ступор. Запрос срабатывает, а заполнить табличное поле – не получается. Погуглил – нашел только, как заполнить таблицу значений. Код привожу ниже:

    Код:
    Процедура ДействияФормыЗаполнитьСAccess(Кнопка)
    ИмяФайла = "C:\Program Files\TelSpr\ZapKniga.mdb";
    СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" 
    + ИмяФайла + ";Jet OLEDB:Database Password=";	
    // Создание объекта установки связи с источником данных
    Connection = Новый COMОбъект("ADODB.Connection");
    // Подключение к источнику данных	
    Попытка
    Connection.Open(СтрокаПодключения);
    Исключение
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/сообщить')">		Сообщить(ОписаниеОшибки() );</span>
    Возврат;
    КонецПопытки;
    // Создание объекта выполнения команды
    Command = Новый COMОбъект("ADODB.Command");
    // Указание активного соединения
    Command.ActiveConnection = Connection;
    // Определение текста команды
    Command.CommandText = "SELECT * FROM vw_Munits";
    // Определение типа команды
    Command.CommandType = 1;
    //188 Глава 5
    // Создание объекта набора записей
    RS = Новый COMОбъект("ADODB.RecordSet");
    // Выполнение и получение набора данных
    RS = Command.Execute();
    
    //Коолонки таблицы значений
    ТаблицаЗначений = Новый ТаблицаЗначений;
    Для НомерКолонки = 0 По RS.Fields.Count-1 Цикл
    НазваниеКолонки = RS.Fields.Item(НомерКолонки).Name;
    ТаблицаЗначений.Колонки.Добавить(НазваниеКолонки);
    КонецЦикла;
    
    //Строки таблицы значений
    Пока RS.EOF() = 0 Цикл 
    НоваяСтрока = ТаблицаЗначений.Добавить();
    Для НомерКолонки = 0 По RS.Fields.Count-1 Цикл
    НазваниеКолонки = RS.Fields.Item(НомерКолонки).Name;
    Значение = RS.Fields(НазваниеКолонки).Value;
    НоваяСтрока[НазваниеКолонки] = Значение;
    RS.MoveNext(); 
    КонецЦикла; 
    КонецЦикла;	
    RS.Close();
    Connection.Close();
    КонецПроцедуры
    
    
    Как правильно заполнить табличное поле?
    В других языках программирования имеется свойство таблицы DataSource

    Код:
    Dim tbl As New DataTable("Table")
    tbl.Load(Reader)
    LoadGrid = tbl.Rows.Count
    Dim ds As New DataSet
    ds.Tables.Add(tbl)
    Grid.DataSource = Nothing
    Grid.DataMember = tbl.TableName
    Grid.DataSource = ds
    
    
    При этом, используя свойство таблицы DataSource, получается заполнить таблицу данными запроса в порядки раз быстрее, нежели в цикле (например в Visual Basic. Может и в 1С у таблицы есть такое свойство? Или хотя бы циклом, хоть как нибудь... :angry:
  2. Muggsy
    Offline

    Muggsy одно ЭС

    Регистрация:
    10 сен 2008
    Сообщения:
    243
    Симпатии:
    0
    Баллы:
    26
    а у табличного поля свойство данные это ваша таблица значений?
  3. TopicStarter Overlay
    Sergey-911
    Offline

    Sergey-911

    Регистрация:
    1 авг 2007
    Сообщения:
    36
    Симпатии:
    0
    Баллы:
    1
    Как в 1С это сделать я не знаю, вот и задал вопрос на форуме. У меня вообще не получается здесь заполнить таблицу данными.
  4. TopicStarter Overlay
    Sergey-911
    Offline

    Sergey-911

    Регистрация:
    1 авг 2007
    Сообщения:
    36
    Симпатии:
    0
    Баллы:
    1
    Способ
    Код:
    ЭлементыФормы.ТабличноеПоле.Данные = RS;
    \\или
    ЭлементыФормы.ТабличноеПоле.Данные = ТаблицаЗначений;
    
    
    естественно, выдает ошибку.
  5. Muggsy
    Offline

    Muggsy одно ЭС

    Регистрация:
    10 сен 2008
    Сообщения:
    243
    Симпатии:
    0
    Баллы:
    26
    можно так, а можно выйти на закладку формы - реквизиты - посмотреть как там табоица значений связанная с нашим полем называется и сразу её заполнять.
  6. Muggsy
    Offline

    Muggsy одно ЭС

    Регистрация:
    10 сен 2008
    Сообщения:
    243
    Симпатии:
    0
    Баллы:
    26
    у вас не получалось заполнить табличное поле, потому что оно НИКАК не связано с вашей таблицей значений. :) это я для справки :)
  7. TopicStarter Overlay
    Sergey-911
    Offline

    Sergey-911

    Регистрация:
    1 авг 2007
    Сообщения:
    36
    Симпатии:
    0
    Баллы:
    1
    Не понимаю, как это поможет?

    в свойствах формы:
    Данные - ТабличноеПоле,
    Тип значения - СправочникСписок.Классификатор.

    Как заполнить таблицу на форме "ТабличноеПоле" данными запроса, находящимися в
    Код:
    RS = Новый COMОбъект("ADODB.RecordSet")
    
    Помогите плиз :angry:
  8. Muggsy
    Offline

    Muggsy одно ЭС

    Регистрация:
    10 сен 2008
    Сообщения:
    243
    Симпатии:
    0
    Баллы:
    26
    Вообще-то у вашего табличного поля тип значений должен быть таблица значений. конечно у вас ничего не выведется, даже если насильно пихать в него таблицу значений.
    как только вы измените тип значения идите на вкладку формы "реквизиты" и убедитесь что там есть реквизит под названием ТабличноеПоле и напротив будет тип стоять - таблица значений.
    Вот в модуле формы можно обратиться к этому самому реквизиту формы
    Код:
    Пока RS.EOF() = 0 Цикл 	
    НоваяСтрока = ТабличноеПоле.Добавить();		
    Для НомерКолонки = 0 По RS.Fields.Count-1 <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/цикл')">Цикл	</span>
    НазваниеКолонки = RS.Fields.Item(НомерКолонки).Name;			Значение = RS.Fields(НазваниеКолонки).Value;		
    НоваяСтрока[НазваниеКолонки] = Значение;		
    RS.MoveNext(); 	
    КонецЦикла; 	
    КонецЦикла;	
    RS.Close();	
    Connection.Close();
    
    
    То есть получается что таблица значений непосредственно связанная с табличным полем у вас в вышеизложенном коде заполнится :)
    главное чтобы заполняемая таблица значений была связана с табличным полем :) То есть повторюсь - находилась бы в поле данные в свойствах табличного поля и имела правильный тип значения :)
  9. TopicStarter Overlay
    Sergey-911
    Offline

    Sergey-911

    Регистрация:
    1 авг 2007
    Сообщения:
    36
    Симпатии:
    0
    Баллы:
    1
    Спасибо Muggsy тип значения поправил в конструкторе - и все заработало.
    Кстати, можно ли тип значения табличного поля изменить программно, или только в конструкторе?

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