• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы nub
  • Дата начала
N

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)}: Переменная не определена (Справочник)
Тарифы =<<?>>Справочник.Тарифы.Выбрать(); (Проверка: Тонкий клиент
может помочь кто нибудь?
 
U

unknown181538

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

Дайнеко

Переменная не определена (Справочник)

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

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

nub

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

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



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

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

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

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

Дайнеко

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

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

nub

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

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


так вы делаете в 8-ки?
 
Д

Дайнеко

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

Добавлено:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ФайлBBP =Новый XBase;
ФайлBBP.ОткрытьФайл("C:\Documents and Settings\user\Рабочий стол\електро\Мощность", Истина);

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

nub

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

Добавлено:

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

Дайнеко

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

nub

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

unknown181538

адрес временного хранилища делаем реквизитом формы (невидимым конечно).
Файл помещаем в него на клиенте, а на сервере извлекаем, и записываем в каталог временных файлов.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!