|
Функция С++ и 1С | ☑ | ||
---|---|---|---|---|
0
Surf Rider
29.08.12
✎
08:19
|
Добрый день
Может кто сталкивался, как код С++ выполнить в 1С? |
|||
1
Wobland
29.08.12
✎
08:20
|
в пятницу приходи, расскажем
|
|||
2
Wobland
29.08.12
✎
08:20
|
есть такая штука - внешние компоненты
|
|||
3
Рэйв
29.08.12
✎
08:21
|
(0) А зачем именно на с++? Чем внутренние методы не устраивают? Вирус пишешь?:-)
|
|||
4
Surf Rider
29.08.12
✎
08:23
|
(3) я встроенный язык 1с плохо знаю, поэтому написал программу в с++, сейчас надо как то к ней обратиться
|
|||
5
andrewks
29.08.12
✎
08:24
|
(4) сделай com-server, обращайся к нему
|
|||
6
rphosts
29.08.12
✎
08:24
|
(4) напиши транслятор с С++ на 1С... заодно и одинэску будешь знать в совершенстве
|
|||
7
Wobland
29.08.12
✎
08:24
|
(4) пиши на встроенном. или компилируй ддлку, но это изврат
|
|||
8
Rie
29.08.12
✎
08:25
|
(4) Изучай встроенный язык 1С. В любом варианте - хоть внешняя компонента, хоть обращение из C++ к 1C по COM/OLE - тебе без него не обойтись.
|
|||
9
andrewks
29.08.12
✎
08:26
|
а что за код-то? printf("Hello World!\n"); ?
|
|||
10
Рэйв
29.08.12
✎
08:26
|
(4)Тут понимаешь какая закавыка....Чтобы обратиться из 1С к коду на с++, надо не только хорошо знать язык, надо еше и код написать в правильном формате с правильным интерфейсом. Так что изучать язык 1С все равно придется
|
|||
11
Рэйв
29.08.12
✎
08:28
|
(9)это ж С :-)
тогда уж cout<<("Hello World!\n") :-) |
|||
12
rphosts
29.08.12
✎
08:31
|
(11) всё-же канонически как в (9)
|
|||
13
Surf Rider
29.08.12
✎
08:31
|
(9) программа вычисляет положение точки относительно объекта
|
|||
14
acsent
29.08.12
✎
08:31
|
dynawrap.dll
|
|||
15
Wobland
29.08.12
✎
08:32
|
(13) я за ВК
|
|||
16
Surf Rider
29.08.12
✎
08:32
|
как я понял надо сперва dll создать
а как к нему обратиться? |
|||
17
Эмбеддер
29.08.12
✎
08:33
|
(13) можно использовать ява-скрипт для тригонометрических функций, остальное есть в 1С
|
|||
18
Wobland
29.08.12
✎
08:35
|
(16) в книге знаний поищи. была статья на тему создания и использования
|
|||
19
Wobland
29.08.12
✎
08:35
|
(17) а синусы с косинусами уже отменили?
|
|||
20
Эмбеддер
29.08.12
✎
08:36
|
(19) в 7-ке их нет
|
|||
21
aleks-id
29.08.12
✎
08:37
|
автор, что за функционал изобрел? очередной велосипед с квадратными колесами?
|
|||
22
Wobland
29.08.12
✎
08:37
|
(20) мерзкая, гадкая, уродская семёрка ;)
|
|||
23
Surf Rider
29.08.12
✎
08:38
|
(21) можно сказать и так))
|
|||
24
0xFFFFFF
29.08.12
✎
08:40
|
(20) 5 минут, 10 строчек - и уже есть.
Писал как то ради прикола... |
|||
25
Surf Rider
29.08.12
✎
08:40
|
рыскал в поисках готового решения для 1с, так ничего и не нашел, решил сделать сам, благо были алгоритмы которые за основу взял
|
|||
26
andrewks
29.08.12
✎
08:40
|
(11) ну, C на C++ замечательно компилируется ;-)
а скобки-то зачем? |
|||
27
0xFFFFFF
29.08.12
✎
08:40
|
(25) что надо то? Чего там в 1С то не хватает?
|
|||
28
dmpl
29.08.12
✎
08:40
|
(0) Обменивайся с программой через файлы. Так будет проще всего.
(17) Да и в 1С можно рядами Тейлора/Маклорена воспользоваться. |
|||
29
Эмбеддер
29.08.12
✎
08:40
|
вдруг пригодится:
Скрипт = создатьобъект("MSScriptControl.ScriptControl"); Скрипт.Language = "JavaScript"; Математика=Скрипт.Eval("Math"); и далее: Математика.pow(2,2) и т.п. |
|||
30
andrewks
29.08.12
✎
08:41
|
(11) и "\n" здесь не прокатит, емнип
|
|||
31
dmpl
29.08.12
✎
08:41
|
(20) А таблицы Брадиса на что?
|
|||
32
0xFFFFFF
29.08.12
✎
08:42
|
(29) нафига?
Ряд Тейлора спасет отца русской демократии. |
|||
33
Surf Rider
29.08.12
✎
08:43
|
(27) положение точки определял, в объекте или нет
|
|||
34
0xFFFFFF
29.08.12
✎
08:43
|
(33) Объект представлен какой то функцией?
|
|||
35
rphosts
29.08.12
✎
08:44
|
(33) сам объект точечный?
|
|||
36
Surf Rider
29.08.12
✎
08:44
|
(34) нет, координатами широты и долготы
|
|||
37
Surf Rider
29.08.12
✎
08:45
|
(35) полигон
|
|||
38
andrewks
29.08.12
✎
08:45
|
(36) в 1с 8 есть необходимые тригонометрические функции. проще переписать на языке 1с
|
|||
39
0xFFFFFF
29.08.12
✎
08:46
|
(36) это точка. А объект - круг? Т.е. попадание точки в какую то окрестность нннада?
|
|||
40
dmpl
29.08.12
✎
08:46
|
(26) Ну не всегда. Приходилось переделывать код C, который ни один компилятор C++ не мог собрать без ошибок... надо было немного подшаманить.
|
|||
41
0xFFFFFF
29.08.12
✎
08:47
|
(38) Для 7.7 тригонометрические функции пишутся на раз.
|
|||
42
Эмбеддер
29.08.12
✎
08:47
|
какой-нибудь картографический софт для 1С у вас используется?
|
|||
43
Surf Rider
29.08.12
✎
08:47
|
объект представлен множеством точек, многоугольник произвольный (невыпуклый)
|
|||
44
rphosts
29.08.12
✎
08:48
|
(37) ну т.е. от угловых точек нужно считать расстояние до этой точки и выбрать меньшее?
система координат декартова? если да то нужен квадратный корень, а он в 1С есть! |
|||
45
Surf Rider
29.08.12
✎
08:48
|
(42) данные в 1с поступают из АТмониторинга
|
|||
46
andrewks
29.08.12
✎
08:49
|
(41) в курсе. но можно и к jscript обратиться. а в 1с8 их даже писать не надо! :)
|
|||
47
0xFFFFFF
29.08.12
✎
08:49
|
(43) Ну так тем более. Каждая пара точек задается уравнением линии у = ах + в. Соответственно попадание точки внутрь - это просто выполнение всех условий по количеству этих линий.
|
|||
48
0xFFFFFF
29.08.12
✎
08:49
|
+(47) не понимаю, в чем проблема сделать это внутри 1С. Зачем геморрой с ВК?
|
|||
49
rphosts
29.08.12
✎
08:50
|
+(44) хотя немного сложнее... нужно будет к каждому отрезку построить нормаль... но и тут тригонометрия нафиг не нужна! чистая арифметика!!!
|
|||
50
Эмбеддер
29.08.12
✎
08:51
|
(48) ну может автор захочет его продавать
|
|||
51
Surf Rider
29.08.12
✎
08:51
|
(47,48) вы описали принадлежность границе многоугольника
я с помощью триангуляции сделал |
|||
52
0xFFFFFF
29.08.12
✎
08:54
|
(51) а что это дает? Быстрее считает что ли?
Так надо проверить, сколько по времени в 1С займет обычный арифметический расчет ну допустим по 1000 вызовов функции. Скорее всего все в доли секунды уложится. |
|||
53
Рэйв
29.08.12
✎
08:58
|
(26)Скобки скопипастились с твоего примера:)
Но с ними прокатит вполне по логике |
|||
54
Surf Rider
29.08.12
✎
09:03
|
(52) я хочу сказать что предложенный вами вариант определяет принадлежность только границе, но если точка лежит внутри, она определится как вне объекта
соль в том что в функции триангуляции я отсеченные треугольники храню в контейнере vector, а список вершин представлен как связанный список и честно я пока не знаю как этот код перевести в 1с, поэтому хочу обратиться к нему в с++ |
|||
55
dmpl
29.08.12
✎
09:11
|
(53) А еще там << endl; нет
(54) Ну так файл на что? Если уж не умеешь работать с COM и не хочешь переписывать код под внешнюю компоненту 1C/OLE-сервер, то это самый простой вариант. Создавай текстовый файл, запускай из 1C программу с параметром, и все. Результат тоже через файл. |
|||
56
0xFFFFFF
29.08.12
✎
09:18
|
(54) нет, неправильно. Если у = ах + в, то да - на границе. А если у<ах+в (у>ах+в) - то и внутри объекта.
|
|||
57
0xFFFFFF
29.08.12
✎
09:22
|
(55) да ну нафик через файл.
|
|||
58
Йохохо
29.08.12
✎
09:22
|
если многоугольник построен и выпуклый, то через векторное произведение и на 1с взлетит
|
|||
59
Surf Rider
29.08.12
✎
09:32
|
(56) так то правильно, но как узнать когда какое условие брать? если например точка лежала ниже прямой, а для следующей прямой выше, как условие другое передать?
(58) многоугольник м.б. невыпуклым |
|||
60
0xFFFFFF
29.08.12
✎
09:35
|
(59) Хороший вопрос, я его себе тоже задал. Но решение точно есть, надо покумекать просто.
|
|||
61
dmpl
29.08.12
✎
10:06
|
(57) Зато нет еретических COMов ;) Даже под Linux заработает ;)
|
|||
62
perkos
29.08.12
✎
12:38
|
(0) а нафик вапще 1с? если пользоватся не умеешь, взял из какой то бд данные посчитал своим скриптом на сях и положил куда надо в бд, 1с тебе не нужна(= или ты в интерфейс пользователей 1с через свой скрипт хочешь закинуть?
|
|||
63
perkos
29.08.12
✎
12:40
|
была тут база простенькая из 10 таблиц на постгрескуль так паренек предлогал впихивать из этой базы данные через яву в таблицы 1с куда надо вместо того чтобы к этим 10 таблицам из 1с обращацо
|
|||
64
perkos
29.08.12
✎
12:42
|
(61) говорят 1с тоже под линух заработала
|
|||
65
Surf Rider
29.08.12
✎
13:11
|
(62) пользователь в 1с должен видеть результат выполнения
|
|||
66
perkos
30.08.12
✎
05:47
|
(65) ну можно прикинуть записывать твое число в таблицу уже отображающуюся в интерфейсе 1с(= помоему легче в 1с немного разобратся хотябы ради интерфейса
|
|||
67
0xFFFFFF
30.08.12
✎
06:28
|
(63) нда, когда этим перепрограммистам говоришь, что нельзя данные в таблицы 1С писать, только и слышны неоправданно тупые усмешки... Типо, как это - я настолько крут, что смогу записать что угодно и куда угодно...
|
|||
68
perkos
30.08.12
✎
07:17
|
(67) хм а почему нельзя?
|
|||
69
dmpl
30.08.12
✎
08:12
|
(68) Потому что лицензионное соглашение читать надо. Как минимум - потому что не будет работать в файловом варианте.
|
|||
70
ЧеловекДуши
30.08.12
✎
08:25
|
(69)А это то причем? Я про лицензионное соглашение :)
...А насчет того, что у 1С свой формат ДБФ (убогий), это точно... |
|||
71
ЧеловекДуши
30.08.12
✎
08:27
|
+(0)Автор извращенец, и (аль не программист), столько постов, а он все за одно, как бы все сделать так и что бы сразу и без переписки.
Такое чувство, что автор не знает толком, что вообще написано на С++ :) И как работают эти формулы ;) |
|||
72
manyak
30.08.12
✎
08:29
|
http://habrahabr.ru/post/143277/
осталось перевести на 1с |
|||
73
manyak
30.08.12
✎
08:35
|
Private Function PointInPolygon(ByVal X As Single, ByVal Y As Single) As Boolean
Dim n1 As Long, n2 As Long, f As Boolean For n1 = 0 To vCnt - 1 n2 = (n1 + 1) Mod vCnt If (Y > V(n1).Y) Xor (Y > V(n2).Y) Then If X > V(n1).X + (V(n2).X - V(n1).X) * (Y - V(n1).Y) / (V(n2).Y - V(n1).Y) Then f = Not f End If End If Next n1 PointInPolygon = f End Function |
|||
74
manyak
30.08.12
✎
08:37
|
его загони в MSScriptControl.ScriptControl
|
|||
75
manyak
30.08.12
✎
08:47
|
V() - массив векторов (вершин полигона), vCnt - кол-во вершин
|
|||
76
Surf Rider
30.08.12
✎
08:57
|
(71) что написано и как работает я знаю, проблема в переводе кода на 1с, некоторые функции перевел, остальные затруднения вызывают
в частности как организовать связанный список на 1с |
|||
77
Rie
30.08.12
✎
08:58
|
(76) Что ты имеешь в виду под "связанным списком"? В 1С есть объект СписокЗначений. Есть Массив. Не подойдёт?
|
|||
78
Surf Rider
30.08.12
✎
09:01
|
(76) линейный двунаправленный список
|
|||
79
Surf Rider
30.08.12
✎
09:04
|
выше пост для (77) был
да я как раз читаю про них сейчас |
|||
80
Rie
30.08.12
✎
09:05
|
(78) Чем Массив не устраивает?
Но если большой извращенец - создай Структуру с полями Левый, Правый и Значение. |
|||
81
dmpl
30.08.12
✎
09:36
|
(78) И какую особенность связного списка ты реально используешь в данном случае?
|
|||
82
perkos
30.08.12
✎
12:22
|
(81) особенность копипаста(= он хочет использовать и нереальную производительность наверняка((=
|
|||
83
Adept
30.08.12
✎
12:32
|
(11) Нет уж тогда
cout<< "Hello World!" <<endl; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |