1с создать временный файл

Обновлено: 08.07.2024

«1С:Предприятие» поддерживает два варианта работы:
● файловый,
● клиент-серверный.

Файловый вариант работы с информационной базой рассчитан на персональную работу одного пользователя или работу небольшого количества пользователей в локальной сети. В этом варианте все данные информационной базы (конфигурация, база данных, административная информация) располагаются в одном файле.
Такой вариант работы обеспечивает легкость установки и эксплуатации автоматизированной системы. При этом для работы с информационной базой не требуются дополнительные программные средства, достаточно иметь операционную систему и «1С:Предприятие».
Файловый вариант «1С:Предприятия» обеспечивает высокую целостность информационной базы и простое создание резервных копий. Исключена ситуация, когда пользователь может по ошибке (например, при копировании информационной базы) перепутать различные файлы информационной базы и привести таким образом систему в неработоспособное состояние.
Кроме этого, резервное копирование может осуществляться на файловом уровне, путем простого копирования файла информационной базы.
Однако, несмотря на легкость и простоту использования, файловый вариант обладает некоторыми ограничениями. Также следует помнить о том, что использование файлового варианта с подключением через веб-сервер рекомендуется использовать для работы небольшого количества пользователей, при условии отсутствия длительных операций.

Ограничения файлового варианта

Особенности работы файлового варианта базы данных с файловой системой

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

  • Сбои в работе сети,
  • Влияние антивирусов,
  • Включенное автономное кэширование.

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

  • Отключить проверку антивирусом файлов .1CD.
  • Выключить автономное кэширование для разделяемых каталогов информационной базы.
  • Следить за техническим состоянием сетевой инфраструктуры.

Это действительно важно. Результатом некорректной работы файловых функций могут быть нарушения в работе с программой или разрушение файлов баз данных.

Размещение данных 1С:Предприятия 8


Размещение данных в файловом варианте

Данные, которые 1С:Предприятие использует всегда, могут быть разделены на 5 групп в соответствии с их назначением и мерой их ответственности:


Работа с новым форматом файловой базы данных

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

Если Вы хотите проверить параметры Вашей файловой базы данных, используйте следующий вызов утилиты (указав в команде правильный путь к Вашей базе данных):


Утилита тестирования chdbfl

Утилита предназначена для автономной проверки и исправления файлов базы данных.

Данная утилита предназначена для работы только с файловой базой данных. Утилита доступна только в 32-разрядном варианте. Файловая база данных используется:

  • для хранения информационной базы в файловом варианте;
  • хранения хранилища конфигурации.

Для запуска утилиты в каталоге установки системы «1С:Предприятие» нужно запустить приложение chdbfl. На экран выводится окно (см. рис.1)

Утилита тестирования и исправления информационных баз

Перед использованием данной утилиты следует обязательно сделать резервную копию файла базы данных.

В поле Имя файла БД указать или выбрать имя файла информационной базы.

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

Для работы с файлами требуется понимание работы платформы и некоторых новшеств.

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

Файлы будем хранить в конфигурации в клиент серверной версии 8.3.
Для хранения файлов будем использовать реквизит с типом "ХранилищеЗначения".
Особенностью данного реквизита является его недоступность на клиенте, поэтому работу с ним необходимо проводить только на сервере.

Концепция загрузки с клиента на сервер следующая:
1. Загружаем файлы от клиента на сервер помещая их во временное хранилище
2. На клиенте сохраняем адрес
3. При записи объекта на сервере сохраняем файл в базу данных

Пройдем более детально:
Загрузка файла происходит во временное хранилище на сервере и не передается с контекстом на клиент.
Для передачи адреса файла создадим отдельную переменную формы типа строка, назовем ее "АдресЗагруженногоФайла".

Перед загрузкой нужно получить от пользователя разрешение на работу с его файловой системой.

Для загрузки с клиента на сервер файла используем типовой метод "НачатьПомещениеФайла".
При работе с ним нужно учесть один момент - файл загружается во временное хранилище на сервер и на клиент передается адрес этого хранилища.
Этот адрес необходимо сохранить чтобы файл можно было найти на сервере.
Для этого используем переменную формы "АдресЗагруженногоФайла".

У нас есть адрес файла на сервере но нет доступа к реквизиту с типом "ХранилищеЗначений" на клиенте.
Для записи в этот реквизит перед записью на сервере получим файл из временного хранилище и положим в реквизит.

Загрузка файла в базу данных готова.

Концепция выгрузки с сервера на клиента следующая:
1. Файл достаем с реквизита и ложим во временное хранилище
2. Передаем с сервера на клиент адрес
3. Сохраняем файл на клиенте

Для работы с файлами на клиенте нужно получить от пользователя разрешение на работу с его файловой системой.

На сервере готовим метод который вытащит файл из реквизита и положит во временное хранилще

Используем типовой метод "НачатьПолучениеФайлов" для передачи файла с сервера на клиента.
В него необходимо передать массив получаемых файлов.
В этом массиве необходимо указать адреса нахождения файлов на сервере или адреса временных хранилищ файлов.
Во время работы файлы будут загружены по этим адресам и положены в массиве "ПолученныеФайлы" во временные хранилища.
На клиенте из этих хранилищ достаем файлы и сохраняем.

Подсистема «Обмен данными» библиотеки стандартных подсистем содержит 4 варианта ( технологии) обмена информацией между различными информационными базами:

  • распределенные информационные базы (РИБ);
  • обмен данными через универсальный формат;
  • обмен данными по правилам обмена (правила обмена создаются при помощи конфигурации «Конвертация данных», редакция 2.1);
  • обмен данными без правил обмена.


Рис. 1 Последние релизы БСП 2.3

Описание формата EnterpriseData

Что такое формат EnterpriseData ?

Это формат, позволяющий описать объект информационной базы (контрагента, накладную и т.п.) или сообщить о факте удаления этого объекта. Ожидается, что конфигурация, получившая файл в формате EnterpriseData, отреагирует соответствующим образом – создаст у себя новые объекты и удалит те, которые в файле помечены как удаленные. Он предназначен для обмена информацией между конфигурациями УТ, РТ, УНФ, БП. Также формат может использоваться для обмена информацией с любыми другими информационными системами: он не зависит от особенностей собственного программного обеспечения или структур информационных баз, которые участвуют в обмене и не содержит в себе явных ограничений использования.

Версия формата EnterpriseData


Рис. 3 Структура XDTO-пакетаExchangeMessage

Как обмениваться данными в формате EnterpriseData?

  • через выделенный файловый каталог,
  • через каталог FTP,
  • через веб-сервис, развернутый на стороне информационной базы. Файл с данными передается как параметр веб-методов.

При обмене с использованием планов обмена конфигурации в ходе синхронизации передают только информацию об изменениях, произошедших со времени последней синхронизации (чтобы минимизировать объем передаваемой информации). При первой синхронизации конфигурация выгрузит все объекты в формате EnterpriseData в XML-файл (поскольку все они являются «новыми» для стороннего приложения).


При передаче данных от внешнего приложения в конфигурацию картина меняется на обратную. Приложение должно заполнить секцию <Confirmation> соответствующим образом, а в секцию <Body> поместить объекты для синхронизации в формате EnterpriseData.


Более подробно об обмен данными с прикладными решениями на платформе «1С:Предприятие» в формате EnterpriseData можно посмотреть здесь

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


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

Модуль создается автоматически с помощью конфигурации «Конвертация данных», редакция 3.0, на основе настроенных правил обмена либо вручную в конфигураторе.

Модуль состоит из нескольких крупных разделов, каждый из которых содержит свою группу процедур и функций.

  1. Комментарий. Первая строка модуля содержит комментарий с наименованием конвертации. Эта строка необходима для идентификации модуля при использовании команды Загрузка обработчиков в программе «Конвертация данных», редакция 3.0., например. // Конвертация УП2.2.3 от 01.06.2017 19:51:50
  2. Процедуры конвертации. Содержит предопределенные процедуры, которые выполняются на разных этапах синхронизации данных: перед конвертацией, после конвертации, перед отложенным заполнением.
  3. Правила обработки данных (ПОД). Содержит процедуры и функции, которые описывают правила обработки данных.
  4. Правила конвертации объектов (ПКО). Содержит процедуры и функции, которые описывают правила конвертации объектов, а также правила конвертации свойств данных объектов.
  5. Правила конвертации предопределенных данных (ПКПД). Содержит процедуру, заполняющую правила конвертации предопределенных данных.
  6. Алгоритмы. Содержит произвольные алгоритмы, которые вызываются из других правил (ПОД или ПКО).
  7. Параметры. Содержит логику заполнения параметров конвертации.
  8. Общего назначения. Содержит процедуры и функции, которые широко используются в правилах и алгоритмах.

