Создание и использование временных файлов в 1С:Предприятие 8
Расскажу случай из своей практики. Однажды мне пришлось наладить выгрузку данных в 1С:Бухгалтерия из не тиражируемой конфигурации. Выгрузка была в виде отдельной обработки, работающей по правилам обмена. Сами правила были прикреплены в виде макета двоичных данных. Алгоритм работы типичный – правила выгружаются во временный файл, а затем подтягиваются обработкой « Универсальный обмен данными в формате XML».
Разработчик правил и обработки переноса бил себя в грудь и клялся, что у него все работает отлично. На практике же, во время выгрузки данных постоянно возникала ошибка. Текст сообщение об ошибке в открытую заявлял, что проблема кроется в правилах обмена. «Нет больше такого свойства у документа, выгружать отказываюсь» - гласил текст сообщения. Ковыряться в правилах обмена мне не хотелось, т.к. работа это не моя. Вместо этого я открыл код обработки и решил посмотреть, как организован процесс выгрузки правил обмена во временный файл.
Оказалось, что проблема была именно в этом. Дело в том, что программист не удосужился сделать уникальное имя файла для правил обмена (во временной директории), да еще и вставил проверку: «Если файл существует, то выгрузка не требуется». Само собой, все работало пока обработка, а точнее макет с правилами не обновился. В итоге, пользователи постоянно пытались осуществлять выгрузку с помощью морально устаревших правил обмена. «Временный файл» в директории «temp» стал постоянным и пока его не удалишь вручную, для выгрузки всегда будет использоваться всегда он.
Создавать временные файлы нужно правильно
Чтобы не возникло таких курьезных ситуаций, нужно не пытаться изобретать велосипеды и костыли в виде «хитрых» функций, использующих COM-объекты. Достаточно воспользоваться встроенной в платформу функцией – ПолучитьИмяВременногоФайла(), которая автоматом решает многие проблемы:
- Гарантирует, что имя файла будет действительно уникально;
- Если разработчик забудет удалить файл самостоятельно, то он обязательно удалится при следующем запуске платформы.
Автоматическое удаление временных файлов во время перезапуска платформа – весьма интересная фича, теоретически позволяющая разработчику забить на необходимость удалять файлы самостоятельно. Правда злоупотреблять ей все же не стоит. Если код выполняется на сервере, то нужно понимать, что сервер может долго не перезапускаться, а значит, папка temp будет забиваться ненужными файлами. В связи с этим, не стоит полностью доверять «грязную» работу платформе. Лучше использовать эту возможность как запасной вариант, а в свой код добавлять одну лишнюю строчку кода для принудительного удаления временного файла.
2014-02-12 в 07:06:14
Похоже я один из тех ивращенцев про которых вы говорите. Спасибо буду знать. Свое решение я брал с мисты
2014-02-12 в 10:21:03
Рад, что заметка оказалась для вас полезной. Буду рад видеть вас среди постоянных читателей!