1С 8.3 Выгружаем данные из Таблицы значений в DBF
Данные > Примеры кода 1С > 1С 8.3 Таблица значений
Перейти в основной раздел:
Выгружаем данные из Таблицы значений в DBF (&НаСервере) в 1С 8.3:
ПутьКПапкеФайлов="D:\";
КаталогНаДиске = Новый Файл(ПутьКПапкеФайлов);
Если КаталогНаДиске.Существует()=Ложь Тогда
СоздатьКаталог(ПутьКПапкеФайлов);
КонецЕсли;
ТаблицаDBF = Новый XBase; ТаблицаDBF.Кодировка = КодировкаXBase.ANSI;
ПутьКФайлуDBF=ПутьКПапкеФайлов+"Sync.dbf";
НовФайлуDBF = Новый Файл(ПутьКФайлуDBF);
Если НовФайлуDBF.Существует()=Ложь Тогда // Такого файла не существует - создадим новый файл DBF с нужной структурой
// - аналогичной структуре ТЗ на форме
// Описываем колонки таблицы. Типы бывают:
// N - число
// S - строка
// D - дата
// L - булево
// F - число
ТаблицаDBF.Поля.Добавить("KodSpr","S",10,); // имя колонки Код в справочнике(как в 1С8=10симв), тип, длина
ТаблицаDBF.Поля.Добавить("NameSpr","S",100,); // имя колонки Наименование в справочнике, тип, длина
ТаблицаDBF.Поля.Добавить("Scht","S",8,); // имя колонки Счет, тип, длина
ТаблицаDBF.Поля.Добавить("Sub1K","S",25,); // имя колонки код Субконто1, тип, длина
ТаблицаDBF.Поля.Добавить("SRod1K","S",25,); // имя колонки код Родитель Субконто1, тип, длина
ТаблицаDBF.Поля.Добавить("Sub2K","S",25,); // имя колонки код Субконто2, тип, длина
ТаблицаDBF.Поля.Добавить("SRod2K","S",25,); // имя колонки код Родитель Субконто2, тип, длина
ТаблицаDBF.Поля.Добавить("Sub3K","S",25,); // имя колонки код Субконто3, тип, длина
ТаблицаDBF.Поля.Добавить("SRod3K","S",25,); // имя колонки код Родитель Субконто3, тип, длина
ТаблицаDBF.Поля.Добавить("Urov","N",1,0); // имя колонки Уровень иерархии, тип, длина
ТаблицаDBF.СоздатьФайл(ПутьКФайлуDBF, ); // путь к базе, путь к индексу
ТаблицаDBF.ЗакрытьФайл();
КонецЕсли;
ТаблицаDBF.ОткрытьФайл(ПутьКФайлуDBF,,Ложь); // путь к базе, путь к индексу - необязателен, только чтение
ТЗсФормы = Новый("ТаблицаЗначений");
Для каждого СтрокаТЗ из ТЗсФормы цикл
ЗаписьDBFУжеСуществует=Ложь;
ТаблицаDBF.Первая(); // перешли к первой записи
Пока Не ТаблицаDBF.ВКонце() Цикл//не последняя запись
Если Не ТаблицаDBF.ЗаписьУдалена() Тогда //нет пометки на удаление
Если (СокрЛП(ТаблицаDBF.KodSpr) = СокрЛП(СтрокаТЗ.КодВидаОбъекта))
и (СокрЛП(ТаблицаDBF.NameSpr) = СокрЛП(СтрокаТЗ.ВидОбъекта)) Тогда
ЗаписьDBFУжеСуществует=Истина;
// Обновим нужные данные
ТаблицаDBF.Scht = СтрокаТЗ.Счет;
ТаблицаDBF.Sub1K = СтрокаТЗ.Субконто1.Код;
ТаблицаDBF.SRod1K = СтрокаТЗ.Субконто1.Родитель.Код;
ТаблицаDBF.Sub2K = СтрокаТЗ.Субконто2.Код;
ТаблицаDBF.SRod2K = СтрокаТЗ.Субконто2.Родитель.Код;
ТаблицаDBF.Sub3K = СтрокаТЗ.Субконто3.Код;
ТаблицаDBF.SRod3K = СтрокаТЗ.Субконто3.Родитель.Код;
ТаблицаDBF.Urov = СтрокаТЗ.Субконто1.Уровень();
ТаблицаDBF.Записать();
КонецЕсли;
КонецЕсли;
ТаблицаDBF.Следующая(); // переходим к следующей записи
КонецЦикла;
Если ЗаписьDBFУжеСуществует=Ложь Тогда //Создадим новую запись и добавим нужные данные
ТаблицаDBF.Добавить();
ТаблицаDBF.KodSpr = СокрЛП(СтрокаТЗ.КодВидаОбъекта);
ТаблицаDBF.NameSpr = СокрЛП(СтрокаТЗ.ВидОбъекта);
ТаблицаDBF.Scht = СтрокаТЗ.Счет;
ТаблицаDBF.Sub1K = СтрокаТЗ.Субконто1.Код;
ТаблицаDBF.SRod1K = СтрокаТЗ.Субконто1.Родитель.Код;
ТаблицаDBF.Sub2K = СтрокаТЗ.Субконто2.Код;
ТаблицаDBF.SRod2K = СтрокаТЗ.Субконто2.Родитель.Код;
ТаблицаDBF.Sub3K = СтрокаТЗ.Субконто3.Код;
ТаблицаDBF.SRod3K = СтрокаТЗ.Субконто3.Родитель.Код;
ТаблицаDBF.Urov = СтрокаТЗ.Субконто1.Уровень();
ТаблицаDBF.Записать();
КонецЕсли;
КонецЦикла;
ТаблицаDBF.ЗакрытьФайл();
//Сообщить("Файл записан. В таблице " + ТаблицаDBF.КоличествоЗаписей() + " записей.");
КаталогНаДиске = Новый Файл(ПутьКПапкеФайлов);
Если КаталогНаДиске.Существует()=Ложь Тогда
СоздатьКаталог(ПутьКПапкеФайлов);
КонецЕсли;
ТаблицаDBF = Новый XBase; ТаблицаDBF.Кодировка = КодировкаXBase.ANSI;
ПутьКФайлуDBF=ПутьКПапкеФайлов+"Sync.dbf";
НовФайлуDBF = Новый Файл(ПутьКФайлуDBF);
Если НовФайлуDBF.Существует()=Ложь Тогда // Такого файла не существует - создадим новый файл DBF с нужной структурой
// - аналогичной структуре ТЗ на форме
// Описываем колонки таблицы. Типы бывают:
// N - число
// S - строка
// D - дата
// L - булево
// F - число
ТаблицаDBF.Поля.Добавить("KodSpr","S",10,); // имя колонки Код в справочнике(как в 1С8=10симв), тип, длина
ТаблицаDBF.Поля.Добавить("NameSpr","S",100,); // имя колонки Наименование в справочнике, тип, длина
ТаблицаDBF.Поля.Добавить("Scht","S",8,); // имя колонки Счет, тип, длина
ТаблицаDBF.Поля.Добавить("Sub1K","S",25,); // имя колонки код Субконто1, тип, длина
ТаблицаDBF.Поля.Добавить("SRod1K","S",25,); // имя колонки код Родитель Субконто1, тип, длина
ТаблицаDBF.Поля.Добавить("Sub2K","S",25,); // имя колонки код Субконто2, тип, длина
ТаблицаDBF.Поля.Добавить("SRod2K","S",25,); // имя колонки код Родитель Субконто2, тип, длина
ТаблицаDBF.Поля.Добавить("Sub3K","S",25,); // имя колонки код Субконто3, тип, длина
ТаблицаDBF.Поля.Добавить("SRod3K","S",25,); // имя колонки код Родитель Субконто3, тип, длина
ТаблицаDBF.Поля.Добавить("Urov","N",1,0); // имя колонки Уровень иерархии, тип, длина
ТаблицаDBF.СоздатьФайл(ПутьКФайлуDBF, ); // путь к базе, путь к индексу
ТаблицаDBF.ЗакрытьФайл();
КонецЕсли;
ТаблицаDBF.ОткрытьФайл(ПутьКФайлуDBF,,Ложь); // путь к базе, путь к индексу - необязателен, только чтение
ТЗсФормы = Новый("ТаблицаЗначений");
Для каждого СтрокаТЗ из ТЗсФормы цикл
ЗаписьDBFУжеСуществует=Ложь;
ТаблицаDBF.Первая(); // перешли к первой записи
Пока Не ТаблицаDBF.ВКонце() Цикл//не последняя запись
Если Не ТаблицаDBF.ЗаписьУдалена() Тогда //нет пометки на удаление
Если (СокрЛП(ТаблицаDBF.KodSpr) = СокрЛП(СтрокаТЗ.КодВидаОбъекта))
и (СокрЛП(ТаблицаDBF.NameSpr) = СокрЛП(СтрокаТЗ.ВидОбъекта)) Тогда
ЗаписьDBFУжеСуществует=Истина;
// Обновим нужные данные
ТаблицаDBF.Scht = СтрокаТЗ.Счет;
ТаблицаDBF.Sub1K = СтрокаТЗ.Субконто1.Код;
ТаблицаDBF.SRod1K = СтрокаТЗ.Субконто1.Родитель.Код;
ТаблицаDBF.Sub2K = СтрокаТЗ.Субконто2.Код;
ТаблицаDBF.SRod2K = СтрокаТЗ.Субконто2.Родитель.Код;
ТаблицаDBF.Sub3K = СтрокаТЗ.Субконто3.Код;
ТаблицаDBF.SRod3K = СтрокаТЗ.Субконто3.Родитель.Код;
ТаблицаDBF.Urov = СтрокаТЗ.Субконто1.Уровень();
ТаблицаDBF.Записать();
КонецЕсли;
КонецЕсли;
ТаблицаDBF.Следующая(); // переходим к следующей записи
КонецЦикла;
Если ЗаписьDBFУжеСуществует=Ложь Тогда //Создадим новую запись и добавим нужные данные
ТаблицаDBF.Добавить();
ТаблицаDBF.KodSpr = СокрЛП(СтрокаТЗ.КодВидаОбъекта);
ТаблицаDBF.NameSpr = СокрЛП(СтрокаТЗ.ВидОбъекта);
ТаблицаDBF.Scht = СтрокаТЗ.Счет;
ТаблицаDBF.Sub1K = СтрокаТЗ.Субконто1.Код;
ТаблицаDBF.SRod1K = СтрокаТЗ.Субконто1.Родитель.Код;
ТаблицаDBF.Sub2K = СтрокаТЗ.Субконто2.Код;
ТаблицаDBF.SRod2K = СтрокаТЗ.Субконто2.Родитель.Код;
ТаблицаDBF.Sub3K = СтрокаТЗ.Субконто3.Код;
ТаблицаDBF.SRod3K = СтрокаТЗ.Субконто3.Родитель.Код;
ТаблицаDBF.Urov = СтрокаТЗ.Субконто1.Уровень();
ТаблицаDBF.Записать();
КонецЕсли;
КонецЦикла;
ТаблицаDBF.ЗакрытьФайл();
//Сообщить("Файл записан. В таблице " + ТаблицаDBF.КоличествоЗаписей() + " записей.");
Выгружаем данные из Таблицы значений в DBF (&НаСервере) в 1С 8.3:
&НаСервере
Процедура Пример2(ТЗсФормы, Файл, Кодировка = Неопределено)
ТаблицаDBF = Новый XBase;
Если Кодировка = Неопределено Тогда
Кодировка = КодировкаXBase.OEM;
КонецЕсли;
ТаблицаDBF.Кодировка = Кодировка;
Для Каждого Колонка Из ТЗсФормы.Колонки Цикл
Если Колонка.ТипЗначения.СодержитТип(Тип("Строка")) Тогда
ТипТаблицы = "S";
ДлинаТаб = Колонка.ТипЗначения.КвалификаторыСтроки.Длина;
Если ДлинаТаб = 0 Тогда
ДлинаТаб = 100;
КонецЕсли;
ТочностьТаб = 0;
ИначеЕсли Колонка.ТипЗначения.СодержитТип(Тип("Число")) Тогда
ТипТаблицы = "N";
ДлинаТаб = Колонка.ТипЗначения.КвалификаторыЧисла.Разрядность;
ТочностьТаб = Колонка.ТипЗначения.КвалификаторыЧисла.РазрядностьДробнойЧасти;
Если ДлинаТаб = 0 Тогда
ДлинаТаб = 15;
ТочностьТаб = 3;
КонецЕсли;
ИначеЕсли Колонка.ТипЗначения.СодержитТип(Тип("Дата")) Тогда
ТипТаблицы = "D";
ДлинаТаб = 0;
ТочностьТаб = 0;
ИначеЕсли Колонка.ТипЗначения.СодержитТип(Тип("Булево")) Тогда
ТипТаблицы = "L";
ДлинаТаб = 0;
ТочностьТаб = 0;
Иначе
ТипТаблицы = "S";
ДлинаТаб = 100;
ТочностьТаб = 0;
КонецЕсли;
ТаблицаDBF.Поля.Добавить(Колонка.Имя, ТипТаблицы, ДлинаТаб, ТочностьТаб);
КонецЦикла;
ТаблицаDBF.СоздатьФайл(Файл);
Для Каждого СтрокаТЗ Из ТЗсФормы Цикл
ТаблицаDBF.Добавить();
ЗаполнитьЗначенияСвойств(ТаблицаDBF, СтрокаТЗ);
ТаблицаDBF.Записать();
КонецЦикла;
//Сообщить("Файл записан. В таблице " + ТаблицаDBF.КоличествоЗаписей() + " записей.");
КонецПроцедуры
Процедура Пример2(ТЗсФормы, Файл, Кодировка = Неопределено)
ТаблицаDBF = Новый XBase;
Если Кодировка = Неопределено Тогда
Кодировка = КодировкаXBase.OEM;
КонецЕсли;
ТаблицаDBF.Кодировка = Кодировка;
Для Каждого Колонка Из ТЗсФормы.Колонки Цикл
Если Колонка.ТипЗначения.СодержитТип(Тип("Строка")) Тогда
ТипТаблицы = "S";
ДлинаТаб = Колонка.ТипЗначения.КвалификаторыСтроки.Длина;
Если ДлинаТаб = 0 Тогда
ДлинаТаб = 100;
КонецЕсли;
ТочностьТаб = 0;
ИначеЕсли Колонка.ТипЗначения.СодержитТип(Тип("Число")) Тогда
ТипТаблицы = "N";
ДлинаТаб = Колонка.ТипЗначения.КвалификаторыЧисла.Разрядность;
ТочностьТаб = Колонка.ТипЗначения.КвалификаторыЧисла.РазрядностьДробнойЧасти;
Если ДлинаТаб = 0 Тогда
ДлинаТаб = 15;
ТочностьТаб = 3;
КонецЕсли;
ИначеЕсли Колонка.ТипЗначения.СодержитТип(Тип("Дата")) Тогда
ТипТаблицы = "D";
ДлинаТаб = 0;
ТочностьТаб = 0;
ИначеЕсли Колонка.ТипЗначения.СодержитТип(Тип("Булево")) Тогда
ТипТаблицы = "L";
ДлинаТаб = 0;
ТочностьТаб = 0;
Иначе
ТипТаблицы = "S";
ДлинаТаб = 100;
ТочностьТаб = 0;
КонецЕсли;
ТаблицаDBF.Поля.Добавить(Колонка.Имя, ТипТаблицы, ДлинаТаб, ТочностьТаб);
КонецЦикла;
ТаблицаDBF.СоздатьФайл(Файл);
Для Каждого СтрокаТЗ Из ТЗсФормы Цикл
ТаблицаDBF.Добавить();
ЗаполнитьЗначенияСвойств(ТаблицаDBF, СтрокаТЗ);
ТаблицаDBF.Записать();
КонецЦикла;
//Сообщить("Файл записан. В таблице " + ТаблицаDBF.КоличествоЗаписей() + " записей.");
КонецПроцедуры
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник