Ошибка при вызове метода контекста создать файл

Странная ошибка при работе с ДБФ

Я

  

ЧессМастер

05.07.18 — 17:16

Всем доброе время суток !

Столкнулся со странной ошибкой при работе с ДБФ.

При попытке программной переиндексации средствами 1С выдает ошибку

Error #: -20

Creating File

Temporary Working File

При этом сам файл ДБФ прекрасно открывается ДБФ редактором.

В файле 225 500 записей.

Кто сталкивался с подобной ошибкой — в чем может быть дело ?

  

hogik

1 — 05.07.18 — 17:47

Надо бы глянуть текст программы. :-)

А вообще:

-20

Creating File

This error could be caused by specifying an illegal file name, attempting to create a file which is open, having a full directory, or by having a disk problem.

  

ЧессМастер

2 — 05.07.18 — 18:29

(1) В тексте программы ничего необычного

Состояние("Ждите. Идет переиндексация файла таблицы соответствия ...");

Попытка 
БД_ТС.Переиндексировать();

Исключение
  Сообщить("ВНИМАНИЕ! Не удалось переиндексировать 
  таблицу соответствия: " + ИмяФайлаТС + "
                     |    " + 
 ОписаниеОшибки(), СтатусСообщения.ОченьВажное);

КонецПопытки;    


Ошибка возникает при разных именах файлов, разных каталогах и разных компьютерах.

Может проблема в том что при создании индекса не нравится содержимое поля записи ? Но ведь редактором файл открывается.

  

hogik

3 — 05.07.18 — 20:30

Покажите текст про создание БД_ТС.

  

Lama12

4 — 05.07.18 — 20:46

(0) Имя файла должно быть в формате 8.3 и желательно английскими буквами.

  

Lama12

5 — 05.07.18 — 20:47

(4) 8.3 это не версия 1с.

  

DES

6 — 05.07.18 — 20:54

имена полей (индексируемых) должны быть в верхнем регистре

  

ice777

7 — 05.07.18 — 21:04

(0) индексный файл и дбф это два разные файлы, если что )

первый только ключи для поиска, второй- данные, которые у тебя «прекрасно открываются».

по тексту ошибки нет места на диске для индексного

  

ice777

8 — 05.07.18 — 21:06

по жизни видал ситуации, когда индексный больше файла с данными, в выражение для поиска можно было включать и функции. Да и вообще- индексный- это дерево.

  

ЧессМастер

9 — 06.07.18 — 09:33

(4) Имя файла ts.dbf
Имя индексного файла ts.cdx

  

ЧессМастер

10 — 06.07.18 — 09:41

(3)

код создания ДБФ

    БД_ТС = Новый XBase;
    ФайлБД_ТС = Новый Файл(ФайлТС);
    ФайлИндексовБД_ТС = Новый Файл(ИмяФайлаИндексовТС);
    Если ФайлБД_ТС.Существует() Тогда
        Если НЕ БД_ТС.Открыта() Тогда            
    
        БД_ТС.индексы.Добавить("IndSource", "TRIM(ID_Source)", Истина);
                    
            Если ФайлИндексовБД_ТС.Существует() Тогда
                БД_ТС.ОткрытьФайл(ФайлТС, ИмяФайлаИндексовТС, Ложь);
            Иначе
                БД_ТС.ОткрытьФайл(ФайлТС,, Ложь);
                Если НЕ БД_ТС.СоздатьИндексныйФайл(ИмяФайлаИндексовТС) Тогда
                    Сообщить("ВНИМАНИЕ! Не удачная попытка создания индексного файла таблицы соответствия:
                             |    " + ИмяФайлаИндексовТС, СтатусСообщения.ОченьВажное);
                    Возврат Ложь;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;        
    
    Иначе
        БД_ТС.поля.Добавить("ID_Source",  "S", 50);
        БД_ТС.поля.Добавить("ID_Receive", "S", 50);
        БД_ТС.поля.Добавить("Manager",    "S", 100);
        БД_ТС.поля.Добавить("DateAct",    "D", 8);
        БД_ТС.поля.Добавить("File",       "S", 20);
        БД_ТС.поля.Добавить("Update",        "N", 2);
        БД_ТС.поля.Добавить("Direct",        "N", 2);
        БД_ТС.поля.Добавить("ManagerRar",        "S", 100);     
        БД_ТС.индексы.Добавить("IndSource", "TRIM(ID_Source)", Истина);
                
        Попытка БД_ТС.СоздатьФайл(ФайлТС, ИмяФайлаИндексовТС);
        Исключение
            Сообщить("ВНИМАНИЕ! Нет возможности открыть файл таблицы соответствия: " + ФайлТС + "
                     |    " + ОписаниеОшибки(), СтатусСообщения.ОченьВажное);

            Возврат Ложь;
        КонецПопытки;    
    КонецЕсли;

  

ЧессМастер

11 — 06.07.18 — 09:48

(7) «(0) индексный файл и дбф это два разные файлы, если что )

первый только ключи для поиска, второй- данные, которые у тебя "прекрасно открываются". "

Я это знаю.

У меня в файле ДБФ 225 500 записей (225 ТЫСЯЧ).ЮБез индексного файла поиск записей будет долго идти.

Вопрос почему стала возникать ошибка при переиндексации если места на диске полно, в названии файла все нормально, и ошибка возникает именно с этим файлом на разных компах.

  

ЧессМастер

12 — 06.07.18 — 09:50

(8) "по жизни видал ситуации, когда индексный больше файла с данными"

Файл ДБФ чуть больше 73 Мб, файл индекса (при переиндексации он создается и дорастает до определенного размера а потом выскакивает ошибка в (0) - 18 Мб

  

ЧессМастер

13 — 06.07.18 — 11:09

Какая то реально странность.

В каталоге оставляю только файл ДБФ. CDX удаляю.

Делаю переиндексацию.

Выскакивает ошибка

"Ошибка при вызове метода контекста (Переиндексировать): ошибка создания файла"

При этом в каталоге где лежит ДБФ появляется файл CDX (до переиндексации его не было).

Как может быть ошибка «ошибка создания файла» если файл CDX создается ?

  

olegves

14 — 06.07.18 — 12:29

не знаю как в 8ке, но в клюшках помнится заголовок файла CDX, сформированного 1С, отличался от заголовка такого же в FoxPro. При этом Лис принимал 1Ский файл, но не мог по нему производить поиск.

  

olegves

15 — 06.07.18 — 12:35

+ (14) как вариант, откажись от индексов в пользу Х+1 дбф. 1 — главная, там сделай имя таблицы (всего их будет Х). поиск будет в 2 таблицах:  в Главной по ключевому полю находишь имя таблицы, в которой продолжишь поиск

  

ЧессМастер

16 — 06.07.18 — 13:07

(15) Вопрос решился.

Индекс убивался конструкцией БД_ТС.Сжать();


Всем спасибо за помощь !

  

hogik

17 — 06.07.18 — 16:29

(15)

«Индекс убивался конструкцией БД_ТС.Сжать();»(с)

А где этот оператор в тексте, который Вы показываете? :-)

"Вопрос решился."(с)
Не решился. :-)

Вопрос решится после убирания TRIM в индексном выражении.

Т.к. длина ключей в xBase должна быть одинакова для ВСЕХ ключей.

  

hogik

18 — 06.07.18 — 16:38

(16)

«Индекс убивался конструкцией БД_ТС.Сжать();»(с)

А где этот оператор в тексте, который Вы показываете? :-)

"Вопрос решился."(с)
Не решился. :-)

Вопрос решится после убирания TRIM в индексном выражении.

Т.к. длина ключей в xBase должна быть одинакова для ВСЕХ ключей.

  

hogik

19 — 06.07.18 — 19:38

(16)

Поясню своё предыдущее сообщение в данной теме.

Есть странная ;-) информация, что «FoxPro не поддерживает переменную длину индексного ключа. Если вы попытаетесь построить индекс с ключом, который имеет различные длины, то ключ будет дополнен пробелами.»(с) Например, тут: http://www.foxclub.ru/rhproject/project/html/576a2953-04ff-4a66-9e38-3a3d9c990b72.hhtm

Но, движок из 1С для поддержки DBF не делает этого. Ну, до какой длины надо дополнять пробелы? :-) И возникает ошибка или строится «битый» индекс. Это очень старая ошибка в движке…

  

hogik

20 — 06.07.18 — 21:36

  

Злопчинский

21 — 18.07.18 — 03:26

(16) тебе hogik дал реальную причину сбоя

Но реакции — нету.

Проблема решена?

  

ЧессМастер

22 — 20.07.18 — 11:43

(19) Поясните пожалуйста один момент.

Вы пишите "Если вы попытаетесь построить индекс с ключом, который имеет различные длины, то ключ будет дополнен пробелами"

Смотрим программыный текст создания индекса.

// данные

БД_ТС.поля.Добавить("ID_Source",  "S", 50);

// индекс

БД_ТС.индексы.Добавить("IndSource", "TRIM(ID_Source)", 
Истина);


Что мы имеем в реальности при использовании ДБФ ?

В колонке «ID_Source» в ДБФ у меня хранится ГУИД объекта. У него фиксированная длина у всех объектов.

По этому полю выстроен индекс.

В результате получается
1. Данные - фиксированная строка

2. Индекс строится по фиксированной строке.

Почему в таком случае при конструкции  БД_ТС.Сжать()

происходило падение индекса ?

  

ЧессМастер

23 — 20.07.18 — 11:45

(21) Извиняюсь что долго не отвечал. Сильно был занят, не было времени ответить.

Острота проблемы спала,  теперь можно спокойно подумать в чем была причина.

Я нашел метод устранения ошибки 
//Индекс убивался конструкцией БД_ТС.Сжать();


но остались вопросы в причине возникновения

  

hogik

24 — 21.07.18 — 19:08

(22)

Дмитрий.

Сделайте индекс как: «IndSource», «ID_Source»

Обязательно с предварительным удалением CDX файла.

Попробуйте свою обработку. Включая БД_ТС.Сжать().

А потом будем обсуждать «вопросы в причине возникновения»(с).

  

hogik

25 — 22.07.18 — 19:19

(22)

Дмитрий.

Я попытался промоделировать проблему/сбой.

При фиксированной длине значений всех ключей сбоя не происходит.

Мало того. :-) Движок DBF-ов из 1С 8.х нормально отрабатывает индексное выражение с TRIM и разной длиной значений ключей. Устанавливается фиксированная длина ключа в 50 байт — равная длине поля «аргумента» функции TRIM.

Если Вам интересно выяснить причину сбоя, то высылайте мне DBF файл.

Надо его смотреть, а не моё тестовое содержание файла…

  

hogik

26 — 24.07.18 — 00:42

(22)

Дмитрий.

Пока пытался моделировать проблему/сбой обнаружил замечательное явление. :-)

Если индекс имеет признак уникальности и производится запись/обновление строк DBF с повторяющимся значением поля входящего в индексное выражение, то всё может выглядеть нормальным. А иногда возникает ошибка -310 или заваливается вся сессия 1С-а. Реакция движка DBF-а мало предсказуема и зависит от многих факторов — размера поля, количества записей с повторяющимся значением поля, количества записей/обновлений за одно открытие файлов и т.д.

При любом исходе — индекс становится «битым» с массой случайных эффектов.

И вопрос к Вам.

В Ваших алгоритмах обеспечивается уникальное значение поля по которому строится индекс с признаком уникальности?

Тамика

Котовчанин

942 / 482 / 200

Регистрация: 16.02.2010

Сообщений: 3,338

Записей в блоге: 37

1

06.03.2017, 13:32. Показов 4647. Ответов 4

Метки нет (Все метки)


Всем добрый день!

Пытаюсь написать обработку для выгрузки данных в dbf, нашла разные примеры. В итоге, при попытке записать обработку — выдает ошибку

1C
1
2
3
4
{Обработка.МояОбработка1.Форма.Форма.Форма(16)}: Ошибка при вызове метода контекста (СоздатьФайл)
    БД.СоздатьФайл("catalog.dbf"); //создаем файл физически
по причине:
Ошибка создания файла

Вот сама обработка

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Процедура Кнопка1Нажатие(Элемент)
    
    БД = Новый XBase;
    
    БД.Поля.Добавить("SUPPCODE", "S", 24);    
    БД.Поля.Добавить("DRUGNAME", "S", 255);
    БД.Поля.Добавить("MAKER", "S", 64);
    БД.Поля.Добавить("KOD_MORION", "S", 64);
    БД.Поля.Добавить("PRICE", "N", 6);
    
    БД.СоздатьФайл("catalog.dbf");
    БД.ЗакрытьФайл(); 
    
КонецПроцедуры

Заранее спасибо!

Добавлено через 59 минут
Решено! Нужно указывать полный путь…

0

Dethmontt

07.03.2017, 01:32

Не по теме:

Тамика, рыжий, это твой натуральный цвет волос?

0

Тамика

07.03.2017, 17:21

 [ТС]

Не по теме:

Dethmontt, увы, да :D

0

Dethmontt

07.03.2017, 18:05

Не по теме:

Цитата
Сообщение от Тамика
Посмотреть сообщение

Dethmontt, увы, да

а мне нравиться… :-[

0

Тамика

07.03.2017, 22:18

 [ТС]


    Создание обработки для выгрузки данных в dbf: Ошибка создания файла

Не по теме:

Цитата
Сообщение от Dethmontt
Посмотреть сообщение

а мне нравиться…

Рада слышать, спасибо :-[

0

IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

07.03.2017, 22:18

5

  1. Здравствуйте! Создаю DBF файл по данным из документа

        Запрос = Новый Запрос;
        Запрос.Текст ="ВЫБРАТЬ
                      |    ПаспортныеДанныеФизЛицСрезПоследних.ДокументСерия,
                      |    ПаспортныеДанныеФизЛицСрезПоследних.ДокументНомер,
                      |    ФИОФизЛицСрезПоследних.Фамилия,
                      |    ФИОФизЛицСрезПоследних.Имя,
                      |    ФИОФизЛицСрезПоследних.Отчество,
                      |    ПеречислениеПодотчетныхСуммРаботникиОрганизации.НомерЛицевогоСчета,
                      |    ПеречислениеПодотчетныхСуммРаботникиОрганизации.Сумма,
                      |    ПеречислениеПодотчетныхСуммРаботникиОрганизации.ФизЛицо
                      |ИЗ
                      |    Документ.ПеречислениеПодотчетныхСумм.РаботникиОрганизации КАК ПеречислениеПодотчетныхСуммРаботникиОрганизации
                      |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПаспортныеДанныеФизЛиц.СрезПоследних КАК ПаспортныеДанныеФизЛицСрезПоследних
                      |        ПО ПеречислениеПодотчетныхСуммРаботникиОрганизации.ФизЛицо = ПаспортныеДанныеФизЛицСрезПоследних.ФизЛицо
                      |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних КАК ФИОФизЛицСрезПоследних
                      |        ПО ПеречислениеПодотчетныхСуммРаботникиОрганизации.ФизЛицо = ФИОФизЛицСрезПоследних.ФизЛицо
                      |ГДЕ
                      |    ПеречислениеПодотчетныхСуммРаботникиОрганизации.Ссылка = &Ссылка";
       
        Запрос.УстановитьПараметр("Ссылка", СсылкакНаДокумент);
       
        Выборка = Запрос.Выполнить().Выбрать();
           
            Если Не ЗначениеЗаполнено(ПутьКФайлу) Тогда
                Предупреждение("Не указан путь к файлу DBF!");
                Возврат;
            КонецЕсли;
           
            ДБФ = Новый XBase;
            ДБФ.ОткрытьФайл(ПутьКФайлу);
            ДБФ.ОчиститьФайл();
            ДБФ.Кодировка =КодировкаXBase.OEM;
            ДБФ.АвтоСохранение=Истина;
            Пока Выборка.Следующий() Цикл
               
                ДБФ.Добавить();
                ДБФ.FIOOWNER = ОбщегоНазначения.ПолучитьФамилиюИмяОтчество(Выборка.Фамилия, Выборка.Имя, Выборка.Отчество, Ложь);
                ДБФ.PASPORT = Строка(Выборка.ДокументСерия)+ " "+Строка(Выборка.ДокументНомер);
                ДБФ.ADDRESS = ПолучитьАдресИзКонтактнойИнформации(Выборка.ФизЛицо);
                ДБФ.INDEX   = "";
                ДБФ.PHONENM = ПолучитьТелефонИзКонтактнойИнформации(Выборка.ФизЛицо);
                ДБФ.VTYPE = "370";
                ДБФ.ACCOUNT = Выборка.НомерЛицевогоСчета;
                ДБФ.CASHVAL = Выборка.Сумма;
            КонецЦикла;
            ДБФ.ЗакрытьФайл();
    

    выскакивает ошибка

    {Документ.ПеречислениеПодотчетныхСумм.Форма.ФормаВыгрузкиВДБФ.Форма(142)}: Ошибка при вызове метода контекста (ОчиститьФайл)
    ДБФ.ОчиститьФайл();
    по причине:
    Перед выполнением операции нужно открыть базу

    в чем дело? Путь указан (ПутьКФайлу — D:Файл.dbf, запись на диск разрешена)

  2. Offline

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.890
    Симпатии:
    1.030
    Баллы:
    204

    Файла может не существовать вообще.

  3. т.е. эта процедура открывает уже готовый dbf очищает и добавляет туда записи?

  4. Offline

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.890
    Симпатии:
    1.030
    Баллы:
    204
  5. Так и подумал…всё же спасибо большое!

  6. Offline

    pavl_vs
    Профессионал в 1С

    Регистрация:
    18 июн 2011
    Сообщения:
    507
    Симпатии:
    42
    Баллы:
    54

    Фрагмент кода создания и записи в ДБФ должен быть таким:

    ДБФ = Новый XBase;
    ДБФ.Кодировка = КодировкаXBase.OEM;
    ДБФ.АвтоСохранение = Истина; 
    ДБФ.СоздатьФайл(ПутьКФайлу);
    ДБФ.Записать(); 
    ДБФ.ОчиститьФайл();
    
    Пока Выборка.Следующий() Цикл 
        ДБФ.Добавить(); 
        ДБФ.FIOOWNER = ОбщегоНазначения.ПолучитьФамилиюИмяОтчество(Выборка.Фамилия, Выборка.Имя, Выборка.Отчество, Ложь); 
        ДБФ.PASPORT = Строка(Выборка.ДокументСерия)+ " "+Строка(Выборка.ДокументНомер); 
        ДБФ.ADDRESS = ПолучитьАдресИзКонтактнойИнформации(Выборка.ФизЛицо); ДБФ.INDEX = ""; 
        ДБФ.PHONENM = ПолучитьТелефонИзКонтактнойИнформации(Выборка.ФизЛицо); 
        ДБФ.VTYPE = "370"; 
        ДБФ.ACCOUNT = Выборка.НомерЛицевогоСчета; 
        ДБФ.CASHVAL = Выборка.Сумма; 
        ДБФ.Записать();
    КонецЦикла;
    
    ДБФ.ЗакрытьФайл();
    

    Помимо ошибки, связанной с очисткой файла, в оригинале есть ошибка в цикле обработки выборки — запись каждой строки начинается с «Добавить» и заканчивается «Записать».

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

2017-12-19T00:25:27+00:00<<< XML ZIP WORD DBF HTTP FTP ТекстовыйДокумент ТабличныйДокумент

Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)
Скачать test.dbf, который используется в примерах ниже.

Оглавление (нажмите, чтобы раскрыть)

/// Как прочитать записи файла в формате dbf из 1с 8.3, 8.2   &НаКлиенте Процедура КакПрочитатьЗаписиФайлаВФорматеDBFНаКлиенте(ПутьКФайлуDBF)   // О формате dbf - https://ru.wikipedia.org/wiki/DBF    Таблица = Новый XBase; Таблица.ОткрытьФайл( ПутьКФайлуDBF, // путь к базе , // путь к индексу Истина // только чтение );   Сообщить("В таблице " + Таблица.КоличествоЗаписей() + " записей."); Сообщить("Таблица имеет кодировку: " + Таблица.Кодировка);   Таблица.Первая(); // перешли к первой записи Пока Не Таблица.ВКонце() Цикл Если Не Таблица.ЗаписьУдалена() Тогда Сообщить( Строка(Таблица.EMPLOYEEID) + " " + Таблица.LASTNAME + " " + Таблица.TITLE + " " + Таблица.ADDRESS ); КонецЕсли; Таблица.Следующая(); // переходим к следующей записи КонецЦикла;   Таблица.ЗакрытьФайл();   КонецПроцедуры   /// Как найти нужную запись в файле в формате dbf из 1с 8.3, 8.2   &НаКлиенте Процедура КакНайтиНужнуюЗаписьВФайлеВФорматеDBFНаКлиенте(ПутьКФайлуDBF)   // О формате dbf - https://ru.wikipedia.org/wiki/DBF    // Файлы dbf могут быть очень большими и содержать сотни // тысяч записей. В этом случае полный перебор всех записей, // чтобы найти одну - не очень хорошая идея.   Таблица = Новый XBase; Таблица.ОткрытьФайл( ПутьКФайлуDBF, // путь к базе , // путь к индексу Ложь // открываем на запись );   // Но для того, чтобы искать по ключу - нужен индексный файл, // включающий нужные нам поля. Если бы этот файл уже был у нас, // то мы бы передали его при открытии файла вышле, но у нас его // нет, а потому - займёмся его созданием.   // создадим индекс только по полю EMPLOYEEID Таблица.Индексы.Добавить( "INDEX_EMPLOYEEID", // имя индекса "EMPLOYEEID", // выражение индекса Истина // уникальность создаваемого индекса );   КаталогДляЭкспериментов = КаталогДокументов() + "helpme1s.ru"; СоздатьКаталог(КаталогДляЭкспериментов);   ПутьКФайлуИндекса = КаталогДляЭкспериментов + "test.cdx";   Таблица.СоздатьИндексныйФайл(ПутьКФайлуИндекса);   Таблица.ЗакрытьФайл();   // Заново открываем таблицу, уже на чтение и с индексным файлом, // который мы только что создали.    Таблица = Новый XBase; Таблица.ОткрытьФайл( ПутьКФайлуDBF, // путь к базе ПутьКФайлуИндекса, // путь к индексу Истина // только чтение );   // Найдём среди записей ту, у которой поле EMPLOYEEID равно 3.   // В таблице всего один индекс INDEX_EMPLOYEEID. Таблица.ТекущийИндекс = Таблица.Индексы.Получить(0);   Таблица.Ключ.EMPLOYEEID = "3";   ЗаписьНайдена = Таблица.НайтиПоКлючу("=");   Если ЗаписьНайдена Тогда Сообщить("Запись найдена"); Сообщить( Строка(Таблица.EMPLOYEEID) + " " + Таблица.LASTNAME + " " + Таблица.TITLE + " " + Таблица.ADDRESS ); Иначе Сообщить("Запись не найдена"); КонецЕсли;   Таблица.ЗакрытьФайл();   КонецПроцедуры   /// Как добавить новые записи в уже существующий файл в /// формате dbf из 1с 8.3, 8.2   &НаКлиенте Процедура КакДобавитьНовыеЗаписиВФайлВФорматеDBFНаКлиенте(ПутьКФайлуDBF)   // О формате dbf - https://ru.wikipedia.org/wiki/DBF   // Добавим в уже знакомый нам test.dbf 2 новые записи о работниках.   Таблица = Новый XBase; Таблица.ОткрытьФайл( ПутьКФайлуDBF, // путь к базе , // путь к индексу Ложь // открываем на запись );   Таблица.Добавить(); Таблица.EMPLOYEEID = "100"; Таблица.LASTNAME = "Милькин"; Таблица.TITLE = "Программист"; Таблица.ADDRESS = "Владивосток"; Таблица.Записать();   Таблица.Добавить(); Таблица.EMPLOYEEID = "101"; Таблица.LASTNAME = "Милькина"; Таблица.TITLE = "Биолог"; Таблица.ADDRESS = "Владивосток"; Таблица.Записать();   Таблица.ЗакрытьФайл();   КонецПроцедуры   /// Как удалить определенные записи в файле в формате /// dbf из 1с 8.3, 8.2   &НаКлиенте Процедура КакУдалитьОпределенныеЗаписиИзФайлаВФорматеDBFНаКлиенте(ПутьКФайлуDBF)   // О формате dbf - https://ru.wikipedia.org/wiki/DBF    // Удалим записи с LASTNAME Милькин и Милькина   Таблица = Новый XBase; Таблица.ОткрытьФайл( ПутьКФайлуDBF, // путь к базе , // путь к индексу Ложь // открываем на запись );   Таблица.Первая();   Пока Не Таблица.ВКонце() Цикл Если СокрЛП(Таблица.LASTNAME) = "Милькин" Или СокрЛП(Таблица.LASTNAME) = "Милькина" Тогда Таблица.Удалить(); КонецЕсли; Таблица.Следующая(); КонецЦикла;   // Но Удалить() только ставит пометку на // удаление, а чтобы реально удалить помеченные // на удаление записи нужно вызвать метод Сжать().   Таблица.Сжать();   Таблица.ЗакрытьФайл();   КонецПроцедуры   /// Как создать файл в формате dbf с нужными /// полями из 1с 8.3, 8.2   &НаКлиенте Процедура КакСоздатьФайлВФорматеDBFНаКлиенте()   // О формате dbf - https://ru.wikipedia.org/wiki/DBF   НоваяТаблица = Новый XBase; НоваяТаблица.Кодировка = КодировкаXBase.ANSI;   // Описываем колонки таблицы.   НоваяТаблица.Поля.Добавить( "FIRSTNAME", // имя колонки "S", // тип 100, // длина ); НоваяТаблица.Поля.Добавить( "AGE", "N", 10, 0 // точность ) ;   // Типы ещё бывают: // N - число // S - строка // D - дата // L - булево // F - число   КаталогДляЭкспериментов = КаталогДокументов() + "helpme1s.ru"; СоздатьКаталог(КаталогДляЭкспериментов);   ПутьКНовомуDBF = КаталогДляЭкспериментов + "new.dbf";   НоваяТаблица.СоздатьФайл( ПутьКНовомуDBF, // путь к базе // путь к индексу );   НоваяТаблица.ЗакрытьФайл();   Сообщить("Новый файл создан в '" + ПутьКНовомуDBF + "'.");   // И уже теперь можем его открыть и добавить данные.   Таблица = Новый XBase; Таблица.ОткрытьФайл( ПутьКНовомуDBF, // путь к базе , // путь к индексу Ложь // открываем на запись );   Таблица.Добавить(); Таблица.FIRSTNAME = "Вова"; Таблица.AGE = 31; Таблица.Записать();   Таблица.Добавить(); Таблица.FIRSTNAME = "Алёна"; Таблица.AGE = 24; Таблица.Записать();   Таблица.ЗакрытьФайл();   КонецПроцедуры   /// Скачать и выполнить эти примеры на компьютере

Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)
Скачать test.dbf, который используется в примерах ниже.

Чтение и запись DBF в языке 1С 8.3, 8.2 (в примерах)

<<< XML ZIP WORD DBF HTTP FTP ТекстовыйДокумент ТабличныйДокумент

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Владимир Милькин

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Нажмите одну из кнопок, чтобы поделиться:

44889

Анна Викулина

Руководитель Центра
сопровождения 1С

25 июля 2019

Интеграция

Актуальность проверена: 26.01.2023

Получить консультацию
Бесплатно

Консультации по 1С

Консультации по 1С

Протестируйте качество нашей работы — получите первую консультацию в подарок.

Одним из самых распространенных форматов баз данных до сих пор остается формат DBF. И неумение работать с ним из 1С – серьезное ограничение профессиональных навыков для любого специалиста. Тем более изучение теории и практика по этому вопросу потребует совсем немного времени. К тому же работа с DBF файлом никаких дополнительных библиотек не требует – все инструменты встроены в платформу 1С 8.3.

Вся работа с DBF в 1С происходит с помощью специального объекта – xBase. Рассмотрим основные действия с файлами, начав с чтения из конкретного DBF. В первую очередь необходимо расположить файл базы данных в каталоге, куда есть доступ у пользователя. Код для считывания данных в 1С достаточно прост:

  1. Указываем путь к базе в формате DBF;
     ПутьКФайлу = "D:Nom.DBF"; 

  2. Создаем объект для взаимодействия с файлом, открываем его и устанавливаем указатель на первую строку с данными;
     ФайлDBF = Новый XBase; ФайлDBF.ОткрытьФайл(ПутьКФайлу,,Истина); 

  3. В цикле обходим всю базу и производим действия с элементами. В данном случае просто отражаем их на экране пользователя;
     Пока НЕ ФайлDBF.ВКонце() Цикл Сообщить("" + ФайлDBF.NAIM +" - "+ФайлDBF.ARTI); ФайлDBF.Следующая(); КонецЦикла; 

  4. Закрываем файл.
     ФайлDBF.ЗакрытьФайл(); 

Вторая часто встречающаяся задача по взаимодействию с объектом – выгрузка DBF из 1С 8.3. Здесь намного легче создать конечный файл нужного формата программно, чем использовать дополнительно программное обеспечение. Этот алгоритм в 1С тоже достаточно прост и состоит из нескольких строк кода:

  1. Создаем объект XBase;
     НовыйФайл = Новый XBase; 

  2. Определяем кодировку нового файла. Существует кодировка для Windows – ANSI и OEM предназначенная для DOS;
     НовыйФайл.Кодировка = КодировкаXBase.ANSI; 

  3. Необходимо описать все колонки будущего файла DBF, указав их тип;
     НовыйФайл.Поля.Добавить("Naim","S",100); НовыйФайл.Поля.Добавить("KOD","N",10); 

  4. Укажем каталог, в котором будет происходить создание DBF и запишем итоговый файл.
     Путь = "D:Clients.DBF"; НовыйФайл.СоздатьФайл(Путь); НовыйФайл.Записать(); 

Рис.1 Расположение файлов DBF

Рис.1 Расположение файлов DBF

После того как мы создали файл нужного формата, потребуется выгрузка в DBF данных. Программируя этот процесс, помните о том, что данные ИБ находятся на сервере. Чтобы записать имеющиеся данные из 1С необходимо к предыдущему коду добавить следующий алгоритм:

  1. Получаем информацию из справочника;
     Контрагенты = Справочники.Контрагенты.Выбрать(); 

  2. В цикле последовательно добавляем по 1строчке и записываем;
     Пока Контрагенты.Следующий() Цикл НовыйФайл.Добавить(); НовыйФайл. Naim = Контрагенты.Наименование; НовыйФайл. KOD = Контрагенты.Код; НовыйФайл.Записать(); КонецЦикла; 

  3. Закрываем файл и проверяем, что запись прошла удачно.
     НовыйФайл.ЗакрытьФайл(); 

Это основы работы с данным форматом. Существуют и другие способы открыть из 1С DBF, но xBase остается самым простым по синтаксису и пониманию. Поняв, как осуществляется простейшая выгрузка и загрузка из DBF, можно приступать к более сложным элементам, например, использованию индексов для поиска, удалению или изменению конкретных записей в DBF, а также применению технологии ADO.

Другие статьи по теме

Конфликт блокировок при выполнении транзакции в 1С

Конфликт блокировок при выполнении транзакции в 1С

Для большинства пользователей сообщение о конфликте блокировок 1С означает лишь ошибку, мешающую им выполнять свою работу. Они хотят поскорее избавиться от этой проблемы и осаждают IT-отдел жалобами на…

Бесшовная интеграция с 1С:Документооборот

Бесшовная интеграция с 1С:Документооборот

Ведение основной и дополнительной деятельности компанией требуется сопровождать процессом обработки документов, который в свою очередь требует не только использования систем бухгалтерского учета или к…

Первоначальная настройка параметров в 1С Управление торговлей 11.4

Первоначальная настройка параметров в 1С Управление торговлей 11.4

Настройку 1С можно выполнить в процессе работы, но правильнее реализовать данный шаг до момента создания основных документов и проводок, поскольку от корректности настройки параметров в системе зависи…

Тамика

Котовчанин

942 / 482 / 200

Регистрация: 16.02.2010

Сообщений: 3,338

Записей в блоге: 37

1

06.03.2017, 13:32. Показов 5157. Ответов 4

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Всем добрый день!

Пытаюсь написать обработку для выгрузки данных в dbf, нашла разные примеры. В итоге, при попытке записать обработку — выдает ошибку

1C
1
2
3
4
{Обработка.МояОбработка1.Форма.Форма.Форма(16)}: Ошибка при вызове метода контекста (СоздатьФайл)
    БД.СоздатьФайл("catalog.dbf"); //создаем файл физически
по причине:
Ошибка создания файла

Вот сама обработка

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Процедура Кнопка1Нажатие(Элемент)
    
    БД = Новый XBase;
    
    БД.Поля.Добавить("SUPPCODE", "S", 24);    
    БД.Поля.Добавить("DRUGNAME", "S", 255);
    БД.Поля.Добавить("MAKER", "S", 64);
    БД.Поля.Добавить("KOD_MORION", "S", 64);
    БД.Поля.Добавить("PRICE", "N", 6);
    
    БД.СоздатьФайл("catalog.dbf");
    БД.ЗакрытьФайл(); 
    
КонецПроцедуры

Заранее спасибо!

Добавлено через 59 минут
Решено! Нужно указывать полный путь…



0



Dethmontt

07.03.2017, 01:32

Не по теме:

Тамика, рыжий, это твой натуральный цвет волос?



0



Тамика

07.03.2017, 17:21

 [ТС]

Не по теме:

Dethmontt, увы, да :D



0



Dethmontt

07.03.2017, 18:05

Не по теме:

Цитата
Сообщение от Тамика
Посмотреть сообщение

Dethmontt, увы, да

