Имя: Пароль:
1C
 
Не проходит COM соединение с базой
0 zenon46
 
04.09.25
09:50
Господа, не получается соединиться с базой 7.7 из-под Сервера 1С.
Вкратце - написал внешнюю обработку по получению нужных данных из базы 7.7 в базу на УФ, на файловом режиме все оттестировал - все работает как нужно и в ручном режим и в регламентном задании.
Перенес все на серверную базу 8, ну и ест-но вот тут отвал
Попытка
  V77 = Новый COMОбъект("V77.Application");
		ЗаписьЖурналаРегистрации("Подключение к базе 7.7", УровеньЖурналаРегистрации.Информация,,,"Выполнено", РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная);		
Исключение
ЗаписьЖурналаРегистрации("Подключение к базе 7.7", УровеньЖурналаРегистрации.Ошибка,,,"НЕ выполнено", РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная);
		Возврат;
	КонецПопытки;

Сервер 1С предприятия по дефолту крутится под пользователем USR1CV8 - понимаю что для этого пользователя не создается COMОбъект("V77.Application");
Собственно в этом и вопрос как заставить?
Думал на сервере тупо залогиниться интерактивно под пользователем USR1CV8 и запустить 7.7 для регистрации - а нет его в списке выбора для интерактивного входа.
1 Волшебник
 
04.09.25
09:51
7.7 на сервере установлена?
2 zenon46
 
04.09.25
09:56
(1) скопирована и запущена под Администратором.
Собственно точно так же, как и на ПК, на котором я тестировал файловый вариант работы.
3 Волшебник
 
04.09.25
09:56
(2) ну так может класс не зарегистрирован?

regsrv32 ...\bin\comcntr.dll
и вдогонку ещё: V7plus.dll, v7chart.dll, zlibeng.dll
4 arsik
 
гуру
04.09.25
09:58
(0) А погуглить не пробовали? Первая ссылка.
https://forum.infostart.ru/forum86/topic77413/
5 arsik
 
гуру
04.09.25
09:58
(3) Там в другом проблема. В (4) в топике все расписано
6 zenon46
 
04.09.25
10:07
(3) это все зарегистрировано
7 Garykom
 
гуру
04.09.25
10:21
хехе
в свое время намучавшись с этим наваял микросервис на Go
который базу 1С 7.7 через OLE превращает в http-сервис
с которой можно удобно работать по сети, тупо передавая кусок кода (на языке 1С77) для выполнения и получая результат

т.е. из 1С 8 не надо никаких Новый COMОбъект, достаточно Новый HTTPСоединение
8 Garykom
 
гуру
04.09.25
10:20
(7)+ исполняемый код передается в 1С 7.7 через обработку-шаблон с #ЗагрузитьИзФайла <ИмяФайла>
9 zenon46
 
04.09.25
10:23
(7) Ну хотелось бы "заставить" работать без таких вот выкрутасов.
Попробовал сейчас в файловом режим на этом же сервере, на котором стоит сервер 1С Пердприятия - запуститься и подключиться к 7.7 - все подключилось, запустилось и отработало как нужно.
Вопрос может и дурацкий, но все же, а если агент сервера переключить с пользователя USR1CV8 - на запуск системной службой ?
10 arsik
 
гуру
04.09.25
10:36
(7) (8) Мы знаем что ты извращенец, но не до такой же степени.
11 Garykom
 
гуру
04.09.25
10:33
(9) Учетку, от которой пашет сервер 1С. Надо авторизоваться-войти под ней в интерактивном режиме и от админа (с админскими правами) подключиться к 1С по OLE.
Далее будет и в неинтерактивном работать, но с глюками иногда.

Если учетка неправильная — сделать правильную для сервера 1С, возможно, даже доменную, а не тупо локальную.
12 Garykom
 
гуру
04.09.25
10:26
(10) зато удобно
там просто 1С 7.7 в виртуалке крутилась под древней виндой
а 8-ка была понятно на другом под современной
и как то совсем не хотелось шаманить с бубном
13 zenon46
 
04.09.25
10:27
(11) учетка дефолтная созданная при установке сервера - я пытался сделать выход и вход, но система предлагает только Гостя и Администратора...
14 Garykom
 
гуру
04.09.25
10:30
(13) так и я про что
зайти в управление юзерами и для учетки USR1CV8 разрешить взаимодействие с рабочим столом и интерактивный вход
15 Garykom
 
