| 
    
            
         
         | 
    
  | 
Общий модуль на УФ Клиент и Сервер возможен? | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        Mikhail Volkov    
     22.03.17 
            ✎
    03:34 
 | 
         
        Дорабатываю уже доработанную конфигурацию на УТ11.2 обнаружил добавленный общий модуль с галочками Клиент, Сервер и Внешнее соединение, на Вызов с сервера - птицы нет. Однако мои функции вызываемые из процедур &НаСервере выполнялись. Понадобилось мою функцию вызвать из процедуры &НаКлиенте - ошибку выкинуло, типа метод не обнаружен!? Переписал ее вызов &НаСервере (дополнительную функцию пришлось вставить) - заработало!
 
        Хочу снять галку с Клиент, поставить Вызов с сервера, но опасаюсь как бы что-то у моего предшественника (создавшего этот общий модуль) не сломалось?  | 
|||
| 
    1
    
        Web00001    
     22.03.17 
            ✎
    03:59 
 | 
         
        http://курсы-по-1с.рф/news/2017-03-09-how-server-call-works
 
        Невозможно может быть почему? Открой типовую на УФ набери в поиске метаданных КлментСервер и удивись сколько общих модулей с такими свойствами.  | 
|||
| 
    2
    
        Mikhail Volkov    
     22.03.17 
            ✎
    04:20 
 | 
         
        (1) Вызов из процедуры &НаКлиенте должен работать? Я что-то не так вызываю?     
         | 
|||
| 
    3
    
        Web00001    
     22.03.17 
            ✎
    04:46 
 | 
||||
| 
    4
    
        Mikhail Volkov    
     22.03.17 
            ✎
    05:03 
 | 
         
        (3) Этот пример написан &НаКлиенте?
 
        Бегло смотрел функции общих модулей КлментСервер, все вызываются также из общих модулей. Примеров из вызовов из документов &НаКлиенте пока не нашел... Значит с общим модулем все нормально, только его процедуры нельзя вызывать из документов &НаКлиенте?  | 
|||
| 
    5
    
        Web00001    
     22.03.17 
            ✎
    08:57 
 | 
         
        (4)Я красной линией тебе подчеркнул, что код выполняется на клиенте! Вызывать эти функции можно на клиенте. Вот тебе пример вызова этой функции на клиенте https://yadi.sk/d/uLvL7F9m3GEHN6     
         | 
|||
| 
    6
    
        aleks_default    
     22.03.17 
            ✎
    09:16 
 | 
         
        Не "Вызов с сервера" а "Вызов сервера", что как раз наоборот.     
         | 
|||
| 
    7
    
        Mikhail Volkov    
     22.03.17 
            ✎
    10:48 
 | 
         
        (4) Да, так оно. Кстати, в общем модуле СтроковыеФункцииКлиентСервер нет &НаКлиенте и &НаСервере. У меня вызаемая функция &НаСервере. Может из-за этого у меня ошибку выкинуло (0)?
 
        Что-то с этим у меня пробел в 1С, не задумывался, пока в чужой модуль не влез (много доработок не планирую). (6) А галка "Вызов с сервера" для чего тогда?  | 
|||
| 
    8
    
        aleks_default    
     22.03.17 
            ✎
    10:51 
 | 
         
        (7)Вот как ты программируешь, если читаешь даже с ошибками?     
         | 
|||
| 
    9
    
        Mikhail Volkov    
     22.03.17 
            ✎
    11:00 
 | 
         
        (8) Где ошибка?     
         | 
|||
| 
    10
    
        Вафель    
     22.03.17 
            ✎
    11:02 
 | 
         
        в клиентсерверном модуле нужно размещать процедуры, которые можно вызывать как на клиент, так и на сервере, а ля
 
        х = а+б;  | 
|||
| 
    11
    
        aleks_default    
     22.03.17 
            ✎
    11:02 
 | 
         
        Открой свойства общего модуля и перечитай заголовки у галок     
         | 
|||
| 
    12
    
        Aleksandr N    
     22.03.17 
            ✎
    11:04 
 | 
         
        (11) Скорее всего стоит галочка только на толстом клиенте.     
         | 
|||
| 
    13
    
        aleks_default    
     22.03.17 
            ✎
    11:06 
 | 
         
        ОбъектМетаданных: ОбщийМодуль (MetadataObject: CommonModule)
 
        ВызовСервера (ServerCall) Использование: Только чтение. Описание: Тип: Булево. Если свойство установлено в значение Истина, то экспортные процедуры и функции модуля могут быть использованы на клиенте. Если свойство не установлены, то процедуры и функции данного модуля доступны только на сервере. Доступность: Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер). Примечание: Может быть установлено только, если для общего модуля установлен признак "Сервер".  | 
|||
| 
    14
    
        Aleksandr N    
     22.03.17 
            ✎
    11:12 
 | 
         
        (13) Там два клиента. Если конечно это не 8.1 и, прости господи, 8.0.     
         | 
|||
| 
    15
    
        Mikhail Volkov    
     22.03.17 
            ✎
    11:23 
 | 
         
        (11) Такие же как у СтроковыеФункцииКлиентСервер, в (0) написал.
 
        (12) Такой вовсе нет!? (13) Ее надо ставить? В примере (3) ее нет!? (14) УФ 8.3.8.2197  | 
|||
| 
    16
    
        h-sp    
     22.03.17 
            ✎
    11:30 
 | 
         
        (15) вот эти штуки
 
        &НаКлиенте и &НаСервере не ставь. Здесь это не нужно.  | 
|||
| 
    17
    
        Mikhail Volkov    
     22.03.17 
            ✎
    12:12 
 | 
         
        (16) Убрал &НаСервере, стало ругаться:
 
        Переменная не определена (Константы) Переменная не определена (Перечисления)  | 
|||
| 
    18
    
        Feunoir    
     22.03.17 
            ✎
    12:15 
 | 
         
        (17) Конечно. "Константы" и "Перечисления" на тонком клиенте не существуют.     
         | 
|||
| 
    19
    
        h-sp    
     22.03.17 
            ✎
    12:29 
 | 
         
        (17) вот. Это уже правильное поведение. Работаешь на клиенте, значит не нужно туда совать Константы.     
         | 
|||
| 
    20
    
        Mikhail Volkov    
     22.03.17 
            ✎
    12:36 
 | 
         
        (18) В общих модулях КлиентСервер Константы, Перечисления и прочие, которые выполняются только &НаСервере не применяют?     
         | 
|||
| 
    21
    
        Feunoir    
     22.03.17 
            ✎
    12:47 
 | 
         
        Да. В общих модулях, у которых стоят галки Клиент и Сервер нельзя применять то, что доступно только в контексте только сервера (или только клиента). То есть теоретически оно может и проскользнуть, но работать нормально не будет точно.     
         | 
|||
| 
    22
    
        h-sp    
     22.03.17 
            ✎
    12:47 
 | 
         
        (20) нет, конечно. Здесь собраны процедуры, которые легко могут запуститься и на клиенте и на сервере. Все другие процедуры кладите в другое место.     
         | 
|||
| 
    23
    
        Mikhail Volkov    
     22.03.17 
            ✎
    12:56 
 | 
         
        (22) Да, в другое место. Не разобравшись сунул в чужой модуль.     
         | 
|||
| 
    24
    
        Мимохожий Однако    
     22.03.17 
            ✎
    12:59 
 | 
         
        Добавь свой модуль и в нём твори, выдумывай, пробуй     
         | 
|||
| 
    25
    
        Web00001    
     22.03.17 
            ✎
    16:56 
 | 
         
        (23)Сувать не разобравшись, всегда было плохой идеей.     
         | 
|||
| 
    26
    
        Mikhail Volkov    
     23.03.17 
            ✎
    08:30 
 | 
         
        (25) Да, плохая, всего-то одну функцию надо было добавить...
 
        В 2010 когда начал осваивать УФ казалось это все условностями: клиентские, серверные модули. Но мне нравилось раскидывать свои функции по разным модулям, порядка больше... Ушел в АК, сел на Альфа-Авто, с УФ редко сталкиваюсь. Где почитать про все это: вроде какая разница откуда вызывать свою функцию? Ладно сейчас подомною вроде все работает. А под обычным пользователем (без полных прав) - нет: "Нарушение прав доступа!". Что в ней крамольного? &НаСервере Функция ИспользоватьПривязкуСкладовКВидуОрганизации(Форма, Проверка = Ложь, СкладПоОрганизации = Неопределено) Экспорт Документ = Форма.Объект; Если Не (ЗначениеЗаполнено(Документ.Организация) И Константы.ИспользоватьПривязкуСкладовКВидуОрганизации.Получить()) Тогда Возврат Истина; КонецЕсли; ВидОрганизации = Документ.Организация.ЮридическоеФизическоеЛицо; Если Документ.Организация.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ЮридическоеЛицо Тогда СкладПоОрганизации = Константы.СкладДляОрганизацийЮрЛиц.Получить(); НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС; Иначе СкладПоОрганизации = Константы.СкладДляОрганизацийФизЛиц.Получить(); НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ПродажаНеОблагаетсяНДС; КонецЕсли; Если Не ЗначениеЗаполнено(СкладПоОрганизации) Тогда Возврат Истина; КонецЕсли; Доступность = РольДоступна(Метаданные.Роли.ПолныеПрава); Если Документ.Склад = СкладПоОрганизации И Документ.НалогообложениеНДС = НалогообложениеНДС Тогда Если Форма.Элементы.Склад.Доступность Или Форма.Элементы.НалогообложениеНДС.Доступность Тогда Форма.Элементы.Склад.Доступность = Доступность; Форма.Элементы.НалогообложениеНДС.Доступность = Доступность; КонецЕсли; Возврат Истина; ИначеЕсли Проверка Тогда Возврат Ложь; КонецЕсли; Документ.Склад = СкладПоОрганизации; Документ.НалогообложениеНДС = НалогообложениеНДС; Форма.Элементы.Склад.Доступность = Доступность; Форма.Элементы.НалогообложениеНДС.Доступность = Доступность; Возврат Истина; КонецФункции  | 
|||
| 
    27
    
        FIXXXL    
     23.03.17 
            ✎
    08:59 
 | 
         
        (26) в журнал смотри, на что прав не хватает     
         | 
|||
| 
    28
    
        Mikhail Volkov    
     23.03.17 
            ✎
    11:28 
 | 
         
        (27) В ЖР нет ничего     
         | 
|||
| 
    29
    
        FIXXXL    
     23.03.17 
            ✎
    11:29 
 | 
         
        (28) остановка по ошибке что говорит?     
         | 
|||
| 
    30
    
        Web00001    
     23.03.17 
            ✎
    11:46 
 | 
         
        (26)>>Да, плохая, всего-то одну функцию надо было добавить
 
        Это был юмор, так между делом... >>Что в ней крамольного? Ты трогаешь объекты на которые у юзера нет прав доступа. Надо проверить все используемые объекты, что бы они были доступны пользователю в том контексте в котором трогаются(если объект пишется юзер должен иметь право его писать, если только читается, то должно быть право читать). Либо использовать УстановитьПривилегированныйРежим, либо функция должна быть в привилегированном модуле  | 
|||
| 
    31
    
        Mikhail Volkov    
     23.03.17 
            ✎
    17:12 
 | 
         
        (30) Да, права забыл дать обычным пользователям на новые константы настроек.
 
        Обычному пользователю дал полные права, чтобы открыть конфигуратор, поставил точку останова на вызове своей функции. Снял полные права, запустил отладчик, и дошел до чтения константы. Есть проще способ?  | 
|||
| 
    32
    
        Вафель    
     23.03.17 
            ✎
    17:22 
 | 
         
        (31) дай права на чтение констант     
         | 
|||
| 
    33
    
        mikeA    
     23.03.17 
            ✎
    17:41 
 | 
         
        (31) Конфигуратор запускать под собой с полными правами. В конфигураторе в параметрах запуска указать пользователя, под которым будет запускаться предприятие.
 
        Если я правильно понял проблему.  | 
|||
| 
    34
    
        Mikhail Volkov    
     23.03.17 
            ✎
    17:44 
 | 
         
        (33) Спс     
         | 
|||
| 
    35
    
        Mikhail Volkov    
     25.03.17 
            ✎
    05:41 
 | 
         
        Напомню, тема возникла из-за того, что свою функцию (26) разместил в чужом общем модуле с галочками Клиент, Сервер и Внешнее соединение. Поэтому не мог ее вызывать из процедур &НаКлиенте форм документов. Приходилось в формах документов писать дополнительные функции &НаСервере.
 
        Теперь, когда переделал - создал свой чисто серверный модуль хотел убрать эти дополнительные функции &НаСервере, вызывать свою функцию на прямую из процедур &НаКлиенте. Но при этом стала возникать такая ошибка: {Документ.ЗаказКлиента.Форма.ФормаДокумента.Форма(266)}: Ошибка при вызове метода контекста (ИспользоватьПривязкуСкладовКВидуОрганизации) Если Не мвДоработки.ИспользоватьПривязкуСкладовКВидуОрганизации(ЭтаФорма, Истина, СкладПоОрганизации) Тогда по причине: Ошибка при вызове серверного метода. по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'param': форма: Элемент имя: {http://v8.1c.ru/8.2/managed-application/modules}param по причине: Ошибка отображения типов: Отсутствует отображение для типа 'УправляемаяФорма' Как ее понимать, и исправить?  | 
|||
| 
    36
    
        Мимохожий Однако    
     25.03.17 
            ✎
    07:09 
 | 
         
        Попробуй в 1 параметр своей функции передавать ссылку и уже из неё получать объект в переменную Документ. Или &НаКлиентеНаСервере попробуй     
         | 
|||
| 
    37
    
        bodri    
     25.03.17 
            ✎
    08:07 
 | 
         
        (35) с процедурины &НаКлиенте не надо вызывать процедурину серверного модуля     
         | 
|||
| 
    38
    
        Mikhail Volkov    
     25.03.17 
            ✎
    08:24 
 | 
         
        (36) Если &НаКлиентеНаСервере, то ошибка: Процедура или функция с указанным именем не определена
 
        (37) Вернуть дополнительные промежуточные функции &НаСервере, на прямую никак?  | 
|||
| 
    39
    
        bodri    
     25.03.17 
            ✎
    09:07 
 | 
         
        (38) Вернуть дополнительные промежуточные функции &НаСервере, на прямую никак?
 
        Никак.  | 
|||
| 
    40
    
        bodri    
     25.03.17 
            ✎
    09:10 
 | 
         
        (38) Если &НаКлиентеНаСервере, то ошибка: Процедура или функция с указанным именем не определена 
 
        Процедуры с директивой &НаКлиентеНаСервере живут на сервере и на клиенте и для них доступны модули с галками Клиент и Сервер, следовательно если модуль только серверный, то он не доступен т.к. он не даступен на клиенте  | 
|||
| 
    41
    
        bodri    
     25.03.17 
            ✎
    09:17 
 | 
         
        Не сочтите за рекламу, недавно пришло на почту с курсов-по-1С:
 
        http://курсы-по-1с.рф/news/2017-03-09-how-server-call-works/?utm_source=mailchimp&utm_campaign=articles-2017-03-09-server-call&utm_medium=email&utm_content=2017-03-09  | 
|||
| 
    42
    
        bodri    
     25.03.17 
            ✎
    09:18 
 | 
         
        к (41) [ Наглядно о непонятном ] - Как работает серверный вызов в 1С   Источник: ©Курсы-по-1С.рф     
         | 
|||
| 
    43
    
        Мимохожий Однако    
     25.03.17 
            ✎
    10:31 
 | 
         
        (38) А что скажешь по поводу ссылки?     
         | 
|||
| 
    44
    
        Mikhail Volkov    
     25.03.17 
            ✎
    12:26 
 | 
         
        (43) Одной ссылки мало, форма нужна, что Доступность некоторых элементов формы закрыть. Хотя в данном случае форма не нужна, лишь проверяется соответствие установленного склада. Может для таких случаев еще упрощенную функцию написать? Все же проще, чем добавлять дополнительные промежуточные функции в формах документов.     
         | 
|||
| 
    45
    
        Mikhail Volkov    
     25.03.17 
            ✎
    14:41 
 | 
         
        (43) Дык, Объект.Ссылка примерно ту же ошибку (35) дает!?     
         | 
|||
| 
    46
    
        Mikhail Volkov    
     26.03.17 
            ✎
    06:31 
 | 
         
        + (44) Не, не единственный случай, когда &НаКлиенте нужно вызывать мою функцию.
 
        (40) Да, пришлось вернуть дополнительную промежуточную функцию &НаСервере в форме документа. Ее можно вынести в общий клиент-серверный модуль, если понадобится в других документах. И вообще не вижу смысла создавать общие раздельные клиентские и серверные модули!?  | 
|||
| 
    47
    
        Мимохожий Однако    
     26.03.17 
            ✎
    08:27 
 | 
         
        (44) (45) Полагаю, что ошибка всё-таки из-за передаваемой формы в параметр, хотя в функции эти лишние данные не используются.     
         | 
|||
| 
    48
    
        Mikhail Volkov    
     26.03.17 
            ✎
    10:15 
 | 
         
        (47) В одном случае да, для проверки соответствия склада организации нужно передать только склад и организацию. В другом случае, когда пользователь разрешает поменять склад (отвечает на вопрос положительно) нужно не только склад поменять, еще доступ на изменение склада закрыть, т.е. элемент формы Склад.     
         | 
|||
| 
    49
    
        Мимохожий Однако    
     26.03.17 
            ✎
    12:00 
 | 
         
        (48) Лучше две аккуратных функции, чем одну мешанину.     
         | 
|||
| 
    50
    
        Mikhail Volkov    
     26.03.17 
            ✎
    17:37 
 | 
         
        (49) Для 1-го случая проверки написал отдельную функцию, а для 2-го - нужно элементы формы устанавливать.     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |