Работа с Xbase (перенесено)

Тема в разделе "1C и всё что с ней связано", создана пользователем VasilyKushnir, 28 дек 2006.

Статус темы:
Закрыта.
  1. VasilyKushnir

    VasilyKushnir Гость

    Мне надо создать на основании ЗаказНаНесколькоПоставщиков туеву хучу ДБФных файлов (для каждого поставщика - электронная заявка) и чтобы юзер в них ориентировался имя файла: НомерДок(5знаков)+НаименованиеПоставщика(первые 25 знаков). А XBase позволяет имя только до 8 символов... Сейчас: создаю по номеру дока (XBase) потом переименовываю (ФС) с добавлением поставщика. ФС почему-то иногда мутит - переименовывает через раз. Если бы вообще не переименовывала - нет вопросов, значит кривые ручки. А так непонятки...
     
  2. masol

    masol Гость

    Для: VasilyKushnir
    Скинь код глянем.
     
  3. VasilyKushnir

    VasilyKushnir Гость

    Вот:

    //Это При Открвтии
    Каталог = КаталогИБ() + "Mail\Zakaz\";
    ИмяФайлаСокр = Каталог + СокрЛП(текДок.НомерДок) + ".dbf";

    текДок.ВыгрузитьТабличнуюЧасть(тзТабл, "Товар, Заказано, ПроизводительСтр, ПоставщикСтр");
    текДок.ВыгрузитьТабличнуюЧасть(тзПоставщик, "Товар, Заказано, ПроизводительСтр, ПоставщикСтр");
    тзТабл.Сортировать("ПоставщикСтр, Товар");
    тзПоставщик.Сортировать("ПоставщикСтр, Товар");
    тзПоставщик.Свернуть("ПоставщикСтр",);
    тзПоставщик.ВыбратьСтроки();

    Пока тзПоставщик.ПолучитьСтроку() = 1 Цикл
    сзПоставщики.ДобавитьЗначение(тзПоставщик.ПоставщикСтр); // на форме
    КонецЦикла;


    // А это Сформировать
    дбФайл = СоздатьОбъект("XBase");
    дбФайл.ДобавитьПоле("Tovar", "S", 64,);
    дбФайл.ДобавитьПоле("Proiz", "S", 64,);
    дбФайл.ДобавитьПоле("Zakaz", "N", 12, 3);
    дбФайл.КодоваяСтраница(0);

    кнУдалитьНеВыбранные (); // удаляет на форме не помеченных поставщиков
    дбФайл.СоздатьФайл (ИмяФайлаСокр);
    тзТабл.ВыбратьСтроки();
    сзРазмер = сзПоставщики.РазмерСписка();
    КолЗап = 0;

    Для Ин = 1 По сзРазмер Цикл
    Поставщик = сзПоставщики.ПолучитьЗначение(Ин);
    тзТабл.ВыбратьСтроки();

    Пока тзТабл.ПолучитьСтроку() = 1 Цикл
    Если тзТабл.ПоставщикСтр <>Поставщик Тогда
    Продолжить;
    Иначе
    дбФайл.Добавить();
    дбФайл.Tovar = СокрЛП(тзТабл.Товар.Наименование);
    дбФайл.Proiz = СокрЛП(тзТабл.ПроизводительСтр);
    дбФайл.Zakaz = тзТабл.Заказано;
    дбФайл.Записать();
    КолЗап = КолЗап + 1;
    Состояние (тзТабл.Товар.Наименование);
    КонецЕсли;
    КонецЦикла;

    дбФайл.ЗакрытьФайл();

    Если СтрДлина(СокрЛП(текДок.Поставщик.Наименование)) <= 25 Тогда
    ИмяФайла = Каталог + СокрЛП(текДок.НомерДок) + "_" + СокрЛП(Поставщик.Наименование) + ".dbf";
    Иначе
    ИмяФайла = Каталог + СокрЛП(текДок.НомерДок) + "_" + СокрЛП(Лев(Поставщик.Наименование, 25)) + ".dbf";
    КонецЕсли;

    ИмяФайла = СокрЛП(СтрЗаменить(ИмяФайла, "*", " "));
    ФС.КопироватьФайл(ИмяФайлаСокр, ИмяФайла, 0);
    дбФайл.ОткрытьФайл(ИмяФайлаСокр,,0);
    дбФайл.ОчиститьФайл();
    КонецЦикла;

    дбФайл.ЗакрытьФайл();
    ФС.УдалитьФайл(ИмяФайлаСокр);
    дбФайл = 0;
    Сообщить ("Выгружено " + КолЗап + " записей");
    Форма.Закрыть();
     
  4. masol

    masol Гость

    Что то ты намутил, надо проше используй
    ФС.переименоватьфайл(ИмяФайлаСокр,ИмяФайла,)
     
  5. VasilyKushnir

    VasilyKushnir Гость

    Если
    ФС.переименоватьфайл(ИмяФайлаСокр,ИмяФайла,)
    то мне его потом по новой создавть надо, в данном конкретном случае в доке 83 поставщика, следоват надо 82 дбфа.
     
  6. VasilyKushnir

    VasilyKushnir Гость

    Это капец!
    Код скинул уже со строчкой
    ИмяФайла = СокрЛП(СтрЗаменить(ИмяФайла, "*", " "));
    но у себя не успел проверить. Все заработало.
    Один "деятель" у нас стал наводить порядок со справочником Поставщики и что прошел помечал в названии символом "*" и естественно, если он попадал на 25 позицию, ФС воспринимала его как маску. Ну я ему высказал, все что думаю о поведении его растакой матери!
    Изрядно поганял - все, как часики. Но все-таки фигово, что ФС не выдает никаких матюков при невозможности выполнения команды. Так что напрасно я грешил на XBase. Оказывается надо было просто деинсталировать устройство krivyeruchki.sys.
     
  7. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Для: VasilyKushnir
    :D :D ;)
    других слов просто нет!
    Немного офф: и виновата ведь во всем 1С! :)
     
  8. masol

    masol Гость

    Так создается же один файл
    дбФайл.СоздатьФайл (ИмяФайлаСокр);
    а где
    //ФС.КопироватьФайл(ИмяФайлаСокр, ИмяФайла, 0); - просто создаешь новый файл с именем имяФайла
    //дбФайл.ОткрытьФайл(ИмяФайлаСокр,,0);
    //дбФайл.ОчиститьФайл();
    //КонецЦикла;

    //дбФайл.ЗакрытьФайл();
    //ФС.УдалитьФайл(ИмяФайлаСокр);
    //дбФайл = 0;
    - это непонятно зачем,если можно просто переименовать и ничего не открывать и не удалять
    ФС.переименоватьфайл(ИмяФайлаСокр,ИмяФайла,)
     
  9. VasilyKushnir

    VasilyKushnir Гость

    Эти действия я произвожу в цикле и переименование не катит - после переименования файла уже нет.


    [/quote]
    //дбФайл.ЗакрытьФайл();
    //ФС.УдалитьФайл(ИмяФайлаСокр);
    //дбФайл = 0;
    - это непонятно зачем,если можно просто переименовать и ничего не открывать и не удалять
    ФС.переименоватьфайл(ИмяФайлаСокр,ИмяФайла,)
    [/quote]

    А здесь я просто удаляю следы деятельности с ДБФ.
     
Загрузка...
Похожие Темы - Работа Xbase (перенесено)
  1. Andrey Kha
    Ответов:
    0
    Просмотров:
    28
  2. Hoasker
    Ответов:
    0
    Просмотров:
    64
  3. garri671
    Ответов:
    0
    Просмотров:
    55
  4. lelik200969
    Ответов:
    0
    Просмотров:
    52
  5. Kozolick
    Ответов:
    0
    Просмотров:
    141
Статус темы:
Закрыта.

Поделиться этой страницей