|   |   | 
| 
 | v8: Не открывает базу при выгрузке в dbf | ☑ | ||
|---|---|---|---|---|
| 0
    
        Pozdnyakov 26.03.12✎ 13:34 | 
        Добрый день!
  Необходимо создать dbf файл и выгрузить справочник в него, при компиляции выдает: Ошибка при вызове метода контекста (Добавить): Перед выполнением операции нужно открыть базу я же только что создала её. В чем может быть причина? Версия 1С 8.2 (обычное приложение), код пишу в модуле формы (нажатие кнопки) Процедура ВыгрузитьСправочник(Элемент,ПараметрКоманды, ПараметрыВыполненияКоманды) Файл = Новый XBase; Файл.Поля.Добавить("Ind"," N" , 2); Файл.Поля.Добавить("Month", "S", 8); Файл.Поля.Добавить("Hours", "N", 3); Файл.Поля.Добавить("Days", "N", 2); Файл.СоздатьФайл("с:\start.dbf"); Файл.ОткрытьФайл("с:\start.dbf" ); Если Файл.Открыта() = 1 Тогда Предупреждение("База открыта", 2); Иначе Предупреждение("НЕ смогли открыть Базу!", 2); КонецЕсли; Файл.АвтоСохранение = Истина; Файл.ОткрытьФайл("с:\start.dbf" ); Файл.КодОшибки(); Выборка = Справочники.КалендарьПлановый.Выбрать(); Пока Выборка.Следующий() Цикл Файл.Добавить(); Файл.Ind = Выборка.Код; Файл.Month = Выборка.Месяц; Файл.Hours = Выборка.ЧислоЧасов; Файл.Days = Выборка.ЧислоДней; КонецЦикла; Файл.ЗакрытьФайл(); КонецПроцедуры | |||
| 1
    
        qeos 26.03.12✎ 13:36 | 
        а что говорит СП?     | |||
| 2
    
        andrewks 26.03.12✎ 13:38 | 
        я таки не понял, какого вы пола?     | |||
| 3
    
        hhhh 26.03.12✎ 13:38 | 
        кто такой Нем? И почему Поздняков и вдруг "создала"?     | |||
| 4
    
        andrewks 26.03.12✎ 13:39 | 
        ну и каша в коде...     | |||
| 5
    
        vmv 26.03.12✎ 13:44 | 
        (0) + (4) избавиться от каши можно так
  Процедура ПолучитьСводнуюDBF(Элемент) Перем ПерефиксТаблицы; Перем КаталогDBF, ИмяФайлаDBF, ПолноеИмяФайлаDBF, xB; ПрефиксТаблицы = Прав(Элемент.Имя, 2); ИмяФайлаDBF = "DBF_" + ПрефиксТаблицы + ".DBF"; КаталогДанных = ЭтаФорма.КаталогДанных; КаталогDBF = КаталогДанных + "\" + "DBF"; Если Не СуществуетФайл(КаталогDBF) Тогда СоздатьКаталог(КаталогDBF); Иначе УдалитьФайлы(КаталогDBF, ИмяФайлаDBF); КонецЕсли; ПолноеИмяФайлаDBF = КаталогDBF + "\" + ИмяФайлаDBF; xB = Новый xBase(); Если ПрефиксТаблицы = "05" Тогда СоздатьСтруктуру_xB_05(xB); ИначеЕсли ПрефиксТаблицы = "06" Тогда СоздатьСтруктуру_xB_06(xB); ИначеЕсли ПрефиксТаблицы = "07" Тогда СоздатьСтруктуру_xB_07(xB); ИначеЕсли ПрефиксТаблицы = "08" Тогда СоздатьСтруктуру_xB_08(xB); КонецЕсли; xB.СоздатьФайл(ПолноеИмяФайлаDBF); Если Не xB.Открыта() Тогда Предупреждение("Не удалось создать и открыть указанный файл >> " + ПолноеИмяФайлаDBF); Возврат; КонецЕсли; Если ПрефиксТаблицы = "05" Тогда ДобавленыЗаписи = ДобавитьЗаписи_xB_05(xB, ПрефиксТаблицы); ИначеЕсли ПрефиксТаблицы = "06" Тогда ДобавленыЗаписи = ДобавитьЗаписи_xB_06(xB, ПрефиксТаблицы); ИначеЕсли ПрефиксТаблицы = "07" Тогда ДобавленыЗаписи = ДобавитьЗаписи_xB_07(xB, ПрефиксТаблицы); ИначеЕсли ПрефиксТаблицы = "08" Тогда ДобавленыЗаписи = ДобавитьЗаписи_xB_08(xB, ПрефиксТаблицы); КонецЕсли; Если ДобавленыЗаписи Тогда ЭлементыФормы["ндСводнаяТаблица" + ПрефиксТаблицы].Заголовок = "Сводная таблица " + ПрефиксТаблицы + " >> " + ПолноеИмяФайлаDBF; Иначе xB.ОчиститьФайл(); КонецЕсли; xB.ЗакрытьФайл(); КонецПроцедуры Процедура СоздатьСтруктуру_xB_05(xB) xB.Поля.Добавить("PERIOD_M" ,"N",2 ,0); xB.Поля.Добавить("PERIOD_Y" ,"N",4 ,0); xB.Поля.Добавить("ROWNUM" ,"N",6 ,0); xB.Поля.Добавить("UKR_GROMAD" ,"N",1 ,0); xB.Поля.Добавить("ZO" ,"N",2 ,0); xB.Поля.Добавить("NUMIDENT" ,"S",10 ,0); xB.Поля.Добавить("LN" ,"S",100,0); xB.Поля.Добавить("NM" ,"S",100,0); xB.Поля.Добавить("FTN" ,"S",100,0); xB.Поля.Добавить("START_DT" ,"N",2 ,0); xB.Поля.Добавить("END_DT" ,"N",2 ,0); xB.Поля.Добавить("PID_ZV" ,"S",150,0); КонецПроцедуры Функция ДобавитьЗаписи_xB_05(xB, ПрефиксТаблицы) Перем ТаблицаДанных, КоличествоЗаписейНаЛисте; Перем Строка, ТекущийНомерЗаписиНаЛисте; ТаблицаДанных = ЭтаФорма["Таблица" + ПрефиксТаблицы]; КоличествоЗаписейНаЛисте = ЭтаФорма["КоличествоЗаписейНаЛисте" + ПрефиксТаблицы]; ТекущийНомерЗаписиНаЛисте = 0; Для Каждого Строка Из ТаблицаДанных Цикл ТекущийНомерЗаписиНаЛисте = ТекущийНомерЗаписиНаЛисте + 1; Если ТекущийНомерЗаписиНаЛисте > КоличествоЗаписейНаЛисте Тогда ТекущийНомерЗаписиНаЛисте = 1; КонецЕсли; xB.Добавить(); xB.УстановитьЗначениеПоля("PERIOD_M" ,ПреобразоватьВЧисло(Строка.PERIOD_M)); xB.УстановитьЗначениеПоля("PERIOD_Y" ,ПреобразоватьВЧисло(Строка.PERIOD_Y)); xB.УстановитьЗначениеПоля("ROWNUM" ,ПреобразоватьВЧисло(ТекущийНомерЗаписиНаЛисте)); xB.УстановитьЗначениеПоля("UKR_GROMAD" ,ПреобразоватьВЧисло(Строка.UKR_GROMAD)); xB.УстановитьЗначениеПоля("ZO" ,ПреобразоватьВЧисло(Строка.ZO)); xB.УстановитьЗначениеПоля("NUMIDENT",Строка.NUMIDENT); xB.УстановитьЗначениеПоля("LN" ,Строка.LN); xB.УстановитьЗначениеПоля("NM" ,Строка.NM); xB.УстановитьЗначениеПоля("FTN" ,Строка.FTN); xB.УстановитьЗначениеПоля("START_DT",ПреобразоватьВЧисло(Строка.START_DT)); xB.УстановитьЗначениеПоля("END_DT" ,ПреобразоватьВЧисло(Строка.END_DT )); xB.УстановитьЗначениеПоля("PID_ZV" ,Строка.PID_ZV); xB.Записать(); КонецЦикла; Возврат Истина; КонецФункции | |||
| 6
    
        vmv 26.03.12✎ 13:48 | 
        ну или добавить каши, думаю автор не закрывает дбф программно/интерактивно вьювером  или не создает, третьего не дано     | |||
| 7
    
        Pozdnyakov 26.03.12✎ 14:56 | 
        (4) где каша? коды брала http://mista.ru/tutor_1c/dbf.htm     | |||
| 8
    
        Pozdnyakov 26.03.12✎ 14:56 | 
        (1)СП предлагает варианты создать файл и открыть,собранного примера я не обнаружила     | |||
| 9
    
        Pozdnyakov 26.03.12✎ 14:56 | 
        (3)Поздняков??? это где     | |||
| 10
    
        Pozdnyakov 26.03.12✎ 14:56 | 
        (6) вьюером - это чем?     | |||
| 11
    
        Pozdnyakov 26.03.12✎ 14:56 | 
        а каша ,это видимо то, что я несколько раз пыталась открывать файл, таким образом я пыталась понять, изменится что либо или нет вситуации, до этого делала вообще без строчки Файл.ОткрытьФайл, она по сути и не должна быть нужна     | |||
| 12
    
        Pozdnyakov 26.03.12✎ 14:56 | 
        (5) то есть разделить одну процедуру на процедуру создания самого файла и уже записи данных? спасибо за идею     | |||
| 13
    
        andrewks 26.03.12✎ 15:04 | 
        (9) у вас в нике     | |||
| 14
    
        andrewks 26.03.12✎ 15:04 | 
        а ник, видимо, по наследству достался     | |||
| 15
    
        Vakhrin 26.03.12✎ 15:23 | 
        лан... перенесу из дубля:
  Процедура ВыгрузитьСправочник(Элемент,ПараметрКоманды, ПараметрыВыполненияКоманды) Файл = Новый XBase; Файл.Поля.Добавить("Ind"," N" , 2); Файл.Поля.Добавить("Month", "S", 8); Файл.Поля.Добавить("Hours", "N", 3); Файл.Поля.Добавить("Days", "N", 2); Файл.АвтоСохранение = Истина; Файл.СоздатьФайл("с:\start.dbf"); Выборка = Справочники.КалендарьПлановый.Выбрать(); Пока Выборка.Следующий() Цикл Файл.Добавить(); Файл.Ind = Выборка.Код; Файл.Month = Выборка.Месяц; Файл.Hours = Выборка.ЧислоЧасов; Файл.Days = Выборка.ЧислоДней; КонецЦикла; Файл.Записать(); Файл.ЗакрытьФайл(); КонецПроцедуры | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |