Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

1С сервер на CentOS. Выполнение команды системы.

1С сервер на CentOS. Выполнение команды системы.
Я
   Oldman06
 
05.10.20 - 16:09
Приветствую. В конфигурацию интегрирована система МДЛП. Запросы к системе МДЛП идентифицируются уникальными идентификаторами, генерируемыми отдельной утилитой "uuidgen". Соответственно, вызывается команда системы с флагом дождаться окончания выполнения и вернуть поток вывода. Какое-то время это работает, потом перестает. Возвращается пустая строка. При этом в /tmp временный файл с потоком вывода создается и нем есть сгенерированный UUID. Такое ощущение, что через какое-то время 1с перестает дожидаться выполнения команды и возвращает пустое значение. Помогает перезагрузка сервиса 1с. В чем может быть дело?
   Garykom
 
1 - 05.10.20 - 16:16
(0) Перепиши код на убирание к чертям утилиты "uuidgen"
   Oldman06
 
2 - 05.10.20 - 16:29
(1) Кстати, в коде проверяется, что если платформа Windows, то используется просто Строка(Новый УникальныйИдентификатор), а если линукс, то вот эта вот утилита. Подсистема эта написана 1с. По какой-то причине они так сделали же.
   Oldman06
 
3 - 05.10.20 - 17:38
Вообще, проблема похоже, более глобальная. Перестает подключатся компонента печати штрихкодов, перестает работать конвертирование JPG в PDF с помощью утилиты "convert". Получается, какая-то проблема с временными файлами. Помогает только перезагрузка сервиса 1С. Куда посмотреть, как по-тестировать?
   spiller26
 
4 - 05.10.20 - 18:04
(0) Поставь задержку, несколько секунд. Я так обходил.
   spiller26
 
5 - 05.10.20 - 18:08
(0) вот мой кусок
// Извлечь текст из файла Doc и возвратить его в виде строки.

Функция ИзвлечьТекстИзФайлаDoc(ПутьКФайлу, Отказ)
    
    ИзвлеченныйТекст = "";
    
    #Если Не ВебКлиент Тогда

        
        ВременныйDocФайл = ПолучитьИмяВременногоФайла("doc"); 
        КопироватьФайл(ПутьКФайлу, ВременныйDocФайл);
        ВременныйТексДокумент = ПолучитьИмяВременногоФайла();
        
        ТекстДокумента = новый ТекстовыйДокумент; 
        Попытка
            СтрокаКонсольнойКоманды = "antiword " + ВременныйDocФайл + " > " + ВременныйТексДокумент;
            ЗапуститьПриложение(СтрокаКонсольнойКоманды);
            Sleep(2);
        Исключение
            Отказ = Истина;
            ИзвлеченныйТекст = "";
        КонецПопытки;
        
        Попытка 
            ТекстДокумента.Прочитать(ВременныйТексДокумент);
            ИзвлеченныйТекст = ТекстДокумента.ПолучитьТекст(); 
        Исключение
            Отказ = Истина;
            ИзвлеченныйТекст = "";
        КонецПопытки;    
    #КонецЕсли

    
    УдалитьФайлы(ВременныйDocФайл);
    УдалитьФайлы(ВременныйТексДокумент);
    
    Возврат ИзвлеченныйТекст;
    
КонецФункции

// Извлечь текст из файла XLS и возвратить его в виде строки.

Функция ИзвлечьТекстИзФайлаXLS(ПутьКФайлу, Отказ)
    
    ИзвлеченныйТекст = "";
    
    #Если Не ВебКлиент Тогда

        ВременныйXLSФайл = ПолучитьИмяВременногоФайла("xls"); 
        КопироватьФайл(ПутьКФайлу, ВременныйXLSФайл);
        ВременныйТексДокумент = ПолучитьИмяВременногоФайла();
        
        ТабличныйДокумент = Новый ТабличныйДокумент;
        ТекстДокумента = новый ТекстовыйДокумент; 
        Попытка
            ТабличныйДокумент.Прочитать(ВременныйXLSФайл, СпособЧтенияЗначенийТабличногоДокумента.Текст);// СпособЧтенияЗначенийТабличногоДокумента - новый параметр платформы 8.3.6. Второе значение "Текст".

            ТабличныйДокумент.Записать(ВременныйТексДокумент, ТипФайлаТабличногоДокумента.TXT);
            ТекстДокумента.Прочитать(ВременныйТексДокумент);
            ИзвлеченныйТекст = ТекстДокумента.ПолучитьТекст();
        Исключение
            Сообщить(ОписаниеОшибки(), СтатусСообщения.Внимание);
        КонецПопытки;
        
        УдалитьФайлы(ВременныйXLSФайл);
        УдалитьФайлы(ВременныйТексДокумент);
    #КонецЕсли

    
    Возврат ИзвлеченныйТекст;
    
КонецФункции

//задержка

Процедура Sleep(Сек) Экспорт
    
    Нач=ТекущаяДата();
    Пока ТекущаяДата() - Нач < Сек Цикл
    КонецЦикла;    
    
КонецПроцедуры

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.