гуру
04.09.25
10:31
(14)+ не забыть пароль поставить для безопасности
16 zenon46
 
04.09.25
10:47
(14) я так понимаю, отсюда его надо убрать ?
А вот про "разрешить взаимодействие с рабочим столом" - не нашел
Залогинился, пробую.
17 Garykom
 
гуру
04.09.25
10:51
(16) это я перепутал про взаимодействие, это когда по расписанию скрипт/прогу запускаешь, которая с ole работает
18 zenon46
 
04.09.25
10:59
(17) не помогло, к сожалению.
Что сделал :
1. Залогинился под USR1CV8
2. Запустил 7.7 от имени администратора - зашел в базу
3. Запустил 7.7 от имени под которым залогинился
4. Запустил 8 от имени администратора - зашел в базу попробовал обмен - не пошел
5. Запустил 8 от имени под которым залогинился - зашел в базу попробовал обмен - не пошел
19 p-soft
 
04.09.25
11:02
(12) а я удаленное резервирование так делал: хттп сервис на дельфях лез в базу скл семерки, читал и писал туда данные.
20 Garykom
 
гуру
04.09.25
11:05
(19) слишком ограниченно
мне надо было что угодно и удобно с базой 1С 7.7 делать
делать на самом языке 1С как раз удобно и похоже на COM/OLE вышло
хотя отличие что вместо синхронно по одной команде разом кусок кода отправляется с данными и забираются данные-результат
21 Garykom
 
гуру
04.09.25
11:07
(18) regsrv32 сделана для 77?
там же из одной 77 к другой 77 работает?
22 p-soft
 
04.09.25
11:09
(20) задачи с обменом я решил другим способом - сделал свой урбд с хмл и версионированием. а тут надо было с баз филиалов резервы делать на товар ходовой, все секунды решали
23 zenon46
 
04.09.25
11:09
(21) а что регать то для 7.7 если я ее под админином запустил у USR1CV8 ?

там же из одной 77 к другой 77 работает? - не совсем понял ?
24 Garykom
 
гуру
04.09.25
11:24
(22) согласен, у тебя четкая задачка

у меня же была задача поднять аналог http-сервиса в 1C 7.7
потом уже понял, что код обработки запросов можно не хранить в 7.7, а тупо передавать для выполнения
25 Garykom
 
гуру
04.09.25
11:14
(23) >там же из одной 77 к другой 77 работает? - не совсем понял ?

V7 = СоздатьОбъект("V77.Application") из 77
внешнюю обработку накидай, причем можно к той же базе подключаться, в которой работаешь, или создай пустую
26 Garykom
 
гуру
04.09.25
11:24
и да разницу
V77.Application
77S.Application
и т.д. понимаешь?

надо подключаться именно к тому компоненту, который используется
27 zenon46
 
04.09.25
11:19
(25) сделал в 7.7 внешнюю обработку

    Попытка
        V7 = СоздатьОбъект("V77.Application");
        Сообщить("Подключились к 1С 7.7");
    Исключение
        Сообщить("Не подключились к 7.7");
        Возврат;
    КонецПопытки;

И к V77s - тоже подключился

Результат Подключились к 1С 7.7
28 zenon46
 
04.09.25
11:33
И даже вызвал ту функцию из глобальника, которая для 8-ки готовит данные..получается что из 7.7 в 7.7 работает
И да, все это делал под пользователем USR1CV8
29 zenon46
 
04.09.25
12:31
Попробовал в файловом варианте из 8-ки соединиться с 7.7 и получить данные - предварительно локально залогинившись на сервере под USR1CV8 - так же все сработало...куда копать не понятно.
30 Сергиус
 
04.09.25
14:27
(0)А сам текст ошибки какой?
31 zenon46
 
04.09.25
14:28
Дополняю, с COM объектом вроде как разобрался, хотя бы уже
COM объект создается :  
V77 = Новый COMОбъект("V77.Application");

Но появилась новая ошибка, падает вот на этой строке :
V77.Initialize(V77.RMTrade,Стр,"NO_SPLASH_SHOW")
32 skafandr
 
04.09.25
14:46
(31)
Проверьте строку подключения Стр


Вот из рабочего

    V7="";
    V7=Новый COMОбъект("V77.Application");
    
    ПутьКБазе="\\Server\Baza7\";
    Пользователь="hihi";
    Пароль="haha";  
    Попытка  
        СтрокаПодключения = "/d"+СокрЛП(ПутьКБазе)+" /N"+СокрЛП(Пользователь)+" /P"+СокрЛП(Пароль)+" """;
        СтрокаПодключения = СтрокаПодключения + ";";
        ОткрытаСемь=V7.Initialize(V7.RMTrade,СтрокаПодключения,"NO_SPLASH_SHOW");
            
        Если ОткрытаСемь Тогда
            ЕстьПодключение = Истина;
            Предупреждение("Подцепились!");
        Иначе
            ЕстьПодключение = Ложь;
        КонецЕсли;    
    Исключение
        ЕстьПодключение = Ложь;
    КонецПопытки;
33 zenon46
 
04.09.25
14:47
(32) ну эта строка подключения работает в обычном файловом режиме без проблем.
34 arsik
 
гуру
04.09.25
15:10
(31) Тебя постоянно нужно за язык тянуть? Ошибка то какая?
35 zenon46
 
04.09.25
15:12
(34) Ошибка при вызове метода контекста (Initialize)
{ВнешняяОбработка.ЗагурзкаНоменклатурыИЗ77.Форма.Форма.Форма(268)}:Открыта = V77.Initialize(V77.RMTrade,Стр,"NO_SPLASH_SHOW");
{ВнешняяОбработка.ЗагурзкаНоменклатурыИЗ77.Форма.Форма.Форма(281)}:ПодключениеНаСервере();

[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
Неизвестная ошибка
[ОшибкаИспользованияВстроенногоЯзыка]
36 Волшебник
 
04.09.25
15:21
(35) это всё от небрежности: ЗагурзкаНоменклатурыИЗ77
37 Garykom
 
гуру
04.09.25
15:34
Может уже возьмешь мой изврат (7)?
Я даже откопал и на гитхаб закинул
https://github.com/Garykom/http1C77

Используется вот так
&НаСервере
Функция ВыполнитьЗапрос(КодНаВыполнение, КолонкиРезультата)
	
	База = "\\Server1c77\Bases1C\BaseSQL\";
	Пользователь = "Администратор";
	Пароль = "";
	
	Соединение = Новый HTTPСоединение("192.168.1.11",8090,,,,,);
	
	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Base", СтрокаВBase64(База));
	Заголовки.Вставить("User", СтрокаВBase64(Пользователь));
	Заголовки.Вставить("Password", СтрокаВBase64(Пароль));
	
	Запрос = Новый HTTPЗапрос("/eval", Заголовки);
	Запрос.УстановитьТелоИзСтроки(""+КодНаВыполнение, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
	
	Ответ = Соединение.ОтправитьДляОбработки(Запрос);
	ТекстОтвета = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
	
	Таблица = СтрокуВТаблицу(ТекстОтвета, КолонкиРезультата);
	
	Возврат Таблица;
	
КонецФункции
38 zenon46
 
04.09.25
15:39
Заметил что когда 1С выдает ошибку по V77.Initialize(V77.RMTrade,Стр,"NO_SPLASH_SHOW");

В системном журнале появляется ошибка.

Имя сбойного приложения: 1cv7s.exe, версия: 7.70.0.27, метка времени: 0x4573fcd8
Имя сбойного модуля: Frame.dll, версия: 7.70.0.14, метка времени: 0x3e9e540a
39 Garykom
 
гуру
04.09.25
15:42
(37)+ Фактически передается строка с кодом 1С 77
В ответ тоже получается строка текста с результатом
Для удобства получения данных я строку результата парсю в таблицу, для передачи использовал формат wiki:TSV

Туда в 1С 77 данные можно передавать прямо в коде, кодируя их как угодно
Например так же строку и кодом же парсишь

Выглядит со стороны 1С 8 примерно так
&НаСервере
Процедура ЗагрузитьКонтрагентыНаСервере()
	
	КодНаВыполнение = "
	|
	|лтзКонтрагенты = СоздатьОбъект(""ТаблицаЗначений"");
	|лтзКонтрагенты.НоваяКолонка(""Контрагент"");
	|
	|лдокПлатежка = СоздатьОбъект(""Документ.Платежка"");
	|
	|ДатаС = '01.01.2017';
	|ДатаПо = РабочаяДата();
	|
	|лдокПлатежка.ВыбратьДокументы(ДатаС, ДатаПо);
	|Пока лдокПлатежка.ПолучитьДокумент() = 1 Цикл
	|	Если лдокПлатежка.Проведен()<>1 Тогда
	|		Продолжить;
	|	КонецЕсли;
	|	лтзКонтрагенты.НоваяСтрока();
	|	лтзКонтрагенты.Контрагент = лдокПлатежка.Получатель;
	|КонецЦикла;
	|
	|лдокПриходная = СоздатьОбъект(""Документ.Приходная"");
	|лдокПриходная.ВыбратьДокументы(ДатаС, ДатаПо);
	|Пока лдокПриходная.ПолучитьДокумент() = 1 Цикл
	|	Если лдокПриходная.Проведен()<>1 Тогда
	|		Продолжить;
	|	КонецЕсли;
	|	лтзКонтрагенты.НоваяСтрока();
	|	лтзКонтрагенты.Контрагент = лдокПриходная.Поставщик;
	|КонецЦикла;
	|
	|лтзКонтрагенты.Свернуть(""Контрагент"","""");
	|
	|КоличествоКонтрагентов = лтзКонтрагенты.КоличествоСтрок();
	|лтзКонтрагенты.ВыбратьСтроки();
	|Пока лтзКонтрагенты.ПолучитьСтроку() = 1 Цикл
	|	Контрагент = лтзКонтрагенты.Контрагент;
	|   Поле(Контрагент.ИНН);
	|   Поле(Контрагент.КПП);
	|   Поле(Контрагент.Наименование);
	|   Поле(Контрагент.ЮрЛицо);
	|   Поле(Контрагент.ОсновнойСчет);
	|   Поле(Контрагент.Банк);
	|   Поле(Контрагент.БИК);
	|   Поле(Контрагент.КорСчет);
	|   Поле(Контрагент.ЮрАдрес);
	|   Поле(Контрагент.ФактАдрес);
	|   Поле(Контрагент.Телефоны);
	|   Поле(Контрагент.ДоговорНомер);
	|
	|	ДоговорДата = Контрагент.ДоговорДата;
	|	СтрокаГод = Формат(ДатаГод(ДоговорДата),""Ч(0)4"");
	|	СтрокаМесяц = Формат(ДатаМесяц(ДоговорДата),""Ч(0)2"");
	|	СтрокаЧисло = Формат(ДатаЧисло(ДоговорДата),""Ч(0)2"");
	|	ДоговорДата = """"+СтрокаГод+""-""+СтрокаМесяц+""-""+СтрокаЧисло;
	|   Поле(ДоговорДата);
	|
	|   Ввод();
	|КонецЦикла;
	|
	|";
	
	Колонки = "ИНН,КПП,Наименование,ЮрЛицо,ОсновнойСчет,Банк,БИК,КорСчет,ЮрАдрес,ФактАдрес,Телефоны,ДоговорНомер,ДоговорДата";
	Таблица = ВыполнитьЗапрос(КодНаВыполнение, Колонки);
	Для Каждого ТекСтр Из Таблица Цикл
		Сообщить("Загрузка "+ТекСтр.ИНН+" "+ТекСтр.Наименование+" "+ТекСтр.ДоговорДата);
		Элемент = СтруктураИзСтрокиТЗ(ТекСтр);
		ЗагрузитьКонтрагент(Элемент);
	КонецЦикла;
	
КонецПроцедуры
40 Garykom
 
гуру
04.09.25
15:45
(38) попробуй уже с S
V77 = Новый COMОбъект("V77S.Application");
41 zenon46
 
04.09.25
15:46
(40) уже пробовал )
42 Garykom
 
гуру
04.09.25
15:51
(41) Ну тогда хрен его знает почему у тебя из сервера 1С8 не хочет по OLE к 1С77
Вполне возможно проблемы (глюки) с платформой 1С8

Попробуй перезагрузить сервак ))
43 zenon46
 
04.09.25
15:55
(42) только что перезапустил полностью сервер.
Пользователя USR1CV8 - включил в группу администраторы, все равно :

Имя сбойного приложения: 1cv7s.exe, версия: 7.70.0.27, метка времени: 0x4573fcd8
Имя сбойного модуля: Frame.dll, версия: 7.70.0.14, метка времени: 0x3e9e540a
44 arsik
 
гуру
04.09.25
16:05
(43) Ой ну переведи уже в клиентский контекст работу с ком соединением.
45 Garykom
 
гуру
04.09.25
16:10
(44) Есть подозрение что они хотят в регламентном/фоновом
46 zenon46
 
04.09.25
16:12
(45) именно так
47 zenon46
 
04.09.25
16:23
Так сказать уже начал методом различных проб :
попробовал вот так V77.Initialize(V77.RMTrade,"","NO_SPLASH_SHOW");

Без указания строки подключения, процесс 7.7 появляется, а вот окошка для выбора пользователя и указания пути к базе нет...

А вот если такой же финт провернуть на файловой базе - окошко появляется...
48 arsik
 
гуру
04.09.25
16:26
(47) Под USR1CV8 добавь в список баз 77 нужную базу.
49 zenon46
 
04.09.25
16:31
(48) я уже логинился интерактивно под USR1CV8 и прописал нужную базу и даже запускал
50 Garykom
 
гуру
04.09.25
16:37
(48) У него прикол что 7.7->7.7 пашет
А 8.3 (НаСервере)->7.7 нет
51 Garykom
 
гуру
04.09.25
16:44
Чтобы исключить сервер винды, права и прочее
Попробуй коннектнуться из 1С8 &НаСервере к 1С77 через vbscript или powershell
52 zenon46
 
04.09.25
16:47
(51) через vbscript или powershell - не умею (
53 Garykom
 
гуру
04.09.25
16:48
(51)+ https://infostart.ru/1c/tools/285771/
Set v77 = CreateObject("V77.Application")
v77.Initialize v77.RMTrade, "/D""E:\1С77Тестовая\""", "NO_SPLASH_SHOW"
v77.OpenForm "Report", "", "c:\Регламент\Регламент.ert"
54 zenon46
 
04.09.25
16:58
Наткнулся на такую же проблему com объект V77.Application...похоже у проблемы нет решения, на одной системе работает на другой нет.
55 Garykom
 
гуру
04.09.25
17:01
(54) проверь уже через vbscript
если работает - проблема в серверной платформе 1С 8
56 zenon46
 
04.09.25
17:01
(55) честно говоря, я нифига не понял, как оно должно работать с vbs скриптами никогда не работал.
57 Garykom
 
гуру
04.09.25
17:05
(56) эмм создаешь файлик .vbs с текстом (53)
правишь как надо пути и прочее
тупо запускаешь сначала вручную для проверки
а затем из 1С
58 arsik
 
гуру
04.09.25
17:05
59 zenon46
 
04.09.25
17:09
(57) значит правильно догадался, сделал запустил - пароль в VBS не вводил, ввел пароль - запустился процесс 1С, отработал и закрылся, самого окна предприятия не появлялось.
60 Garykom
 
гуру
04.09.25
17:10
(58) это очень плохой способ от системной учетной записи запускать сервер 1С
имхо должен быть аналогичный вариант "Разрешить взаимодействие с рабочим столом" и для конкретной учетки
61 zenon46
 
04.09.25
17:10
(59) читал - делал - тоже самое
62 zenon46
 
04.09.25
17:21
(57) в 8-ке сделал - повисла

COMОбъект = Новый COMОбъект("WScript.Shell");
VBSFile = "D:\123.vbs";
COMОбъект.Run("wscript.exe """ + VBSFile + """", 1, Истина);

Запустил это же самое но в файловой базе, запустилась 7.7, отработала и закрылась.
63 Garykom
 
гуру
04.09.25
17:31
(62) походу проблема все же с настройками серверной винды
64 zenon46
 
04.09.25
17:32
(63) файловую базу запускал на том же сервере
65 Garykom
 
гуру
04.09.25
17:36
есть подозрение что придется держать активный сеанс (интерактивный RDP или в основном запускать) для работы OLE V77.Application
66 zenon46
 
04.09.25
17:38
(63) вообще не досмотрел, оказалось что после выполнения скрипта из клиент-серверной, процесс 7.7 появился, но окна авторизации нет..потому и 8-ка просто "висит" и ошибка
Имя сбойного модуля: Frame.dll, версия: 7.70.0.14, метка времени: 0x3e9e540a снова в логах
67 Garykom
 
гуру
04.09.25
17:39
как насчет варианта обмена чтобы не 8-ка была клиентом а 7-ка?
запускать 77 тупо скриптом по расписанию и пусть к 8-ке коннектится
68 zenon46
 
04.09.25
18:37
(67) наверное буду json-ами пуляться, в 7.7 уже есть куча роботов, то отправка на сайт, то на b2b площадку, то на маркетплейсы, прицеплюсь к какому-нибудь из них, и буду выпуливать файл, а в 8-ке регламентом проверять есть файл обрабатываем, нет файл ничего не делаем.