Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
21 Янв 2018, 11:53
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Перекачка данных в DBF-файлы. Проблема с индексами.  (Прочитано 4799 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн bobinnick

  • *
  • Сообщений: 4
  • РЕПУТАЦИЯ: 2
  • КПД: 50%
  • Регистрация: 2010-10-12
  • Сайт: 
Произвожу выкачку данных в DBF-файл из элементарного справочника:
--------------------------------------------------------------------------------------------
        // Создание файлов
        ФайлБД=КаталогИмя+"Spr_podr.";   // Название файла без расширения

   xБД = Новый XBase; // создание объекта файла формата xBase

   // добавим поля
   xБД.Поля.Добавить("Id", "S", 5);
   xБД.Поля.Добавить("Name", "S", 25);
   xБД.СоздатьФайл(ФайлБД+"dbf"); // создадим реальный файл из объекта

   // Индексное выражение
   ИндВр="Id";
   xБД.индексы.Добавить("Id",ИндВр,Истина);
   ИБД = xБД.СоздатьИндексныйФайл(ФайлБД+"cdx"); // создание индексного файла
   xБД.АвтоСохранение=Истина;
      
   // Выкачка данных
   Выборка=Справочники.Подразделения.Выбрать();
   Пока Выборка.Следующий() Цикл
      xБД.Добавить();
      xБД.ID=Выборка.Код;
      xБД.Name=Выборка.Наименование;
   КонецЦикла;
   xБД.ЗакрытьФайл();
--------------------------------------------------------------------------------------------

Почему не активируется и не формируется индексный файл? То есть файл xBase создается и данные из справочника переписываются, а вот индексный файл как бы и вовсе не причем.

И как потом при открытии, активировать первый или другой индекс (если индексов будет несколько)?

Заранее спасибо.


Оффлайн ***Vjacheslav***

  • ***
  • Сообщений: 156
  • РЕПУТАЦИЯ: 35
  • КПД: 22%
  • Регистрация: 2010-08-16
  • Сайт: 
  • Профессия: Программист 1С
1)В цикл Нужно добавить  xБД.Записать();
2)Вследующий раз при открытии открывай его с индексным файлом   
 хБД.ОткрытьФайл(ИмяФайла,ИмяИндексногоФайла);   
 xБД.ТекущийИндекс = xБД.Индексы.Id;

Оффлайн bobinnick

  • *
  • Сообщений: 4
  • РЕПУТАЦИЯ: 2
  • КПД: 50%
  • Регистрация: 2010-10-12
  • Сайт: 
Цитата: ***Vjacheslav***
1)В цикл Нужно добавить  xБД.Записать();
2)Вследующий раз при открытии открывай его с индексным файлом   
 хБД.ОткрытьФайл(ИмяФайла,ИмяИндексногоФайла);   
 xБД.ТекущийИндекс = xБД.Индексы.Id;

Слава, спасибо. Заработало:
-----------------------------------------------------------------------------------------------------
// Перекачка справочника "Подразделение" в DBF-файле
   
   ФайлБД=КаталогИмя+"Spr_podr.";   // Название файла без расширения
   xБД=Новый Файл(ФайлБД+"dbf");   // Создание объекта файла в среде 1С
   
   // Удалить, если файлы уже есть (в том числе и индексный файл)
   Если xБД.Существует() Тогда
      УдалитьФайлы(ФайлБД,"*");
   КонецЕсли;
   
   // Создание файлов
   xБД = Новый XBase; // создание объекта файла формата xBase
   // добавим поля
   xБД.Поля.Добавить("Id", "S", 5);
   xБД.Поля.Добавить("Name", "S", 25);
   xБД.СоздатьФайл(ФайлБД+"dbf"); // создадим реальный файл из объекта
   // Индексное выражение
   ИндВр="Id";
   xБД.индексы.Добавить("Id",ИндВр,Истина);
   ИБД = xБД.СоздатьИндексныйФайл(ФайлБД+"cdx"); // создание индексного файла
   xБД.АвтоСохранение=Истина;
   xБД.ЗакрытьФайл();
   
   // Выкачка данных
   xБД.ОткрытьФайл(ФайлБД+"dbf",ФайлБД+"cdx");
   xБД.ТекущийИндекс = xБД.индексы.Id;
   Выборка=Справочники.Подразделения.Выбрать();
   Пока Выборка.Следующий() Цикл
      xБД.Добавить();
      xБД.ID=Выборка.Код;
      xБД.Name=Выборка.Наименование;
      xБД.Записать();
   КонецЦикла;
   xБД.ЗакрытьФайл();
   
   // проверка работы индекса
   xБД.ОткрытьФайл(ФайлБД+"dbf",ФайлБД+"cdx");
   xБД.ТекущийИндекс = xБД.индексы.Id;
   Если xБД.Найти("00003",">=") Тогда
      Сообщить(xБД.ID+" - "+xБД.NAME);
      Пока xБД.Следующая() Цикл
         Сообщить(xБД.ID+" - "+xБД.NAME);
      КонецЦикла;
   КонецЕсли;      
   xБД.ЗакрытьФайл();

Это лишь небольшая заготовка для подготовки глобальной выкачки баз данных. Полный алгоритм указан, например, в книге Бартеньева О.В. «Опыты программирования».

В системе 1С 8 есть выкачка ВСЕХ данных. Мне же необходимо выкачивать только их часть. И потом база, созданная даже в 1С 8.0 уже напрямую не передается в 1С 8.1. Наконец, при перекачке с 1С 7.7 и вовсе требуется писать (на мой взгляд) алгоритмы конвертации самому.

----------------------------------------------------------------------------------------------------------
Не хочется создавать отдельную тему, задам вопрос здесь: модуль перекачки будет оформляться как внешняя обработка. Соответственно, чтобы из моих подчиненных никто не перепутал из какой базы нужно делать выкачку, а куда перекачивать, я должен поставить проверку: в какой базе данных находится пользователь. Как мне узнать имя базы или конфигурации, чтобы сделать такую проверку? (может можно определить рабочий каталог базы, например?)

Оффлайн progmikon

  • *****
  • Сообщений: 2090
  • РЕПУТАЦИЯ: 371
  • КПД: 18%
  • Регистрация: 2010-10-09
  • Компания: http://progmikon.blogspot.com/
  • Профессия: Программист 1С
(может можно определить рабочий каталог базы, например?)

Как вариант СтрокаСоединенияИнформационнойБазы().... а от туда можно и строку подключения получить.

Оффлайн bobinnick

  • *
  • Сообщений: 4
  • РЕПУТАЦИЯ: 2
  • КПД: 50%
  • Регистрация: 2010-10-12
  • Сайт: 
Цитата: progmikon
Как вариант СтрокаСоединенияИнформационнойБазы().... а от туда можно и строку подключения получить.
Большое спасибо! Именно то, что я и искал. Но сам не нашел, а использовал просто имя метаданных: «Метаданные.Имя». Однако, рабочий каталог – более верный способ, потому что метаданные могут иметь и одинаковое название.

Просто для информации: столкнулся с одним подводным рифом при перекачке данных. По привычке использовал индексы. А надо понять с самого начала, что индексы 1С создает только уникальные. По крайне мере – по умолчанию. Выбрав в качестве индекса, при перекачке номер документа, потерял все записи документа (в DBF-файле), кроме одной. Когда выключил индекс, или создал другой, который соответствовал бы требованию уникальности – всё получилось.


Теги:
 

Перенос данных из 1с 82 БП (базовая) в 1с 82 БГУ (базовая)

Автор Владимир87Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 4
Просмотров: 7631
Последний ответ 06 Дек 2014, 17:40
от дфтын
Поиск по бае данных,(полнотекстовый поиск)

Автор kot_ooРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 0
Просмотров: 3964
Последний ответ 19 Май 2014, 15:40
от kot_oo
Как исправить при обновлении ИБ: Ошибка в запросе набора данных по причине: {(58, 2)}: Несовместимые типы "ВЫБОР" <<?>>ВЫБОР

Автор dollРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 2230
Последний ответ 01 Янв 2017, 20:27
от Геннадий ОбьГЭС
"Задваивание" данных в отчете

Автор mashencev_antonРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 13
Просмотров: 7672
Последний ответ 15 Окт 2015, 11:21
от Mari_beginner
Куда сохраняются данные в режиме работы клиент при выгрузке данных обработкой "Универсальный обмен данными в формате XML"

Автор xDDРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 7146
Последний ответ 13 Ноя 2014, 08:23
от cska-fanat-kz

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
99 Сообщений
AIFrame
65 Сообщений
alex0402
32 Сообщений
kiksi
26 Сообщений
pavl_vs
24 Сообщений
alexandr_ll
18 Сообщений
andron81_81
16 Сообщений
Norfolk
15 Сообщений
KOI8-R
14 Сообщений
MuI_I_Ika MuI_I_Ika
13 Сообщений

* Кто онлайн

  • Точка Гостей: 324
  • Точка Скрытых: 0
  • Точка Пользователей: 3
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal