Gunslinger
Постоялец
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
Постоялец
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
|
|
« Ответ #2 : 04-06-2010 19:09 » |
|
Попробуй перед циклом что-то типа ВНачало()
|
|
|
Записан
|
|
|
|
Gunslinger
Постоялец
Offline
|
|
« Ответ #3 : 07-06-2010 04:38 » |
|
Попробовал - эффекта нет...
|
|
|
Записан
|
|
|
|
Gunslinger
Постоялец
Offline
|
|
« Ответ #4 : 07-06-2010 07:24 » |
|
Процедура ПриОткрытии() //Возврат; Файл = Новый XBase; Файл.ОткрытьФайл("C:\catalog.dbf", "C:\catalog.cdx"); //Файл.ТекущийИндекс = Файл.Индексы.IDXCODE; Файл.Первая(); Пока Не Файл.Последняя() Цикл Сообщить(Файл.INN + Файл.DATE); //ЭлементыФормы.ТабличнаяЧасть1.ТекущиеДанные.ИНН = Файл.INN; Файл.Следующая(); КонецЦикла; Файл.ЗакрытьФайл(); КонецПроцедуры Такой способ организации цикла тоже нифига не дал...
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #5 : 07-06-2010 18:04 » |
|
А без индекса пробовал? Файл.ОткрытьФайл("C:\catalog.dbf");
|
|
|
Записан
|
|
|
|
Gunslinger
Постоялец
Offline
|
|
« Ответ #6 : 08-06-2010 04:41 » |
|
Тот же эффект.. Я думал может из-за того что записей в документе много записей, из другой конфигурации его создавать, где контрагетов всего 3... Но не выводится сообщение...
|
|
|
Записан
|
|
|
|
Gunslinger
Постоялец
Offline
|
|
« Ответ #7 : 08-06-2010 05:10 » |
|
Все нашел.. Проблема была в том что не вызывалась сама функция ПриОткрытии(). Перенес код в ПередОткрытием() все нормально стало
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #8 : 08-06-2010 15:45 » |
|
Скорее всего у тебя функция ПриОткрытии не привязана к соотвтствующему событию формы. Для 8.Х недостаточно просто назвать функцию - ее нужно указать как обработчик события
|
|
|
Записан
|
|
|
|
Gunslinger
Постоялец
Offline
|
|
« Ответ #9 : 18-06-2010 06:36 » |
|
Мне нужно теперь в документ Xbase вносить данные из другой формы - пробую так Процедура Кнопка1Нажатие(Элемент) Файл = Новый XBase; Файл.ОткрытьФайл("C:\catalog.dbf", "C:\catalog.cdx"); Файл.ТекущийИндекс = Файл.Индексы.IDXCODE; Файл.INN = ЭлементыФормы.ПолеВвода29; Файл.OTIFNS = ЭлементыФормы.ПолеВвода1; Файл.ЗакрытьФайл(); КонецПроцедуры Код выполняется но в документе записей не добавляется..
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #10 : 22-06-2010 17:09 » |
|
ЭлементыФормы.ПолеВвода29 - это интерфейсный объект. Нужно: ЭлементыФормы.ПолеВвода29.Значение
|
|
|
Записан
|
|
|
|
|