|
Работа между базами 1С через COM | ☑ | ||
---|---|---|---|---|
0
Raff86rus
28.08.20
✎
17:36
|
Исходные данные:
1) БД Бухгалтерия предприятия, редакция 3.0. 2) БД Документооборот 8 КОРП, редакция 1.4. Режим работы БД: клиент-сервер. Обе базы на одном серваке. Задача: в БД Бухгалтерия есть документ "Уведомление" с печатной формой. На форме данного документа прикрутил команду и прописываю действие в модуле формы по заполнению табдока данными из текущего документа и записи его в формате xls. Через com-соединение в базе Документооборот создаю документ "Исходящий документ", к которому надо прикрепить записанный файл xls. Как это лучше сделать, какие варианты? Условие: работа только через COM. |
|||
1
Raff86rus
28.08.20
✎
17:39
|
И да, все это надо сделать только на стороне БД Бухгалтерия.
|
|||
2
hhhh
28.08.20
✎
17:47
|
(1) в чем конкретно проблема? Прикрепить файл к документу?
|
|||
3
Raff86rus
28.08.20
✎
17:47
|
Ошибся, не документ "Исходящий документ" а элемент справочника "Исходящие документы". Но не суть в данном случае думаю.
|
|||
4
Raff86rus
28.08.20
✎
17:50
|
Проблема 1 - передача на сервер xls, 2 - в программном прикреплении xls к элементу справочника. И все это на стороне БП 3 и через COM
. |
|||
5
hhhh
28.08.20
✎
17:54
|
(4) если через com, то это на стороне документооборота. Поэтому на сервер ничего передавать не надо.
|
|||
6
fisher
28.08.20
✎
18:05
|
xls в ДвоичныеДанные, их передаешь сериализованными через ком, на той стороне десериализуешь.
Я так через ком табличные документы гонял. Не помню уже в чем был затык, но сериализовывать приходилось явно.
|
|||
7
Mikhail Volkov
28.08.20
✎
19:59
|
А если базы работают на разных версиях платформы 8.3, возникают проблемы обмена через COM. Это временно, или как?
|
|||
8
ДенисЧ
28.08.20
✎
20:19
|
(7) Да, временно. До тех пор, пока ты не сравняешь версии
|
|||
9
Провинциальный 1сник
28.08.20
✎
20:43
|
(6) Через ком лучше всё сериализовывать, ибо там точность чисел теряется, потому что через ком передается плавающая точка, а в 1с числа хранятся иначе. И чтобы не терять копейки, лучше сериализовывать.
|
|||
10
d4rkmesa
28.08.20
✎
21:32
|
(4) Через com строки можно гонять. Не пробовал сериализовывать xls, думаю как минимум можно через двоичные данные и преобразование в base64 пропихивать xls-ки, преобразуя в строки.
|
|||
11
Mikhail Volkov
29.08.20
✎
08:08
|
(8) У нас Альфа-Авто, которая не может работать на последних версиях платформы нужных для ERP/КА2. Требует переходить на новую редакцию. Да, и для 6 редакции требуется 32-х разрядная клиентская часть. Просто удивительно, через COM 1С может обмениваться с другими приложениями не 1С. Может с разными платформами, например 8.3 с 8.2 и 7.7. Только с разными платформами 8.3 беда!? Что это, временно, в 1С забыли про это? Или какая-то основательная причина?
|
|||
12
ДенисЧ
29.08.20
✎
08:31
|
(11) Потому что в 8.2 один гуйд для ком-контрола, а в 8.3 - другой. Но в пределах одной второй цифры он одинаковый. Поэтому нельзя.
А то, что альфа не хочет работать на 8.3 - это проблема альфы. И программиста, который оленится написать обмен через хттп или файлы. |
|||
13
ДенисЧ
29.08.20
✎
08:31
|
Ибо ограничение "только сом, и ничего больше" - это явный признак ограниченности не платформы, а погроммитса.
|
|||
14
Lexandr
29.08.20
✎
20:34
|
Год назад смастрячил выгрузку документов из БП3 в управленческую базу, но использую КД2(там такие вещи легко и просто). Работает через ком (ну как вам и надо) каждый день несколько раз, за год ни одного глюка.
|
|||
15
sdf
29.08.20
✎
20:56
|
(0) эту задачу нужно решать через библиотеку интеграции док (БИД). если это бух корп - она уже там есть. проф - нужно интегрировать.
и работать с файлами/документами ДОК через его API (веб-сервисы) |
|||
16
Mikhail Volkov
30.08.20
✎
08:40
|
(12) На практике приходится вести обмены с чужими базами, у которых не поднят Web-сервис. Возможен только COM.
|
|||
17
Mikhail Volkov
31.08.20
✎
09:05
|
(8) > До тех пор, пока ты не сравняешь версии
Наверное разработчики 1С также думают... |
|||
18
Mikhail Volkov
01.09.20
✎
10:14
|
(12) Вроде дело не в GUID-ах, при подключении по COM запускается именно зарегистрированная версия утилитой администрирования серверов. Причем неправильно запускается версия клиентской части, а серверной - правильно: https://i.ibb.co/pdrH9Wy/COM.jpg. Вроде как недоработка 1С!? Пред запуском COM или OLE-соединения конечно можно сменить зарегистрированную версию (например, сменой значения в регистре Windows). Но это доступно только для пользователей с административными правами.
|
|||
19
Mikhail Volkov
01.09.20
✎
12:30
|
(18) > Вроде как недоработка 1С!?
Вопрос: будет ли она исправлена 1С? |
|||
20
fisher
01.09.20
✎
12:50
|
Это виндовая фича, которую 1С лень обходить. Так как для обхода придется версионировать ком-объекты по именам.
Будет ли она "исправлена" 1С? Очень сомневаюсь. Этой "врожденной травме" столько же лет, сколько и 1С. |
|||
21
fisher
01.09.20
✎
12:55
|
Обычно это никого не парит, так как большинству не проблема работать на одной версии платформы, благо в конфигурациях работает режим совместимости.
|
|||
22
VladZ
01.09.20
✎
14:12
|
(0) В топку COM! Переходи на веб-сервисы.
|
|||
23
Mikhail Volkov
01.09.20
✎
16:09
|
(22) См. (16)
(20) Вроде для COM-соединения есть пути обхода этой "недоработки": http://catalog.mista.ru/public/685924/, http://catalog.mista.ru/public/610960/ (не проверял). А для OLE-соединения не нашел ничего подобного? |
|||
24
fisher
01.09.20
✎
17:09
|
(23) Ну, это вручную типа регистрировать разные версии под разными именами и в коде обращаться по разным именам. Такой себе костыль. Но как вариант, если положение безвыходное.
|
|||
25
Mikhail Volkov
01.09.20
✎
17:21
|
(24) Для OLE-соединения существует подобное? Плохо искал?
|
|||
26
Raff86rus
02.09.20
✎
10:27
|
Все получилось, всем спасибо, в частности (6). Пришлось изрядно покапаться в Документообороте. Веб-сервисы и http использую регулярно и тут дело не в лени или ограниченности знаний и навыков. Тут дело в ситуации, когда клиенту надо через com и точка. Ole технологию не было причин использовать, так как интерфейсную часть прогружать не нужно было. Решил при помощи передачи сериализованного заполненного табличного документа из бухгалтерии через com в документооборот. А там уже десериализовав и сохранив во временное хранилище обработал и прикрепил к созданному программно новому элементу справочника Исходящий документ. После чего программно запустил комплексный процесс используя шаблон.
|
|||
27
Mikhail Volkov
06.09.20
✎
15:03
|
В процессе обмена можно сходу определить какое у меня установлено соединение: OLE или COM? А то при COM некоторые функции стали недоступны, например, СтрокаСоединенияИнформационнойБазы(). Ну или COM-объекта определить с каким сервером (его порты), или базой установлено соединение?
|
|||
28
Mikhail Volkov
07.09.20
✎
13:09
|
+ (27) Пока написал такую функцию:
Функция ПодключенаВысокаяВерсия() Экспорт Если ОбъектКА <> Неопределено Тогда Попытка Возврат Найти(ComОбъект.СтрокаСоединенияИнформационнойБазы(), ":1641") > 0; Исключение Возврат Истина; КонецПопытки; КонецЕсли; Возврат Ложь; КонецФункции // ПодключенаВысокаяВерсия() Но дальше: Метод объекта не обнаружен (NewObject) Запрос = ComОбъект.NewObject("Запрос"); Для COM-соединения и NewObject недоступен? Или кэш почистить? COM соединение NewObject Запрос в другой базе |
|||
29
Aleksey
07.09.20
✎
13:12
|
У кома и Оле по разному доступ к свойствам
|
|||
30
Mikhail Volkov
07.09.20
✎
13:34
|
(29) И как переписать запрос к другой базе в случае Com-соединения? Вместо:
Запрос = ComОбъект.NewObject("Запрос"); Запрос.Текст = "ВЫБРАТЬ |
|||
31
Aleksey
07.09.20
✎
14:09
|
ComОбъект это что?
|
|||
32
Mikhail Volkov
07.09.20
✎
14:32
|
(31) сейчас Новый COMОбъект("V83.COMConnector"), было (когда работало на OLE) Новый COMОбъект("V83.Application").
|
|||
33
Галахад
гуру
07.09.20
✎
14:45
|
||||
34
Aleksey
07.09.20
✎
15:22
|
(32) там разница в том что в одном случае работаешь через соединение, а в другом через подключение
|
|||
35
Mikhail Volkov
07.09.20
✎
15:24
|
(33) Не увидел разницы между OLE и COM в отношении NewObject?
|
|||
36
mikecool
07.09.20
✎
15:29
|
(11) странно, у нас АА 4.1 обгоняет ЕРП )) уже на 8.3.17 работает
|
|||
37
Mikhail Volkov
07.09.20
✎
15:32
|
(34) Какая разница как переменную назвал: Подключение, Соединение, или ComОбъект?
(36) Не, АА 4.1 выше 8.3.10 не работает. Причем клиентская часть только 32-разрядная. |
|||
38
mikecool
07.09.20
✎
15:34
|
(37) http://hkar.ru/12MEb
|
|||
39
mikecool
07.09.20
✎
15:35
|
+38 а мы работаем и не знаем об ограничениях оО
|
|||
40
Mikhail Volkov
07.09.20
✎
15:41
|
(38) Это (37) рекомендация Раруса, выше не пробовал. Пробовал ставить платформу полностью х64 - торговое оборудование не работает.
|
|||
41
Mikhail Volkov
07.09.20
✎
17:09
|
(34) Извини, сразу не заметил разницу: Подключение = Соединение.Connect(СтрокаСоединения);
Вернемся к функции определяющей какое у меня установлено соединение: OLE или COM. Есть что покомпактней чем (28)? |
|||
42
Mikhail Volkov
08.09.20
✎
08:04
|
+ Хм, и ComОбъект.СтрокаСоединенияИнформационнойБазы() заработала для Com-соединения...
|
|||
43
Mikhail Volkov
15.09.20
✎
09:22
|
(25) Вроде нашел как открыть объект в другой базе по ссылке, найденной по Com-соединению: http://catalog.mista.ru/public/1042208/, вроде работает. Но для первого открытия другой базы наверное надо в параметрах прописать имя пользователя и его пароль (при 1С-аутентификации). Как-то можно указать только имена сервера и базы, а при 1-м открытии базы запрашивался пользователь и пароль (как обычно)?
|
|||
44
Mikhail Volkov
15.09.20
✎
11:41
|
Странно, у себя создал ярлык запуска 1С с "C:\Program Files\1cv8\common\1cestart.exe" enterprise /S "ИмяСервера\ИмяБазы", запускается база именно эта база с запросом пользователя и пароля. И в обработке (43) в параметрах ИмяСервера\ИмяБазы вроде прописано.
А можно программно определить открыта ли нужная база? |
|||
45
Mikhail Volkov
15.09.20
✎
13:57
|
(44) + этот вопрос уже не по теме, создал новую Программно определить открыта ли нужная база для пользователя?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |