Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Аналоги COM объектов для Linux
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
Veizdem
Ищу аналоги COM объектов для загрузки/выгрузки XML, работы с XSD файлами, а так же аналог COMConnector под ОС Linux. Необходимо все делать без использования wine или windows. Кто что знает по данному поводу?

Сервер 1С на Debian, сервер БД PostgreSQL на CentOS, все клиенты на Kubuntu.

1C версии 8.3.5
Vofka
Технология COM - это технология самой Windows. Если мы говорим о том, что есть какой-то COM объект - это само собой подразумевает то, что речь идет про Windows.
Veizdem
Цитата(Vofka @ 30.10.14, 14:01) необходимо зарегистрироваться для просмотра ссылки
Технология COM - это технология самой Windows. Если мы говорим о том, что есть какой-то COM объект - это само собой подразумевает то, что речь идет про Windows.

То, что COM это сугубо плюшка Windows я знаю, меня интересует как те же действия выполнять на Linux, где нет COM объектов.

Вот нашел пример записи XML файла без использования COM:
&НаКлиенте
Процедура ЗаписьДанных(Команда)
    ВыполнитьЗаписьДанных();    
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ВыполнитьЗаписьДанных()
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.ОткрытьФайл("d:\temp\tovar.xml");

    ЗаписьXML.ЗаписатьОбъявлениеXML();

    ЗаписьXML.ЗаписатьНачалоЭлемента("Корневой");

    // Записать атрибут элемента Корневой
    ЗаписьXML.ЗаписатьАтрибут("Справочник", "Номенклатура");

    ЗаписьXML.ЗаписатьКомментарий("Элементы справочника:");

    Выборка = Справочники.Номенклатура.Выбрать();
    Пока Выборка.Следующий() Цикл
        Если Выборка.ЭтоГруппа Тогда
            Продолжить;
        КонецЕсли;
        ЗаписьXML.ЗаписатьНачалоЭлемента("ЭлементСправочника");

            ЗаписьXML.ЗаписатьНачалоЭлемента("Код");
            ЗаписьXML.ЗаписатьТекст(Выборка.Код);
            ЗаписьXML.ЗаписатьКонецЭлемента();

            ЗаписьXML.ЗаписатьНачалоЭлемента("Наименование");
            ЗаписьXML.ЗаписатьТекст(Выборка.Наименование);
            ЗаписьXML.ЗаписатьКонецЭлемента();

            ЗаписьXML.ЗаписатьНачалоЭлемента("Цена");
            ЗаписьXML.ЗаписатьТекст(СокрЛП(Выборка.Цена));
            ЗаписьXML.ЗаписатьКонецЭлемента();            

        ЗаписьXML.ЗаписатьКонецЭлемента();
    КонецЦикла;    

    ЗаписьXML.ЗаписатьКонецЭлемента();
    ЗаписьXML.Закрыть();
КонецПроцедуры


И пример чтения XML файла без того же COM:
&НаКлиенте
Процедура ЧтениеДанных(Команда)
    ФайлXML = Новый ЧтениеXML;
    ФайлXML.ОткрытьФайл("d:\temp\tovar.xml");

    Сообщение = Новый СообщениеПользователю();

    Пока ФайлXML.Прочитать() Цикл
        Если ФайлXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
            Сообщение.Текст = ФайлXML.Имя;
            Сообщение.Сообщить();

            Пока ФайлXML.ПрочитатьАтрибут() Цикл
                Сообщение.Текст = "Атрибут: " + ФайлXML.Имя +
                                           " = " + ФайлXML.Значение;
                Сообщение.Сообщить();
            КонецЦикла;      
        КонецЕсли;    

        Если ФайлXML.ТипУзла = ТипУзлаXML.Текст Тогда
            Сообщение.Текст = ФайлXML.Значение;
            Сообщение.Сообщить();
        КонецЕсли;    

        Если ФайлXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
            Сообщение.Текст = "/" + ФайлXML.Имя;
            Сообщение.Сообщить();
        КонецЕсли;    
    КонецЦикла;    

    ФайлXML.Закрыть();
КонецПроцедуры


А такая же реализация но для COMConnector есть?

Так же не нашел, как работать с XSD.
Vofka
Цитата(Veizdem @ 30.10.14, 14:24) необходимо зарегистрироваться для просмотра ссылки
А такая же реализация но для COMConnector есть?

COMConnector-а под Линуксом нету.

Цитата(Veizdem @ 30.10.14, 14:24) необходимо зарегистрироваться для просмотра ссылки
Так же не нашел, как работать с XSD.

Потому что то, что вы выше привели - это делается средствами платформы. А платформа на 90+% (мне так кажется) работает одинаково и в Виндовсе и в Линуксе. С XSD платформа сама работать не умеет.
Veizdem
Работать с xml можно двумя способами получается - COM и внутренними средствами платформы, а что-то внутреннее по аналогии для COMConnector не придумано? Идиотизм какой-то... В очередной раз убеждаюсь, что проще было вместо 1С самостоятельно что-то написать...

Получается что для Linux только галочку на сайте разработали, а толку от этого никакого нет.
Petre
Придуманы Web-сервисы.
Veizdem
Цитата(Petre @ 30.10.14, 16:21) необходимо зарегистрироваться для просмотра ссылки
Придуманы Web-сервисы.

А как мне их применять, чтобы работая в одной ИБ получить данные из другой ИБ, если они обе физически на одной машине лежат на одном сервере БД и одном сервере 1с? Или как мне это применить чтобы выгнать всех из 1С обработкой?
Petre
Не пойму, какие ограничения могут накладывать "если они обе физически на одной машине лежат на одном сервере БД и одном сервере 1с".
Veizdem
Цитата(Petre @ 30.10.14, 17:07) необходимо зарегистрироваться для просмотра ссылки
Не пойму, какие ограничения могут накладывать "если они обе физически на одной машине лежат на одном сервере БД и одном сервере 1с".

Ну в этом случае я спрашивал что мне с этим делать, так как еще ни разу с этим дела не имел. Извините, если не совсем понятно выразился.
Vofka
Цитата(Veizdem @ 30.10.14, 18:03) необходимо зарегистрироваться для просмотра ссылки
Ну в этом случае я спрашивал что мне с этим делать, так как еще ни разу с этим дела не имел. Извините, если не совсем понятно выразился.

Ну так цель озвучьте, пора уже. Вы задали вопрос про COM в Linux - вам сказали, что такого нету. Что вы собираетесь сделать - никому кроме вас из здесь присутствующих неизвестно.
Veizdem
Цитата(Vofka @ 31.10.14, 9:15) необходимо зарегистрироваться для просмотра ссылки
Ну так цель озвучьте, пора уже. Вы задали вопрос про COM в Linux - вам сказали, что такого нету. Что вы собираетесь сделать - никому кроме вас из здесь присутствующих неизвестно.

Так цель же вот она - как мне организовать обмен данными между двумя разными базами и как делать выброс всех пользователей, включая зависшие сеансы?
Vofka
Цитата(Veizdem @ 31.10.14, 10:12) необходимо зарегистрироваться для просмотра ссылки
как мне организовать обмен данными между двумя разными базами

XML-ем делайте, либо любым форматом на свое усмотрение, в чем проблема? Так же, как выше писали - веб сервисы.

Цитата(Veizdem @ 31.10.14, 10:12) необходимо зарегистрироваться для просмотра ссылки
как делать выброс всех пользователей, включая зависшие сеансы?

Где-то (на диске ИТС кажется) встречал программный java интерфейс для управления сервером 1С. Вот видимо для счастливых обладателей Линукса его и сделали, чтобы через него можно было программно работать с сервером 1С.
Veizdem
Цитата(Vofka @ 31.10.14, 11:58) необходимо зарегистрироваться для просмотра ссылки
Где-то (на диске ИТС кажется) встречал программный java интерфейс для управления сервером 1С. Вот видимо для счастливых обладателей Линукса его и сделали, чтобы через него можно было программно работать с сервером 1С.

Порылся на диске, нашел, да есть такая штука на Java, только вот я два дня промучился и не смог даже их пример работать заставить, он мне ошибку "отказ в соединении" выкидывает. И вот как с этим работать?

И ладно бы я не знал что такое Java, но я на ней не один проект сделать успел, до того как пересесть за 1С...

Может быть где-то есть какая-нибудь детальная информация как это все должно работать? JavaDoc предоставляемый в комплекте не дает полного описания того, как это все должно работать.
Vofka
Veizdem, я лично, увы, не подскажу как оно работает и работает ли вообще smile.gif
Veizdem
Просто по сути для полного перехода под Linux, без wine, мне осталось только реализовать администрирование сервера, а если еще точнее - автоматическое выбрасывание всех имеющихся в системе сеансов (включая зависшие, так как обычные можно выкинуть просто послав сигнал закрытия клиента) перед началом выгрузк *.dt файла и, возможно, но не обязательно, принудительное удаление зависшего сеанса по надобности. И именно без COM или чего другого, чего нет под Linux. Собственно говоря обмены между базами информацией, включая подгрузку цен из одной базы в документ другой нажатием 1 кнопки уже сделал через web-сервисы, спасибо за подсказку.
Acid
дык сначала убиваете все сеансы, а потом уже 1С-выгрузка.
Veizdem
Цитата(Acid @ 07.11.14, 17:23) необходимо зарегистрироваться для просмотра ссылки
дык сначала убиваете все сеансы, а потом уже 1С-выгрузка.

Ну вот расскажите как их убить в автоматическом режиме (я как бы в полночь уже сплю, когда на работе скрипты на бекапы стартуют), с учетом того что ни одной машины на Windows нет. Обработочку, которая активные сеансы убивает я сделал, а вот как грохнуть тех, кто просто завис в системе?
Vofka
Veizdem, ну а как-то службу сервера перегрузить нельзя? В Windows достаточно сделать батник, который можно либо из 1С дернуть, либо в планировщик заданий поставить.
Acid
Цитата(Veizdem @ 10.11.14, 9:02) необходимо зарегистрироваться для просмотра ссылки
Обработочку, которая активные сеансы убивает я сделал, а вот как грохнуть тех, кто просто завис в системе?

Убиваете все сеансы.
Vofka
Цитата(Acid @ 10.11.14, 9:30) необходимо зарегистрироваться для просмотра ссылки
Убиваете все сеансы.

Бывает так, что сеанс так виснет, что его даже через консоль убить нельзя smile.gif .
Veizdem
Цитата(Vofka @ 10.11.14, 9:05) необходимо зарегистрироваться для просмотра ссылки
Veizdem, ну а как-то службу сервера перегрузить нельзя? В Windows достаточно сделать батник, который можно либо из 1С дернуть, либо в планировщик заданий поставить.

Перезагружаю сервер 1с, но некоторые сеансы после перезагрузки все-равно остаются.

Цитата(Acid @ 10.11.14, 9:30) необходимо зарегистрироваться для просмотра ссылки
Убиваете все сеансы.

Ощущение что Вы не умеете читать, еще раз повторю КАК ЭТО СДЕЛАТЬ ОБРАБОТКОЙ НЕ ИМЕЯ COM ОБЪЕКТА?

Пол темы этому посвящено, а ответ у Вас один - "удалить все сеансы перед бекапом".

Цитата(Vofka @ 10.11.14, 9:32) необходимо зарегистрироваться для просмотра ссылки
Бывает так, что сеанс так виснет, что его даже через консоль убить нельзя smile.gif .

Это крайне печально (
alex040269
Цитата(Veizdem @ 10.11.14, 10:41) необходимо зарегистрироваться для просмотра ссылки
Перезагружаю сервер 1с, но некоторые сеансы после перезагрузки все-равно остаются.

а рестарт базы, затем сервера приложений?
Veizdem
Цитата(alex040269 @ 10.11.14, 9:59) необходимо зарегистрироваться для просмотра ссылки
а рестарт базы, затем сервера приложений?

То-есть мне нужно PostgreSQL перезагрузить и 1С в таком порядке? Или я что-то не понял.
alex040269
угу. 1С обязательно после базы иначе могут быть глюки с уникальностью номеров документов справочников и т.д.
Veizdem
Цитата(alex040269 @ 10.11.14, 10:08) необходимо зарегистрироваться для просмотра ссылки
угу. 1С обязательно после базы иначе могут быть глюки с уникальностью номеров документов справочников и т.д.

Добавил скрипт на сервер БД, завтра отпишусь о результатах.

А варианта какого-нибудь для выбрасывания программно нет? Например, когда обмен между базами делать, чтоб всех выгнать из обработки и не лазить на сервер.

Имею ввиду всех кроме себя.
Acid
Цитата(Veizdem @ 10.11.14, 10:41) необходимо зарегистрироваться для просмотра ссылки
Ощущение что Вы не умеете читать, еще раз повторю КАК ЭТО СДЕЛАТЬ ОБРАБОТКОЙ НЕ ИМЕЯ COM ОБЪЕКТА?

какая нафик обработка? где я сказал что ее надо использовать?

уже повторю суфлеров - скриптом ОСи надо решать вопросы с сеансами.

Если очень хочется программно - на инфостарте такая обработка должна быть.
Veizdem
Цитата(Acid @ 10.11.14, 12:53) необходимо зарегистрироваться для просмотра ссылки
какая нафик обработка? где я сказал что ее надо использовать?

уже повторю суфлеров - скриптом ОСи надо решать вопросы с сеансами.

Открою Вам страшную тайну, можно не только средствами ОСи, (крайне волшебным образом для Вас) на Шындовс это делаю обработкой прямо в 1с, регламентным заданием, а коль уж есть Linux платформа, то она уметь должна то же самое или почти то же самое, что меня как раз и интересует.

Единственное, так это то что на винде есть ком, а на линукс нету. И решение проблеммы хочется найти с учетом этого НО. А скрипт ОСи я уже при помощи Ras/Rac и Bash, о котором никто, кроме меня, похоже что не интересовался судя по форуму, потому что нужды такой не было.
Gurman111
Прошло 4 года.
В итоге Вы смогли решить эту проблему?
Можете посоветовать какими методами решили?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.