Имя: Пароль:
1C
 
Вызов функции наСервере из общего модуля.
,
0 Альбатрос
 
12.09.17
06:27
Поясните на пальцах, есть общий модуль, установлены галки:
- Клиент (Управляемое приложение)
- Сервер
- Вызов сервера

В модуле вот такой код:
&НаКлиенте
Процедура ПересчитатьНаценку(ТекущаяСтрока) Экспорт
    
    Характеристика = ТекущаяСтрока.Характеристика;
    Если НЕ ЗначениеЗаполнено(Характеристика) тогда
        Возврат;
    КонецЕсли;
    
    СтруктураХарактеристики = ВернутьДанныеПоХарактеристике(Характеристика);
    
Конецпроцедуры

&НаСервере
Функция ВернутьДанныеПоХарактеристике(Характеристика) Экспорт
    
    СтруктураВозврата = Новый Структура("Ошибка", Ложь);
    Возврат СтруктураВозврата;
    
КонецФункции


Почему не видна функция  ВернутьДанныеПоХарактеристике() ?
1 Филиал-msk
 
12.09.17
06:43
Потому что в текущем контексте она на сервере, а ты на клиенте. Галка вызов сервера будет использоваться только в случае явного указания модуля. Вызывай через точку.
2 Рэйв
 
12.09.17
06:57
(0)Чтобы было как ты хочешь - сделай модуль глобальным.
А иначе придется указывать пространство имен, т.е. название общего модуля.
3 Альбатрос
 
12.09.17
07:19
(1) (2) Так все равно не работает =)

&НаКлиенте
Процедура ПересчитатьНаценку(ТекущаяСтрока) Экспорт
    
    Характеристика = ТекущаяСТрока.Характеристика;
    Если НЕ ЗначениеЗаполнено(Характеристика) Тогда
        Возврат;
    КонецЕсли;
   СтруктураХарактеристики = АфсОбщийМодуль.ВернутьДанныеПоХарактеристике(Характеристика);
   Если СтруктураХарактеристики.Ошибка тогда
       Возврат;
       Сообщить("Ошибка определения наценки по строке:" + ТекущаяСтрока.НомерСтроки);
   КонецЕсли;
  
   ТекущаяСтрока.НаценкаРубли   = ТекущаяСтрока.Цена - СтруктураХарактеристики.ЦенаЗакупаСНДС;
   ТекущаяСтрока.ПроцентНаценки = (ТекущаяСтрока.Цена*100)/СтруктураХарактеристики.ЦенаЗакупаСНДС - 100;

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

&НаСервере
Функция ВернутьДанныеПоХарактеристике(Характеристика) Экспорт
    
    СтруктураВозврата = Новый Структура("Ошибка", Ложь);
    
    Если Не ЗначениеЗаполнено(Характеристика) тогда
        СтруктураВозврата.ошибка = Истина;
        Возврат СтруктураВозврата;
    КонецЕсли;
    СтруктураВозврата.Вставить("ЦенаЗакупаСНДС",Характеристика.УАС_ЦенаЗакупкиСНДС);  
    СтруктураВозврата.Вставить("ЦенаЗакупаСНДС",Характеристика.УАС_ЦенаЗакупкиБезНДС);
    Возврат СтруктураВозврата;

    
КонецФункции


{ОбщийМодуль.афсОбщийМодуль.Модуль(413)}: Метод объекта не обнаружен (ВернутьДанныеПоХарактеристике)
   СтруктураХарактеристики = АфсОбщийМодуль.ВернутьДанныеПоХарактеристике(Характеристика);
4 Филиал-msk
 
12.09.17
07:34
Потому что толстый клиент.
5 Альбатрос
 
12.09.17
07:37
(4) Да, на толстом работает. А как тогда правильно сделать, чтоб работало и на толстом, и на тонком.
6 Мимохожий Однако
 
12.09.17
07:41
РеквизитФормыВЗначение()
7 Альбатрос
 
12.09.17
07:42
(6) Не могу сообразить, как мне это поможет. Поясни пожалуйста.
8 Feunoir
 
12.09.17
07:44
(0) Потому что то, что ты пишешь - извращение. Общий модуль должен в полном виде быть или на сервере, или на клиенте. Проще запомнить, что директивы &НаСервере, &НаКлиенте и т.п. в общем модуле указываться не должны.

Разбиралось ещё 5 лет назад v8: Директивы компиляции в общих модулях
9 Мимохожий Однако
 
12.09.17
07:52
(7) Создай в модуле формы промежуточную процедуру &НаСервере, которая будет смотреть в твой общий модуль.
10 Альбатрос
 
12.09.17
08:03
(8) Спс за ссылку
(9) Судя по всему так и придется делать.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.