а мне нравиться… :-[



0



Тамика

07.03.2017, 22:18

 [ТС]


    Создание обработки для выгрузки данных в dbf: Ошибка создания файла

Не по теме:

Цитата
Сообщение от Dethmontt
Посмотреть сообщение

а мне нравиться…

Рада слышать, спасибо :-[



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

07.03.2017, 22:18

5

   marinelli

10.10.12 — 14:46

Здравствуйте! Помогите, пожалуйста, разобраться…

Есть схема:

<?xml version=»1.0″ encoding=»windows-1251″?>

<xs:schema xmlns:xs=»http://www.w3.org/2001/XMLSchema» xmlns:sch=»http://purl.oclc.org/dsdl/schematron» xmlns:usch=»http://www.unisoftware.ru/schematron-extensions» elementFormDefault=»qualified» attributeFormDefault=»unqualified»>

   <xs:element name=»Файл»>

       <xs:annotation>

           <xs:documentation>Файл обмена</xs:documentation>

Пишу:

   Фабрика = СоздатьФабрикуXDTO(ПутьКСхеме);

   Тип_Файл = Фабрика.Тип(«http://www.w3.org/2001/XMLSchema», «Файл»);

   Файл_XDTO = Фабрика.Создать(Тип_Файл);

Ошибка:

Ошибка при вызове метода контекста (Создать)

   Файл_XDTO = Фабрика.Создать(Тип_Файл);

по причине:

Несоответствие типов (параметр номер ‘1’)

Очень прошу помочь разобраться

   ЧеловекДуши

1 — 10.10.12 — 14:48

И что тебе непонятно?

   ЧеловекДуши

2 — 10.10.12 — 14:49

   marinelli

3 — 10.10.12 — 14:51

И правда смешно) я такая глупая, не догадалась в википедии сразу посмотреть)

   ЧеловекДуши

4 — 10.10.12 — 14:57

(3)Отладчик что содержит в переменной «Тип_Файл»?

   ЧеловекДуши

5 — 10.10.12 — 14:58

ФабрикаXDTO (XDTOFactory)

Создать (Create)

Вариант синтаксиса: Создание значения из значения

Синтаксис:

Создать(<Тип>, <Значение>)

Параметры:

<Тип> (обязательный)

Тип: ТипЗначенияXDTO.

Тип, значение которого необходимо создать.

<Значение> (обязательный)

Тип: Произвольный.

Произвольное значение, на основе которого должно быть создано значение XDTO.

Вариант синтаксиса: Создание значения по лексическому представлению

Синтаксис:

Создать(<Тип>, <Строка>)

Параметры:

<Тип> (обязательный)

Тип: ТипЗначенияXDTO.

Тип, значение которого необходимо создать.

<Строка> (обязательный)

Тип: Строка.

Лексическое представление значения.

Вариант синтаксиса: Создание объекта

Синтаксис:

Создать(<Тип>)

Параметры:

<Тип> (обязательный)

Тип: ТипОбъектаXDTO.

Тип, объект которого необходимо создать.

Возвращаемое значение:

Тип: ЗначениеXDTO.

Описание:

Создает значение XDTO на основе строки (лексического представления значения).

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение.

Примечание:

Лексическое представление значения должно удовлетворять ограничениям, определяемым данным типом значения XDTO.

   ЧеловекДуши

6 — 10.10.12 — 15:00

ТипЗначенияXDTO (XDTOValueType)

Свойства:

URIПространстваИмен (NamespaceURI)

БазовыйТип (BaseType)

Имя (Name)

ТипыЧленовОбъединения (MemberTypes)

ТипЭлементаСписка (ListItemType)

Фасеты (Facets)

Методы:

Проверить (Validate)

ЭтоПотомок (IsDescendant)

Описание:

Определяет тип значений модели XDTO.

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение.

См. также:

ЗначениеXDTO, метод Тип

КоллекцияТиповЗначенийXDTO, метод Получить

ТипЗначенияXDTO, свойство БазовыйТип

ТипЗначенияXDTO, свойство ТипЭлементаСписка

ТипЗначенияXDTO, метод ЭтоПотомок

ФабрикаXDTO, метод Привести

ФабрикаXDTO, метод Создать

   ЧеловекДуши

7 — 10.10.12 — 15:01

ФабрикаXDTO.Тип (XDTOFactory.Type)

ФабрикаXDTO (XDTOFactory)

Тип (Type)

Вариант синтаксиса: По имени и URI пространства имен

Синтаксис:

Тип(<URIПространстваИмен>, <Имя>)

Параметры:

<URIПространстваИмен> (обязательный)

Тип: Строка.

URI пространства имен запрашиваемого типа.

<Имя> (обязательный)

Тип: Строка.

Имя запрашиваемого типа.

Вариант синтаксиса: По раширенному имени XML

Синтаксис:

Тип(<ИмяXML>)

Параметры:

<ИмяXML> (обязательный)

Тип: РасширенноеИмяXML.

Расширенное имя XML.

Вариант синтаксиса: По типу данных XML

Синтаксис:

Тип(<ТипДанных>)

Параметры:

<ТипДанных> (обязательный)

Тип: ТипДанныхXML.

Тип данных XML, по которому запрашивается тип XDTO.

Возвращаемое значение:

Тип: ТипЗначенияXDTO; ТипОбъектаXDTO; Неопределено.

Описание:

Получение типа XDTO.

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение.

   ЧеловекДуши

8 — 10.10.12 — 15:02

Судя по ошибки, у тебя должен быть тип «ТипОбъектаXDTO»

   ЧеловекДуши

9 — 10.10.12 — 15:03

+ Потому что команда

       Тип_Файл = Фабрика.Тип(«http://www.w3.org/2001/XMLSchema», «Файл»);

Вернет одно из значений

Возвращаемое значение:

Тип: ТипЗначенияXDTO; ТипОбъектаXDTO; Неопределено.

   marinelli

10 — 10.10.12 — 15:08

Тип_Файл — неопределено

   quest

11 — 10.10.12 — 15:15

Тип_Файл = Фабрика.Тип(«http://www.unisoftware.ru/schematron-extensions», «Файл»);

или

 Тип_Файл = Фабрика.Тип(«http://purl.oclc.org/dsdl/schematron», «Файл»);

в зависимости где определено «Файл»

по моему так.

   marinelli

12 — 10.10.12 — 15:34

Я часть схемы вверху привела

Фабрика.Тип(«http://purl.oclc.org/dsdl/schematron», «Файл») = Истина

Фабрика.Создать(Тип_Файл) всё равно выдаёт ошибку

   marinelli

13 — 10.10.12 — 15:45

Совершенно не понимаю ничего в этом синтаксисе( помогите, пожалуйста…

   quest

14 — 10.10.12 — 15:47

где тип Файл определен?

   marinelli

15 — 10.10.12 — 15:56

Правильно понимаю, что в этой строке надо описать тип значений?

<xs:element name=»Файл»>

   quest

16 — 10.10.12 — 15:59

выложи где нибудь файл схемы и файл хмл который читаешь.  а там посмотрим как тебе это все читать…

   marinelli

17 — 10.10.12 — 16:03

Я пытаюсь создать файл хмл

Схема тут:

http://files.mail.ru/YMUE92

   quest

18 — 10.10.12 — 16:28

схему с таким определением 1С не прочтет. Вынеси определения типов, сделай их именоваными и явно свяжи.

   marinelli

19 — 10.10.12 — 16:41

Что-то сложное видимо мне сейчас предстоит)))

спасибо за помощь…

   quest

20 — 10.10.12 — 17:02

да нет там ничего сложного… просто свою писалку хмл сделай (за пример можно взять любой пример из инета про ЗаписьXML)

тебе никакого смысла от этой схемы нет на этапе создания, а валидацию можешь потом на скрипте сделать.

   marinelli

21 — 10.10.12 — 17:14

да уж))) легко вам, умным так говорить))

   sapphire

