Имя: Пароль:
1C
1С v8
Вызов функции как на клиенте так и на сервере
0 toypaul
 
гуру
12.09.12
11:01
Есть функция, которая нужна как на клиенте так и на сервере. Параметром в нее передается форма - управляемая или обычная. Сейчас у функции стоит опция НаСервере, на модуле опция Сервер (а также галки Вызов сервера и Привилегированный).

При вызове в обычном приложении выдается сообщение что-то про "мутабельную переменную". Скорее всего это связано с передачей обычной формы на сервер (так как стоит Сервер и НаСервере).

В какой модуль (с каким опциями) мне поместить эту функцию и нужно ли писать опцию НаСервере, чтобы она корректно вызывалась как в управляемом приложении (отработать должна на сервере) и в обычном (отработать должна на клиенте)?
1 mikecool
 
12.09.12
11:02
При вызове в обычном приложении выдается сообщение что-то про "мутабельную переменную".
В обычном приложении &Сервер hfpdt exbnsdftncz&
2 mikecool
 
12.09.12
11:03
разве учитывается? *
3 zladenuw
 
12.09.12
11:03
это если клиент-сервер. тогда мутабельное
4 toypaul
 
гуру
12.09.12
11:04
(2) понятия не имею. дело в том что у меня на локальном компе нормально отрабатывает. а у заказчика клиент-сервер.
5 zladenuw
 
12.09.12
11:04
а попробовать директиву НаКлиентеНаСервере
6 Fram
 
12.09.12
11:04
(0) в обычном вроде все локально выполняется
7 toypaul
 
гуру
12.09.12
11:05
можно конечно поместить копию функции в подходящий модуль без опции, но это не есть правильный подход, если есть правильный вариант.

(5) надо попробовать. интересно для чего это опция используется? ЖКК под руками нет.
8 mikecool
 
12.09.12
11:05
(4) у тебя в форме скорее всего передается объект
наверное чушь сморозил )
9 zladenuw
 
12.09.12
11:06
10 acsent
 
12.09.12
11:06
не советовал бы так делать. КлиентСерверные модули - это ж полная
11 zladenuw
 
12.09.12
11:07
ТС покажи функцию
12 acsent
 
12.09.12
11:07
привелигерованный не может быть на клиенте
13 toypaul
 
гуру
12.09.12
11:10
(12) ага. есть модуль с опциями Сервер, Клиент обычный, Вызов сервера и не Привелигированный. если туда ее поместить...без опции НаСервере - будет как надо выполняться?
14 toypaul
 
гуру
12.09.12
11:11
код процедуры

&НаСервере
Процедура ЗаписатьФайлыВРегистр(Объект,ЭтаФорма) Экспорт

   НаборЗаписей = РегистрыСведений.вичи_ХранилищеФайлов.СоздатьНаборЗаписей();
   
   Отбор = Новый Структура("ИмяФайла");
   
   ДатаЗаписи = ТекущаяДата();
   ТекущийПользователь = глЗначениеПеременной("глТекущийПользователь");
   
   ТаблицаФайлов = ЭтаФорма.ТаблицаФайлов;
   ТаблицаИсходная = ЭтаФорма.ТаблицаИсходная;
   
   Для каждого Строка Из ТаблицаФайлов Цикл
   
       Отбор.ИмяФайла = Строка.ИмяФайла;
       Строки = ТаблицаИсходная.НайтиСтроки(Отбор);
       
       Действие = Неопределено;
       Если Строка.Перезаписан Тогда
       
           Действие = Перечисления.вичи_ДействиеНадФайлом.Перезаписан;
           
       Иначе
           
           Если Строки.Количество() = 0 Тогда
           
               Действие = Перечисления.вичи_ДействиеНадФайлом.Добавлен;
               
           Иначе
               
               СтрокаПоиска = Строки[0];
               Если Строка.Имя <> СтрокаПоиска.Имя
                   ИЛИ Строка.Расширение <> СтрокаПоиска.Расширение
                   ИЛИ Строка.ВидФайла <> СтрокаПоиска.ВидФайла
                   Тогда
                   
                   Действие = Перечисления.вичи_ДействиеНадФайлом.ИзмененыАтрибуты;
               
               КонецЕсли;
               
           КонецЕсли;
       КонецЕсли;
       
       Если Действие <> Неопределено Тогда
       
           НоваяЗапись = НаборЗаписей.Добавить();
           НоваяЗапись.Период = ДатаЗаписи;
           НоваяЗапись.Действие = Действие;
           НоваяЗапись.Объект = Объект;
           НоваяЗапись.Пользователь = ТекущийПользователь;
           ЗаполнитьЗначенияСвойств(НоваяЗапись,Строка);
           НоваяЗапись.ИмяФайла = Новый УникальныйИдентификатор(Строка.ИмяФайла);
       
       КонецЕсли;
       
       Для каждого СтрокаИсходная Из Строки Цикл
       
           ТаблицаИсходная.Удалить(ТаблицаИсходная.Индекс(СтрокаИсходная));    
       
       КонецЦикла;
       
   КонецЦикла;
   
   Для каждого Строка Из ТаблицаИсходная Цикл
   
       НоваяЗапись = НаборЗаписей.Добавить();
       НоваяЗапись.Период = ДатаЗаписи;
       НоваяЗапись.Действие = Перечисления.вичи_ДействиеНадФайлом.Удален;
       НоваяЗапись.Объект = Объект;
       НоваяЗапись.Пользователь = ТекущийПользователь;
       НоваяЗапись.Удален = Истина;
       ЗаполнитьЗначенияСвойств(НоваяЗапись,Строка);
       НоваяЗапись.ИмяФайла = Новый УникальныйИдентификатор(Строка.ИмяФайла);
   
   КонецЦикла;
   
   Если НаборЗаписей.Количество() > 0 Тогда
   
       НаборЗаписей.Записать(Ложь);
       
       Для каждого Строка Из ТаблицаФайлов Цикл
           Строка.Перезаписан = Ложь;
       КонецЦикла;
       
       Если ТипЗнч(ЭтаФорма) = Тип("УправляемаяФорма") Тогда
           ТаблицаИсходная.Загрузить(ДанныеФормыВЗначение(ТаблицаФайлов,Тип("ТаблицаЗначений")));
       Иначе
           ТаблицаИсходная = ТаблицаФайлов;
       КонецЕсли;
       
   
   КонецЕсли;
   
КонецПроцедуры // ЗаписатьФайлыВРегистр()
15 Defender aka LINN
 
12.09.12
11:11
(10) Праильно. Функция возвращает "Цена*Количество"? На сервер ее!
16 zladenuw
 
12.09.12
11:13
(14) если у модуля стоит. то должно. а так ты дополнительно ставишь директиву что только на сервере.
17 acsent
 
12.09.12
11:14
если обычный режим, то будет клиент и директивы не учитывются
18 toypaul
 
гуру
12.09.12
11:15
(17) ясно. надо проверить.
19 acsent
 
12.09.12
11:15
(15) зачем вообще такую функцию делать? посмотри в бсп - нет ни одного клиент серверного модуля
20 Fram
 
12.09.12
11:18
(19) есть и довольно много
21 Defender aka LINN
 
12.09.12
11:20
(19) АдресныйКлассификаторКлиентСервер
АнкетированиеКлиентСервер
ВзаимодействияКлиентСервер
ВзаимодействияКлиентСерверПереопределяемый
ДополнительныеОтчетыИОбработкиКлиентСервер
ОбщегоНазначенияКлиентСервер
ПолучениеФайловИзИнтернетаКлиентСервер
ПрефиксацияОбъектовКлиентСервер
ПрефиксацияОбъектовКлиентСерверПереопределяемый
РаботаСКурсамиВалютКлиентСервер
РаботаСФайламиКлиентСервер
РегламентированныеДанныеКлиентСервер
СоединенияИБКлиентСервер
СтроковыеФункцииКлиентСервер
ФайловыеФункцииКлиентСервер
ЭлектроннаяЦифроваяПодписьКлиентСервер

Вообще ни одного...
22 Stepa86
 
12.09.12
11:24
1) Форму нельзя передать с клиента на сервер
2) Для управляемых форм лучше юзать вызов сервер-сервер, причем модуль без галки ВызовСервера. Ну или клиент-клиент без ухода на сервер.
3) Для обычных работает только вызов обычныйКлиент-обычныйКлиент

итого модуль должен быть с галками ОбычныйКлиент, Сервер, Вызов сервера (изза обычного клиента)
23 Stepa86
 
12.09.12
11:26
+(22) хотя галку вызов сервера как раз убрать надо, вроде б. Изза нее будет передача мутабельного значения для обычной формы
24 pavig
 
12.09.12
11:31
(4) у тебя на локальном компе отрабатывает все на клиенте, так как база файловая
25 toypaul
 
гуру
12.09.12
12:44
ну вроде получилось. НаСервере пришлось убрать - иначе в обычном режиме не видит эту процедуру у модуля
26 Wingless
 
12.09.12
12:50
Ставить НаСервере в общих модулях - мда...
27 ptiz
 
12.09.12
12:55
(22) "причем модуль без галки ВызовСервера." - почему?
Не могу понять, зачем эту галку может понадобиться снимать с модуля?
28 Defender aka LINN
 
12.09.12
12:57
(27) Потому, что на клиентском модуле она нафиг не нужна и фиг ты ее поставшь, например.
29 toypaul
 
гуру
12.09.12
13:00
(26) надо подучить теорию. признаюсь. если ткнете носом в онлайн материал, в котором все эти тонкости есть, буду рад.
30 Fish
 
12.09.12
13:01
31 toypaul
 
гуру
12.09.12
13:04
(30) думал. если мне будет этот материал хотя бы наполовину полезен, тогда куплю. пока сомневаюсь.
32 Fish
 
12.09.12
13:10
(31) Судя по (0), этот материал имхо будет тебе полезен гораздо больше, чем наполовину. Там очень подробно и доступно рассматривается клиент-серверная работа.
33 Fish
 
12.09.12
13:11
+(32) Во всяком случае по сравнению с другими курсами, на которые я ходил.
34 toypaul
 
гуру
12.09.12
13:15
(32) смелое заявление. базовый курс отметаем сразу. там мне не интересно 90% инфо. берем продвинутый. там мне нужен только блок 1 и частично блок 0. пока не вижу смысла переплачивать. был бы отдельный курс по клиент-сервере, упр формам, веб-клиенту = другой вопрос.
35 Fish
 
12.09.12
13:26
(34) А зачем самому платить? Пусть тебе контора купит.
36 toypaul
 
гуру
12.09.12
13:28
я сам себе контора
37 ptiz
 
12.09.12
15:06
(28) А чем тогда установка этой галки может помешать на серверном модуле?
Независимо от того, куда вы едете — это в гору и против ветра!