Ниже описаны параметры процедур и функций, которые используются в нескольких видах процедур модуля менеджера.

КомпонентыОбмена. Тип – Структура. Содержит параметры и правила обмена, инициализированные в рамках выполнения сеанса обмена.

НаправлениеОбмена. Тип – Строка. Либо «Отправка», либо «Получение».

ДанныеИБ. Тип – СправочникОбъект либо ДокументОбъект.

Процедуры, связанные с событиями конвертации

Предусмотрены три предопределенные процедуры, которые вызываются в процессе конвертации:

  • ПередКонвертацией. Вызывается перед выполнением синхронизации данных. Обычно в этой процедуре размещается логика инициализации различных параметров конвертации, заполнения значений по умолчанию и т. д. Параметры:КомпонентыОбмена.
  • ПослеКонвертации. Вызывается после выполнения синхронизации данных, но до выполнения отложенного заполнения. Параметры:КомпонентыОбмена.
  • ПередОтложеннымЗаполнением. Вызывается перед выполнением отложенного заполнения. Здесь может быть расположена логика сортировки или корректировки таблицы объектов, подлежащих отложенному заполнению. Параметры:КомпонентыОбмена.

Процедуры ПОД

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

ДобавитьПОД_<ИмяПОД>. Набор процедур, которые наполняют таблицу ПОД правилами для конкретных объектов. Количество таких процедур соответствует количеству ПОД, предусмотренных для данной конвертации в программе «Конвертация данных», редакция 3.0. Параметры: ПравилаОбработкиДанных (таблица значений, инициализированная в рамках выполнения сеанса обмена).

ПОД_<ИмяПОД>_ПриОбработке. Процедура содержит текст обработчика ПриОбработке для конкретного ПОД. Обработчик предназначен для реализации логики конвертации на уровне объектов. Например, назначить конкретному объекту определенное ПКО в зависимости от содержимого объекта. Параметры:

  • ДанныеИБлибо ДанныеXDTO (в зависимости от направления обмена):
  • при отправке – объект (СправочникОбъект,ДокументОбъект);
  • при получении – структуру с описанием объекта XDTO.
  • ИспользованиеПКО. Тип –Структура. Ключ содержит строку с именем ПКО, а значение типа Булево (Истина – ПКО используется, Ложь – ПКО не используется).
  • КомпонентыОбмена.

ПОД_<ИмяПОД>_ВыборкаДанных. Функция содержит текст обработчика ПриВыгрузке. Обработчик предназначен для реализации произвольного алгоритма выборки объектов, подлежащих выгрузке. Возвращаемое значение: массив объектов, подлежащих выгрузке. В массиве могут содержаться как ссылки на объекты информационной базы, так и структура с данными для выгрузки. Параметры: КомпонентыОбмена.

Процедуры ПКО

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

ДобавитьПКО_<ИмяПКО>. Набор процедур, которые наполняют таблицу ПКО правилами для конкретных объектов. Количество таких процедур соответствует количеству ПКО, предусмотренных для данной конвертации в программе «Конвертация данных», редакция 3.0. Параметры: ПравилаКонвертации (таблица значений, инициализированная в рамках выполнения сеанса обмена).

ПКО_<ИмяПКО>_ПриОтправкеДанных. Процедура содержит текст обработчика ПриОтправке для конкретного ПКО. Обработчик используется при выгрузке данных. Предназначен для реализации логики конвертации данных, содержащихся в объекте информационной базы, в описание объекта XDTO. Параметры:

  • ДанныеИБ. Тип –СправочникОбъект, ДокументОбъект. Обрабатываемый объект информационной базы.
  • ДанныеXDTO. Тип –Структура. Предназначен для доступа к данным объекта XDTO.
  • КомпонентыОбмена.
  • СтекВыгрузки. Тип –Массив. Содержит ссылки на выгружаемые объекты с учетом вложенности.

ПКО_<ИмяПКО>_ПриКонвертацииДанныхXDTO. Процедура содержит текст обработчика ПриКонвертацииДанныхXDTO для конкретного ПКО. Обработчик используется при загрузке данных. Предназначен для реализации произвольной логики конвертации данных XDTO. Параметры:

  • ДанныеXDTO. Тип –Структура. Свойства объекта XDTO, прошедшие предварительную обработку для упрощения доступа к ним.
  • ПолученныеДанные. Тип –СправочникОбъект, ДокументОбъект. Объект информационной базы, сформированный путем конвертации данных XDTO. Не записан в информационную базу.
  • КомпонентыОбмена.

ПКО_<ИмяПКО>_ПередЗаписьюПолученныхДанных. Процедура содержит текст обработчика ПередЗаписьюПолученныхДанных для конкретного ПКО. Обработчик используется при загрузке данных. Предназначена для реализации дополнительной логики, которую необходимо выполнить перед записью объекта в информационную базу. Например, нужно ли загрузить изменения в существующие данные ИБ либо следует загрузить их как новые данные. Параметры:

  • ПолученныеДанные. Тип –СправочникОбъект, ДокументОбъект. Элемент данных, сформированный путем конвертации данных XDTO.

Записывается в случае, если эти данные являются для информационной базы новыми (параметр ДанныеИБ содержит значение Неопределено).

В противном случае ПолученныеДанные замещают собой ДанныеИБ (все свойства из ПолученныеДанные переносятся в ДанныеИБ).

Если стандартное замещение данных ИБ полученными данными не требуется, следует прописать свою логику переноса, после чего установить параметру ПолученныеДанные значение Неопределено:

  • ДанныеИБ. Тип –СправочникОбъект, ДокументОбъект. Элемент данных информационной базы, соответствующий полученным данным. Если соответствующие данные не найдены, содержит Неопределено.
  • КонвертацияСвойств. Тип –Таблица значений. Содержит правила конвертации свойств текущего объекта, инициализированные в рамках выполнения сеанса обмена.
  • КомпонентыОбмена.

Процедуры ПКПД

ЗаполнитьПравилаКонвертацииПредопределенныхДанных. Экспортная процедура, в которой располагается логика заполнения правил конвертации предопределенных данных. Параметры: НаправлениеОбмена, ПравилаКонвертации (таблица значений, инициализированная в рамках выполнения сеанса обмена).

Алгоритмы

В программе «Конвертация данных», редакция 3.0 есть возможность создавать произвольные алгоритмы, которые вызываются из обработчиков ПОД и ПКПД. Наименование, параметры и содержимое алгоритмов определяются при разработке правил.

Параметры

ЗаполнитьПараметрыКонвертации. Экспортная процедура, в которой происходит заполнение структуры с параметрами конвертации. Параметры: ПараметрыКонвертации (тип – Структура).

Процедуры и функции общего назначения

ВыполнитьПроцедуруМодуляМенеджера. Параметры: ИмяПроцедуры (строка), Параметры (структура). Экспортная процедура, которая предназначена для вызова неэкспортной процедуры модуля, имя и параметры которой получены на вход. Позволяет выполнить вызов процедуры или функции по строке без использования метода Выполнить.

ВыполнитьФункциюМодуляМенеджера. Параметры: ИмяПроцедуры (строка), Параметры (структура). Функция, назначение аналогично ВыполнитьПроцедуруМодуляМенеджера. Отличие в том, что она вызывает функцию и возвращает ее значение.

Создание и использование временных файлов в 1С:Предприятие 8

Расскажу случай из своей практики. Однажды мне пришлось наладить выгрузку данных в 1С:Бухгалтерия из не тиражируемой конфигурации. Выгрузка была в виде отдельной обработки, работающей по правилам обмена. Сами правила были прикреплены в виде макета двоичных данных. Алгоритм работы типичный – правила выгружаются во временный файл, а затем подтягиваются обработкой « Универсальный обмен данными в формате XML».

Оказалось, что проблема была именно в этом. Дело в том, что программист не удосужился сделать уникальное имя файла для правил обмена (во временной директории), да еще и вставил проверку: «Если файл существует, то выгрузка не требуется». Само собой, все работало пока обработка, а точнее макет с правилами не обновился. В итоге, пользователи постоянно пытались осуществлять выгрузку с помощью морально устаревших правил обмена. «Временный файл» в директории «temp» стал постоянным и пока его не удалишь вручную, для выгрузки всегда будет использоваться всегда он.

Создавать временные файлы нужно правильно

Чтобы не возникло таких курьезных ситуаций, нужно не пытаться изобретать велосипеды и костыли в виде «хитрых» функций, использующих COM-объекты. Достаточно воспользоваться встроенной в платформу функцией – ПолучитьИмяВременногоФайла(), которая автоматом решает многие проблемы:

- Гарантирует, что имя файла будет действительно уникально;

- Если разработчик забудет удалить файл самостоятельно, то он обязательно удалится при следующем запуске платформы.

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

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