Имя: Пароль:
IT
 
Функция С++ и 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;