| 
    
            
         
         | 
    
  | 
записьтекста, немонопольный доступ | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        novichok79    
     04.10.18 
            ✎
    15:18 
 | 
         
        доброго времени суток, уважаемые специалисты.
 
        есть самописная база, в ней реализована запись лога в текстовые файлы в одном модуле. текстовые файлы на момент записи открываются на монопольный доступ. в момент выполнения фоновых заданий, они пишут в один файл одновременно, в итоге получается ошибка выполнения. можно ли как-то открыть файл на запись немонопольно? через текстовый файл кажется можно, но он медленнее и придется читать каждый раз весь лог, а не хотелось бы этого. заранее благодарю за ответы.  | 
|||
| 
    1
    
        Cyberhawk    
     04.10.18 
            ✎
    15:18 
 | 
         
        Что-то ты мудришь     
         | 
|||
| 
    2
    
        Cyberhawk    
     04.10.18 
            ✎
    15:19 
 | 
         
        Пусть сеанс пишет в отдельный файл. Потом склеивай     
         | 
|||
| 
    3
    
        novichok79    
     04.10.18 
            ✎
    15:19 
 | 
         
        (1) в смысле?     
         | 
|||
| 
    4
    
        novichok79    
     04.10.18 
            ✎
    15:20 
 | 
         
        (2) так и делается, но бывают пересечения. че кроме обертки в попытку нет никаких вариантов?     
         | 
|||
| 
    5
    
        Cyberhawk    
     04.10.18 
            ✎
    15:20 
 | 
         
        Какие еще пересечения? Файл каждый раз уникальный должен быть     
         | 
|||
| 
    6
    
        youalex    
     04.10.18 
            ✎
    15:27 
 | 
         
        (2) +1 
 
        (0) >>через текстовый файл кажется можно ну да, и будет такое: сеанс1 прочитал;сеанс2 прочитал; сеанс1 записал; сеанс 2 записал /затер изменения сеанса1  | 
|||
| 
    7
    
        Cool_Profi    
     04.10.18 
            ✎
    15:29 
 | 
         
        нет. Текстовый документ он не многопоточный.
 
        Пиши в базу данных  | 
|||
| 
    8
    
        novichok79    
     04.10.18 
            ✎
    15:50 
 | 
         
        (7) ясно, спасибо.     
         | 
|||
| 
    9
    
        Лефмихалыч    
     04.10.18 
            ✎
    16:12 
 | 
         
        ЗаписьЖурналаРегистрации() решит этот вопрос     
         | 
|||
| 
    10
    
        d4rkmesa    
     04.10.18 
            ✎
    16:14 
 | 
         
        (0) Можно попробовать с NoSQL подружить. К примеру, как здесь:
 
        http://catalog.mista.ru/public/642927/  | 
|||
| 
    11
    
        DmitrO    
     04.10.18 
            ✎
    17:19 
 | 
         
        Можно писать и в один файл, просто процедуры записи нужно синхронизировать между разными фоновыми заданиями.
 
        Вообще, традиционно, это делается при помощи специальных функций файловой системы, но они в 1С не доступны. Однако у нас задача только синхронизировать. Писать в один файл разными потоками выполнения можно синхронизировав их например блокировками сервера 1С. Процедура ЗаписатьВЛог(ИмяФайла, ТекстСообщения) НачатьТранзакцию(); Блокировка = Новый БлокировкаДанных; Блокировка.Добавить("Справочник.Любой"); Блокировка.Заблокировать(); //Все, в этом месте может выполняться всегда только один поток, остальные ждут, поэтому спокойно открываем файл (1С это делает монопольно) и пишем ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла); ЗаписьТекста.ЗаписатьСтроку(ТекстСообщения); ЗаписьТекста.Закрыть(); ЗафиксироватьТранзакцию(); КонецПроцедуры Ставим блокировку на любой объект, лучше на тот, который меньше всего редактруется, можно и на элемент поставить, это не важно. Более того можно даже на пустую ссылку или на не существующий элемент поставить. Это похоже на технику синхронизации критической секцией.  | 
|||
| 
    12
    
        Лефмихалыч    
     04.10.18 
            ✎
    17:20 
 | 
         
        охренеть     
         | 
|||
| 
    13
    
        youalex    
     04.10.18 
            ✎
    17:46 
 | 
         
        Еще можно написать сервис, в сторону которого сеансы 1С будут выплевывать сообщения, а он эти сообщения будет синхронизировать и писать на диск. 
 
        В один файл.  | 
|||
| 
    14
    
        d4rkmesa    
     04.10.18 
            ✎
    20:01 
 | 
         
        (11) Ога, мьютексы и семафоры в 1С. =)     
         | 
|||
| 
    15
    
        sechs    
     04.10.18 
            ✎
    20:07 
 | 
         
        (13) Еще немного, и ты изобретешь syslogd     
         | 
|||
| 
    16
    
        Сияющий в темноте    
     04.10.18 
            ✎
    21:24 
 | 
         
        Самое простое и часто используемое,если нельзя создать файл,то через черточку добавляем к его имени цифру и увеличиваем ее на единицу,пока файл не создастся.
 
        Потом,если очень нужно,можно файлы склеить,но лучше,чтобы всегда в один файл писал один процесс,тогда проще с ошибками разбираться.  | 
|||
| 
    17
    
        Franchiser    
     05.10.18 
            ✎
    00:00 
 | 
         
        Я делал через попытку с ожиданием     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |