Имя: Пароль:
1C
1С v8
ТипЗнч(Модуль) <> Тип("ОбщийМодуль") - Возможно ошибочный параметр ОбщийМодуль
,
0 PiotrLoginov
 
16.07.13
12:36
Пытаюсь разобраться в сонме возможных типов значений, ибо при проверке моей нетленки ругается на выдернутую из СтандартныеПодсистемыКлиент (БСП) в мою нетленку функцию:


Функция КлиентскийОбщийМодуль(Имя) Экспорт
   
   Модуль = Вычислить(Имя);
   
#Если НЕ ВебКлиент Тогда
   Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда
       ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
           НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя);
   КонецЕсли;
#КонецЕсли
   
   Возврат Модуль;
   
КонецФункции


Сама ругань - в заголовке. Накурил в СП: "ОписаниеТипов (TypeDescription) - Представляет собой объект для управления допустимыми типами значений. В основном предназначен для присвоения в качестве значений соответствующим свойствам других объектов. Набор допустимых типов и квалификаторы примитивных типов задаются при создании объекта."

Вопрос: это что же, получается, если хочешь какой-то особый Тип, опиши его явно? Типовые на предмет поиска места, где описываются необходимые типы, еще не мучал.
1 Ненавижу 1С
 
гуру
16.07.13
12:37
нет таких типов как "модуль"
2 zladenuw
 
16.07.13
12:40
(0) так в типовых вроде сравнение текста модулей. а тип знч
3 PiotrLoginov
 
16.07.13
12:46
(1) "Модуль" - нет. Есть "Общиймодуль". (?)

примечание к функции в типовой конфе:

// Возвращает клиентский общий модуль по имени.

... гм... вернет текст модуля? ссылку на модуль? сразу признаюсь: эксперимент на практике могу не осилить. Да и не важно в данном случае. Подскажите принцип - я правильно понимаю, типы присутствуют изначально + можно описывать дополнительно какие захочешь? (звучит конечно смело)


(2) ? мб опечатка? "сравнение НЕ текста модулей, а ТипЗнч"
4 acsent
 
16.07.13
12:49
(3) вернет объект типа "ОбщийМодуль"
5 acsent
 
16.07.13
12:50
(3) можно описывать составные типы только
6 PiotrLoginov
 
16.07.13
12:51
(4) (5) так. а в моем случае ругается почему? повторюсь:  я должен описать явно Тип "ОбщийМодуль" с помощью ОписаниеТипов ?
7 PiotrLoginov
 
16.07.13
12:52
(5) дошло. т.е. ОписаниеТипов тут ни к чему.  а тогда ЧЯДНТ ?
8 Ненавижу 1С
 
гуру
16.07.13
13:01
(3) действительно есть, а какой в нем смысл?
9 PiotrLoginov
 
16.07.13
13:04
(8) так и знал, что кто-то спросит :)  в данном случае видимо прежде чем вернуть объект идет проверка, что этот объект - действительно общий модуль.

Вопрос в том, почему в типовой такая проверка нормальна, а у меня ругается
10 acsent
 
16.07.13
13:05
(8) Посмотри БСП )))
11 acsent
 
16.07.13
13:06
в толстом клиенте, в табло Тип("ОбщийМодуль") отрабатывает на ура
12 PiotrLoginov
 
16.07.13
13:13
(10) Пытался. Если б хватило мозгов, сюда бы не пошел советоваться. Ну используется там ссылка на модуль по его названию в куче мест. Ну и что мне это дает? Не сомневаюсь, что в типовой когда функция возвращает модуль по его названию, проверка на Тип("ОбщийМодуль") отрабатывается на ура. Если это один из стандартных типов, почему у меня-то ругается?

Вот еще в другой функции у меня (тоже вырванной из БСП):

...
       Если ТипДанных = Тип("Булево")
        ИЛИ ТипДанных = Тип("Строка")
        ИЛИ ТипДанных = Тип("Число")
        ИЛИ ТипДанных = Тип("Дата")
        ИЛИ ТипДанных = Тип("Неопределено")
        ИЛИ ТипДанных = Тип("УникальныйИдентификатор")
        ИЛИ ТипДанных = Тип("Null")
        ИЛИ ТипДанных = Тип("Тип")
        ИЛИ ТипДанных = Тип("ХранилищеЗначения")
        ИЛИ ТипДанных = Тип("ОбщийМодуль")
        ИЛИ ТипДанных = Тип("ОбъектМетаданных")
        ИЛИ ТипДанных = Тип("ТипЗначенияXDTO")
        ИЛИ ТипДанных = Тип("ТипОбъектаXDTO")
        ИЛИ ЭтоСсылка(ТипДанных) Тогда
...



Т.е. куча типов упоминается, и все норм кроме Тип("ОбщийМодуль") - опять ругань при проверке. Как будто остальные типы существуют, а этому быть не положено.

Почему-то всегда думал, что перечень возможных типов един и  аксиомен, ан нет...
13 acsent
 
16.07.13
13:14
может у тебя совместимость какая стоит у конфы?
14 acsent
 
16.07.13
13:14
что за проверка кстати?
15 PiotrLoginov
 
16.07.13
13:16
(13) затрудняюсь ответить

(14) просто проверка конфы на ошибки в конфигураторе
16 Ненавижу 1С
 
гуру
16.07.13
13:17
(10) посмотрел - это писец какой-то
17 Ненавижу 1С
 
гуру
16.07.13
13:23
+(16) упал под стол
раздел что нового:
•     Обновлены сведения о валютах Боливар и Замбийская квача в классификаторе валют.
18 PiotrLoginov
 
16.07.13
14:18
(17) :)


...

Поискал все-таки, где объявляется такой тип в типовых - нет такого места.

Порылся в перечне возможных типов данных у себя и в типовой - нет такого типа "ОбщийМодуль", однако в типовой проблема не возникает.

Поигрался с #Если . Бесполезно.

Апаю-с... Может кто-то в теме ?
19 PiotrLoginov
 
16.07.13
15:23
Ап. Надеюсь на подсказки...

... и еще конечно надеюсь, что пойму сабж лучше на этапе тестирования нетленки; тогда возможно отпишусь полнее в отдельной теме.
20 hhhh
 
16.07.13
16:01
(19) ну а всё-таки совместимость? Точно-точно 8.3?
21 PiotrLoginov
 
16.07.13
17:03
(20) вовсе нет, 8.2...  там и проверки нет на версию... или что, этот тип появился в 8.3 ?
22 Serginio1
 
16.07.13
18:01
Ну в 8.3 в толстом клиенте

ТипЗнч(Вычислить("ОбщегоНазначения"))=Тип("ОбщийМодуль")
Датет ответ да
23 PiotrLoginov
 
16.07.13
18:12
(22) см. (11) , т.е. и в 8.2 в типовой работает без проблем.

Присутствие такого Типа в типовой мне ничего не дает. У меня в нетленке нет БСП, только клочок от нее. И в этом клочке в трех местах идет проверка ТипЗнч объекта на Тип("ОбщийМодуль").

И во всех трех случаях проверка ругается.
24 Infsams654
 
16.07.13
18:20
(23) Толстый клиент
Сервис - Табло
Выражение
Тип("ОбщийМодуль")
Значение
Общий модуль

В управляемом приложении, почему то табло нет
25 PiotrLoginov
 
16.07.13
18:25
(24) сегодня позже еще помучу конфигуратор с этой бедой.

кстати, да.  у меня УФ
26 acsent
 
16.07.13
18:27
какие галки при проверке стоят?
27 PiotrLoginov
 
16.07.13
18:34
логическая целостность, поиск некорр ссылок
тонкий, веб-клиент, сервер
расширенная
28 PiotrLoginov
 
16.07.13
18:37
собственно до тестирования-то дело еще не дошло.  проблема пока на уровне проверки в конфигураторе

добавил толстый клиент (управляемое) и толстый клиент (клиент-сервер)

Та же беда. Авось разберусь как начну тестировать. Заодно ума наберусь )
29 PiotrLoginov
 
18.07.13
21:40
Тестирование начато, но пока не до сабжа - идет отладка более серьезных недочетов. Однако, когда выделяю какую-нибудь переменную, содержащую общий модуль, и нажимаю "Вычислить выражение", в окне Выражение вижу, что тип выражения в переменной - ОбщийМодуль. То есть тип такой существует и активно используется. Надо только научиться проверять тип переменной - является ли он типом "ОбщийМодуль".
30 banco
 
18.07.13
21:52
(0) ну платформа предполагает, что ошибочный параметр и что? чем тебе это мешает? давно видел это предупреждение, с 2.1.2 бсп по-моему, просто не заморачиваюсь,  знаю, что код рабочий и все.
31 PiotrLoginov
 
18.07.13
23:46
(30) понял, спасибо за мнение. Конечно, если в итоге окажется, что проверка ошибается, забью на нее. Пока отложил вопрос - не до того.
32 PiotrLoginov
 
19.07.13
03:28
Как бы не так. Проблема все-таки есть - здесь не просто некорректные предупреждения механизма логической проверки.

Вот одно из мест, на которое ругается проверка:

   Если Метаданные.ОбщиеМодули.Найти(Имя) <> Неопределено Тогда
       Модуль = Вычислить(Имя);
   Иначе
       Модуль = Неопределено;
   КонецЕсли;
   
   Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда
       ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
           НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя);
   КонецЕсли;
   
   Возврат Модуль;

К этому приходим, имея название общего модуля в переменнной Имя. Код отрабатывается без толку, возвращая в итоге пустую переменную Модуль с типом значения ОбщийМодуль. Вот так. Буду искать альтернативные способы получения модуля по его названию, ибо функция стандартная, используется часто.
33 banco
 
19.07.13
08:18
(32) если код отрабатывал без толку, то БСП вообще бы не работала. возвращается модуль, а не пустая переменная, потом через этот модуль вызываются функции и процедуры. кстати в 8.3 платформа уже не дает предупреждение на ошибочный параметр.
34 Infsams654
 
19.07.13
08:20
(32) Модуль = Вычислить(Имя); - это как вычислит ", имея название общего модуля в переменнной Имя" ?
35 hhhh
 
19.07.13
09:18
(34) а почему не проверяете, на клиенте, на сервере этот общий модуль и т.д.?
36 Emilio
 
16.08.13
01:05
А вот чем же все-таки все закончилось? М?)