|
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 = Выборка.ЧислоДней; КонецЦикла; Файл.Записать(); Файл.ЗакрытьФайл(); КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |