Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 4
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Чтение файла txt для вставки данных 2 страниц V   1 2 >          
kayfatuch Подменю пользователя
сообщение 15.11.24, 15:33
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 38
Из: Кривой Рог
Спасибо сказали: 2 раз
Рейтинг: 2

Доброго времени суток господа. У меня 1с 7.70.027 Торговля и Склад для Украины 7.70.048 и я написал такую вот обработку:

Процедура СозРасходки()
    // Создаем новый документ "Расходная накладная"
    Накладная = СоздатьОбъект("Документ.РасходнаяНакладная");
    Накладная.Новый();
    ДатаДок = РабочаяДата(Контекст, "Запись");    
    Файл = СоздатьОбъект("Текст");
    Файл.Открыть("C:\inetpub\ftproot\Kontakt\ExpenseInvoice_24-10-2024_17-29-19.txt");
    
    // Чтение данных из первых строк файла
    НаименованиеСклада = СокрЛП(Сред(Файл.ПолучитьСтроку(1), Найти(Файл.ПолучитьСтроку(1), ":") + 1));
    НаименованиеФирмы = СокрЛП(Сред(Файл.ПолучитьСтроку(2), Найти(Файл.ПолучитьСтроку(2), ":") + 1));
    НаименованиеКонтрагента = СокрЛП(Сред(Файл.ПолучитьСтроку(3), Найти(Файл.ПолучитьСтроку(3), ":") + 1));

    // Поиск фирмы по наименованию из файла
    спрФирма = СоздатьОбъект("Справочник.Фирмы");
    спрФирма.НайтиПоНаименованию(НаименованиеФирмы);
    Если спрФирма.Код <> 0 Тогда
        Накладная.Фирма = спрФирма.ТекущийЭлемент();
    Иначе
        Сообщить("Фирма не найдена: " + НаименованиеФирмы);
    КонецЕсли;

    // Поиск контрагента по наименованию из файла
    спрКонтрагент = СоздатьОбъект("Справочник.Контрагенты");
    спрКонтрагент.НайтиПоНаименованию(НаименованиеКонтрагента);
    Если спрКонтрагент.Код <> 0 Тогда
        Накладная.Контрагент = спрКонтрагент.ТекущийЭлемент();
    Иначе
        Сообщить("Контрагент не найден: " + НаименованиеКонтрагента);
    КонецЕсли;

    // Получаем место хранения по наименованию из файла
    спрСклад = СоздатьОбъект("Справочник.МестаХранения");
    спрСклад.НайтиПоНаименованию(НаименованиеСклада);
    Если спрСклад.Код <> 0 Тогда
        Накладная.Склад = спрСклад.ТекущийЭлемент();
    Иначе
        Сообщить("Склад не найден: " + НаименованиеСклада);
    КонецЕсли;

   // Чтение строк файла
    ЧтениеПродолжается = 1;  // Инициализация флага продолжения чтения
    ТекущаяСтрока = "";

    Пока ЧтениеПродолжается = 1 Цикл
        // Читаем строку из файла
        СтатусЧтения = Файл.ПолучитьСтроку(ТекущаяСтрока);

        // Проверяем, были ли строки в файле
        Если СтатусЧтения = 0 Тогда
            ЧтениеПродолжается = 0; // Если строк больше нет, выходим из цикла
        ИначеЕсли ТекущаяСтрока = "" Тогда
            Продолжить; // Пропускаем пустые строки
        Иначе
            // Обработка строки с артикулом
            Если Лев(ТекущаяСтрока, 8) = "Артикул:" Тогда
                Артикул = СокрЛП(Сред(ТекущаяСтрока, 9));

                // Читаем строку с количеством
                СтрокаКоличество = "";
                Файл.ПрочитатьСтроку(СтрокаКоличество);
                Если Лев(СтрокаКоличество, 10) = "Количество:" Тогда
                    Количество = Число(СокрЛП(Сред(СтрокаКоличество, 11)));

                    // Добавление строки в табличную часть
                    СтрокаТЧ = Накладная.Товары.Добавить();
                    СтрокаТЧ.Артикул = Артикул;
                    СтрокаТЧ.Количество = Количество;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;

    // Записываем документ
    Накладная.Записать();
    Сообщить("Расходная накладная успешно создана!");
КонецПроцедуры


Суть вопроса просьба помощи. конечная цель процедуры работать автономно и постоянно искать файл и создавать на его основе документ в зависимости от названия документа. На данный момент я застопорился в двух моментах: первый если контрагент прописан в подкаталоге он не находится для вставки. Вторая не выходит для документа вытянуть данные об товаре. Если кому поможет вставлю пример как выглядит файл на основе которого заполняется документ. Буду благодарен любой помощи.

Пример документа:
Склад: "склад"                                                  
Фирма: "название фопа"      
Контрагент: "контрагент"                                            

Товары:                                                                    
Артикул: 3    
Количество: 1
                                            
Артикул: 11782
Количество: 2

и т.д.(по количеству товара)

andrew76 Подменю пользователя
сообщение 15.11.24, 17:06
Сообщение #2

Оратор
*****
Группа: Пользователи
Сообщений: 480
Из: Казахстан
Спасибо сказали: 49 раз
Рейтинг: 49

Цитата(kayfatuch @ 15.11.24, 18:33) *
первый если контрагент прописан в подкаталоге он не находится для вставки


Синтаксис Поиска в справочниках по наименованию:

НайтиПоНаименованию(<?>,,);
Синтаксис:
НайтиПоНаименованию(<Наименование>,<Режим>,<ФлагПоиска>)
Назначение:
Найти элемент справочника по наименованию.
Возвращает: 1 - если действие выполнено;
0 - если действие не выполнено (элемент не найден).
Параметры:
<Наименование> - строка с наименованием искомого элемента справочника,
<Режим> - необязательный параметр. Число: 1 - поиск внутри установленного подчинения (родителя); 0 - поиск во всем справочнике вне зависимости от родителя. Значение по умолчанию - 1.
<ФлагПоиска> - необязательный параметр. Число: 1 - найти точное соответствие наименования; 0 - найти наименование по первым символам. Значение по умолчанию - 0.

Спасибо сказали: kayfatuch,

kayfatuch Подменю пользователя
сообщение 15.11.24, 17:09
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 38
Из: Кривой Рог
Спасибо сказали: 2 раз
Рейтинг: 2

Цитата(andrew76 @ 15.11.24, 17:06) *
Синтаксис Поиска в справочниках по наименованию:

НайтиПоНаименованию(<?>,,);
Синтаксис:
НайтиПоНаименованию(<Наименование>,<Режим>,<ФлагПоиска>)
Назначение:
Найти элемент справочника по наименованию.
Возвращает: 1 - если действие выполнено;
0 - если действие не выполнено (элемент не найден).
Параметры:
<Наименование> - строка с наименованием искомого элемента справочника,
<Режим> - необязательный параметр. Число: 1 - поиск внутри установленного подчинения (родителя); 0 - поиск во всем справочнике вне зависимости от родителя. Значение по умолчанию - 1.
<ФлагПоиска> - необязательный параметр. Число: 1 - найти точное соответствие наименования; 0 - найти наименование по первым символам. Значение по умолчанию - 0.


Спасибо большое. Видимо проглядел когда читал описание функции.

andrew76 Подменю пользователя
сообщение 15.11.24, 17:17
Сообщение #4

Оратор
*****
Группа: Пользователи
Сообщений: 480
Из: Казахстан
Спасибо сказали: 49 раз
Рейтинг: 49

kayfatuch @ Сегодня, 20:09 * ,

вот так работает ?
спрКонтрагент.НайтиПоНаименованию(НаименованиеКонтрагента,0,1);


Цитата(kayfatuch @ 15.11.24, 18:33) *
Вторая не выходит для документа вытянуть данные об товаре.


может в базе разночтение идёт - "Артикул :" или "АРТИКУЛ:" либо ещё как-то исковеркано пользователями ?
Если Лев(ТекущаяСтрока, 8) = "Артикул:" Тогда

kayfatuch Подменю пользователя
сообщение 15.11.24, 17:37
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 38
Из: Кривой Рог
Спасибо сказали: 2 раз
Рейтинг: 2

Цитата(andrew76 @ 15.11.24, 17:17) *
вот так работает ?
спрКонтрагент.НайтиПоНаименованию(НаименованиеКонтрагента,0,1);


Да, вполне и первого параметра оказалось достаточно что бы нашёл специфичного контрагента, но решил оба прописать.

Цитата(andrew76 @ 15.11.24, 17:17) *
может в базе разночтение идёт - "Артикул :" или "АРТИКУЛ:" либо ещё как-то исковеркано пользователями ?

Сам файл генерируется программой на ТСД да и файл скидывается в закрытую директорию. Тут скорее сейчас странность в том что программа в вечный цикл падает. Причём я добавил сообщения для проверки считываются ли данные из файла(артикул, количество) но они не выводятся.... Такое ощущения будто либо я к многострочной части формы неверно обращаюсь то ли с перебором в файле напортачил...

andrew76 Подменю пользователя
сообщение 15.11.24, 17:40
Сообщение #6

Оратор
*****
Группа: Пользователи
Сообщений: 480
Из: Казахстан
Спасибо сказали: 49 раз
Рейтинг: 49

kayfatuch @ Сегодня, 20:37 * ,

Отладчиком её... эту проблемку.

kayfatuch Подменю пользователя
сообщение 15.11.24, 17:48
Сообщение #7

Общительный
**
Группа: Пользователи
Сообщений: 38
Из: Кривой Рог
Спасибо сказали: 2 раз
Рейтинг: 2

Цитата(andrew76 @ 15.11.24, 17:40) *
Отладчиком её... эту проблемку.


через него нашёл что постоянно падает условие
 ИначеЕсли ТекущаяСтрока = "" Тогда
            Продолжить; // Пропускаем пустые строки

и так пока не отменю выполнение...

andrew76 Подменю пользователя
сообщение 15.11.24, 17:59
Сообщение #8

Оратор
*****
Группа: Пользователи
Сообщений: 480
Из: Казахстан
Спасибо сказали: 49 раз
Рейтинг: 49

kayfatuch @ Сегодня, 20:48 * ,

Отладчик - это вещь ! smile.gif

Цитата(kayfatuch @ 15.11.24, 20:48) *
ИначеЕсли ТекущаяСтрока = ""


А может быть в "пустой" строке есть ещё какие-либо символы (пробелы,спецсимволы) ?

kayfatuch Подменю пользователя
сообщение 16.11.24, 0:49
Сообщение #9

Общительный
**
Группа: Пользователи
Сообщений: 38
Из: Кривой Рог
Спасибо сказали: 2 раз
Рейтинг: 2

Цитата(andrew76 @ 15.11.24, 17:59) *
А может быть в "пустой" строке есть ещё какие-либо символы (пробелы,спецсимволы) ?

Нет нашёл где была проблема. Я натупил и не добавил обработку перехода на новую строку. Но легче от этого не стало( я даже попробовал просто скопировать формулу как искал склад и т.п. всё равно пустота sleep.gif

kayfatuch Подменю пользователя
сообщение 16.11.24, 1:54
Сообщение #10

Общительный
**
Группа: Пользователи
Сообщений: 38
Из: Кривой Рог
Спасибо сказали: 2 раз
Рейтинг: 2

Итак вот нынешняя версия процедуры:
Процедура СозРасходки()
    // Создаем новый документ "Расходная накладная"
    Накладная = СоздатьОбъект("Документ.РасходнаяНакладная");
    Накладная.Новый();
    ДатаДок = РабочаяДата(Контекст, "Запись");    
    Файл = СоздатьОбъект("Текст");
    Файл.Открыть("C:\inetpub\ftproot\Kontakt\ExpenseInvoice_24-10-2024_17-29-19.txt");
    
    // Чтение данных из первых строк файла
    НаименованиеСклада = СокрЛП(Сред(Файл.ПолучитьСтроку(1), Найти(Файл.ПолучитьСтроку(1), ":") + 1));
    НаименованиеФирмы = СокрЛП(Сред(Файл.ПолучитьСтроку(2), Найти(Файл.ПолучитьСтроку(2), ":") + 1));
    НаименованиеКонтрагента = СокрЛП(Сред(Файл.ПолучитьСтроку(3), Найти(Файл.ПолучитьСтроку(3), ":") + 1));
    
    // Поиск фирмы по наименованию из файла
    спрФирма = СоздатьОбъект("Справочник.Фирмы");
    спрФирма.НайтиПоНаименованию(НаименованиеФирмы);
    Если спрФирма.Код <> 0 Тогда
        Накладная.Фирма = спрФирма.ТекущийЭлемент();  
    Иначе
        Сообщить("Фирма не найдена: " + НаименованиеФирмы);
    КонецЕсли;
    
    // Поиск контрагента по наименованию из файла
    спрКонтрагент = СоздатьОбъект("Справочник.Контрагенты");
    спрКонтрагент.НайтиПоНаименованию(НаименованиеКонтрагента, 0, 1);
    Если спрКонтрагент.Код <> 0 Тогда
        Накладная.Контрагент = спрКонтрагент.ТекущийЭлемент();  
    Иначе
        Сообщить("Контрагент не найден: " + НаименованиеКонтрагента);
    КонецЕсли;
    
    // Получаем место хранения по наименованию из файла
    спрСклад = СоздатьОбъект("Справочник.МестаХранения");
    спрСклад.НайтиПоНаименованию(НаименованиеСклада);
    Если спрСклад.Код <> 0 Тогда
        Накладная.Склад = спрСклад.ТекущийЭлемент();  
    Иначе
        Сообщить("Склад не найден: " + НаименованиеСклада);
    КонецЕсли;                      
    
    
   // Обработка строк файла
    ТекущаяСтрока = 6; // Начинаем с 6-й строки
    ПустыхСтрокПодряд = 0; // Счетчик пустых строк
    
    Пока ПустыхСтрокПодряд < 3 Цикл
        СтатусЧтения = Файл.ПолучитьСтроку(ТекущаяСтрока);
        
        Если СтатусЧтения = "" Тогда
            ПустыхСтрокПодряд = ПустыхСтрокПодряд + 1;
            ТекущаяСтрока = ТекущаяСтрока + 1;
            Продолжить;
        Иначе
            ПустыхСтрокПодряд = 0; // Сброс счетчика, если строка не пустая
        КонецЕсли;
        
        Если Найти(СтатусЧтения, "Артикул:") > 0 Тогда
            Артикул = СокрЛП(Сред(СтатусЧтения, Найти(СтатусЧтения, ":") + 1));  
            ТекущаяСтрока = ТекущаяСтрока + 1;
            
            // Считываем количество
            КоличествоСтрока = Файл.ПолучитьСтроку(ТекущаяСтрока);
            Количество = Число(СокрЛП(Сред(КоличествоСтрока, Найти(КоличествоСтрока, ":") + 1)));
            
            // Добавляем строку в табличную часть
           ТЗК = СоздатьОбъект("ТаблицаЗначений");
           ТЗК.НоваяКолонка("Артикул", "Строка", 24);
           ТЗК.НоваяКолонка("Количество", "Число", 13);  
          
           ТЗК.УстановитьПараметрыКолонки("Артикул", , , , , 24);
           ТЗК.УстановитьПараметрыКолонки("Количество", , , , , 13);
          
                   ТЗК.НоваяСтрока();
           ТЗК.Артикул = Артикул;
           ТЗК.Количество = Количество;
          
        КонецЕсли;
        
        // Переход к следующей строке
        ТекущаяСтрока = ТекущаяСтрока + 1;
    КонецЦикла;
    
    // Записываем документ
    Накладная.Записать();
    Сообщить("Расходная накладная успешно создана!");
КонецПроцедуры


Всё мы считываем из файла всё гуд. а в таблицу нихрена не вставляем sleep.gif Для общей радости осталось это побороть...

andrew76 Подменю пользователя
сообщение 16.11.24, 5:26
Сообщение #11

Оратор
*****
Группа: Пользователи
Сообщений: 480
Из: Казахстан
Спасибо сказали: 49 раз
Рейтинг: 49

Цитата(kayfatuch @ 16.11.24, 4:54) *
а в таблицу нихрена не вставляем

В таблицу не вставляем ? Вставляем,конечно,только после вставки,объект Таблица каждый раз пересоздаётся полностью
поэтому и кажется ,что Таблица пустая.

Если Найти(СтатусЧтения, "Артикул:") > 0 Тогда
       Артикул = СокрЛП(Сред(СтатусЧтения, Найти(СтатусЧтения, ":") + 1));  
       ТекущаяСтрока = ТекущаяСтрока + 1;
            
    // Считываем количество
    КоличествоСтрока = Файл.ПолучитьСтроку(ТекущаяСтрока);
    Количество = Число(СокрЛП(Сред(КоличествоСтрока, Найти(КоличествоСтрока, ":") + 1)));
            
    // Добавляем строку в табличную часть
        ТЗК = СоздатьОбъект("ТаблицаЗначений");  //Вот здесь каждый раз объект Таблица ПЕРЕСОЗДАЁТСЯ !


Чтобы это не мешало,нужно строчку ТЗК = СоздатьОбъект("ТаблицаЗначений") перенести выше по тексту:

Процедура СозРасходки()
// Создаем новый документ "Расходная накладная"
Накладная = СоздатьОбъект("Документ.РасходнаяНакладная");
Накладная.Новый();
ДатаДок = РабочаяДата(Контекст, "Запись");    
Файл = СоздатьОбъект("Текст");
Файл.Открыть("C:\inetpub\ftproot\Kontakt\ExpenseInvoice_24-10-2024_17-29-19.txt");
ТЗК = СоздатьОбъект("ТаблицаЗначений")

kayfatuch Подменю пользователя
сообщение 16.11.24, 13:09
Сообщение #12

Общительный
**
Группа: Пользователи
Сообщений: 38
Из: Кривой Рог
Спасибо сказали: 2 раз
Рейтинг: 2

Цитата(andrew76 @ 16.11.24, 5:26) *
Чтобы это не мешало,нужно строчку ТЗК = СоздатьОбъект("ТаблицаЗначений") перенести выше по тексту:

Процедура СозРасходки()
// Создаем новый документ "Расходная накладная"
Накладная = СоздатьОбъект("Документ.РасходнаяНакладная");
Накладная.Новый();
ДатаДок = РабочаяДата(Контекст, "Запись");    
Файл = СоздатьОбъект("Текст");
Файл.Открыть("C:\inetpub\ftproot\Kontakt\ExpenseInvoice_24-10-2024_17-29-19.txt");
ТЗК = СоздатьОбъект("ТаблицаЗначений")


Попробовал и ничего не изменилось. В этом моменте и кроется вопрос даже по старому есть же последняя подборка пар артикул/количество которые должны сохранится а результат нулевой. Да и в целом структура с ТЗК это я выдрал из стандартной процедуры моей базы... Может я что-то упускаю?.. По отладчику виже что он код проходит. но открывая документ в нём только фирма/склад/контрагент заполнены а многострочная часть пустая...

Alegzander Подменю пользователя
сообщение 16.11.24, 15:09
Сообщение #13

Общительный
**
Группа: Пользователи
Сообщений: 29
Спасибо сказали: 10 раз
Рейтинг: 9

kayfatuch @ Сегодня, 14:09 * ,
Вместо ТЗ добавляй строку в документ:
Накладная.НоваяСтрока();
...
Накладная.Количество = Количество;
...

Спасибо сказали: kayfatuch,

kayfatuch Подменю пользователя
сообщение 16.11.24, 16:40
Сообщение #14

Общительный
**
Группа: Пользователи
Сообщений: 38
Из: Кривой Рог
Спасибо сказали: 2 раз
Рейтинг: 2

Цитата(Alegzander @ 16.11.24, 15:09) *
Вместо ТЗ добавляй строку в документ:
Накладная.НоваяСтрока();
...
Накладная.Количество = Количество;

Спасибо помогло! Правда странно при вставке не сработала функция таблицы на поиск наименования по артикулу.... ладно добавлю в коде вставку. как и курс долбаный..

Из всех проблем осталась только одна.. как перебирать все файлы с определённым заголовком и перемещать после обработки.. насколько же это проще в 8 по сравнению с 7.7(

andrew76 Подменю пользователя
сообщение 16.11.24, 18:19
Сообщение #15

Оратор
*****
Группа: Пользователи
Сообщений: 480
Из: Казахстан
Спасибо сказали: 49 раз
Рейтинг: 49

Цитата(kayfatuch @ 16.11.24, 19:40) *
как перебирать все файлы с определённым заголовком

С определённым заголовком файла или по определенному расширению файла нужно перебирать файлы ?
Если с определённым заголовком файла,то штатными средствами 1с 7.7 этого сделать нельзя.Нужно подключать внешнюю компоненту.
Если же по определенному расширению файла перебирать файлы в папке,то это можно так примерно сделать:

ФС.УстТекКаталог(каталог); //здесь пропишите маршрут своего каталога с файлами
ИмяФайла = "";
ИмяФайла = ФС.НайтиПервыйФайл("*.txt"); //здесь укажите нужную вам маску файлов


Пока СтрДлина(ИмяФайла)<>0 Цикл
     ИмяФайла = ФС.НайтиСледующийФайл();
     сообщить(ИмяФайла);
КонецЦикла;

kayfatuch Подменю пользователя
сообщение 16.11.24, 23:43
Сообщение #16

Общительный
**
Группа: Пользователи
Сообщений: 38
Из: Кривой Рог
Спасибо сказали: 2 раз
Рейтинг: 2

Цитата(andrew76 @ 16.11.24, 18:19) *
С определённым заголовком файла или по определенному расширению файла нужно перебирать файлы ?
Если с определённым заголовком файла,то штатными средствами 1с 7.7 этого сделать нельзя.Нужно подключать внешнюю компоненту.
Если же по определенному расширению файла перебирать файлы в папке,то это можно так примерно сделать:


Нет именно определённый заголовок. Расширение то одинаковое условно есть файл с такими именами "ExpenseInvoice_24-10-2024_17-29-19.txt" и "IncomeInvoice_24-10-2024_17-29-19.txt" и вот они падают в папку обмена. надо что бы 1с находила по примеру типа "ExpenseInvoice*.txt" и "IncomeInvoice*.txt" по очереди в папке, втягивала их на основе заголовка(соответственно приходку в приходку расходку в расходку) и далее каким либо способом исключала их из прохода(обработка будет работать в цикле на отдельном пользователе(периодично просыпаясь и засыпая)) далее от этих файлов можно и средствами винды избавлятся.. Вот собственно в чём полная суть этой обработки.

Внешняя компонента говорите... будем искать значит..

andrew76 Подменю пользователя
сообщение 17.11.24, 4:42
Сообщение #17

Оратор
*****
Группа: Пользователи
Сообщений: 480
Из: Казахстан
Спасибо сказали: 49 раз
Рейтинг: 49

Цитата(kayfatuch @ 17.11.24, 2:43) *
втягивала их на основе заголовка(соответственно приходку в приходку расходку в расходку)

Не совсем понял.Если просто прочитать содержимое текстового файла,то компоненты внешние не нужны.
В 1С 7.7 есть объект "Текст" для таких случаев.

ТекстФайл = СоздатьОбъект("Текст");
ТекстФайл.Открыть("Файл.txt");
Для i = 1 По ТекстФайл.КоличествоСтрок() Цикл
     нужнаяСтрока=ТекстФайл.ПолучитьСтроку(i); //здесь анализируйте содержимое строки
     Сообщить(нужнаяСтрока);
КонецЦикла;


Если же нужно побайтовое чтение из файла,то нужна будет внешняя компонента.

kayfatuch Подменю пользователя
сообщение 17.11.24, 11:56
Сообщение #18

Общительный
**
Группа: Пользователи
Сообщений: 38
Из: Кривой Рог
Спасибо сказали: 2 раз
Рейтинг: 2

Цитата(andrew76 @ 17.11.24, 4:42) *
Не совсем понял.Если просто прочитать содержимое текстового файла,то компоненты внешние не нужны.
В 1С 7.7 есть объект "Текст" для таких случаев.


Если совсем простыми словами: ТСД генерирует приходка.txt расходка.txt, далее эти файлы отправляются на сервер в папку обмена. 1С должна на основе названия файла(хотя можно и в сам файл маркер вставить) считать его и создать или приходный документ или расходный. после считывания должна проверить есть ли ещё документы для считывания и т.д. Сложность тут с учётом предложенного вами варианта в том как сделать что бы 1с больше не спотыкалась об один и тот же файл при выборе файла для втягивания... была мысль очищать файл в конце но тут вопрос как ей сказать что раз файл пустой нужно найти следующий

andrew76 Подменю пользователя
сообщение 17.11.24, 16:39
Сообщение #19

Оратор
*****
Группа: Пользователи
Сообщений: 480
Из: Казахстан
Спасибо сказали: 49 раз
Рейтинг: 49

kayfatuch @ Сегодня, 14:56 * ,

Объединить 2 цикла , в примерах, которые я выкладывал выше.
Один цикл - перебор файлов типа .txt.Внутри этого цикла-считывание информации из текстового файла.

В помощь.В объекте ФС есть метод - Атрибуты файла.
Это если понадобится фильтровать файлы в каталоге по дате создания.

АтрибутыФайла(<?>,,,,,,);
Синтаксис:
АтрибутыФайла(<ИмяФайла>,<РазмерФайла>,<АтрибутыФайла>,<ВремяСоздания>,<ВремяПоследнегоДоступа>,<ВремяПоследнейЗаписи>,<РасширенноеИмяФайла>)
Назначение:
Возвращает атрибуты файла (в параметрах).
Параметры:
<ИмяФайла> - строка с именем файла;
<РазмерФайла> - переменная, принимающая размер файла в байтах;
<АтрибутыФайла> - переменная, принимающая атрибуты файла;
Возвращаемое строковое значение длиной 9 символов, в котором закодированы атрибуты файла. Символы могут принимать значения ''0'' или ''1'':
первый символ: если ''1'' - файл только для чтения;
второй символ: если ''1'' - скрытый файл;
третий символ: если ''1'' - системный файл;
четвертый символ: если ''1'' - каталог;
пятый символ: если ''1'' - архивный файл;
шестой символ: если ''1'' - обычный файл (все другие атрибуты не установлены);
седьмой символ: если ''1'' - временный файл;
восьмой символ: если ''1'' - файл, сжатый каким-либо архиватором;
девятый символ: если ''1'' - нет доступа к файлу.
<ВремяСоздания> - переменная, принимающая строку с датой и временем создания файла;
<ВремяПоследнегоДоступа> - переменная, принимающая строку с датой и временем последнего доступа к файлу;
<ВремяПоследнейЗаписи> - переменная, принимающая строку с датой и временем последней записи файла;
<РасширенноеИмяФайла> - переменная, принимающая строку с полным именем файла.

volodya1122 Подменю пользователя
сообщение 17.11.24, 21:45
Сообщение #20

Оратор
Иконка группы
Группа: Местный
Сообщений: 352
Из: Тернопіль
Спасибо сказали: 139 раз
Рейтинг: 141.7

Цитата(kayfatuch @ 17.11.24, 11:56) *
Сложность тут с учётом предложенного вами варианта в том как сделать что бы 1с больше не спотыкалась об один и тот же файл при выборе файла для втягивания... была мысль очищать файл в конце но тут вопрос как ей сказать что раз файл пустой нужно найти следующий


Вам вже всю потрібну інформацію виклали више.


Функция ОбработатьОдинТекстовийФайл(ВхФайл)
Успех=1;  //для контроля, если что-то пойдет не так в обработке файла
ТекстФайл = СоздатьОбъект("Текст");
ТекстФайл.Открыть(ВхФайл);
Для i = 1 По ТекстФайл.КоличествоСтрок() Цикл
     нужнаяСтрока=ТекстФайл.ПолучитьСтроку(i); //здесь анализируйте содержимое строки
     // получили строку и разносим в документ, как нужно
Если НештатнаяСитуация тогда
Успех = 0;
КонецЕсли;

     Сообщить(нужнаяСтрока);
КонецЦикла;

Возврат Успех
КонецФункции


Процедура ОбработатьВсеТекстовиеФайлиВКаталоге()
ФС.УстТекКаталог(каталог); //здесь пропишите маршрут своего каталога с файлами
ИмяФайла = "";
ИмяФайла = ФС.НайтиПервыйФайл("*.txt"); //здесь укажите нужную вам маску файлов


Пока СтрДлина(ИмяФайла)<>0 Цикл
//тут обойдем все текстовые файли в каталоге  
  ИмяФайла = ФС.НайтиСледующийФайл();
     УспехОбработкиФайла=ОбработатьОдинТекстовийФайл(ИмяФайла);
     Если УспехОбпаботкиФайла=1 тогда
   // если очередной файл обработали, удаляем его с каталога
     ФС.УдалитьФайл(ИмяФайла);
     КонецЕсли;
     сообщить(ИмяФайла);
КонецЦикла;
КонецПроцедуры


Сообщение отредактировал volodya1122 - 17.11.24, 21:52

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


2 страниц V   1 2 >
Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 07.12.24, 23:44
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!