Вход | Регистрация


1С:Предприятие ::

Метки: Обмен данными и УРБД

XBASE

Я
   LOSS
 
04.05.04 - 20:12
Есть код но не работает
  Как добавлять следующую запись в существующей базе

        ДБФ.КоличествоЗаписей();
        R=0; 
        Пока ДБФ.Последняя()=1
        Цикл
                R=R+1;
                ДБФ.Добавить();
                ДБФ.УстановитьЗначениеПоля("SYS_ID",0);
                ДБФ.УстановитьЗначениеПоля("SYS_CREF",0);
                ДБФ.УстановитьЗначениеПоля("SYS_HASATT",0);
                ДБФ.УстановитьЗначениеПоля("PLT_ACC",Номер1);
                ДБФ.УстановитьЗначениеПоля("BANK_POL_1",Получатель.МФОБанкаРасч);
                ДБФ.УстановитьЗначениеПоля("BANK_POL_2",Получатель.АдресБанкаРасч);
                ДБФ.УстановитьЗначениеПоля("BANK_POL_3",Получатель.РННБанкаРасч);
                ДБФ.УстановитьЗначениеПоля("BANK_POL_4",Получатель.БанкРасч);
                ДБФ.УстановитьЗначениеПоля("KNP_KOD",КодПлатежа);
                ДБФ.УстановитьЗначениеПоля("KNP_KOMME2",НаимПл);
                ДБФ.УстановитьЗначениеПоля("KBK_KOD",КодБюджета);
                ДБФ.УстановитьЗначениеПоля("KBK_NAME",НаимБюдж);
                ДБФ.Автосохранение(1);
        КонецЦикла;   
КонецПроцедуры
 
  Рекламное место пустует
   kvm
 
1 - 04.05.04 - 21:46
Структуру ДБФ проверил?
Попробуй прямое присвоение 
     ДБФ.SYS_ID=0;
Может, что не так с открытием ДБФ?
   Naumov
 
2 - 04.05.04 - 21:59
Честно говоря не понял логики, но если открывается Пустая dbf-ка, то вероятно 
ДБФ.Последняя() возвращает 0 и цикл не выполняется.
И вообще странное это условие для цикла.
   LOSS
 
3 - 04.05.04 - 22:14
Прошу разобрать два случая. Когда база существует и добавляем дальше строки и второе когда пустая начиная с первой строки и т.д. вставляем строки. Рябяты в долгу не буду
   LOSS
 
4 - 04.05.04 - 22:16
База открывается ОК. Вот дальше....именно добавить строки и т.д.
   Naumov
 
5 - 04.05.04 - 22:17
Если база существует, то получается вечный цикл
или нет.
   kvm
 
6 - 04.05.04 - 22:20
Получаем вечный цикл, если база не пустая. Если пустая, то цикл выполнен не будет, Последняя()=0
   kvm
 
7 - 04.05.04 - 22:23
Напиши весь код. Последняя() выполняется по разному.
Метод Последняя предназначен для перехода на последнюю запись. Если не установлен текущий индекс, объект позиционируется на последнюю запись в базе данных, если установлен — на запись, имеющую самое старшее значение выражения текущего индекса (если индекс создавался с установленным флагом «Убывание», то наоборот).
   LOSS
 
8 - 04.05.04 - 22:34
//Честно у вас гуру хочу совета. Сам не  догнал. Короче если безцикла то ежу понятно что все ОК 


Процедура ВТемирБанк()
REG=0;   //номер записи обнуляется

    ДБФ=СоздатьОбъект("XBase");
    ДБФ.КодоваяСтраница(1);
    ДБФ.ДобавитьПоле("SYS_ID",2,32,0);
    ДБФ.ДобавитьПоле("SYS_CREF",2,32,0);
    ДБФ.ДобавитьПоле("SYS_HASATT",2,1,0);
    ДБФ.ДобавитьПоле("PLT_ACC",2,9,0);
    ДБФ.ДобавитьПоле("BANK_POL_1",2,9,0);
    ДБФ.ДобавитьПоле("BANK_POL_2",2,50,0);
    ДБФ.ДобавитьПоле("BANK_POL_3",2,25,0);
    ДБФ.ДобавитьПоле("BANK_POL_4",2,100,0);
    ДБФ.СоздатьФайл("c:\temp\plat.dbf",);               

НаимПл="1";
        НаимБюдж="1";
        БСчет=СоздатьОбъект("Справочник.БанковскиеСчета");
        БСчет.НайтиЭлемент(Константа.ОснБанковскийСчет);
        Номер1=БСчет.Номер;
        БИК=БСчет.МФОБанкаРасч;
        Город=Бсчет.АдресБанкаРасч;
        НаимБанк=БСчет.БанкРасч;
        РНН=БСчет.РННБанкаРасч;

    ДБФ.КоличествоЗаписей();
    R=0; 
    Пока ДБФ.Предыдущая()=1
    Цикл
        R=R+1;
        ДБФ.Добавить();
        ДБФ.УстановитьЗначениеПоля("SYS_ID",0);
        ДБФ.УстановитьЗначениеПоля("SYS_CREF",0);
        ДБФ.УстановитьЗначениеПоля("SYS_HASATT",0);
        ДБФ.УстановитьЗначениеПоля("PLT_ACC",Номер1);
        ДБФ.УстановитьЗначениеПоля("BANK_POL_1",Получатель.МФОБанкаРасч);
        ДБФ.УстановитьЗначениеПоля("BANK_POL_2",Получатель.АдресБанкаРасч);
        ДБФ.УстановитьЗначениеПоля("BANK_POL_3",Получатель.РННБанкаРасч);
        ДБФ.УстановитьЗначениеПоля("BANK_POL_4",Получатель.БанкРасч);
    ДБФ.Автосохранение(1);
    КонецЦикла;   