22 — 10.10.12 — 17:16

(0)

encoding=»windows-1251″

  

quest

23 — 10.10.12 — 17:48

(21) пиши. плюнь на все и пиши. сперва получиться фигня, потом перепишешь и станет лучше, потом еще раз перепишешь…

А потом вопросов подобных в 0 не будет возникать

В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.

Исправляем ситуацию

Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.

Планшет

Приглашаем на
бесплатный вебинар!

06 июня в 11:00 мск

1 час

Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:


	 Запрос = Новый Запрос;
	 Запрос.Текст =
	         "ВЫБРАТЬ
	          |        Номенклатура.Ссылка КАК Ссылка,
	          |        Номенклатура.ВерсияДанных КАК ВерсияДанных,
	          |        Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	          |        Номенклатура.Родитель КАК Родитель,
	          |        Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	          |        Номенклатура.Код КАК Код,
	          |        Номенклатура.Наименование КАК Наименование,
	          |        Номенклатура.Артикул КАК Артикул,
	          |        Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	          |        Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	          |        Номенклатура.Предопределенный КАК Предопределенный,
	          |        Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	          |ИЗ
	          |        Справочник.Номенклатура КАК Номенклатура
	          |ГДЕ
	          |         ";
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 КонецЦикла;
Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора
Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.

Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.

Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.


	 Запрос = Новый Запрос;
	            Запрос.Текст =
	                       "ВЫБРАТЬ
	                        |          Номенклатура.Ссылка КАК Ссылка,
	                        |          Номенклатура.ВерсияДанных КАК ВерсияДанных,
	                        |          Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	                        |          Номенклатура.Родитель КАК Родитель,
	                        |          Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	                        |          Номенклатура.Код КАК Код,
	                        |          Номенклатура.Наименование КАК Наименование,
	                        |          Номенклатура.Артикул КАК Артикул,
	                        |          Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	                        |          Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	                        |          Номенклатура.Предопределенный КАК Предопределенный,
	                        |          Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	                        |ИЗ
	                        |          Справочник.Номенклатура КАК Номенклатура
	                        |ГДЕ
	                        |          НЕ Номенклатура.ЭтоГруппа ";
	 НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
	 КонецЦикла;
Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной
Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.

Рис.3 Синтакс-помощник
Рис.3 Синтакс-помощник

В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.

Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает
Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает

Чаще всего причиной подобных ошибок выступают следующие факторы:

  1. Невнимательность;
  2. Отсутствие опыта или знаний;
  3. Несогласованность действий разработчиков друг с другом;
  4. Изменения в методах контекста в новых версиях платформы.

Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.

Сделала внешний отчет  — формируется все хорошо, но когда пытаешься сделать расшифровку какой-либо строки выдает следующее: {Отчет.УниверсальныйОтчет(5748)}: Ошибка при вызове метода контекста (Создать): Файл не обнаружен ‘C:Documents and SettingsuserLocal SettingsTempv8_12_19.tmp’            ОтчетРасшифровка = ВнешниеОтчеты.Создать(Отчет.ИспользуемоеИмяФайла); по причине: Файл не обнаружен ‘C:Documents and SettingsuserLocal SettingsTempv8_12_19.tmp’ Если делать расшифровку через открытие формы настройки, то все хорошо. Также ошибка не выходит, если делать через Файл-Открыть. В чем ошибка? То же самое происходит, если полностью типовой отчет сохранить как внешний, а потом прикрепить к базе через внешние обработки и отчеты. В некоторых случаях удобнее пользоваться быстрым вызовом расшифровки

Temp в корень диска вынеси.

Кто-нить может проверить у себя, на любом отчете?

Вообщем проблема в том, что если ты сохраняешь отчет как внешний в конфе, то типовой механизм внешних отчетов/обработок при его открытии создает временный файл, сохраняет туда ХранилищеЗначения, затем открывает форму, затем !удаляет файл!. Но, временное имя внешнего отчета уже сохранилось в открытом отчете и соотв. при вызове расшифровки этого файла не будет и расшифровка не выполнится … ЗЫ Это я в поледней УПП посмотрел.

да это везде в типовых так…

Наверное. Раньше я туда не лазил, а вот теперь появился повод :) С СКД таких проблем нет.

Тэги:

Комментарии доступны только авторизированным пользователям

Понравилась статья? Поделить с друзьями:

Не пропустите эти материалы по теме:

  • Яндекс еда ошибка привязки карты
  • Ошибка при вызове метода контекста скомпоноватьрезультат
  • Ошибка при вызове метода контекста сдвинуть
  • Ошибка при вызове метода контекста свойство
  • Ошибка при вызове метода контекста свернуть

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии