Версия для печати темы (https://pro1c.org.ua/index.php?s=d70f11d93b6dd4d51dd81b4334f13bd7&showtopic=20498)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Аналоги COM объектов для Linux

Автор: Veizdem 30.10.14, 13:46

Ищу аналоги COM объектов для загрузки/выгрузки XML, работы с XSD файлами, а так же аналог COMConnector под ОС Linux. Необходимо все делать без использования wine или windows. Кто что знает по данному поводу?

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

1C версии 8.3.5

Автор: Vofka 30.10.14, 14:01

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

Автор: Veizdem 30.10.14, 14:24

Цитата(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 30.10.14, 14:57

Цитата(Veizdem @ 30.10.14, 14:24) http://pro1c.org.ua/index.php?act=findpost&pid=92688
Так же не нашел, как работать с XSD.

Потому что то, что вы выше привели - это делается средствами платформы. А платформа на 90+% (мне так кажется) работает одинаково и в Виндовсе и в Линуксе. С XSD платформа сама работать не умеет.

Автор: Veizdem 30.10.14, 15:45

Работать с xml можно двумя способами получается - COM и внутренними средствами платформы, а что-то внутреннее по аналогии для COMConnector не придумано? Идиотизм какой-то... В очередной раз убеждаюсь, что проще было вместо 1С самостоятельно что-то написать...

Получается что для Linux только галочку на сайте разработали, а толку от этого никакого нет.

Автор: Petre 30.10.14, 16:21

Придуманы Web-сервисы.

Автор: Veizdem 30.10.14, 16:54

Цитата(Petre @ 30.10.14, 16:21) *
Придуманы Web-сервисы.

А как мне их применять, чтобы работая в одной ИБ получить данные из другой ИБ, если они обе физически на одной машине лежат на одном сервере БД и одном сервере 1с? Или как мне это применить чтобы выгнать всех из 1С обработкой?

Автор: Petre 30.10.14, 17:07

Не пойму, какие ограничения могут накладывать "если они обе физически на одной машине лежат на одном сервере БД и одном сервере 1с".

Автор: Veizdem 30.10.14, 18:03

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

Ну в этом случае я спрашивал что мне с этим делать, так как еще ни разу с этим дела не имел. Извините, если не совсем понятно выразился.

Автор: Vofka 31.10.14, 9:15

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

Ну так цель озвучьте, пора уже. Вы задали вопрос про COM в Linux - вам сказали, что такого нету. Что вы собираетесь сделать - никому кроме вас из здесь присутствующих неизвестно.

Автор: Veizdem 31.10.14, 10:12

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

Так цель же вот она - как мне организовать обмен данными между двумя разными базами и как делать выброс всех пользователей, включая зависшие сеансы?

Автор: Vofka 31.10.14, 11:58

Цитата(Veizdem @ 31.10.14, 10:12) http://pro1c.org.ua/index.php?act=findpost&pid=92735
как делать выброс всех пользователей, включая зависшие сеансы?

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

Автор: Veizdem 07.11.14, 11:54

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

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

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

Может быть где-то есть какая-нибудь детальная информация как это все должно работать? JavaDoc предоставляемый в комплекте не дает полного описания того, как это все должно работать.

Автор: Vofka 07.11.14, 12:29

Veizdem, я лично, увы, не подскажу как оно работает и работает ли вообще smile.gif

Автор: Veizdem 07.11.14, 12:33

Просто по сути для полного перехода под Linux, без wine, мне осталось только реализовать администрирование сервера, а если еще точнее - автоматическое выбрасывание всех имеющихся в системе сеансов (включая зависшие, так как обычные можно выкинуть просто послав сигнал закрытия клиента) перед началом выгрузк *.dt файла и, возможно, но не обязательно, принудительное удаление зависшего сеанса по надобности. И именно без COM или чего другого, чего нет под Linux. Собственно говоря обмены между базами информацией, включая подгрузку цен из одной базы в документ другой нажатием 1 кнопки уже сделал через web-сервисы, спасибо за подсказку.

Автор: Acid 07.11.14, 17:23

дык сначала убиваете все сеансы, а потом уже 1С-выгрузка.

Автор: Veizdem 10.11.14, 8:02

Цитата(Acid @ 07.11.14, 17:23) *
дык сначала убиваете все сеансы, а потом уже 1С-выгрузка.

Ну вот расскажите как их убить в автоматическом режиме (я как бы в полночь уже сплю, когда на работе скрипты на бекапы стартуют), с учетом того что ни одной машины на Windows нет. Обработочку, которая активные сеансы убивает я сделал, а вот как грохнуть тех, кто просто завис в системе?

Автор: Vofka 10.11.14, 9:05

Veizdem, ну а как-то службу сервера перегрузить нельзя? В Windows достаточно сделать батник, который можно либо из 1С дернуть, либо в планировщик заданий поставить.

Автор: Acid 10.11.14, 9:30

Цитата(Veizdem @ 10.11.14, 9:02) *
Обработочку, которая активные сеансы убивает я сделал, а вот как грохнуть тех, кто просто завис в системе?

Убиваете все сеансы.

Автор: Vofka 10.11.14, 9:32

Цитата(Acid @ 10.11.14, 9:30) *
Убиваете все сеансы.

Бывает так, что сеанс так виснет, что его даже через консоль убить нельзя smile.gif .

Автор: Veizdem 10.11.14, 9:41

Цитата(Vofka @ 10.11.14, 9:05) http://pro1c.org.ua/index.php?act=findpost&pid=93070
Убиваете все сеансы.

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

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

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

Это крайне печально (

Автор: alex040269 10.11.14, 9:59

Цитата(Veizdem @ 10.11.14, 10:41) *
Перезагружаю сервер 1с, но некоторые сеансы после перезагрузки все-равно остаются.

а рестарт базы, затем сервера приложений?

Автор: Veizdem 10.11.14, 10:01

Цитата(alex040269 @ 10.11.14, 9:59) *
а рестарт базы, затем сервера приложений?

То-есть мне нужно PostgreSQL перезагрузить и 1С в таком порядке? Или я что-то не понял.

Автор: alex040269 10.11.14, 10:08

угу. 1С обязательно после базы иначе могут быть глюки с уникальностью номеров документов справочников и т.д.

Автор: Veizdem 10.11.14, 10:36

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

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

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

Имею ввиду всех кроме себя.

Автор: Acid 10.11.14, 12:53

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

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

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

Если очень хочется программно - на инфостарте такая обработка должна быть.

Автор: Veizdem 10.11.14, 16:00

Цитата(Acid @ 10.11.14, 12:53) *
какая нафик обработка? где я сказал что ее надо использовать?

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

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

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

Автор: Gurman111 12.04.18, 15:42

Прошло 4 года.
В итоге Вы смогли решить эту проблему?
Можете посоветовать какими методами решили?

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua