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

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

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
Просмотров: 9775
Последний ответ 06 Дек 2014, 17:40
от дфтын
Поиск по бае данных,(полнотекстовый поиск)

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

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

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

Ответов: 4
Просмотров: 4595
Последний ответ 26 Апр 2018, 06:45
от Геннадий ОбьГЭС
"Задваивание" данных в отчете

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

Ответов: 14
Просмотров: 11778
Последний ответ 12 Июл 2020, 14:17
от karogach
Куда сохраняются данные в режиме работы клиент при выгрузке данных обработкой "Универсальный обмен данными в формате XML"

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

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

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

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

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


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

* Реклама

* Поиск

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

* Реклама

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

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

Геннадий ОбьГЭС Геннадий ОбьГЭС
74 Сообщений
oooo800
33 Сообщений
Дмитрий Джей Дмитрий Джей
30 Сообщений
IL2016
29 Сообщений
antoneus antoneus
25 Сообщений
LexaK
23 Сообщений
DmitriyF DmitriyF
16 Сообщений
Ann_
16 Сообщений
мадам брошкина
13 Сообщений
alexandr_ll
12 Сообщений

* Кто онлайн

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

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal