Версия для печати темы (https://pro1c.org.ua/index.php?s=cb52cd7a26819b51eb478c1c7b85e4b1&showtopic=67673)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Чтение файла txt для вставки данных

Автор: kayfatuch 15.11.24, 15:33

Доброго времени суток господа. У меня 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

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


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

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

Автор: kayfatuch 15.11.24, 17:09

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

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


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

Автор: andrew76 15.11.24, 17:17

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

вот так работает ?

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


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


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

Автор: kayfatuch 15.11.24, 17:37

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


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

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

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

Автор: andrew76 15.11.24, 17:40

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

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

Автор: kayfatuch 15.11.24, 17:48

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


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

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

Автор: andrew76 15.11.24, 17:59

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

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

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


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

Автор: kayfatuch 16.11.24, 0:49

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

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

Автор: kayfatuch 16.11.24, 1:54

Итак вот нынешняя версия процедуры:

Процедура СозРасходки()
    // Создаем новый документ "Расходная накладная"
    Накладная = СоздатьОбъект("Документ.РасходнаяНакладная");
    Накладная.Новый();
    ДатаДок = РабочаяДата(Контекст, "Запись");    
    Файл = СоздатьОбъект("Текст");
    Файл.Открыть("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

Цитата(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

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

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


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

Автор: Alegzander 16.11.24, 15:09

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

Автор: kayfatuch 16.11.24, 16:40

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

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

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

Автор: andrew76 16.11.24, 18:19

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

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

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


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

Автор: kayfatuch 16.11.24, 23:43

Цитата(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

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

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

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


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

Автор: kayfatuch 17.11.24, 11:56

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


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

Автор: andrew76 17.11.24, 16:39

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

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

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

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

Автор: volodya1122 17.11.24, 21:45

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


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


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

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

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


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


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

Автор: andrew76 18.11.24, 13:22

Цитата(volodya1122 @ 18.11.24, 0:45) *
обработка будет работать в цикле на отдельном пользователе

Только нужно не забыть этому пользователю дать разрешение на запись и удаление или перемещение файлов
на сервере ,где эти файлы будут обрабатываться.

Автор: kayfatuch 26.11.24, 10:47

Цитата(andrew76 @ 18.11.24, 13:22) *
Только нужно не забыть этому пользователю дать разрешение на запись и удаление или перемещение файлов
на сервере ,где эти файлы будут обрабатываться.

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

В целом это был очень ценный для меня опыт , всем кто помогал спасибо прожато)

Автор: vovkpro 27.11.24, 16:02

kayfatuch @ Вчера, 10:47 * ,
Вторая не выходит для документа вытянуть данные об товаре.
Щоби добавити товар у накладну - спочатку його по артикулу потрібно знайти у довіднику. Потім вже з довідника вставляти у розхідну...

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua