Имя: Пароль:
1C
1С v8
Как создать пустой текстовый файл из 1С
, ,
0 Mikhail Volkov
 
19.02.21
11:19
Понадобился некий текстовый файл как признак некоторого результата, сформированного в 1С: пустой файл - нет результата. Написал так:
Функция ИзменениеЛогФайла(Очистить = Истина)   Экспорт
    ИмяФайлаЛог = КаталогАльфаАвто() + "AAAAkit.log";
    ФайлЛог = Новый Файл(ИмяФайлаЛог);
    Если Очистить Тогда
        Если Не (ФайлЛог.Существует() И ПустойТекстовыйФайл(ИмяФайлаЛог)) Тогда
            Если ФайлЛог.Существует() Тогда
                УдалитьФайлы(ИмяФайлаЛог);
            КонецЕсли;
        //    ФайлЛог = Новый ТекстовыйДокумент;
        //    ФайлЛог.Записать(ИмяФайлаЛог);
            ФайлЛог = Новый ЗаписьТекста(ИмяФайлаЛог);
            ФайлЛог.Закрыть();
            Возврат Истина;
        КонецЕсли;
    Иначе
        Если Не (ФайлЛог.Существует() И Не ПустойТекстовыйФайл(ИмяФайлаЛог)) Тогда
            Текст = Новый ЗаписьТекста(ИмяФайлаЛог, КодировкаТекста.ANSI);
            Текст.ЗаписатьСтроку("Создан " + ТекущаяДата());
            Текст.Закрыть();
            Возврат Истина;
        КонецЕсли;
    КонецЕсли;
    Возврат Ложь;
КонецФункции  // ИзменениеЛогФайла()

// Возвращает Истина для пустого текстового файла
//
Функция ПустойТекстовыйФайл(ИмяФайла)   Экспорт
    Файл = Новый ТекстовыйДокумент;
    Файл.Прочитать(ИмяФайла, КодировкаТекста.ANSI);
//    Сообщить("КоличествоСтрок " + Файл.КоличествоСтрок() + ?(Файл.КоличествоСтрок() > 0, " строка " + Файл.ПолучитьСтроку(1), "") + " ПустойТекстовыйФайл " + (Файл.КоличествоСтрок() = 0 Или Файл.КоличествоСтрок() > 0 И ПустаяСтрока(СокрЛП(Файл.ПолучитьСтроку(1)))), СтатусСообщения.Информация);
    Возврат Файл.КоличествоСтрок() = 0 Или Файл.КоличествоСтрок() > 0 И ПустаяСтрока(СокрЛП(Файл.ПолучитьСтроку(1)));
КонецФункции  // ПустойТекстовыйФайл()

Вроде все работало, но сегодня функция ПустойТекстовыйФайл(ИмяФайла) для пустого файла стала выдавать строку: п»ї (закомментирована)!? Вариант v8: Как создать пустой текстовый файл из 1С закомментировал, свой написал все равно тот же результат. Не пойму: в чем причина?
1 ДенисЧ
 
19.02.21
11:23
Так у тебя уникод заработал внезапно
2 Garykom
 
гуру
19.02.21
11:30
(0) погугли BOM
3 Mikhail Volkov
 
19.02.21
11:46
(1) п»ї - уникод? Как его выключить, или не учитывался? Блокнотом их (символов) не вижу.
4 ДенисЧ
 
19.02.21
11:48
(3) Это BOM - Byte Order Mark. Отличительный признак уникодовых текстов
5 GANR
 
19.02.21
11:50
(0) легко
6 Галахад
 
гуру
19.02.21
11:56
Тут скорее непонятно зачем в этот файл вообще чего-то писать.
Если нужна дата создания, её же можно прочитать, ну или глазами посмотреть.
7 Mikhail Volkov
 
19.02.21
12:36
(5) Да:
    ФайлЛог = Новый ТекстовыйДокумент;
    ФайлЛог.Записать(ИмяФайлаЛог, КодировкаТекста.ANSI);
(6) Нет, нужен некий внешний признак готово ли все в 1С, стоит ли в нее входить.
8 Йохохо
 
19.02.21
12:38
(7) одно решение при начале регламента пишет в файлик @, а при окончании меняет на #
9 УдавВПопугаях
 
19.02.21
12:53
Микхаил...
вы как всегда, все темы у вас чем то похожи
10 ДенисЧ
 
19.02.21
12:54
(8) А потом кто-нибудь в файл заглянет и телегу напишет "программа матом кроет..."
11 acht
 
19.02.21
13:03
(10)

    ИмяФайла = ПолучитьИмяВременногоФайла();
    
    Запись = Новый ЗаписьТекста(ИмяФайла, "windows-1251");
    Запись.Записать("его");
    Запись.Закрыть();
    
    Чтение = Новый ЧтениеТекста(ИмяФайла, "cp866");
    Сообщить(Чтение.Прочитать());
    Чтение.Закрыть();
    
    УдалитьФайлы(ИмяФайла);
12 Kassern
 
19.02.21
13:12
(0) сдается мне, что это все для решения проблемы с бекапами)) Ну раз пошли таким тернистым путем, то зачем еще усложнять?
Если вам файл нужен лишь как флаг, то и работайте с ним как с флагом, зачем писать что-то внутрь?
Просто выполняете какое-то событие, по результату которого создается файл в определенном месте с определенным именеи
Далее, просто проверяете на существование файла, если он есть значит что-то делаем и удаляем файл иначе ждем пока появится
13 Mikhail Volkov
 
19.02.21
14:32
(12) Да, первоначально этот файл (пустой или нет) использовался как признак есть кто в базе, или нет: при входе пользователя что-то пишется в него, при выходе последнего пользователя он очищается. Не нашел метода определить, есть ли пользователи в базе как для версии 7.7 как из одной базы 1С проверить есть ли кто в другой Но после dt-выгрузку запускаю bat-файлом непосредственно из 1С по завершению работы последнего пользователя.
Текстовый файл обязательно имеет хотя бы одну строку (пустую или нет), можно не писать условие: Файл.КоличествоСтрок() = 0 Или Файл.КоличествоСтрок() > 0 И... для проверки пустой о или нет?
14 Garykom
 
гуру
19.02.21
14:39
(13) мдя
Независимо от того, куда вы едете — это в гору и против ветра!