Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: XBase  (Прочитано 8316 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Gunslinger
Постоялец

ru
Offline Offline

« : 04-06-2010 09:46 » 

Есть код:

Процедура КнопкаСформироватьНажатие(Кнопка)
   Файл = Новый XBase;

//определяем структуру файла
//Синтаксис: ДобавитьПоле(<Название>,<Тип>,<Длина>,<Точность>)

Файл.Поля.Добавить("INN","S",50,0);
Файл.Поля.Добавить("DATE","D",10);
Файл.Поля.Добавить("IDENT","S",50);
Файл.СоздатьФайл("catalog.dbf"); //создаем файл физически

Файл.Индексы.Добавить("IDXCODE", "IDENT");
ФлИБД = Файл.СоздатьИндексныйФайл("index.cdx");
Файл.АвтоСохранение = Истина;

Номенклатура = Справочники.Контрагенты.Выбрать();
Пока Номенклатура.Следующий() Цикл
   Файл.Добавить();
   Файл.INN = Номенклатура.ИНН;
   Файл.DATE = ТекущаяДата();
   Файл.IDENT = Новый УникальныйИдентификатор;
   Файл.Записать();
КонецЦикла;

Файл.ЗакрытьФайл(); //не забывайте пожалуйста
КонецПроцедуры

Процедура ПриОткрытии()
   Файл = Новый XBase;
   Файл.ОткрытьФайл("C:\catalog.dbf", "С:\index.cdx");
!   Файл.ТекущийИндекс = Файл.индексы.IDXCODE;
      Пока Файл.Следующий() Цикл
         ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные = Файл.INN;
      КонецЦикла;
   Файл.ЗакрытьФайл();
КонецПроцедуры

На строке с "!" выползает ошибка : поле объекта не обнаружено (IDXCODE). Кто-нибудь сталкивался с таким?
Записан
Gunslinger
Постоялец

ru
Offline Offline

« Ответ #1 : 04-06-2010 10:36 » 

Уже сам понял... вот исправленный код

Процедура КнопкаСформироватьНажатие(Кнопка)
   Файл = Новый XBase;

//определяем структуру файла
//Синтаксис: ДобавитьПоле(<Название>,<Тип>,<Длина>,<Точность>)

Файл.Поля.Добавить("INN","S",50,0);
Файл.Поля.Добавить("DATE","D",10);
Файл.Поля.Добавить("IDENT","S",50);
Файл.СоздатьФайл("C:\catalog.dbf"); //создаем файл физически

Файл.Индексы.Добавить("IDXCODE", "IDENT");
ФлИБД = Файл.СоздатьИндексныйФайл("C:\catalog.cdx");
Файл.АвтоСохранение = Истина;

Номенклатура = Справочники.Контрагенты.Выбрать();
Пока Номенклатура.Следующий() Цикл
   Файл.Добавить();
   Файл.INN = Номенклатура.ИНН;
   Файл.DATE = ТекущаяДата();
   Файл.IDENT = Новый УникальныйИдентификатор;
   Файл.Записать();
КонецЦикла;

Файл.ЗакрытьФайл(); //не забывайте пожалуйста
КонецПроцедуры

Процедура ПриОткрытии()
   //Возврат;
   Файл = Новый XBase;
   Файл.ОткрытьФайл("C:\catalog.dbf", "C:\catalog.cdx");
   Файл.ТекущийИндекс = Файл.Индексы.IDXCODE;
   Пока Файл.Следующая() Цикл
      Сообщить(Файл.INN);
      //   ЭлементыФормы.ТабличнаяЧасть1.ТекущиеДанные.ИНН = Файл.INN;
      КонецЦикла;
   Файл.ЗакрытьФайл();
 КонецПроцедуры
Он почему-то ничего не возвращает- ни одного сообщения, хотя должно быть 120, файлы оба создаются и не пустые... Есть идеи?
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 04-06-2010 19:09 » 

Попробуй перед циклом что-то типа ВНачало()
Записан
Gunslinger
Постоялец

ru
Offline Offline

« Ответ #3 : 07-06-2010 04:38 » 

Попробовал - эффекта нет...
Записан
Gunslinger
Постоялец

ru
Offline Offline

« Ответ #4 : 07-06-2010 07:24 » 

Процедура ПриОткрытии()
   //Возврат;
   Файл = Новый XBase;
   Файл.ОткрытьФайл("C:\catalog.dbf", "C:\catalog.cdx");
   //Файл.ТекущийИндекс = Файл.Индексы.IDXCODE;
   Файл.Первая();
   Пока Не Файл.Последняя() Цикл
      Сообщить(Файл.INN + Файл.DATE);
      //ЭлементыФормы.ТабличнаяЧасть1.ТекущиеДанные.ИНН = Файл.INN;
      Файл.Следующая();
      КонецЦикла;
   Файл.ЗакрытьФайл();
 КонецПроцедуры
Такой способ организации цикла тоже нифига не дал...
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 07-06-2010 18:04 » 

А без индекса пробовал?
Код:
Файл.ОткрытьФайл("C:\catalog.dbf");
Записан
Gunslinger
Постоялец

ru
Offline Offline

« Ответ #6 : 08-06-2010 04:41 » 

Тот же эффект.. Я думал может из-за того что записей в документе много записей, из другой конфигурации его создавать, где контрагетов всего 3... Но не выводится сообщение...
Записан
Gunslinger
Постоялец

ru
Offline Offline

« Ответ #7 : 08-06-2010 05:10 » 

Все нашел.. Проблема была в том что не вызывалась сама функция ПриОткрытии(). Перенес код в ПередОткрытием() все нормально стало
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 08-06-2010 15:45 » 

Скорее всего у тебя функция ПриОткрытии не привязана к соотвтствующему событию формы. Для 8.Х недостаточно просто назвать функцию - ее нужно указать как обработчик события
Записан
Gunslinger
Постоялец

ru
Offline Offline

« Ответ #9 : 18-06-2010 06:36 » 

Мне нужно теперь в документ Xbase вносить данные из другой формы - пробую так
Процедура Кнопка1Нажатие(Элемент)
   Файл = Новый XBase;
   Файл.ОткрытьФайл("C:\catalog.dbf", "C:\catalog.cdx");
   Файл.ТекущийИндекс = Файл.Индексы.IDXCODE;
   Файл.INN = ЭлементыФормы.ПолеВвода29;
   Файл.OTIFNS = ЭлементыФормы.ПолеВвода1;
   Файл.ЗакрытьФайл();
КонецПроцедуры
Код выполняется но в документе записей не добавляется..
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 22-06-2010 17:09 » 

ЭлементыФормы.ПолеВвода29 - это интерфейсный объект.
Нужно:
ЭлементыФормы.ПолеВвода29.Значение
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines