helpf.pro
Регистрация

v8: Список значений Таблица значений

Bell
02.12.2013 17:59Прочитано: 2792
Здравствуйте
Делаю загрузку из дбФ в ТаблицуЗначений
Как строки ДБФ ФАйла загрузить в таблицу значений (ТЗ)

Код 1C v 8.х
 Процедура ПрочитатьФайлДБФ(Форма, ТаблицаСДанными) Экспорт

СписокКолонок = Новый СписокЗначений;

// Создаем ТЗ промежуточную
// Будут еще дополнительные колонки потому и создаю ТЗ все делаю в ней потом выгружаю в ТаблицуЗначений на форму (ТаблицаСДанными)
ТЗ = Новый("ТаблицаЗначений", Неопределено);


ДБФ = Новый XBase;
ДБФ.ОткрытьФайл(СокрЛП(ПутьКФайлу), , Ложь );
ДБФ.Кодировка = КодировкаXBase.OEM;

//ДБФ.Первая();

КолонкиИсточника.Очистить();
СчетчикКолонок = 1;
СчетчикСтрокКолонки = 0;
Для каждого Колонка Из ДБФ.Поля Цикл
//Сообщить(Колонка.Имя);
// Создали имена колонок в ТабличномПоле (КолонкиИсточнка) и поставили порядок(Положение - это число)
НВС = КолонкиИсточника.Добавить();
НВС.Колонка = Колонка.Имя;
НВС.Положение = СчетчикСтрокКолонки + 1;

// Создали колонки в таблицеЗначений куда будем выгружать данные строк из файла ДБФ Вариант №1
//НВК = ТЗ.Колонки.Добавить();
//НВК.Имя = Колонка.Имя;

// Создали колонки в таблицеЗначений куда будем выгружать данные строк из файла ДБФ Вариант №2 (ИмяКолонки + № Быстрее)
Value = "Column"+СчетчикКолонок;
ТЗ.Колонки.Добавить(Value);
СписокКолонок.Добавить(СчетчикКолонок, Value);

СчетчикСтрокКолонки = СчетчикСтрокКолонки + 1;
СчетчикКолонок = СчетчикКолонок + 1;

// Обходим строки из файла ДБФ и загружаем в ТаблицуЗначений (ТЗ промежуточная)
СчетчикСтрок = 1;
Пока Не ДБФ.ВКонце() Цикл

//Сообщить(ДБФ.ARTIKYL +"--"+ДБФ.Name);
Состояние("Загрузка строки: " + СчетчикСтрок);

СтрокаТЗ = ТЗ.Добавить(); // Добавляем строки
// До сего идет все правильно

// От сюда не Получается ???????
// Как в таблицыЗначений (ТЗ) Загрузить строки ДБФ Файла, не могу совместить их (Колонки в ТЗ уже созданы Column1, Column2 и т.д. )





ДБФ.Следующая();

СчетчикСтрок = СчетчикСтрок + 1;

КонецЦикла;


КонецЦикла;


ДБФ.ЗакрытьФайл();

// Тут визуализируем загрузу найла на форме
Форма.ЭлементыФормы.ТаблицаСДанными.Значение = ТЗ.Скопировать();
Форма.ЭлементыФормы.ТаблицаСДанными.СоздатьКолонки();
Форма.ЭлементыФормы.КонечнаяСтрока.Значение = СчетчикСтрок + 1; // Всего
Форма.ЭлементыФормы.КоличествоКолонок.Значение = СчетчикКолонок - 1; // Всего

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

Изменено 02.12.13 18:04:48
Yandex
Возможно, вас также заинтересует
Реклама на портале
Gonzik2
02.12.2013 20:10Ответ № 1
где-то так должно быть:
Код 1C v 8.2 УП
  Для каждого Колонка Из ДБФ.Поля Цикл
...создаем КолонкиИсточника
КонецЦикла;

Пока Не ДБФ.ВКонце() Цикл
...
Для каждого Колонка Из КолонкиИсточника Цикл
СтрокаТЗ[Колонка.Колонка] = ДБФ.Поле(Колонка.Колонка);
КонецЦикла;
...
ДБФ.Следующая();
КонецЦикла;
Bell
03.12.2013 12:36Ответ № 2
Мне надо привязаться к списку значений (СписокКолонок)
Value = "Column"+СчетчикКолонок;
ТЗ.Колонки.Добавить(Value);
СписокКолонок.Добавить(СчетчикКолонок, Value);
Mokey
03.12.2013 14:17Ответ № 3
Код 1C v 8.х
 
Пока Не ДБФ.ВКонце() Цикл

//Сообщить(ДБФ.ARTIKYL +"--"+ДБФ.Name);
Состояние("Загрузка строки: " + СчетчикСтрок);
СтрокаТЗ = ТЗ.Добавить(); // Добавляем строки
// До сего идет все правильно

// От сюда не Получается ???????
// Как в таблицыЗначений (ТЗ) Загрузить строки ДБФ Файла, не могу совместить их (Колонки в ТЗ уже созданы Column1, Column2 и т.д. )

Для Каждого Поле Из ДБФ.Поля Цикл
ИндексПоля = ДБФ.Поля.Индекс(Поле)+1;
ИмяКолонкиТЗ = СписокКолонок.НайтиПоЗначению(ИндексПоля).Представление;
СтрокаТЗ[ИмяКолонкиТЗ] = ДБФ[Поле.Имя];
КонецЦикла;

ДБФ.Следующая();

СчетчикСтрок = СчетчикСтрок + 1;

КонецЦикла;



Как-то так )
Это если по Вашему вопросу именно со списком значений работать, а лучше как в предыдущем примере по индексам совместить колонки (поля) ТЗ и ДБФ
Изменено 03.12.13 14:21:32
Bell
03.12.2013 18:09Ответ № 4
Понимаю где то рядом нахожусь, на не погу понять эту тонкость.
Ругается
{Обработка.ЗагрузкаДанных.МодульОбъекта(121)}: Значение не является значением объектного типа (Представление)
ИмяКолонкиТЗ = СписокКолонок.НайтиПоЗначению(ИндексПоля).Представление;

Если написать, тогда находит первую нужную колонку и заполняет.
Мне кажется что надо пройти цикл по счетчику колонок

Код 1C v 8.х
   Для каждого Колонка Из ДБФ.Поля Цикл
// ........
Пока Не ДБФ.ВКонце() Цикл

//Для Каждого Поле Из ДБФ.Поля Цикл

ИндексПоля = ДБФ.Поля.Индекс(Колонка)+1;
ИмяКолонкиТЗ = СписокКолонок.НайтиПоЗначению(ИндексПоля).Представление;
СтрокаТЗ[ИмяКолонкиТЗ] = ДБФ[Колонка.Имя];


//КонецЦикла;

КонецЦикла;
КонецЦикла;



По поводу
а лучше как в предыдущем примере по индексам совместить колонки (поля) ТЗ и ДБФ
Это относится к
// Создали колонки в таблицеЗначений куда будем выгружать данные строк из файла ДБФ Вариант №1 (имена колонок, как в файле ДБФ.) Как в этом случае.
//НВК = ТЗ.Колонки.Добавить();
//НВК.Имя = Колонка.Имя;
Изменено 03.12.13 18:54:51
Mokey
04.12.2013 09:44Ответ № 5
Хорошо, а чему равен ИндексПоля? Ведь если СписокКолонок есть список значений, то ошибка вываливается в том случае, если СписокКолонок.НайтиПоЗначению(ИндексПоля) = Неопределено. Проверьте отладчиком.
Тут ведь организация какая:
1. Позиционируемся на строке.
2. Проходим по всем полям строки и выбираем значения.

В Вашем последнем примере получите хрень, извините за выражение)), т.е. Вы берёте первое поле, а потом скачете по строкам.
Bell
04.12.2013 12:57Ответ № 6
Вопрос закрыт.
Ошибка была в циклах строк и столбцов
// № 1 отдельно
Код 1C v 8.х
  Для каждого Колонка Из ДБФ.Поля Цикл

КонецЦикла;

// № 2
Код 1C v 8.х
 Пока Не ДБФ.ВКонце() Цикл
Для Каждого Колонка Из ДБФ.Поля Цикл

КонецЦикла;
КонецЦикла;

Изменено 04.12.13 12:58:37
Bell
04.12.2013 12:59Ответ № 7
Вопрос закрыт!
Подсказка: Для редактирования своего ответа щелкните по значку (справа)
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.