Не определена структура базы при сохранении в DBF
Здравствуйте. Столкнулся с такой проблемой : есть запрос, в цикле по обходу результата запроса создается дбф файл, когда первый раз проходит цикл то все ок, а при втором заходе вылетает с ошибкой на строке ФайлДБФ.СоздавтьФайл(Имяфайла); по причине : не определена структура базы. Подскажите, пожалуйста, с чем может быть связана ошибка?
ФайлДБФ= Новый XBase;
ФайлДБФ.Кодировка = КодировкаXBase.ANSI;
ФайлДБФ.поля.Добавить("Date","D");
ФайлДБФ.поля.Добавить("Number","S",25);
ФайлДБФ.поля.Добавить("ProdCode","S",20);
ФайлДБФ.поля.Добавить("Amount","N",20,8);
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
Диалог.Заголовок = "Путь для сохранения:";
Диалог.ПолноеИмяФайла = "РТ";
Диалог.ПредварительныйПросмотр = Ложь;
Если Диалог.Выбрать() Тогда
ИмяФайла= Диалог.ПолноеИмяФайла;
Иначе
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("НачалоПериода", НачПериода);
Запрос.УстановитьПараметр("КонецПериода", КонПериода);
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка КАК СсылкаДокумента
|ИЗ
| Документ.РеализацияТоваровУслуг.ТоварыКАК РеализацияТоваровУслугТовары
|ГДЕ
| РеализацияТоваровУслуг.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
| И РеализацияТоваровУслуг.Ссылка.ПометкаУдаления = ЛОЖЬ";
РезультатЗапроса = Запрос.Выполнить().Выбрать();
Пока РезультатЗапроса .Следующий() Цикл
ДокументОбъект= РезультатЗапроса .СсылкаДокумента.ПолучитьОбъект();
ДатаДокумента = Формат(ДокументОбъект.Дата, "ДФ=dd.MM.yyyy");
Символ = Найти(ДатаДокумента, ".");
ДеньДаты = Лев(ДатаДокумента, Символ - 1);
МесяцДаты = Сред(ДатаДокумента, Символ +1, Символ-1);
ФайлДБФ.СоздатьФайл(ИмяФайла+ ДеньДаты + "_" + МесяцДаты + ".DBF");
ТабличнаяЧасть = ДокументОбъект.Товары;
Для Каждого Строка Из ТабличнаяЧасть Цикл
ФайлДБФ.Добавить();
ФайлДБФ.Date= ДокументОбъект.Дата;
ФайлДБФ.Number = ДокументОбъект.Номер;
ФайлДБФ.ProdCode= Строка.Номенклатура.Код;
ФайлДБФ.Amount = Строка.Количество;
ФайлДБФ.Записать();
КонецЦикла;
ФайлDBF.ЗакрытьФайл();
КонецЦикла;
ПоказатьПо теме из базы знаний
- Сравнение 1С8 и Navision
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2/3.0
- Загрузка чеков в 1С из ФНС в документы БП, УНФ, ERP, КА и УТ
- Защита объектов от изменения обменом
- Обработка для адаптивного переноса данных между базами через XML
Найденные решения
Решил задачу так:
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
Диалог.Заголовок = "Путь для сохранения:";
Диалог.ПолноеИмяФайла = "РТ";
Диалог.ПредварительныйПросмотр = Ложь;
Если Диалог.Выбрать() Тогда
ИмяФайла= Диалог.ПолноеИмяФайла;
Иначе
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("НачалоПериода", НачПериода);
Запрос.УстановитьПараметр("КонецПериода", КонПериода);
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка КАК СсылкаДокумента
|ИЗ
| Документ.РеализацияТоваровУслуг.ТоварыКАК РеализацияТоваровУслугТовары
|ГДЕ
| РеализацияТоваровУслуг.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
| И РеализацияТоваровУслуг.Ссылка.ПометкаУдаления = ЛОЖЬ";
РезультатЗапроса = Запрос.Выполнить().Выбрать();
Пока РезультатЗапроса .Следующий() Цикл
ФайлДБФ= Новый XBase;
ФайлДБФ.Кодировка = КодировкаXBase.ANSI;
ФайлДБФ.поля.Добавить("Date","D");
ФайлДБФ.поля.Добавить("Number","S",25);
ФайлДБФ.поля.Добавить("ProdCode","S",20);
ФайлДБФ.поля.Добавить("Amount","N",20,8);
ДокументОбъект= РезультатЗапроса .СсылкаДокумента.ПолучитьОбъект();
ДатаДокумента = Формат(ДокументОбъект.Дата, "ДФ=dd.MM.yyyy");
Символ = Найти(ДатаДокумента, ".");
ДеньДаты = Лев(ДатаДокумента, Символ - 1);
МесяцДаты = Сред(ДатаДокумента, Символ +1, Символ-1);
ФайлДБФ.СоздатьФайл(ИмяФайла+ ДеньДаты + "_" + МесяцДаты + ".DBF");
ТабличнаяЧасть = ДокументОбъект.Товары;
Для Каждого Строка Из ТабличнаяЧасть Цикл
ФайлДБФ.Добавить();
ФайлДБФ.Date= ДокументОбъект.Дата;
ФайлДБФ.Number = ДокументОбъект.Номер;
ФайлДБФ.ProdCode= Строка.Номенклатура.Код;
ФайлДБФ.Amount = Строка.Количество;
ФайлДБФ.Записать();
КонецЦикла;
ФайлДБФ .ЗакрытьФайл();
ФайлДБФ = "";
КонецЦикла;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Решил задачу так:
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
Диалог.Заголовок = "Путь для сохранения:";
Диалог.ПолноеИмяФайла = "РТ";
Диалог.ПредварительныйПросмотр = Ложь;
Если Диалог.Выбрать() Тогда
ИмяФайла= Диалог.ПолноеИмяФайла;
Иначе
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("НачалоПериода", НачПериода);
Запрос.УстановитьПараметр("КонецПериода", КонПериода);
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка КАК СсылкаДокумента
|ИЗ
| Документ.РеализацияТоваровУслуг.ТоварыКАК РеализацияТоваровУслугТовары
|ГДЕ
| РеализацияТоваровУслуг.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
| И РеализацияТоваровУслуг.Ссылка.ПометкаУдаления = ЛОЖЬ";
РезультатЗапроса = Запрос.Выполнить().Выбрать();
Пока РезультатЗапроса .Следующий() Цикл
ФайлДБФ= Новый XBase;
ФайлДБФ.Кодировка = КодировкаXBase.ANSI;
ФайлДБФ.поля.Добавить("Date","D");
ФайлДБФ.поля.Добавить("Number","S",25);
ФайлДБФ.поля.Добавить("ProdCode","S",20);
ФайлДБФ.поля.Добавить("Amount","N",20,8);
ДокументОбъект= РезультатЗапроса .СсылкаДокумента.ПолучитьОбъект();
ДатаДокумента = Формат(ДокументОбъект.Дата, "ДФ=dd.MM.yyyy");
Символ = Найти(ДатаДокумента, ".");
ДеньДаты = Лев(ДатаДокумента, Символ - 1);
МесяцДаты = Сред(ДатаДокумента, Символ +1, Символ-1);
ФайлДБФ.СоздатьФайл(ИмяФайла+ ДеньДаты + "_" + МесяцДаты + ".DBF");
ТабличнаяЧасть = ДокументОбъект.Товары;
Для Каждого Строка Из ТабличнаяЧасть Цикл
ФайлДБФ.Добавить();
ФайлДБФ.Date= ДокументОбъект.Дата;
ФайлДБФ.Number = ДокументОбъект.Номер;
ФайлДБФ.ProdCode= Строка.Номенклатура.Код;
ФайлДБФ.Amount = Строка.Количество;
ФайлДБФ.Записать();
КонецЦикла;
ФайлДБФ .ЗакрытьФайл();
ФайлДБФ = "";
КонецЦикла;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот