Имя: Пароль:
1C
1С v8
Есть вопрос по Общим Модулям
0 razbiralshik
 
22.02.13
14:40
Подскажите, почему когда ставлю флажки: Сервер, Вызов сервера. То процедуры/функции нормально отрабатываются в управляемых формах. А если добавить флажок: Клиент (Управляемое приложение). Вылазит ошибка, что нету например такой переменной как "Документы" или "Справочники", т.е. грубо говоря, начинает работать в контексте "клиента"... но веть Сервер тоже стоит
1 MSII
 
22.02.13
14:42
(0) Ну раскидай процедуры директивами, что где компилироваться должно.
2 razbiralshik
 
22.02.13
14:43
(1) нужно создавать отдельно общие модуля для клиента и для сервера?
3 razbiralshik
 
22.02.13
14:44
(1) вместе в одном общем модуле они не могут ужиться?
4 ДенисЧ
 
22.02.13
14:45
Явно указывай &НаКлиенте или &НаСервере
или #Если Клиент Тогда...
5 razbiralshik
 
22.02.13
14:47
(4) понятно...
6 MSII
 
22.02.13
14:49
(3) Могут при наличии директив компиляции.
7 razbiralshik
 
22.02.13
14:52
(4) попробовал, чтото не помогло
8 MSII
 
22.02.13
14:57
(7) Значит, накосячил где-то. Текст модуля покажи.
9 razbiralshik
 
22.02.13
14:58
(8)

//&НаСервере
Функция уфСчетФактураНажатие(Ссылка, ВидСФ) Экспорт
   МассивВидов       = Новый Массив(1);
   МассивВидов[0]    = ВидСФ;
   МассивПодчиненных = уфПолучитьМассивПодчиненных(Ссылка,МассивВидов, Истина);
   Если (НЕ МассивПодчиненных = Неопределено) И (МассивПодчиненных.Количество() > 0) Тогда
       // счет-фактура найден, откроем его
       СчетФактура = МассивПодчиненных[0].Ссылка;
   Иначе
       // счет-фактура НЕ найден, введем новый
       СчетФактура = Документы[ВидСФ].ПустаяСсылка();
   КонецЕсли;
   Возврат СчетФактура;
КонецФункции// уфСчетФактураНажатие()
10 razbiralshik
 
22.02.13
14:58
тоесть вот так:

&НаСервере

Функция уфСчетФактураНажатие(Ссылка, ВидСФ) Экспорт
   МассивВидов       = Новый Массив(1);
   МассивВидов[0]    = ВидСФ;
   МассивПодчиненных = уфПолучитьМассивПодчиненных(Ссылка,МассивВидов, Истина);
   Если (НЕ МассивПодчиненных = Неопределено) И (МассивПодчиненных.Количество() > 0) Тогда
       // счет-фактура найден, откроем его

       СчетФактура = МассивПодчиненных[0].Ссылка;
   Иначе
       // счет-фактура НЕ найден, введем новый

       СчетФактура = Документы[ВидСФ].ПустаяСсылка();
   КонецЕсли;
   Возврат СчетФактура;
КонецФункции// уфСчетФактураНажатие()
11 MSII
 
22.02.13
15:03
(10) Ну, теперь давай текст ошибки в студию
12 razbiralshik
 
22.02.13
15:05
(11)

{Документ.ПоступлениеАвтомобилей.Форма.ФормаДокументаУправляемая.Форма(9)}: Метод объекта не обнаружен (уфСчетФактураНажатие)
   СсылкаНаСФ           = ОбработкаУФ.уфСчетФактураНажатие(СсылкаНаПоступление,"СчетФактураПолученный");
13 ДенисЧ
 
22.02.13
15:07
(12) Хм. А как связаны (12) и (10) ?
14 razbiralshik
 
22.02.13
15:07
(11) а если убрать дериктиву &НаСервере, то такая ошибка:

{ОбщийМодуль.ОбработкаУФ.Модуль(12,17)}: Переменная не определена (Документы)
       СчетФактура = <<?>>Документы[ВидСФ].ПустаяСсылка();
