helpf.pro
Регистрация

v8.2 УП: Передать значение адреса объекта с клиента на сервер

Gigi
20.04.2017 15:22Прочитано: 2127

Всем привет уважаемые форумчане и специалисты!

Гуууу! Сколько уже вожусь и никак не получается...перерыл везде, где мог и ничего не нашел, как сделать следующее:Допустим есть справочник: "ОБЪЕКТ". И нужно, что бы из формы этого справочника по указанному адресу был найден указанный код реквизита на сервере, но в другом справочнике, на пример в списке справочника "ТОЧКА". Для чего есть команда: "НайтиПоКоду". И вроде бы с этим все получилось по вот такой схеме:

Код: [Выделить]

Код 1C v 8.2 УП
 &НаКлиенте 
Процедура Тест_Пойск(Команда)
ТекстКода="000000001";
ПолучитьКод(ТекстКода);
КонецПроцедуры

&НаСервере
Процедура
ПолучитьКод(ТекстПойска)
Путь = Справочники.ТОЧКА;
Строка = Путь.НайтиПоКоду(ТекстПойска);
Сообщить(Строка.Наименование);
КонецПроцедуры

Сразу скажу, что с 1С подружился совсем недавно, и поэтому обращаюсь за помощьКак видно из выше указанного кода. "ТекстКода" задан на клиенте и передан на сервер.И система вроде нормально реагирует и находит. Но как только сам адрес поиска: "Справочники.ТОЧКА" указываешь на клиенте. На пример так:

Код: [Выделить]

НаКлиенте 
Процедура Тест_Пойск(Команда)
Адрес= Справочники.ТОЧКА;
ТекстКода="000000001";
ПолучитьКод(Адрес,
ТекстКода);
КонецПроцедуры

&НаСервере
Процедура ПолучитьКод(Путь, ТекстПойска)
Строка = Путь.НайтиПоКоду(ТекстПойска);
Сообщить(Строка.Наименование);
КонецПроцедуры [/pre]

СИСТЕМА ТУТ ЖЕ НАЧИНАЕТ РУГАТЬСЯ!

Ну это понятное дело почему! Догадываюсь, что нужно создать объект. Но че то не выходит.Пробовал разные варианты как перемененную: "Путь" передать с клиента на сервер, но ни в какую!

Поэтому очень прошу, если можно, подкорректировать и помочь как это сделать!

БУДУ ОЧЕНЬ ПРИЗНАТЕЛЕН ЗА ПОМОЩЬ!

Yandex
Возможно, вас также заинтересует
Реклама на портале
all4cf
20.04.2017 16:13Ответ № 1

Пропиши правила выбора, примерно так:

Код 1C v 8.3
 &НаКлиенте 
Процедура Тест_Пойск(Команда)
ТекстКода="000000001";
ПолучитьКод("СпрТочки", ТекстКода);
КонецПроцедуры

&НаСервере
Функция ПолучитьКод(Путь, ТекстПойска)
Если Путь="СпрТочки" Тогда
ПутьСпр = Справочники.ТОЧКА;
Возврат ПутьСпр.НайтиПоКоду(ТекстПойска);
Иначе
Возврат неопределено;
конецесли;
//Сообщить(Строка.Наименование);
КонецФункции
all4cf
20.04.2017 16:18Ответ № 2

тут еще надо обработать и вывести возвращенное значение:

Код 1C v 8.3
 Процедура Тест_Пойск(Команда) 
ТекстКода="000000001";
текзначение=ПолучитьКод("СпрТочки", ТекстКода);
сообщить(текзначение);
КонецПроцедуры
Gigi
20.04.2017 17:29Ответ № 3

Спасибо за ответ!

Разумное и логичное решение! 

И даже смешно то, что я сам не догадался что можно и так сделать. Легко и просто.

 Т.е. на клиенте

 Процедура Тест_Пойск(Команда)  ТекстКода="000000001";  текзначение=ПолучитьКод("СпрТочки", ТекстКода);  сообщить(текзначение); КонецПроцедуры [/pre]

и

&НаСервере  Функция ПолучитьКод(Путь, ТекстПойска)  Если Путь="СпрТочки" Тогда  ПутьСпр = Справочники.ТОЧКА;    Возврат ПутьСпр.НайтиПоКоду(ТекстПойска);  Иначе  Возврат неопределено; конецесли; //Сообщить(Строка.Наименование);  КонецФункции  [/pre]

Только к сожалению этого мало.

Дело в том, что в таким путем будет работать, но это все равно не удовлетворяет цель. которая в следующем:

Создать функцию для сервера с параметром адреса указанного на Клиенте.

В противно случае функция и не нужна. Она и нужна для того, что бы для каждого случая не писать ее отдельно.

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

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

К сожалению данный вариант годиться для индивидуального случая. Т.е. когда адрес поиска: Справочники.ТОЧКА;

А если другой адрес? Тогда его опять нужно указывать на сервере.

Вообще, нельзя ли сделать так, что бы на клиенте можно было указать любой адрес поиска. 

И это для параметра одной и той же общей функции на сервере. Просто передать ЛЮБОЙ адрес. Который может меняться.

Вот в чем вопрос!

Опять буду очень признателен за ответ и за помощь!

Gigi
21.04.2017 15:13Ответ № 4

Я уже сам поспрашивал и разобрался: 

Просто не знал, что есть одна очень полезная команда: "выполнить". В которую можно вогнать все что угодно.

Теперь все уже будет выглядеть вот так:

Код 1C v 8.2 УП
 &НаКлиенте
Процедура Тест_Пойск(Команда)
ТекстКода="000000001";
АдреСпр ="Справочники.ТОЧКА";
ТекЗначение=ПолучитьКод(АдреСпр, ТекстКода);
сообщить(ТекЗначение);
КонецПроцедуры

&НаСервере
Функция ПолучитьКод(Путь, ТекстПойска)
ПутьОбъект = Неопределено;
Выполнить("ПутьОбъект = "+ Путь);
ТекЗначение = ПутьОбъект.НайтиПоКоду(ТекстПойска);
Возврат ТекЗначение;
КонецФункции

 Это если кто то столкнется с подобной проблемой!

Подсказка: Для выделения Кода используйте (в редакторе).
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.