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