Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 18:51

При запросе выдает ошибку.

Автор Серега16, 09 авг 2014, 13:54

0 Пользователей и 1 гость просматривают эту тему.

Серега16

Цитата: Codokopatel от 09 авг 2014, 20:26
В форме элемента просто так ссылаться на поле по его названию нельзя.
Ссылка на значение поля идет через объект, то есть код будет таким:

Запрос.УстановитьПараметр("Наименование",  Объект.Наименование);
Я думал об этом ,но в модуле объекта этот код работает!! Добавил Объект ошибок нет,но и сам код не работает.((
Цитата: Codokopatel от 09 авг 2014, 20:26
И, к тому же, если у вас весь код в модуле формы элемента справочника, а обращаться к серверной процедуре вы из других мест конфигурации не собираетесь, то слово "Экспорт" можно не писать.
Экспорт написан потому что то я  с начало в общих модулях ставил.
Добавлено: 09 авг 2014, 22:43


В отладчике
Если Запрос.УстановитьПараметр("Наименование",объект.Наименование);
То поле объекта не обнаружено.
Если Запрос.УстановитьПараметр("Наименование",Наименование);
то отладчик не запускается так как ошибка переменной выскакивает раньше чем отладчик.
Добавлено: 09 авг 2014, 23:22


Все разобрался.кому интересно код
&НаКлиенте
Процедура НаименованиеПриИзменении(Элемент)
ПП= Объект.Наименование;
Проверка(ПП);
КонецПроцедуры
&НаСервере
Процедура Проверка(Наименование)экспорт

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

  КонецЕсли;




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

Codokopatel

Вы в самом первом сообщении написали, что хотите производить проверку в событии "ОкончаниеВводаТекста".
В синтакс-помщник про этот метод сказано следующее:
"В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере".

Если же вы используете событие "ПриИзменении" (в форме элемента справочника), то нижеприведенный код у меня работает:

&НаКлиенте
Процедура НаименованиеПриИзменении(Элемент)
    Проверка();
КонецПроцедуры

&НаСервере
Процедура Проверка()экспорт

Запрос = Новый Запрос;
Запрос.Текст ="ВЫБРАТЬ
|    Покупатель.Наименование
|ИЗ
|    Справочник.Покупатель КАК Покупатель
|Где
| Покупатель.Наименование = &Наименование" ;

Запрос.УстановитьПараметр("Наименование",Объект.Наименование);
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда

Сообщить( "Данный покупатель уже существует!");

КонецЕсли;

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


Серега16

Цитата: Codokopatel от 09 авг 2014, 23:29
Вы в самом первом сообщении написали, что хотите производить проверку в событии "ОкончаниеВводаТекста".
В синтакс-помщник про этот метод сказано следующее:
"В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере".

Если же вы используете событие "ПриИзменении" (в форме элемента справочника), то нижеприведенный код у меня работает:

&НаКлиенте
Процедура НаименованиеПриИзменении(Элемент)
    Проверка();
КонецПроцедуры

&НаСервере
Процедура Проверка()экспорт

Запрос = Новый Запрос;
Запрос.Текст ="ВЫБРАТЬ
|    Покупатель.Наименование
|ИЗ
|    Справочник.Покупатель КАК Покупатель
|Где
| Покупатель.Наименование = &Наименование" ;

Запрос.УстановитьПараметр("Наименование",Объект.Наименование);
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда

Сообщить( "Данный покупатель уже существует!");

КонецЕсли;

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

Проверьте еще раз он не может работать.Поле Объекта не доступно.Я проверял, да ошибки модуль не выдает,но сообщения при этом не выдает.

GRADUS

И в чем проблема нужное значение установить?

murat1992

Цитата: Codokopatel от 09 авг 2014, 20:26
В форме элемента просто так ссылаться на поле по его названию нельзя.
Ссылка на значение поля идет через объект, то есть код будет таким:

Запрос.УстановитьПараметр("Наименование", Объект.Наименование);

И, к тому же, если у вас весь код в модуле формы элемента справочника, а обращаться к серверной процедуре вы из других мест конфигурации не собираетесь, то слово "Экспорт" можно не писать.

В Объекте пока ничего нет, все данные только на форме, соответственно Элементы.Наименование.

P.S. Если конечно имя у этого поля - "Наименование".

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск