Как настроить автоматическую выгрузку отчетов о продажах в TXT при закрытии смены в 1С:Розница?

Программист 1С v8.3 (Управляемые формы) 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

В розничной торговле часто возникает необходимость оперативного получения данных о продажах в сторонние системы или для контроля руководством. Одной из популярных задач является автоматическое формирование текстового файла (TXT) в момент закрытия кассовой смены. Рассмотрим подробнее, как реализовать этот функционал в конфигурации 1С:Розница 2.2, учитывая особенности работы в многопользовательском режиме и клиент-серверную архитектуру.

Выбор оптимальной точки подключения кода

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

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

  1. Расширение конфигурации: Это самый правильный метод. Мы создаем расширение, чтобы основная база оставалась на поддержке. В расширении используем аннотацию &После для процедуры проведения документа.
  2. Подписка на событие: Можно создать подписку на событие ОбработкаПроведения для документа ОтчетОРозничныхПродажах. Это позволит коду выполняться каждый раз, когда отчет записывается в базу как финальный документ смены.

Сбор необходимых данных для отчета

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

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

Программная генерация TXT-файла

Для создания файла используем объект ЗаписьТекста. Посмотрим на пример реализации логики записи данных:


// Создаем объект для записи файла
ПутьКФайлу = "C:\Reports\Sales_" + Формат(Объект.Дата, "ДФ=yyyyMMdd") + ".txt";
Текст = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.ANSI);

// Формируем строки отчета
СтрокаВыгрузки = "Дата: " + Формат(Объект.Дата, "ДЛФ=D") + Символы.ПС;
СтрокаВыгрузки = СтрокаВыгрузки + "Магазин: " + Объект.Магазин.Наименование + Символы.ПС;
СтрокаВыгрузки = СтрокаВыгрузки + "Безнал: " + ИтогоБезнал + Символы.ПС;
СтрокаВыгрузки = СтрокаВыгрузки + "Нал: " + ИтогоНал + Символы.ПС;

Текст.ЗаписатьСтроку(СтрокаВыгрузки);
Текст.Закрыть();

Важный момент: При работе в клиент-серверном варианте сервер 1С не имеет прямого доступа к локальному диску "C:" на компьютере продавца. Поэтому файл следует либо сохранять в общую сетевую папку по UNC-пути (например, \\ServerName\Share\file.txt), либо передавать на почту.

Автоматическая отправка отчета по электронной почте

Чтобы отчет сразу улетал на сервер или почту руководителя, воспользуемся встроенным объектом ИнтернетПочта. Предварительно в разделе «Администрирование» необходимо настроить системную учетную запись.

Рассмотрим пример кода для отправки сформированного файла:


Почта = Новый ИнтернетПочта;
Профиль = Справочники.УчетныеЗаписиЭлектроннойПочты.НайтиПоНаименованию("Системная").ПолучитьПрофиль();

Сообщение = Новый ИнтернетПочтовоеСообщение;
Сообщение.Получатели.Добавить("admin@company.ru");
Сообщение.Тема = "Отчет о продажах: " + Объект.Магазин.Наименование;
Сообщение.Тексты.Добавить("Во вложении отчет за " + Формат(Объект.Дата, "ДЛФ=D"));
Сообщение.Вложения.Добавить(ПутьКФайлу);

Попытка
    Почта.Подключиться(Профиль);
    Почта.Послать(Сообщение);
    Почта.Отключиться();
Исключение
    ЗаписьЖурналаРегистрации("Ошибка отправки отчета", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
КонецПопытки;

Рекомендации по стабильности работы

Проанализируем ситуацию, когда база одна, а магазинов три. Чтобы файлы не перезаписывали друг друга, в имя файла обязательно нужно добавлять уникальный идентификатор магазина или его код. Например: "Report_Store01_" + ТекущаяДата() + ".txt".

Также стоит учитывать следующие нюансы:

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

← На главную