КонецПроцедуры
   kvm
 
9 - 04.05.04 - 22:40
Добавь перед циклом ДБВ.Открыта() и посмотри, что он выдает. По-моему, надо ДБФ.ОТкрыть("c:\temp\plat.dbf")
   kvm
 
10 - 04.05.04 - 22:42
И помтавь в присвоении полям с типом 2 строки, типа "0".
 
  Рекламное место пустует
   Naumov
 
11 - 04.05.04 - 22:43
ДБФ.КоличествоЗаписей(); эта строка совсем не имеет смысла
А цикл все равно не правильный. Чего хочешь сделать?
Получатель это кто?
   LOSS
 
12 - 04.05.04 - 22:53
2kvm разберем сначала  то что если нет цикла то код работает. Вопрос как сделать цикл валидным
2Naumov код выгружает платежку из 1С в банкклиент. Прога Банк клиент (у ней функция импорт ДБФ) проглатывает когда нет цикла Все ОК раскидывает по полям. То есть только одну запись.
Рябяты нужно добавление записи, когда наапример одну платежку выгрузил, потом в эту же базу вторую, а потом например все разом БанкКлиент проглотил. А так все ок
   LOSS
 
13 - 04.05.04 - 22:56
Только Цикл с добавлением след строки. Как например в Таблице печ формы добавляется строка
   GrayT
 
14 - 04.05.04 - 22:59
Если честно лениво разбираться. Может поможет. Ночь длинная ...
http://www.mista.ru/tutor_1c/dbf.htm#write
   LOSS
 
15 - 04.05.04 - 23:12
(14) посмеяться перед сном тоже полезно. нет там этого. я не поле добавляю
   GrayT
 
16 - 04.05.04 - 23:21
Со смеху не помри, плз
.......Файл.Добавить();
.......Файл.NAME = СпрТовары.Наименование;
.......Файл.УстановитьЗначениеПоля("PRICE",СпрТовары.Цена)//так тоже можно;

.......Файл.Записать(); 
Это поля или записи?
   GrayT
 
17 - 04.05.04 - 23:24
Млин. В твоих циклах. Ты в цикл вообще заходишь? Отладчиком смотрел?
   LOSS
 
18 - 04.05.04 - 23:46
.....Файл.Добавить(); 
//эт запись  ну ты опытней вот и все. Попробую

А что с партией товаров вдругой ветке
   GrayT
 
19 - 04.05.04 - 23:59
Угу, опытней. Так что с циклом?
"Хорошо смется тот, кто..." ну дальше сам :)
   SnarkHunter
 
20 - 05.05.04 - 06:23
Если ты платежки из 1С во внешний дбф выгружаешь, то за каким цикл по этой дбф-ке? Цикл в этом случае должен быть по выборке документов...
   LOSS
 
21 - 05.05.04 - 06:57
2GrayT значит ты шутил. ОК наработе попробую.
2SnarkHunter верно по докам. Втом случае если набраны и сохранены в журнале опер. А если набрал платежку и сразу выгрузил, набрал платежку и сразу выгрузил, набрал платежку и сразу выгрузил......., тогда наверное GrayT прав .....Файл.Добавить(); буду пробовать. Есть еще умные советы?
   SnarkHunter
 
22 - 05.05.04 - 07:03
(21)Даже в твоем случае цикл совершенно не нужен...
   kadr
 
23 - 05.05.04 - 07:25
А я бы предложил сделать так:
ДБФ = СоздатьОбъект("Xbase");
ДБФ.ОткрытьФайл(".....");
ДБФ.Первая();
Пока ДБФ.ВКонце() = 0 Цикл
  .....тело цикла....
  ДБФ.Следующая();
КонецЦикла;
   SnarkHunter
 
24 - 05.05.04 - 07:35
(23)Это правильно, но применимо для чтения из внешней дбфки... Для записи это просто не нужно...
   kadr
 
25 - 05.05.04 - 07:36
(24) А надо было записывать? Сорри, внимания не обратил...
   kvm
 
26 - 05.05.04 - 21:52
"НАбрал платежку и сразу выгрузил". Не понял зачем цикл? Набрал платежку и 
ДБФ.ОТкрытьФайл();
ДБФ.Добавить();
---
ДБФ.Записать();
ДБФ.ЗакрытьФайл();

Закончил выгрузку-очистил файл.



Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует