Общий модуль на УФ Клиент и Сервер возможен? #793507


#0 by Mikhail Volkov
Дорабатываю уже доработанную конфигурацию на УТ11.2 обнаружил добавленный общий модуль с галочками Клиент, Сервер и Внешнее соединение, на Вызов с сервера - птицы нет. Однако мои функции вызываемые из процедур &НаСервере выполнялись. Понадобилось мою функцию вызвать из процедуры &НаКлиенте - ошибку выкинуло, типа метод не обнаружен!? Переписал ее вызов &НаСервере (дополнительную функцию пришлось вставить) - заработало! Хочу снять галку с Клиент, поставить Вызов с сервера, но опасаюсь как бы что-то у моего предшественника (создавшего этот общий модуль) не сломалось?
#1 by Web00001
Невозможно может быть почему? Открой типовую на УФ набери в поиске метаданных КлментСервер и удивись сколько общих модулей с такими свойствами.
#2 by Mikhail Volkov
Вызов из процедуры &НаКлиенте должен работать? Я что-то не так вызываю?
#3 by Web00001
тип того
#4 by Mikhail Volkov
Этот пример написан &НаКлиенте? Бегло смотрел функции общих модулей КлментСервер, все вызываются также из общих модулей. Примеров из вызовов из документов &НаКлиенте пока не нашел... Значит с общим модулем все нормально, только его процедуры нельзя вызывать из документов &НаКлиенте?
#5 by Web00001
Я красной линией тебе подчеркнул, что код выполняется на клиенте! Вызывать эти функции можно на клиенте. Вот тебе пример вызова этой функции на клиенте
#6 by aleks_default
Не "Вызов с сервера" а "Вызов сервера", что как раз наоборот.
#7 by Mikhail Volkov
Да, так оно. Кстати, в общем модуле СтроковыеФункцииКлиентСервер нет &НаКлиенте и &НаСервере. У меня вызаемая функция &НаСервере. Может из-за этого у меня ошибку выкинуло ? Что-то с этим у меня пробел в 1С, не задумывался, пока в чужой модуль не влез (много доработок не планирую). А галка "Вызов с сервера" для чего тогда?
#8 by aleks_default
Вот как ты программируешь, если читаешь даже с ошибками?
#9 by Mikhail Volkov
Где ошибка?
#10 by Вафель
в клиентсерверном модуле нужно размещать процедуры, которые можно вызывать как на клиент, так и на сервере, а ля
#11 by aleks_default
Открой свойства общего модуля и перечитай заголовки у галок
#12 by Aleksandr N
Скорее всего стоит галочка только на толстом клиенте.
#13 by aleks_default
Использование: Только чтение. Описание: Тип: Булево. Если свойство установлено в значение Истина, то экспортные процедуры и функции модуля могут быть использованы на клиенте. Если свойство не установлены, то процедуры и функции данного модуля доступны только на сервере. Доступность: Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер). Примечание: Может быть установлено только, если для общего модуля установлен признак "Сервер".
#14 by Aleksandr N
Там два клиента. Если конечно это не 8.1 и, прости господи, 8.0.
#15 by Mikhail Volkov
Такие же как у СтроковыеФункцииКлиентСервер, в написал. Такой вовсе нет!? Ее надо ставить? В примере ее нет!? УФ 8.3.8.2197
#16 by h-sp
вот эти штуки &НаКлиенте и &НаСервере не ставь. Здесь это не нужно.
#17 by Mikhail Volkov
Убрал &НаСервере, стало ругаться: Переменная не определена (Константы) Переменная не определена (Перечисления)
#18 by Feunoir
Конечно. "Константы" и "Перечисления" на тонком клиенте не существуют.
#19 by h-sp
вот. Это уже правильное поведение. Работаешь на клиенте, значит не нужно туда совать Константы.
#20 by Mikhail Volkov
В общих модулях КлиентСервер Константы, Перечисления и прочие, которые выполняются только &НаСервере не применяют?
#21 by Feunoir
Да. В общих модулях, у которых стоят галки Клиент и Сервер нельзя применять то, что доступно только в контексте только сервера (или только клиента). То есть теоретически оно может и проскользнуть, но работать нормально не будет точно.
#22 by h-sp
нет, конечно. Здесь собраны процедуры, которые легко могут запуститься и на клиенте и на сервере. Все другие процедуры кладите в другое место.
#23 by Mikhail Volkov
Да, в другое место. Не разобравшись сунул в чужой модуль.
#24 by МимохожийОднако
Добавь свой модуль и в нём твори, выдумывай, пробуй
#25 by Web00001
Сувать не разобравшись, всегда было плохой идеей.
#26 by Mikhail Volkov
Да, плохая, всего-то одну функцию надо было добавить... В 2010 когда начал осваивать УФ казалось это все условностями: клиентские, серверные модули. Но мне нравилось раскидывать свои функции по разным модулям, порядка больше... Ушел в АК, сел на Альфа-Авто, с УФ редко сталкиваюсь. Где почитать про все это: вроде какая разница откуда вызывать свою функцию? Ладно сейчас подомною вроде все работает. А под обычным пользователем (без полных прав) - нет: "Нарушение прав доступа!". Что в ней крамольного?
#27 by FIXXXL
в журнал смотри, на что прав не хватает
#28 by Mikhail Volkov
В ЖР нет ничего
#29 by FIXXXL
остановка по ошибке что говорит?
#30 by Web00001
>>Да, плохая, всего-то одну функцию надо было добавить Это был юмор, так между делом... >>Что в ней крамольного? Ты трогаешь объекты на которые у юзера нет прав доступа. Надо проверить все используемые объекты, что бы они были доступны пользователю в том контексте в котором трогаются(если объект пишется юзер должен иметь право его писать, если только читается, то должно быть право читать).  Либо использовать УстановитьПривилегированныйРежим, либо функция должна быть в привилегированном модуле
#31 by Mikhail Volkov
Да, права забыл дать обычным пользователям на новые константы настроек. Обычному пользователю дал полные права, чтобы открыть конфигуратор, поставил точку останова на вызове своей функции. Снял полные права, запустил отладчик, и дошел до чтения константы. Есть проще способ?
#32 by Вафель
дай права на чтение констант
#33 by mikeA
Конфигуратор запускать под собой с полными правами. В конфигураторе в параметрах запуска указать пользователя, под которым будет запускаться предприятие. Если я правильно понял проблему.
#34 by Mikhail Volkov
Спс
#35 by Mikhail Volkov
Напомню, тема возникла из-за того, что свою функцию разместил в чужом общем модуле с галочками Клиент, Сервер и Внешнее соединение. Поэтому не мог ее вызывать из процедур &НаКлиенте форм документов. Приходилось в формах документов писать дополнительные функции &НаСервере. Теперь, когда переделал - создал свой чисто серверный модуль хотел убрать эти дополнительные функции &НаСервере, вызывать свою функцию на прямую из процедур &НаКлиенте. Но при этом стала возникать такая ошибка: {Документ.ЗаказКлиента.Форма.ФормаДокумента.Форма}: Ошибка при вызове метода контекста (ИспользоватьПривязкуСкладовКВидуОрганизации)     Если Не мвДоработки.ИспользоватьПривязкуСкладовКВидуОрганизации(ЭтаФорма, Истина, СкладПоОрганизации) Тогда по причине: Ошибка при вызове серверного метода. по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'param':     форма: Элемент     имя: { по причине: Ошибка отображения типов: Отсутствует отображение для типа 'УправляемаяФорма' Как ее понимать, и исправить?
#36 by МимохожийОднако
Попробуй в 1 параметр своей функции передавать ссылку и уже из неё получать объект в переменную Документ. Или &НаКлиентеНаСервере попробуй
#37 by bodri
с процедурины &НаКлиенте не надо вызывать процедурину серверного модуля
#38 by Mikhail Volkov
Если &НаКлиентеНаСервере, то ошибка: Процедура или функция с указанным именем не определена Вернуть дополнительные промежуточные функции &НаСервере, на прямую никак?
#39 by bodri
Вернуть дополнительные промежуточные функции &НаСервере, на прямую никак? Никак.
#40 by bodri
Если &НаКлиентеНаСервере, то ошибка: Процедура или функция с указанным именем не определена Процедуры с директивой &НаКлиентеНаСервере живут на сервере и на клиенте и для них доступны модули с галками Клиент и Сервер, следовательно если модуль только серверный, то он не доступен т.к. он не даступен на клиенте
#41 by bodri
Не сочтите за рекламу, недавно пришло на почту с курсов-по-1С:
#42 by bodri
к [ Наглядно о непонятном ] - Как работает серверный вызов в 1С   Источник: ©Курсы-по-1С.рф
#43 by МимохожийОднако
А что скажешь по поводу ссылки?
#44 by Mikhail Volkov
Одной ссылки мало, форма нужна, что Доступность некоторых элементов формы закрыть. Хотя в данном случае форма не нужна, лишь проверяется соответствие установленного склада. Может для таких случаев еще упрощенную функцию написать? Все же проще, чем добавлять дополнительные промежуточные функции в формах документов.
#45 by Mikhail Volkov
Дык, Объект.Ссылка примерно ту же ошибку дает!?
#46 by Mikhail Volkov
+ Не, не единственный случай, когда &НаКлиенте нужно вызывать мою функцию. Да, пришлось вернуть дополнительную промежуточную функцию &НаСервере в форме документа. Ее можно вынести в общий клиент-серверный модуль, если понадобится в других документах. И вообще не вижу смысла создавать общие раздельные клиентские и серверные модули!?
#47 by МимохожийОднако
Полагаю, что ошибка всё-таки из-за передаваемой формы в параметр, хотя в функции эти лишние данные не используются.
#48 by Mikhail Volkov
В одном случае да, для проверки соответствия склада организации нужно передать только склад и организацию. В другом случае, когда пользователь разрешает поменять склад (отвечает на вопрос положительно) нужно не только склад поменять, еще доступ на изменение склада закрыть, т.е. элемент формы Склад.
#49 by МимохожийОднако
Лучше две аккуратных функции, чем одну мешанину.
#50 by Mikhail Volkov
Для 1-го случая проверки написал отдельную функцию, а для 2-го - нужно элементы формы устанавливать.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С