Имя: Пароль:
1C
 
Приведение типов в макроязыке 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
да ссылку на агрегатный тип трудно преобразовать к другому типу, мягко говоря...и заголовок темы подправили -спасибо модератору..
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.