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

Переменная не определена

Автор Елена6666666666, 21 окт 2014, 08:02

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

Елена6666666666

Было задание (1С8.3):Определить обработчик события, который позволил бы после выбора контактного лица автоматически устанавливать в документе значение контрагента (владельца). При реализации этого обработчика необходимо использовать табличную модель.
Моё решение:
&НаКлиенте
Процедура КонтактноеЛицоНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДанныеВыбора = КонтактноеЛицоНачалоВыбораНаСервере()
КонецПроцедуры

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

Результат=Запрос.Выполнить();
Выборка=Результат.Выбрать();
Пока Выборка.Следующий() Цикл
СписокЛиц.Добавить(Выборка.КонтактноеЛицо);
КонецЦикла;
Возврат СписокЛиц;
КонецФункции


Ошибка:
{Документ.ПоступлениеТоваров.Форма.ФормаДокумента.Форма(38,41)}: Переменная не определена (Контрагент)
Запрос.УстановитьПараметр("Контрагент", <<?>>Контрагент); (Проверка: Сервер)


Помогите пожалуйста!!!!!

Nekromant

Цитата: Елена6666666666 от 21 окт 2014, 08:02
Было задание (1С8.3):Определить обработчик события, который позволил бы после выбора контактного лица автоматически устанавливать в документе значение контрагента (владельца). При реализации этого обработчика необходимо использовать табличную модель.
Моё решение:
&НаКлиенте
Процедура КонтактноеЛицоНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДанныеВыбора = КонтактноеЛицоНачалоВыбораНаСервере()
КонецПроцедуры

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

Результат=Запрос.Выполнить();
Выборка=Результат.Выбрать();
Пока Выборка.Следующий() Цикл
СписокЛиц.Добавить(Выборка.КонтактноеЛицо);
КонецЦикла;
Возврат СписокЛиц;
КонецФункции


Ошибка:
{Документ.ПоступлениеТоваров.Форма.ФормаДокумента.Форма(38,41)}: Переменная не определена (Контрагент)
Запрос.УстановитьПараметр("Контрагент", <<?>>Контрагент); (Проверка: Сервер)


Помогите пожалуйста!!!!!

Вы с клиента на сервер не передаете параметр...

Елена6666666666

Цитата: Nekromant от 21 окт 2014, 08:19
Цитата: Елена6666666666 от 21 окт 2014, 08:02
Было задание (1С8.3):Определить обработчик события, который позволил бы после выбора контактного лица автоматически устанавливать в документе значение контрагента (владельца). При реализации этого обработчика необходимо использовать табличную модель.
Моё решение:
&НаКлиенте
Процедура КонтактноеЛицоНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДанныеВыбора = КонтактноеЛицоНачалоВыбораНаСервере()
КонецПроцедуры

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

Результат=Запрос.Выполнить();
Выборка=Результат.Выбрать();
Пока Выборка.Следующий() Цикл
СписокЛиц.Добавить(Выборка.КонтактноеЛицо);
КонецЦикла;
Возврат СписокЛиц;
КонецФункции


Ошибка:
{Документ.ПоступлениеТоваров.Форма.ФормаДокумента.Форма(38,41)}: Переменная не определена (Контрагент)
Запрос.УстановитьПараметр("Контрагент", <<?>>Контрагент); (Проверка: Сервер)


Помогите пожалуйста!!!!!

Вы с клиента на сервер не передаете параметр...

А как тогда передать параметр с клиента на сервер?

TreeDogNight

Я думаю что в вашей задаче более уместно использовать обработчик события ПриИзменении.
А на счет ошибки, в это место вы должны передать контрагента
Запрос.УстановитьПараметр("Контрагент", Контрагент);
а на данный момент переменная Контрагент у вас вообще не определена.
Вопрос: Какой тип имеет у вас реквизит Контактное лицо?

Codokopatel

Так как у вас в задании не надо выводить целый список
Цитировать"Было задание (1С8.3):Определить обработчик события, который позволил бы после выбора контактного лица автоматически устанавливать в документе значение контрагента (владельца)."
то можно обойтись таким кодом:
&НаКлиенте
Процедура КонтактноеЛицоПриИзменении(Элемент)
КонтактноеЛицо = ВыборКонтакта; // ВыборКонтакта - поле выбора контрагента на форме. Тип поля: СправочникСсылка.Контрагенты
Сообщить(ПолучениеВладельцаНаСервере(КонтактноеЛицо));
КонецПроцедуры

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

Запрос.УстановитьПараметр("Ссылка",КонтактноеЛицо);
ПолученныйРезультат = Запрос.Выполнить().Выгрузить()[0].Владелец;
Возврат ПолученныйРезультат;
КонецФункции

При выводе результата пользователю используется функция Сообщить, потому-что не совсем понятно куда будет помещаться результат:
ЦитироватьПри реализации этого обработчика необходимо использовать табличную модель.

cska-fanat-kz

1. Событие не НачалоВыбора а ПриИзменении
2. Надо написать серверную неконтекстную функцию с параметром КонтактноеЛицо, которая вернет значение реквизита Владелец от переданного параметра.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Елена6666666666

Цитата: TreeDogNight от 21 окт 2014, 09:28
Я думаю что в вашей задаче более уместно использовать обработчик события ПриИзменении.
А на счет ошибки, в это место вы должны передать контрагента
Запрос.УстановитьПараметр("Контрагент", Контрагент);
а на данный момент переменная Контрагент у вас вообще не определена.
Вопрос: Какой тип имеет у вас реквизит Контактное лицо?

КонтактноеЛицо тип - СправочникСсылка.КонтактныеЛица. Этот справочник подчинён спр-ку Контрагенты
Добавлено: 21 окт 2014, 10:29


Цитата: cska-fanat-kz от 21 окт 2014, 10:01
1. Событие не НачалоВыбора а ПриИзменении
2. Надо написать серверную неконтекстную функцию с параметром КонтактноеЛицо, которая вернет значение реквизита Владелец от переданного параметра.

Да, спасибо! Это так и есть:
Вот правильное решение и всё работает:
&НаКлиенте
Процедура КонтактноеЛицоПриИзменении(Элемент)
   Сообщить (Объект.КонтактноеЛицо);
  Объект.Контрагент = ПолучитьКонтрагента(Объект.КонтактноеЛицо);
КонецПроцедуры

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


Теги:

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

Рейтинг@Mail.ru

Поиск