Как выгрузить в текстовый файл в 1с

Обновлено: 06.07.2024

В 1С 8.3 (8.2) для работы с файлами существует два объекта: Файл и ДиалогВыбораФайла.

Рассмотрим каждый по отдельности.

Объект Файл служит для управления параметрами файлов.

Сразу стоит заметить, что данный объект не предназначен для чтения и записи из файлов.

Например, прочитаем параметры некоторого файла, находящегося на диске C:

В результате мы получим следующую информацию (если файл найден):

Параметры файла:
Полное имя файла: C:\Работа с файлами\статья.txt
Имя: статья.txt
Имя без расширения: статья
Расширение: .txt
Путь без имени: C:\Работа с файлами\
Размер: 899
Это файл: Да
Изменен: 18.05.2015 16:21:28
Только чтение: Нет
Невидимость: Нет

Запись в файл

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

Теперь, когда мы выбрали и открыли файл, можно с ним работать, т.е. прочитать его содержимое или записать в него что-нибудь.
Рассмотрим пример:

Чтение файла в 1С

Часто бывает необходимо прочитать текст файла построчно, например, для анализа каждой строки. Для этого используем объект ЧтениеТекста.

Запись текста из 1С в файл

Заметим, что при записи текстового файла можно установить кодировку.

Копирование файла

Здесь все очень просто

Перемещение

Удаление

Диалог выбора файла

В указанных выше примерах есть одно неудобство. Путь к файлу прописан жестко в коде. Чтобы выбрать файл интерактивно, существует объект ДиалогВыбораФайла, о котором речь пойдет ниже.

Объект ДиалогВыбораФайла служит для открытия файла (файлов), сохранения файла или выбора каталога в диалоге специального вида.

Например, выберем и откроем некоторый файл с расширением txt:
Задаем режим диалога выбора. Доступны три варианта: ВыборКаталога, Открытие, Сохранение

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

Данный механизм разрабатывался для настройки обмена с клиентом банка в режиме Предприятие (у нас, в Белоруссии, большинство подобных программных продуктов поддерживает загрузку из текстовых файлов), для выгрузки платежных документов и списков для зачисления на карт-счета.

Итак, нам понадобится добавить в конфигурацию 3 объекта:

- Текст
- РеквизитДокумента
- ПереносСтроки
- ВыгрузкаТаблицы
- РеквизитТабличнойЧасти
- Запрос
- ТекстИсполняемогоКода

-НаименованиеДокумента (строка, 50)
-НаименованиеТабличнойЧасти (строка, 50)
-ИмяТекстовогоФайла (строка, 50)
-ПутьВыгрузки (строка, 100)
-Табличные части: ШаблонВыгрузкиШапки и ШаблонВыгрузкиТабличнойЧасти

Структура данных табличной части идентичная:

- ТипДанных (Перечисление.ТипДанныхВыгрузки)
- Значение (Строка неограниченной длины)
- ФорматнаяСтрока (Строка, 20)

Обработка. ВыгрузкаДокументов. Собственно, данная обработка формирует по заданному пользователем шаблону многострочный текстовый документ и записывает на диск. Строки для добавления в документ формируются в зависимости от значения перечисления ТипДанныхВыгрузки :

Значение РеквизитДокумента добавляет к строке значение реквизита документа, по его имени, заданному в конфигураторе. Значение элемента справочника получается по основному представлению . Для примитивных типов данных можно указывать значение форматной строки.

Если нет возможности получить из документа нужного значения, применяется запрос. Требование к запросу – получение единственного значения

ТекстИсполняемогоКода содержит текст, который система может преобразовать в выполняемый код (может содержать, например, ссылку на процедуру общего модуля)

ПереносСтроки добавляет символ переноса строки.

ВыгрузкаТаблицы перебирает в цикле все строки табличной части, наименование которой задано реквизитом НаименованиеТабличнойЧасти и формирует на ее основании строки для добавления в текстовый документ

Для примера, рассмотрим некоторые элементы настройки, используемой для выгрузки списков на зачисления средств на карт-счета для одного из наиболее распространенного клиента банка «Электронные платежи» разработка компании «Системные технологии» (его используют, например, «Приорбанк», «Белинвестбанк», банк «БелВЭБ» , банк «Москва-Минск» ).

Необходимо добавить в текстовый документ следующую строку: «***** ^Type=61^ ^Acc=0000000000000^ - Список для зачисления денежных средств на счета физических лиц » . Для этого в настройку выгрузки необходимо добавить 2 строки:


Для добавления текста «^Date=10.12.2012^» необходимо добавить в настройку 4 строки, при этом представить дату документа в нужном формате:


Для преобразования суммы документа в число прописью в строке «^AccountBYRByWords=Два миллиона шестьсот три тысячи белорусских рублей^» пришлось добавить в общий модуль соответствующую процедуру, и вызвать ее с помощью метода Выполнить()


Список сотрудников с указанием лицевого счета и сумы к зачислению должны выглядеть в виде строки: «^_Table=Npp=1

Name1=Иванов Иван Петрович

Name1=Смирнова Наталья Васильевна

^» , для этого в табличную часть Настройка выгрузки добавлены следующие строки:


Когда обработка встречает тип данных ВыгрузкаТаблицы , делается выборка строк соответствующей табличной части, на каждом витке цикла обрабатываются данные строки по правилам, аналогичным описанным выше:


Если необходимо получить некоторое значение, которое в явном виде нельзя получить из данных документа используется запрос. Например, нужно получить строку «^UNN=200452784^», где 200425784 это учетный номер плательщика, для этого используется запрос, и настройка выглядит следующим образом:


В выгрузке каркасной конфигурации реализована настройка выгрузки списка для зачисления средств на карт-счета физических лиц.

Для написания статьи я создал форму обработки, на которой разместил реквизит «РеквизитСтрока» с типом Строка, а так же две команды: ЗагрузитьТекстовыйФайл и СохранитьТекстовыйФайл. Реквизит и команды я поместил на форму, у поля, которое связанно с реквизитом «РеквизитСтрока», выбрал тип «Поле текстового документа».

В пользовательском приложении должна получиться такая форма:


Для работы с текстовыми документами в 1С: Предприятии есть специальный объект ТекстовыйДокумент, который создается при помощи конструктора Новый. Решим следующую задачу: будем при выполнении команды СохранитьТекстовыйФайл сохранять текст из реквизита «РеквизитСтрока» в определенный файл, а при выполнении команды ЗагрузитьТекстовыйДокумент будем загружать текст из определенного файла.

При сохранении, код в обработчике команды будет следующий:

