Как загрузить текстовый файл без разделителей в ТаблицуЗначений 1С?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как загрузить текстовый файл без разделителей в ТаблицуЗначений 1С?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #33865
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        напиши код загрузки в таблицу значений из текстового файла заголовок таблицы:
        │ Наименование МЦ │ Группа товара │Код группы│Номен.номер│ ОКДП │Учетн.единица│
        строки в таблице идут без разделителей:
        Светильник OPL/R414HF1 СВЕТИЛЬНИКИ ВСТРАИВАЕМЫЕ 00420 420875 шт.

      • #33866
        bot_avaOdin — Одинэсник
        Участник

          Павел, вот пример кода на 1С для загрузки данных из текстового файла в ТаблицуЗначений, где строки идут без явных разделителей, а поля фиксированной ширины. В вашем примере поля идут с фиксированной позицией и шириной, поэтому для разбора строки используем функцию Сред(Строка, Начало, Длина).

          1C
          Функция ЗагрузитьТаблицуИзФайла(ИмяФайла) Экспорт
              // Создаем таблицу значений с нужными колонками
              Таблица = Новый ТаблицаЗначений;
              Таблица.Колонки.Добавить("НаименованиеМЦ", Новый ОписаниеТипов("Строка", 100));
              Таблица.Колонки.Добавить("ГруппаТовара", Новый ОписаниеТипов("Строка", 100));
              Таблица.Колонки.Добавить("КодГруппы", Новый ОписаниеТипов("Строка", 20));
              Таблица.Колонки.Добавить("НоменНомер", Новый ОписаниеТипов("Строка", 20));
              Таблица.Колонки.Добавить("ОКДП", Новый ОписаниеТипов("Строка", 20));
              Таблица.Колонки.Добавить("УчетнЕдиница", Новый ОписаниеТипов("Строка", 20));
              
              // Открываем файл для чтения
              Поток = Новый ТекстовыйДокумент;
              Поток.Прочитать(ИмяФайла, КодировкаТекста.UTF8);
              
              // Пропускаем заголовок (первую строку)
              Строки = Поток.Строки;
              Если Строки.Количество() < 2 Тогда
                  Возврат Таблица; // Нет данных
              КонецЕсли;
              
              Для НомерСтроки = 2 По Строки.Количество() Цикл
                  Строка = Строки[НомерСтроки];
                  
                  // Разбор строки по фиксированным позициям (примерные позиции, подкорректируйте под ваш файл)
                  // В вашем примере:
                  // Наименование МЦ: с 1 по 30 символ
                  // Группа товара: с 31 по 60 символ
                  // Код группы: с 61 по 66 символ
                  // Номен.номер: с 67 по 73 символ
                  // ОКДП: с 74 по 83 символ
                  // Учетн.единица: с 84 по конец строки
                  
                  НоваяСтрока = Таблица.Добавить();
                  НоваяСтрока.НаименованиеМЦ = СтрЗаменить(СокрЛП(Сред(Строка, 1, 30)), "  ", " ");
                  НоваяСтрока.ГруппаТовара = СокрЛП(Сред(Строка, 31, 30));
                  НоваяСтрока.КодГруппы = СокрЛП(Сред(Строка, 61, 6));
                  НоваяСтрока.НоменНомер = СокрЛП(Сред(Строка, 67, 7));
                  НоваяСтрока.ОКДП = СокрЛП(Сред(Строка, 74, 10));
                  НоваяСтрока.УчетнЕдиница = СокрЛП(Сред(Строка, 84));
              КонецЦикла;
              
              Возврат Таблица;
          КонецФункции
          

          Объяснение:
          — Используем фиксированные позиции для полей, так как в файле нет разделителей.
          — Функция `СокрЛП` убирает лишние пробелы слева и справа.
          — Первая строка файла — заголовок, пропускаем.
          — Позиции и длины полей нужно подкорректировать под реальный формат вашего файла, здесь примерные.

          Если нужно, могу помочь с уточнением позиций по вашему файлу.

          Рекомендую посмотреть здесь: https://infostart.ru/public/1695607/ (пример работы с табличными документами и текстовыми файлами с фиксированной шириной полей).

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С