gifts2017

Резервное копирование чеков во внешние файлы и их восстановление

Опубликовал Serg Eli (elizarovs) в раздел Администрирование - Архивирование (backup)

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

В сети розничных торговых точек установили неудачные фискальные регистраторы. При сбоях по питанию, иногда ведет базу. А после ее восстановления оказывается, что несколько последних чеков, пробитых через фискальник, в базе 1С потеряны. В базе ведется партионный учет товара, поэтому списать что попало для "выравнивания" продаж нельзя, нужно списывать только то, что реально продано. Естественно, что часто вспомнить не получается. Делать ревизию накладно. Поэтому, нужна профилактика. Нам с Павлом Григорьевым пришла мысль делать резервную копию чека перед отправкой на фискальный регистратор во внешний файл. При запуске 1С очищаем каталог от чеков, пролежавших более 30 дней. В случае потери чеков запускается процедура, которая показывает список чеков, находящихся в специалном каталоге, позволяет выбрать один из них и импортировать в интерфейс кассира. Пробивать его или нет решать кассиру. Ниже привожу текст функций и процедур.

Сохранение объектов 1С во внешний файл *.xml  и его последующее восстановление на примере резервного копирования каждого чека.

 

Процедура СохранитьЧек()

            КаталогНаДиске = Новый Файл(мВременнаяПапка+"\Чеки");

    Если  Не КаталогНаДиске.Существует() Тогда

                СоздатьКаталог(мВременнаяПапка+"\Чеки");

    КонецЕсли;

           

// XML сериализация текущего объекта

            ЗаписьXML = Новый ЗаписьXML;

            ЗаписьXML.ОткрытьФайл(мВременнаяПапка+"\Чеки\"+Формат( ТекущаяДата(),"ДФ=ddMMyyyyHHmmss")+".xml", "UTF-16");

            ЗаписатьXML(ЗаписьXML, ЭтотОбъект);

            ЗаписьXML.Закрыть();

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

 

 

Процедура КнопкаВосстановитьЧекНажатие(Элемент)

            Если РольДоступна("ПолныеПрава") Тогда

                        Режим = РежимДиалогаВыбораФайла.Открытие;

                        ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);

                        ДиалогОткрытияФайла.ПолноеИмяФайла = "";

                        Фильтр = "XML(*.xml)|*.xml";

                        ДиалогОткрытияФайла.Фильтр = Фильтр;

                        ДиалогОткрытияФайла.МножественныйВыбор = Ложь;

                        ДиалогОткрытияФайла.Заголовок = "Выберите файл";

        ДиалогОткрытияФайла.Каталог=мВременнаяПапка;

                        Если ДиалогОткрытияФайла.Выбрать() Тогда

                                  

                                   ФайлНаДиске = Новый Файл(ДиалогОткрытияФайла.ПолноеИмяФайла);

                                   Если ФайлНаДиске.Существует() Тогда

                                              

                                               ЧтениеXML = Новый ЧтениеXML;

                                               ЧтениеXML.ОткрытьФайл(ДиалогОткрытияФайла.ПолноеИмяФайла);

                                               Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл

                                                           Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента

                                                                       И   ЧтениеXML.Имя     = "DocumentObject.ЧекККМ" Тогда

                                                                       Попытка

                                                                                  ДокументОбъект = ПрочитатьXML(ЧтениеXML);

                                                                       Исключение

                                                                                  Результат = Неопределено;

                                                                       КонецПопытки;

                                                           КонецЕсли;

                                               КонецЦикла;

                                               ЧтениеXML.Закрыть();

                                              

                                   КонецЕсли;

                        Иначе

                                   Предупреждение("Файл не выбран!");

                        КонецЕсли;

            КонецЕсли;  

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


 

Процедура ДействияФормыДействиеЗакрытиеЧека(Кнопка)

            //…………………                

СохранитьЧек();

            //………………….

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

 

 

 

// Процедура выполняется перед нначалом работы системы

//

Процедура ПриНачалеРаботыСистемы()

            //………………………………………

            Если Не РольДоступна("РМК") Тогда

            //………………………………………        

            Иначе

                        Расш="*.xml";

                        НайденныеФайлы = Новый Массив;

                        НайденныеФайлы = НайтиФайлы(РаботаСФайлами.ПолучитьИмяКаталога()+"\Чеки", Расш);

                       

                        Для Каждого ТекСтрока Из НайденныеФайлы Цикл

                                   Если  ТекСтрока.ПолучитьВремяИзменения()<ДобавитьМесяц(ТекущаяДата(),-1) Тогда

                                               Сообщить("Удаление архивных чеков"+ТекСтрока.ПолноеИмя);

                                               УдалитьФайлы(ТекСтрока.ПолноеИмя);

                                   КонецЕсли;  

                        КонецЦикла;

                       

            КонецЕсли;

 

 

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

 

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Доржи Балбаров (Angeros) 25.10.11 06:47
А смысл их хранить?! Отчет по продажам выгрузить в главную базу и дело с концом. Максимум 1/2 дня.
2. Serg Eli (elizarovs) 25.10.11 06:54
(1) Я же пишу: "Базу повело. После исправления потеряна информация о последних продажах". Нет этой информации в отчете о продажах, поскольку и чеков нет! Тем более нет Сменного Отчета о Розничных Продажах. За полгода на фирме такое раза 3 было. В основном, при сбоях по питанию на точках, где сдохли бесперебойники.