В этом коде мы создаем объект ТекстовыйДокумент (строка //1), и при помощи метода этого объекта УстановитьТекст помещаем в данный объект текст из реквизита «РеквизитСтрока» (строка //2).

А дальше нам необходимо записать текстовый документ в файл, для этого мы используем метод НачатьЗапись, который нужно применять в случае немодального использования конфигурации. Он имеет следующий синтаксис

НачатьЗапись(<ОписаниеОповещения>, <ИмяФайла>, <ТипФайла>, <РазделительСтрок>)

Первый параметр — ОписаниеОповещения содержит имя процедуры, которая вызывается после записи. Можно не указывать, что мы и делаем в строк //3.

ИмяФайла – полное имя файла.
Смысл остальных параметром можете узнать в справочной информации.


Отмечу только, что разделитель я указал, как Символы.ВК + Символы.ПС, потому что такой набор символов используется по умолчанию при загрузке текстового файла.

Теперь напишем загрузку текстового файла.

В этом случае, код будет немного сложнее, чем при записи. Мы используем метод НачатьЧтение объекта текстовый документ (строка //4), но в этот раз передаем в него описание оповещения (создали в строке //3), где указываем процедуру ПослеЧтенияФайла, а в описание оповещения передаем в процедуру ПослеЧтенияФайла параметр, в котором указали созданный текстовый документ (строка //2). И уже в процедуре ПослеЧтенияФайла реквизиту РеквизитСтрока присваиваем текст, который содержится в текстовом документе, при помощи метода текстового документа ПолучитьТекст.

Почему мы извлекаем текст именно в процедуре оповещения ПослеЧтенияФайла? Потому что она вызывается именно тогда, когда завершено чтение файла. Если Вы попытаетесь прочитать текст, после строки //4, то ни чего не получится. Это одна из особенностей работы асинхронных методов 1С 8.3.

Сейчас мы спокойно сможем сохранить текст в файл, путь к которому указан в качестве первого параметра метода НачатьЗапись. Но, иногда бывает нужно, что бы пользователь сам выбирал, в какой файл сохранить текст. Переделаем наш код записи текста: будем вызывать окно, в котором пользователь укажет каталог, куда будет записан файл и само название файла.

В этом случае мы вызываем диалог выбора файла с режимом сохранения, заполняем нужные параметры этого объекта, и в конце используем метод Показать. В качестве единственного параметра этого метода нужно указать обработчик оповещения, который мы создали строкой ранее, с процедурой, которая выполнится после сохранения файла (после нажатия на кнопку «Сохранить» диалога). А вот уже в обработчике оповещения ПослеСохраненияФайла мы создаем текстовый документ, устанавливаем в него текст из реквизита и записываем в файл, путь которого указан в массиве – параметре процедуры ВыбранныеФайлы. В первом параметре процедуры обработки оповещения содержится массив полных путей к выбранным файлам (в случае множественного выбора). Если Вы посмотрите на переменную ВыбранныеФайлы в отладке, то увидите путь к этому массиву.


Теперь выполним обратную задачу: будем загружать текст из файла в реквизит на форме. Переделаем обработчик команды ЗагрузитьТекстовыйФайл.

В этом случае, в обработчике ЗагрузитьТекстовыйФайл мы так же используем объект ДиалогВыбораФайл, который создаем в режиме Открытия, заполняем параметры этого диалога и используем метод Показать, где в качестве параметра используется описание оповещения, с процедурой, которая выполнится после выбора файла (после нажатия на кнопку «Открыть» диалога). А в процедуре ПослеЗагрузкиФайла, которая указана в оповещение, мы загружаем в текстовый файл по пути, который указан в массиве — параметре процедуры ВыбранныеФайл. В этом случае алгоритм действий точно такой же, как и в том случае, когда мы путь к файлу указывали жестко.

Ниже выложен пример обработки, где выполняется загрузка и выгрузка текстового файла в немодальном режиме. Обработка тестировалась на версии платформы 8.3.13.1513, ниже приведены несколько скринов этой обработки.

Как прочитать текстовый файл средствами платформы 1С 8.3 и как работать с ними в целом? Если не брать во внимание чтение специализированных форматов текстовых файлов то, по сути, во встроенном языке для этих целей реализованы два объекта: ЧтениеТекста и ТекстовыйДокумент. Рассмотрим на примерах, какие возможности предоставляет каждый из них.

ЧтениеТекста()

Объект ЧтениеТекста() предназначен для последовательного чтения текстовых файлов (большой длины)

Если требуется предварительно проанализировать параметры файла или параметры каталога, в котором он расположен необходимо использовать совместно с объектом Файл(). Пример кода, который перед чтением проверяет текстовый файл на существование, может выглядеть так:

Зачастую требуется возможность интерактивного выбора файла. Тогда необходимо использовать объект ДиалогВыбораФайла().Доступны три режима роботы объекта: ВыборКаталога, Открытие, Сохранение. Пример кода:

Если есть необходимость контролировать длину читаемых строк текстового файла, стоит заменить метод ПрочитатьСтроку() на Прочитать(). Однако отметим, что при указании параметра <РазмерСтроки>, заданное число может включать в себя символы переноса строки. То есть символы переноса строки идут в счёт параметра. Пример кода:

ТекстовыйДокумент()

Объект ТекстовыйДокумент() предназначен для работы с текстами. Позволяет получать и сохранять текст в файле, работать со строками, открывать текст в текстовом редакторе 1С:Предприятия. Обладает более богатым набором методов и свойств в отличие от объекта ЧтениеТекста(). При необходимости к нему так же применимы объекты Файл() и ДиалогВыбораФайла().

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

Таким образом, с помощью данных объектов разработчику предоставляются широкие возможности для анализа и обработки текстовых документов.

Читайте также: