Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Передать значение адреса объекта с клиента на сервер          
Gigi Подменю пользователя
сообщение 20.04.17, 17:22
Сообщение #1

Оратор
*****
Группа: Пользователи
Сообщений: 498
Спасибо сказали: 5 раз
Рейтинг: 0

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

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

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

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


Но дело в том, что этот путь не удовлетворяет цель. которая в следующем:
Создать функцию для сервера с параметром адреса указанного на Клиенте.
Ибо функция для того и нужна, что бы для каждого случая не писать ее отдельно.
Т.е. суть вопроса в том, что бы код функции оставался неизменным. И что в ней было прописано то, что она должна сделать.
А все .... необходимые параметры, что бы можно было задавать на клиенте.
К сожалению указанный вариант годиться для индивидуального случая. Т.е. когда адрес поиска: Справочники.ТОЧКА.
А если другой адрес? Тогда его опять нужно указывать на сервере.
Вообще, нельзя ли сделать так, что бы на клиенте можно было указать любой адрес поиска.
И это для параметра одной и той же общей функции на сервере. Просто передать ЛЮБОЙ адрес. Который может меняться.

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

Буду очень признателен за ответ и за помощь!
Если кто то подкорректирует ....

 ! 

Правила: Правда так лучше код выглядит? тема переехала в раздел 8.3
 


Сообщение отредактировал Batchir - 20.04.17, 17:50

Batchir Подменю пользователя
сообщение 20.04.17, 17:43
Сообщение #2

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1426 раз
Рейтинг: 0

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

Flexy Подменю пользователя
сообщение 20.04.17, 19:33
Сообщение #3

Танцор с Бубном
Иконка группы
Группа: Местный
Сообщений: 1121
Из: Днепра
Спасибо сказали: 230 раз
Рейтинг: 0

&НаСервереБезКонтекста
Функция ПолучитьКод(Менеджер, Код)
    Возврат Справочники[Менеджер].НайтиПоКоду(Код);
КонецФункции

Batchir Подменю пользователя
сообщение 20.04.17, 19:48
Сообщение #4

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1426 раз
Рейтинг: 0

Flexy, Топик стартер просил универсальности, я лишь даю намек на то что есть такая команда как выполнить, с помощью которой можно скомпоновать любой код на выполнение wink.gif
Так в зависимости от условий можно спокойно собрать имя функции из частей и выполнить её.

Flexy Подменю пользователя
сообщение 20.04.17, 20:04
Сообщение #5

Танцор с Бубном
Иконка группы
Группа: Местный
Сообщений: 1121
Из: Днепра
Спасибо сказали: 230 раз
Рейтинг: 0

Batchir @ Сегодня, 19:48 * ,
Да. Я в курсе, что есть такая функция. И с помощью ее можно творить супер-универсальные алгоритмы.
Но согласитесь, что все возможные "Пути" (по сути менеджеры справочников) в идеале должны быть предопределены разработчиком. Это методически правильно имхо.
По этому мой пост автору - это лишь еще один из вариантов реализации его задачи smile.gif

Сообщение отредактировал Flexy - 20.04.17, 20:05

Gigi Подменю пользователя
сообщение 21.04.17, 13:57
Сообщение #6

Оратор
*****
Группа: Пользователи
Сообщений: 498
Спасибо сказали: 5 раз
Рейтинг: 0

Flexy @ Вчера, 21:04 * ,
Отлично!
Как раз то, что было нужно.
Вот что, значит когда не сильно глубоко знаком с разными фишками.
Сколько искал ... а все просто... достаточно было только знать, что есть очень полезная команда: "выполнить". В которую можно вогнать все что угодно.
Теперь все уже будет выглядеть вот так:

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

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


А на счет такого решения пока не разобрался:

Цитата(Flexy @ 20.04.17, 20:33) *
&НаСервереБезКонтекста
Функция ПолучитьКод(Менеджер, Код)
    Возврат Справочники[Менеджер].НайтиПоКоду(Код);
КонецФункции


Короче!
Огромное вам спасибо ребята!

icon_beer17.gif

Flexy Подменю пользователя
сообщение 21.04.17, 14:13
Сообщение #7

Танцор с Бубном
Иконка группы
Группа: Местный
Сообщений: 1121
Из: Днепра
Спасибо сказали: 230 раз
Рейтинг: 0

Цитата(Gigi @ 21.04.17, 13:57) *
А на счет такого решения пока не разобрался:

&НаСервереБезКонтекста
Функция ПолучитьКод(Путь, Код)
    Возврат Справочники[Путь].НайтиПоКоду(Код);
КонецФункции


Цитата(Gigi @ 21.04.17, 13:57) *
есть очень полезная команда: "выполнить". В которую можно вогнать все что угодно.

"Что угодно" низзя - код не выполниться и вывалиться ошибка. Можно только реальное имя существующего в конфигурации справочника. Это касается и примера, который я писал выше.
Или через попытку / исключение. Ошибки не будет... но это имхо не феншуйное решение.
&НаСервереБезКонтекста 
Функция ПолучитьКод(Путь, ТекстПойска)
    текЗначение = Неопределено;
    Попытка
    Выполнить("текЗначение = Справочники."+Путь+".НайтиПоКоду(ТекстПойска)");
    Исключение
    КонецПопытки
    Возврат текЗначение;
КонецФункции


Сообщение отредактировал Flexy - 21.04.17, 14:17

Gigi Подменю пользователя
сообщение 21.04.17, 16:42
Сообщение #8

Оратор
*****
Группа: Пользователи
Сообщений: 498
Спасибо сказали: 5 раз
Рейтинг: 0

Flexy @ Сегодня, 15:13 * ,

&НаСервереБезКонтекста
Функция Справочник_ПолучитьКод(Путь, Код)
Возврат Справочники[Путь].НайтиПоКоду(Код);
КонецФункции
&НаСервереБезКонтекста
Функция Документы_ПолучитьКод(Путь, Код)
Возврат Документы[Путь].НайтиПоКоду(Код);
КонецФункции


Да теперь дошло 47067070.gif

Цитата(Flexy @ 21.04.17, 15:13) *
"Что угодно" низзя - код не выполниться и вывалиться ошибка


Да .... все верно... "все что угодно" это я так .. образно.
Естественно если путь реально существует. А иначе только через "попытку" и "исключение"
Но вообще что касается этого вопроса, то в моем случае суть в том, что я и не хочу в недре кода вообще указывать адрес.
Не на клиенте, на на сервере. Просто стоит задача и приходиться ее решать мелкими шагами. Сперва один вопрос. потом другой и т.д.
Но вопрос передачи адреса уже решен. И не важно феншуйное или не феншуйное решение. Главное работает! А в остальное ......
И поэтому уже теперь возникает другой вопрос который больше касается клиента, но который все равно имеет отношение к передаче значения и думаю в рамках рассматриваемой темы. Ну хотя бы косвенно ... 32542460.gif
Вопрос в том, как сделать, что бы система сама определяла адрес с которым связан на пример какой ни будь реквизит табличной части и в форме?
Судя по тому, что знаю для этого есть команда: ПолучитьНавигационнуюСсылку но она к сожалению не срабатывает.
Вот код с учетом того, сказанного...
Ну если это не сильно противоречит теме. то опять буду признателен если есть соображения

&НаКлиенте
Процедура Тест_Пойск(Команда)
ТекстКода="000000001";
АдреСпр = ПолучитьНавигационнуюСсылку(Элементы.ТаличнаяЧасть1.ТекущиеДанные.Рекв1);
//Адресс ссылки реквизита: Рекв1 в ТаличнаяЧасть1 это "Справочники.ТОЧКА"
//Ну это как обычно в свойствах "тип".
//Так вот, как раз для исключения варианта не существующего адреса нужно, что бы
//На клиенте адрес ссылки реквизита определялся сам.
//Что бы не было надобности указывать:  АдреСпр ="Справочники.ТОЧКА"; или  АдреСпр ="ТОЧКА";
//Ведь ссылка реквизта может меняться.
//Но передать адрес на сервер через: "ПолучитьНавигационнуюСсылку" не срабатывает!
ТекЗначение=ПолучитьКод(АдреСпр, ТекстКода);
Сообщить(ТекЗначение);
КонецПроцедуры

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

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 19.04.24, 9:30
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!