помогите с кодом

Тема в разделе "1C и всё что с ней связано", создана пользователем nub, 24 авг 2011.

  1. nub

    nub Гость

    Хочу создать DBF файл с тремя полями и выгрузить в него справочник тарифы,Вот код
    &НаКлиенте
    Процедура выгрузка(Команда)
    ФайлBBP =Новый XBase;
    ФайлBBP.поля.Добавить("Name","S",100);
    ФайлBBP.поля.Добавить("Bep","S",5,0);
    ФайлBBP.поля.Добавить("Sum","N",10,2);
    ФайлBBP.Кодировка = КодировкаXBase.OEM; //кодировка BOS
    ФайлBBP.СоздатьФайл("C:\Documents and Settings\user\Рабочий стол");
    Тарифы = Справочники.Тарифы.Выбрать();
    Пока Тарифы.Следующий() Цикл
    ФайлBBP.Добавить();
    ФайлBBP.Name =Тарифы.ТарифыПоЗонам;
    ФайлBBP.Ber =Тарифы.ОдноставочныйТариф;
    ФайлBBP.Sum =Тарифы.ДвуставочныйТариф;
    ФайлBBP.Записать();
    КонецЦикла;
    ФайлBBP.ЗакрытьФайл();
    КонецПроцедуры

    пишет ошибку
    {Справочник.Тарифы.Форма.ФормаЭлемента.Форма(26,10)}: Переменная не определена (Справочник)
    Тарифы =<<?>>Справочник.Тарифы.Выбрать(); (Проверка: Тонкий клиент
    может помочь кто нибудь?
     
  2. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Точно все на самом деле так как написано?
     
  3. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    На клиенте менеджер справочника недоступен. Выгружайте на сервере. Переместите все в серверную процедуру, и вызывайте ее из своей.
    Однако, если вариант скульный, путь будет искаться с сервера... придется использовать временное хранилище.
     
  4. nub

    nub Гость

    Да так и пишет
     
  5. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Да не верю! В сообщении об ошибке: Тарифы = Справочник.
    а должно быть Справочники
    Чтобы 1С сама извратила слово - такого не знаю.

    Далее. Сообщение выдала "Проверка: Тонкий клиент". Я этим вариантом клиента не пользуюсь, но подозреваю, что unknown181538 прав, что и не заработает. Может Запросом справочник получить?
     
  6. nub

    nub Гость

    поменял клиент на сервер всё заработало,вот только значения не вводятся



    Добавлено: при обратной процедуре
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ФайлBBP =Новый XBase;
    ФайлBBP.ОткрытьФайл("C:\Documents and Settings\user\Рабочий стол\електро\Мощность", Истина);
    ФайлBBP.Первая();
    Пока НЕ ФайлBBP.ВКонце() Цикл
    Сотрудники =Справочники.Сотрудники.СоздатьЭлемент();
    Сотрудники.Организация =ФайлBBP.DTA;
    Сотрудники.Должность =ФайлBBP.KOL;
    Сотрудники.Записать();
    ФайлBBP.Следующая();
    КонецЦикла;
    ФайлBBP.ЗакрытьФайл();

    КонецПроцедуры

    не каких ошибок не пишет,переходишь в режим пользователя,открываешь справочник пишет ошибку

    {Справочник.Сотрудники.Форма.ФормаЭлемента.Форма(6)}: Ошибка при вызове метода контекста (Первая): Перед выполнением операции нужно открыть базу
    ФайлBBP.Первая();
    по причине:
    Перед выполнением операции нужно открыть базу
     
  7. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    видимо файлика такого нет
     
  8. nub

    nub Гость

    есть
     
  9. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Мне вот такая строка с первого раза не понравилась:
    ФайлBBP.ОткрытьФайл("C:\Documents and Settings\user\Рабочий стол\електро\Мощность", Истина);

    Ну несерьезно так указывать имя файла прямо в тексте программы! Надо спросить у пользователя.
    Сначала решил не писать свое замечание. А тут вижу что, плохой стиль письма всегда создает проблемы.
    Да причина одна - файл не создался. Еще со времен 7-ки методы работы с DBF ОткрытьФайл(), СоздатьФайл() не давали никакой реакции в случае неудачи. Поэтому я делаю так:
    Код ( (Unknown Language)):
            Рез.СоздатьФайл(ИмяФайла);
    Если НЕ(Рез.Открыта() = 1) Тогда
    Предупреждение ("Не могу создать файл:"+ ИмяФайла+ "
    |Проверьте права на запись", 10);
    Возврат;
    КонецЕсли;
     
  10. nub

    nub Гость


    так вы делаете в 8-ки?
     
  11. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Это фрагмент из 7-ки. Суть та-же. После команды Создать и Открыть проверяю на Открыта()
    Только так программа может убедится, что файл создался или открылся.

    Добавлено:
    Потом я подумал. Процедура выполняется на сервере. А файл с этим длинным именем где находится? На вашем локальном?
     
  12. nub

    nub Гость

    да
     
  13. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Определись, что тебе надо. Самой простой случай - только под толстого клиента. Тогда верни &НаКлиенте и запрограммируй нормальный диалог выбора файла. А чтобы 1С не выпендривалась - отключить проверку синтаксиса для тонкого клиента.
    Если же для тонкого нужно, то надо мудрить как пишет, нет, намекает unknown181538 про какое-то хранилище.
     
  14. nub

    nub Гость

    спасибо за мощь,но она не потребовалась
     
  15. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    адрес временного хранилища делаем реквизитом формы (невидимым конечно).
    Файл помещаем в него на клиенте, а на сервере извлекаем, и записываем в каталог временных файлов.
     
  16. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    :facepalm: Полное недоумение. Зачем тогда писал?
     
Загрузка...

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