|
|
|
Приведение типов в макроязыке 1С | ☑ | ||
|---|---|---|---|---|
|
0
Dergachev
08.12.05
✎
15:32
|
Например после присвоения переменной сотрудник какого типа она будет:
|Сотрудник= ЖурналРасчетов.Запрос.Объект; надо ли ее явно приводить к типу Строка при сравнении? И почему при приведении переменной неопределенного типа к конкретному напр. Число...ее значение "слетает"?Или это все детерминировано ограничениями COM-технологии? |
|||
|
1
skunk
08.12.05
✎
15:33
|
чего 8)))))
|
|||
|
2
КонецЦикла
08.12.05
✎
15:34
|
Дык... переменные уже моно типизировать?
|
|||
|
3
Таня
08.12.05
✎
15:34
|
слова то какие!! умные :)
|
|||
|
4
КонецЦикла
08.12.05
✎
15:36
|
Это тебе не конфеты грызть и чай сосать...
|
|||
|
5
LandCruiser
08.12.05
✎
15:36
|
(1) я шизею. Dergachev, ты попробуй прочитай что написал. как ты думаешь со стороны понятно хоть что-нибудь? Или это все детерминировано ограничениями COM-технологии?
|
|||
|
6
igork1966
08.12.05
✎
15:38
|
(0) Зачем "явно приводить к типу Строка при сравнении"? Или ты думаешь, что принципиально не может быть два сотрудника с одинаковыми ФИО?
Дык огорчу тебя, это вполне вероятно. |
|||
|
7
Dergachev
08.12.05
✎
15:40
|
А что нету своего Страуструппа для 1С-языка...для остальных языков вроде как явно описанно в спецификациях на язык...в том числе и приведение типов ...а такое поведение переменных я могу только объяснить спецификациями на типы в COM-технологии от мелко-мягких..
|
|||
|
8
ZolotarevAA
08.12.05
✎
15:41
|
(0) Много чего непонятного, начиная с заголовка.
|
|||
|
9
igork1966
08.12.05
✎
15:42
|
(7) "|Сотрудник= ЖурналРасчетов.Запрос.Объект; "
Это будет ссылка на объект. Их вполне можно сравнивать. Т.е. две ссылки на один и тот же объект (полученные разными путями) будут равны. |
|||
|
10
КонецЦикла
08.12.05
✎
15:42
|
Дергачев, моно тебя... к Семенычу?
Не обидишься? |
|||
|
11
Dergachev
08.12.05
✎
15:44
|
Я не пойму почему в отладчике показывает не ссылку на объект, а некий ФИО...а к Семенычу всегда пожалуйста....интуиция вещь хорошая, но как же формальные спецификации....особенно при разработке компиляторов того или иного языка..
|
|||
|
12
LandCruiser
08.12.05
✎
15:45
|
(11)еееееееее
|
|||
|
13
КонецЦикла
08.12.05
✎
15:46
|
2(11) Показывает основное представление объекта... в данном случае - наименование
|
|||
|
14
igork1966
08.12.05
✎
15:48
|
(11) А ты хотел чего в отладчие увидеть? Он тебе показывает представление агрегатного объекта.
Попробуй посмотреть в отладчике Запрос.Сотрудник.Код или Запрос.Сотрудник.Наименование удивишься? |
|||
|
15
igork1966
08.12.05
✎
15:49
|
(14)+ Строка(Запрос.Сотрудник) тебе вернет представление объекта,
в данном случае наименование. |
|||
|
16
Dergachev
08.12.05
✎
15:49
|
Ну я хотел удиветь разыменованный указатель, если говорить в терминах классических языков...а ля С....
|
|||
|
17
NS
08.12.05
✎
15:50
|
А где мне найти "макроязык 1С" ?
|
|||
|
18
igork1966
08.12.05
✎
15:52
|
(16) Что собой представляет внутреннее представление ссылки от тебя скрывается, оно тебе по большому счету и ненужно.
Етож тебе не универсальный язык. Тебе о предметной области нужно думать а не над указателями извращаться. ;-) |
|||
|
19
Dergachev
08.12.05
✎
15:52
|
Я думаю есть внутренние спецификации с языка 1с на Visual C++ где все и прописано...
|
|||
|
20
igork1966
08.12.05
✎
15:53
|
(19) А зачем все это нужно в приложеннии к 1С?
Хочешь на языке типа С бухгалтерию писать, ну ну Дункан Маклауд... ;-) |
|||
|
21
Dergachev
08.12.05
✎
15:54
|
ну так да...предметная область она первична...Так получается в данном случае объект ЖурналРасчетов.Запрос.Объект имеет тип основного представления т.е. Наименования?
|
|||
|
22
igork1966
08.12.05
✎
15:55
|
(21) Ты не экране видишь представление. А так это ссылка на объект с его свойствами и методами.
|
|||
|
23
Dergachev
08.12.05
✎
15:58
|
да нет на С или на асме я писать не собираюсь- слишком трудоемко...Но вот мне надо было сравнить элементы двух таблиц значения - у одной Тип Строка, а у другой ссылка вроде как на элемент справочника сотрудник и мне показалось что я сравнивать сразу нельзя надо явно выполнить операцию приведения типов...
|
|||
|
24
КонецЦикла
08.12.05
✎
16:01
|
Это некорректно... обычно
Сравнивай элементы как таковые (ссылки) Элемент1 = Элемент2 |
|||
|
25
Dergachev
08.12.05
✎
16:06
|
так в том то и дело, что я импортирую в Зряпплату dbf-файл, а там поле просто типа строка .записи из файла забрасываются в таблицу значений, но для программного формирования табличной части документов мне нужны ссылки на элемент справочника Сотрудники, а не ФИО типа Строка...вот тут я и не смог себе ответить на вопрос какого типа ссылка на элемент справочника...
|
|||
|
26
Dergachev
08.12.05
✎
16:09
|
И как трактовать такой код например как не явное приведение типов
где переменная Величина вначале имеет так называемый Неопределенный тип- Форма.Величина.НазначитьТип("Число", 15, ТочностьТарифа); |
|||
|
27
igork1966
08.12.05
✎
16:17
|
(26) Это не приведение типов ниразу.
Не такое MyLinkToChar = (char *)LinkToInteger; В "величине" храниться в каком-то виде информация о содержащемся там значении. ИХМО при этом "Форма.Величина.НазначитьТип("Число", 15, ТочностьТарифа);" ты заносишь в "Форма.Величина" информацию о типе. Это никак непохоже на приведение типов. |
|||
|
28
КонецЦикла
08.12.05
✎
16:18
|
2(25) Откуда импортируешь? Свяжись с той программой (чтобы код в 1С или какой другой реквизит содержал id элемента той БД)
Или Спр = СоздатьОбъект("Справочник.Сотрудники"); Спр.НайтиПоНаименованию(ФИО); ТекСотр = Спр.ТекущийЭлемент(); //вот элемент нужный |
|||
|
29
Dergachev
08.12.05
✎
16:20
|
Спасибо программеры за продуктивное обсуждение, Вы правы все можно было сделать без геммороя ...
|
|||
|
30
igork1966
08.12.05
✎
16:21
|
(25) А вот:
Строка = ":"+ВыбСотрудник; Здесь неявное преобразование к типу строка. Можно явно: Строка = ":"+Строка(ВыбСотрудник); или так: Номер = Число(ВыбСотрудник.Код); |
|||
|
31
quest
08.12.05
✎
16:22
|
(26) чего? Эта хрень в принципе тебе не нужна. Это для базы. Что бы знать что записать в id, для
формы чтобы знать какую форму вызвать если ты клинешь в элемент. Найди в php приведение типов и будет тебе счастье в 1С |
|||
|
32
Dergachev
08.12.05
✎
16:27
|
Для Guesta....Например я присваиваю переменной неопределенного типа какое вполне определенное число после примения метода Объекта Документ НазначитьТип, эзначение переменной "слетает"...
|
|||
|
33
Dergachev
08.12.05
✎
16:29
|
Я считаю что жесткая типизация помогает избежать семантических ошибок при написании программ ведь с точки зрения предметной области большинство операций определено над объектами одного типа...
|
|||
|
34
igork1966
08.12.05
✎
16:32
|
(32) Это фича НазначитьТип, ихмо этот метод обнуляет значение в переменной (присваивает пустое значение такого типа).
СтароеЗначение = Форма.Величина; Форма.Величина.НазначитьТип("Число", 15, ТочностьТарифа); Форма.Величина = СтароеЗначение; // или Число(СтароеЗначение) // Можешь явно округлить как тебе треба. ;-) |
|||
|
35
Dergachev
08.12.05
✎
16:36
|
Обнуление переменной можно интерпретировать как побочный эффект выполнения метода НазначитьТип и мягко говоря это feature....выявить это можно только опытным путем?
|
|||
|
36
igork1966
08.12.05
✎
16:43
|
(35) В документации ненаписано, что происходит с значением. Если бы явно написали что происходит преобразование и как, то можно было-бы юзать. Но думаю (преобразование) было бы неоправданной сложностью.
|
|||
|
37
igork1966
08.12.05
✎
16:44
|
(36) + Там ведь не только число может быть, а и ссылки на агрегатные типы.
|
|||
|
38
Dergachev
08.12.05
✎
16:49
|
да ссылку на агрегатный тип трудно преобразовать к другому типу, мягко говоря...и заголовок темы подправили -спасибо модератору..
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |