В розничной торговле часто возникает необходимость оперативного получения данных о продажах в сторонние системы или для контроля руководством. Одной из популярных задач является автоматическое формирование текстового файла (TXT) в момент закрытия кассовой смены. Рассмотрим подробнее, как реализовать этот функционал в конфигурации 1С:Розница 2.2, учитывая особенности работы в многопользовательском режиме и клиент-серверную архитектуру.
Для того чтобы выгрузка происходила автоматически и не требовала от кассира лишних действий, нам необходимо определить событие, которое гарантированно срабатывает при закрытии смены. В «1С:Розница» при нажатии кнопки «Закрыть смену» система формирует и проводит документ ОтчетОРозничныхПродажах.
Проанализируем наиболее корректные способы внедрения кода:
&После для процедуры проведения документа.ОбработкаПроведения для документа ОтчетОРозничныхПродажах. Это позволит коду выполняться каждый раз, когда отчет записывается в базу как финальный документ смены.Согласно условиям задачи, в файле должны быть указаны: дата, название магазина, сумма выемки, наличные и безналичные оплаты. Выясним, откуда брать эти сведения в программном коде. Основным источником данных будет сам объект ЭтотОбъект (проводимый документ).
Разберем, какие реквизиты и таблицы нам понадобятся:
Дата и Магазин.Наименование.ОплатаПлатежнымиКартами. Нам нужно просуммировать итог по этой таблице.ВыемкаДенежныхСредств создаются в привязке к кассовой смене, их можно найти запросом по ссылке на текущую смену.Для создания файла используем объект ЗаписьТекста. Посмотрим на пример реализации логики записи данных:
// Создаем объект для записи файла
ПутьКФайлу = "C:\Reports\Sales_" + Формат(Объект.Дата, "ДФ=yyyyMMdd") + ".txt";
Текст = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.ANSI);
// Формируем строки отчета
СтрокаВыгрузки = "Дата: " + Формат(Объект.Дата, "ДЛФ=D") + Символы.ПС;
СтрокаВыгрузки = СтрокаВыгрузки + "Магазин: " + Объект.Магазин.Наименование + Символы.ПС;
СтрокаВыгрузки = СтрокаВыгрузки + "Безнал: " + ИтогоБезнал + Символы.ПС;
СтрокаВыгрузки = СтрокаВыгрузки + "Нал: " + ИтогоНал + Символы.ПС;
Текст.ЗаписатьСтроку(СтрокаВыгрузки);
Текст.Закрыть();
Важный момент: При работе в клиент-серверном варианте сервер 1С не имеет прямого доступа к локальному диску "C:" на компьютере продавца. Поэтому файл следует либо сохранять в общую сетевую папку по UNC-пути (например, \\ServerName\Share\file.txt), либо передавать на почту.
Чтобы отчет сразу улетал на сервер или почту руководителя, воспользуемся встроенным объектом ИнтернетПочта. Предварительно в разделе «Администрирование» необходимо настроить системную учетную запись.
Рассмотрим пример кода для отправки сформированного файла:
Почта = Новый ИнтернетПочта;
Профиль = Справочники.УчетныеЗаписиЭлектроннойПочты.НайтиПоНаименованию("Системная").ПолучитьПрофиль();
Сообщение = Новый ИнтернетПочтовоеСообщение;
Сообщение.Получатели.Добавить("admin@company.ru");
Сообщение.Тема = "Отчет о продажах: " + Объект.Магазин.Наименование;
Сообщение.Тексты.Добавить("Во вложении отчет за " + Формат(Объект.Дата, "ДЛФ=D"));
Сообщение.Вложения.Добавить(ПутьКФайлу);
Попытка
Почта.Подключиться(Профиль);
Почта.Послать(Сообщение);
Почта.Отключиться();
Исключение
ЗаписьЖурналаРегистрации("Ошибка отправки отчета", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
КонецПопытки;
Проанализируем ситуацию, когда база одна, а магазинов три. Чтобы файлы не перезаписывали друг друга, в имя файла обязательно нужно добавлять уникальный идентификатор магазина или его код. Например: "Report_Store01_" + ТекущаяДата() + ".txt".
Также стоит учитывать следующие нюансы:
ФоновыеЗадания.КодировкаТекста.UTF8, чтобы избежать проблем с отображением кириллицы в названии магазина.Таким образом, объединив механизмы расширений, объект ЗаписьТекста и работу с ИнтернетПочта, мы получаем надежное решение для автоматизации отчетности в 1С:Розница без существенного изменения типовой конфигурации.