15 GANR
 
22.02.13
15:07
> Клиент (Управляемое приложение). Вылазит ошибка, что нету например такой переменной как "Документы" или "Справочники",

Все правильно - метаданные и учетные данные на сервере лежат!

Короче, клиентские процедуры - в модуле с галочкой клиент, серверные - сервер.

Клиент-серверные с обеими галочками, НО если в коде процедуры клиент-серверного модуля идет обращение к данным, присутствующим только на клиенте (Форма.Элементы.ТекущиеДанные) или только на сервере (учетные данные, метаданные и пр.) - необходимо (4).
16 razbiralshik
 
22.02.13
15:20
(13) всмысле? то что написано что вызывается процедура ОМ из формы, не вариант?
17 razbiralshik
 
22.02.13
15:21
(15) общий смысл понятен, но непонятно почему ошибка в (12)
18 razbiralshik
 
22.02.13
15:33
Вообщем директивы все расставил как и описали выше, не помогло. Никто не знает ответа видимо
19 Команданте
 
22.02.13
15:35
нафейхуа делать одновременно сервер, вызов и клиент?
20 Лодырь
 
22.02.13
15:35
(17) Потому что у тебя обработчик  должен быть клиентским а директива нарисована на сервере.
21 Команданте
 
22.02.13
15:35
1. сервер
2. сервер, вызов
3. клиент
4. клиент-сервер
остальное от лукавого
22 MSII
 
22.02.13
15:36
(18) Да не, просто ты тупишь дьявольски, а разжевывать тебе в до состояния кашицы никто в пятницу вечером не хочет. Почитай про контексты исполнения.
23 MSII
 
22.02.13
15:37
(19) А почему нет? В типовых делают.
24 Команданте
 
22.02.13
15:40
(23) А смысл?
25 Reset
 
22.02.13
15:43
(14) Вызывай ОбработкаУФ.уфСчетФактураНажатие из процедуры  с &НаСервере

&НаКлиенте
Процедура ТаГдеСейчасВызваешь()
 ВызватьЭтуХню();
КонецПроцедуры

&НаСервере()
Процедура ВызватьЭтуХню()
СсылкаНаСФ           = ОбработкаУФ.уфСчетФактураНажатие(СсылкаНаПоступление,"СчетФактураПолученный");
КонецПроцедуры
26 regniws
 
22.02.13
15:44
(18) ответ все знают, просто реально лень объяснять то, что должно быть уже в голове к моменту начала работы с УФ.
Особенно доставляет простановка директив на угад.. :(
27 MSII
 
22.02.13
15:44
(24) Ну, например, с целью сокращения количества общих модулей. Если их число измеряется сотнями, это уже не здорово.
28 regniws
 
22.02.13
15:44
(24) чтобы не лячкать копрокод
29 regniws
 
22.02.13
15:45
(27) это меньшее зол )) а вот дублировать код для клиента и сервера не круто, просто из соображений поддержки
30 Команданте
 
22.02.13
15:48
покажите хотя бы один пример, где использование этого, разумно
31 razbiralshik
 
22.02.13
15:52
(25) вот оно что... спасибо, теперь есть за что зацепится, буду копать далее в глубь!
32 regniws
 
22.02.13
15:54
(30) везде, где код для сервера и клиента одинаковый
33 regniws
 
22.02.13
15:55
+(32) или может быть приведен к таковому.
34 Команданте
 
22.02.13
15:57
(32) ну, например
35 regniws
 
22.02.13
16:04
(34) ща, разберемся.
мы ж говорим про то, нафейхера делать галки "клиент, сервер" или галки "клиент, сервер, вызов сервера"?
36 MSII
 
22.02.13
16:07
(34) Например, любые функции, что-то делающие со строками (разложение строки в массив, форматирования какие-нибудь). Зачем иметь 2 варианта такой функции? А понадобиться она может как на сервере, так и на клиенте.
37 Команданте
 
22.02.13
16:11
(36) а, ну да, ну да