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

1С 8.2 Подружить процедуры &НаКлиенте &НаСервере

Автор mauar, 29 окт 2010, 23:44

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

mauar



Когда пытаюсь получить форму списка и сделать отбор по ней из другой формы или другого модуля
1С ругается Интерактивные операции недоступны
То же самое ругается и на администратора у него все роли включениы включая и интерактивные Интерактивное открытие внешних отчетов и обработок!

Получаю форму так
ФормаСписка=Документы.Договор.ПолучитьФормуСписка();

В чем тут у 8.2 подвох?

В принципе если её получать в процедуре с параматром &На клиенте то работает


&НаКлиенте
Процедура ОтобратьДоговоры(Режим) Экспорт     
     
  Договор=Документы.амбДоговорБухгалтерский;
  ФормаСписка=Договор.ПолучитьФормуСписка(ФормаСписка);

  Список=ФормаСписка.Список.Отбор.Элементы.Очистить();
  Если НЕ Режим = Неопределено Тогда
        ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));       
        ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Состояние");       
        ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
        ЭлементОтбора.Использование  = Истина;
        ЭлементОтбора.ПравоеЗначение = Перечисления.амбСостояниеДоговоровПоБО[Режим];
  КонецЕсли;
КонецПроцедуры     





Но...  Есть ещё одна процедура у которой параметр &НаСервере


Процедура НайтиИсполнителя() Экспорт

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

  КонецЕсли;
      КонецПроцедуры





Так вот собственно если вставить первую процедуру отбора у которой параметры  в последнюю процедуру запроса и сделать отбор по запросу
ОтобратьДоговоры(ВыборкаДетальныеЗаписи.Пользователь);


То 1С 8.2 будет очень сильно ругаться на запись что процедура такая не найдена.
ОтобратьДоговоры(ВыборкаДетальныеЗаписи.Пользователь);


Как можно подружить эти процедуры чтобы они сработали?  :wacko:

mohock

Во второй процедуре где утебя вызов
   ОтобратьДоговоры(ВыборкаДетальныеЗаписи.Пользователь); 
заключи этот вызов в эти тэги На клиенте.


mauar

И что, это ничего не даст сама процедура &НаСервере ,  как мы внутри этой процедуры можем прописать директиву &НаКлиенте, во первых система не запуститься, во вторых &НаСервере нельзя вызвать процедуру &НаКлиенте но надо, полюбому есть способ какой то, но какой....?

Vit1501

Тебе нужно продумать алгоритм работы программы. процедуры &наСервере выполняются на сервере где НЕ ДОСТУПНЫ графические объекты и методы. А процедуры &на Клиенте выполняются только на клиенте где не доступн данные БД, только контекст используемого модуля. Если тебе нужно открыть форму с отбором, то создай серверную процедуру, которая будет готовить условия отбора (например вернет тебе список ссылок которые нам нужно вывести) и клиентскую процедуру которая будет вызывать предыдущую серверную функцию и на основе возвращенных ей данных открывать форму и устанавливать в ней отбор. А еще тот метод открытия формы, который ты приводишь доступен только в толстом клиенте. В тонком клиенте можно воспользоваться функцией открытьформу() или ПолучитьФорму() (синтаксис и параметры посмотри в синтаксис помошнике).

Теги:

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

Рейтинг@Mail.ru

Поиск