Каталог решений - Учет и сверка Z-Отчетов ККМ в 1С

Учет и сверка Z-Отчетов ККМ в 1С

Учет и сверка Z-Отчетов ККМ в 1С

В наличии

Думаю, все крупные компании при внедрении/эксплуатации 1С делают значительные изменения в ее конфигурации. Как бы вы ни пытались все бизнес процессы решить типовыми решениями от 1С, все равно наступает момент, когда приходится заняться конфигурированием.
Я решил написать серию статей, где постараюсь описать решения, которые мне пришлось реализовывать в разных компаниях. Если разработчики 1С посчитают что-то интересным для внедрения в типовые решения, мы будем только рады.
В текущей статье речь пойдет о кассовых z-отчетах в 1С.

Категория:

Описание

ПРЕДПОСЫЛКИ:

Если вы используете ККМ, у вас возникает необходимость сверять отраженную выручку в 1С с предоставленными z-отчетами.

Сразу развею миф: «Если все чеки печатаются из 1С, то и сумма выручки всегда будет совпадать с z-отчетом». В жизни все не так.

Если у вас всего 1-5 контрольно кассовых машин (ККМ), можно ежедневно вручную бухгалтеру сверять выручку по бумажному z-отчету. Но если у вас более 100 ККМ, вопрос автоматизации по проверке достоверности отражения выручки, соблюдения кассовой дисциплины и своевременного пробития чеков становится очень остро. Человеческий фактор в данном случае становится просто катастрофическим.

К сожалению, типовые конфигурации 1С нам не предлагают возможность вести учет z-отчетов, что ж, реализуем сами.

Внедрение бизнес процесса по контролю и учету z-отчетов можно разделить на три этапа:

1. Создание в 1С документа "z-отчет" с ручным вводом информации.
2. Контроль и формирование отчетов по проверке показателей, которые можно извлечь из Z-отчета.
3. Автоматизация загрузки с ККМ данных о z-отчетах (их автоматическое создание в 1С).

Маленькая ремарка: Предоставленная ниже реализация z-отчета, является решением во времена ККМ с ЭКЛЗ и плавно была трансформирована (с обратной совместимостью) в решение для онлайн касс.

ПРИСТУПИМ: 

1 ЭТАП

Создаем новый документ «_ZОтчетФискальный»
Реквизиты:
— Организация (СправочникСсылка.Организации)
— Подразделение (СправочникСсылка.Подразделения)
— ККМ (СправочникСсылка.КассыККМ)
— Накопление (Число15.2)  В новых он-лайн ККМ это поле теперь называется ГРОСС ИТОГ
— Выручка (Число15.2)
— Возвраты (Число15.2)
— ВыручкаБезТоварныхЧеков (Число15.2) В этом поле отражают выручку, регистрируемую при поступлении средств от «оптовых» покупателей (ТОРГ12+ПКО).
— Неиспользованные (Число15.2)
— НомерГашения (Число10.0) В новых он-лайн ККМ это поле теперь называется НОМЕР СМЕНЫ.
— СуммаДокумента (Число15.2)
Для отображения в журнале
— НачальныеСведения (Булево) Этот реквизит необходим для обозначения вноса первого
Z
-отчета ККМ, или при смене ФН. При его установке не проверяется хронология отчетов по ККМ.
— Ответственный (СправочникСсылка.Пользователи)
— Комментарий (Строка)

Z-Отчет. Вид из конфигуратора.

В модуле объекта пишем код для проверки заполнения при проведении документа.

Функция НайтиПредыдущееГашение() Экспорт
	СведенияОПредыдущем = Новый Структура("НомерГашения,Накопление,СсылкаНаДокумент");
	СведенияОПредыдущем.НомерГашения=Неопределено;
	СведенияОПредыдущем.Накопление=Неопределено;
	СведенияОПредыдущем.СсылкаНаДокумент=Неопределено;
	Если НЕ НачальныеСведения Тогда
		Запрос=Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 
		|Ссылка, 
		|Дата, 
		|Организация, 
		|ККМ, 
		|Накопление, 
		|НомерГашения,
		|Проведен
		|ИЗ Документ._ZОтчетФискальный
		|ГДЕ Дата<&ДатаКонец И Организация=&ВыбОрганизация И ККМ=&ВыбКасса И Проведен
		|УПОРЯДОЧИТЬ ПО Дата УБЫВ");
		Запрос.УстановитьПараметр("ВыбОрганизация",Организация);					
		Запрос.УстановитьПараметр("ВыбКасса",ККМ);					
		Запрос.УстановитьПараметр("ДатаКонец",Дата);					
		Выборка =  Запрос.Выполнить().Выбрать();
		Если Выборка.Следующий() Тогда
			СведенияОПредыдущем.НомерГашения=Выборка.НомерГашения;
			СведенияОПредыдущем.Накопление=Выборка.Накопление;
			СведенияОПредыдущем.СсылкаНаДокумент=Выборка.Ссылка;
		КонецЕсли;
	КонецЕсли;						
	Возврат СведенияОПредыдущем;
КонецФункции

Процедура ОбработкаПроведения(Отказ, Режим)
	Если НЕ НачальныеСведения Тогда
		СведенияОПредыдущем= НайтиПредыдущееГашение();
		Если СведенияОПредыдущем.НомерГашения=Неопределено Тогда
			Сообщить("Не найден предыдущий Финансовый отчет (гашение) для ККМ: "+Строка(ККМ));
			Если НЕ РольДоступна("ПолныеПрава") Тогда
				Отказ = Истина;
			КонецЕсли;
			
		Иначе
			Если НомерГашения=СведенияОПредыдущем.НомерГашения Тогда
				Сообщить("Уже существует документ с таким номером гашения для выбранной ККМ. Возможно вы задублировали документ.");
				Сообщить("Ожидается номер "+Строка(СведенияОПредыдущем.НомерГашения+1));
				Если НЕ РольДоступна("ПолныеПрава") Тогда
					Отказ = Истина;
				КонецЕсли;
			ИначеЕсли (НомерГашения<СведенияОПредыдущем.НомерГашения) Тогда
				Сообщить("Существует документ с более поздним номером гашения для выбранной ККМ. Отмените более поздние гашения, и проведите их в порядке возрастания номера гашения.");
				Сообщить("Ожидается номер "+Строка(СведенияОПредыдущем.НомерГашения+1));
				Если НЕ РольДоступна("ПолныеПрава") Тогда
					Отказ = Истина;
				КонецЕсли;
			ИначеЕсли (НомерГашения>(СведенияОПредыдущем.НомерГашения+1)) Тогда
				Сообщить("Существуют пропущенные номера гашения для выбранной ККМ. Преверте номер гашения или проведите гашения для пропущенных номеров.");
				Сообщить("Ожидается номер "+Строка(СведенияОПредыдущем.НомерГашения+1));
				Если НЕ РольДоступна("ПолныеПрава") Тогда
					Отказ = Истина;
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
		
		//РасчВозврат=?(Касса.ОтражениеВозвратовВНакоплении=Перечисления.ВлияниеНаИтоги.Увеличивают,Возвраты,?(Касса.ОтражениеВозвратовВНакоплении=Перечисления.ВлияниеНаИтоги.Уменьшают,-Возвраты,0));
		//РасчНеиспользованные=?(Касса.ОтражениеНеиспользованныхВНакоплении=Перечисления.ВлияниеНаИтоги.Увеличивают,Неиспользованные,?(Касса.ОтражениеНеиспользованныхВНакоплении=Перечисления.ВлияниеНаИтоги.Уменьшают,-Неиспользованные,0));
		РасчВозврат = Возвраты; //Считаем что всегда увеличивают;
		РасчНеиспользованные = 0; //Считаем что не влияют;
		Если (Накопление<>(СведенияОПредыдущем.Накопление+Выручка+РасчВозврат+РасчНеиспользованные)) Тогда
			Сообщить("Контроль накопления не пройден! Проверьте правильность внесения данных с бумажного чека ""Z-ОТЧЕТ (фискальный)""!");
			Если НЕ РольДоступна("ПолныеПрава") Тогда
				Отказ = Истина;
			КонецЕсли;
		КонецЕсли;
	Конецесли;
КонецПроцедуры

Если вы обратили внимание, пользователь не может провести документ «_ZОтчетФискальный», если не выполняется математика или не соблюдается очередность отчетов.

Закомментированный код применялся при подсчете накопления в старых моделях ККМ с ЭКЛЗ, теперь в нем нет необходимости.

Документ «_ZОтчетФискальный» все проверки производит по указанной в документе конкретной кассе ККМ.

Небольшое лирическое отступление:

При эксплуатации касс АТОЛ 11Ф у нас неоднократно случались ошибки математики «ГРОСС ИТОГА» во время пробития z-отчета на ККМ, как правило при сбое (окончание бумаги или разряд аккумулятора).
Что ж, не беда, в нашем случае предусмотрен флаг «НачальныеСведения» в документе, при его установки документ позволяет начать отсчет номер гашения и накопление заново.

Вызов форма списка документа поместил в меню: Документы>Управление денежными средствами>Z-Отчеты

Форма списка выглядит так:

Форму документа я оформил в наглядном и понятном бухгалтеру виде:

Форма документа z-отчет в 1С

Код формы документа:

Процедура ПриОткрытии()
	Если НЕ ЭтоНовый() Тогда 
		НастройкаПравДоступа.ОпределитьДоступностьВозможностьИзмененияДокументаПоДатеЗапрета(ДокументОбъект, ЭтаФорма);
	КонецЕсли;
	
	Если ЭтоНовый() Тогда // проверить объект на то, что он еще не внесен в ИБ	
		Если НЕ ЗначениеЗаполнено(ДокументОбъект.Дата) Тогда
			ДокументОбъект.Дата=ТекущаяДата();
		Конецесли;
		ДокументОбъект.Подразделение = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновноеПодразделение");
		ДокументОбъект.Организация   = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнаяОрганизация");
		ДокументОбъект.ККМ      = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнаяКассаККМ");
		ДокументОбъект.Ответственный = Пользователи.ТекущийПользователь();
	КонецЕсли;	
	ОбновитьНадписи();
	ОбновитьОбразецЧека();
КонецПроцедуры

Процедура ОбновитьНадписиПриИзмененииЭлемента(Элемент)
	ОбновитьНадписи();
	ОбновитьОбразецЧека();
КонецПроцедуры

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	ДокументОбъект.СуммаДокумента=ДокументОбъект.Выручка-ДокументОбъект.Возвраты-ДокументОбъект.Неиспользованные;
КонецПроцедуры

Функция НайтиПредыдущееГашениеНаСервере() 
	Возврат НайтиПредыдущееГашение(); 
КонецФункции

Процедура ОбновитьНадписи()
	СведенияОПредыдущем= НайтиПредыдущееГашениеНаСервере();
	ЭлементыФормы.РамкаСтарыйОтчет.Видимость=ДокументОбъект.НачальныеСведения;
	Если СведенияОПредыдущем.НомерГашения=Неопределено Тогда
		ЭлементыФормы.ПРНомерГашения.Заголовок="Номер гашения: Нет сведений";
		ЭлементыФормы.ПРНакопление.Заголовок="Накопление: Нет сведений";
		ЭлементыФормы.ПРНомерГашения.Видимость = Ложь;
		ЭлементыФормы.ПРНакопление.Видимость = Ложь;
	Иначе
		ЭлементыФормы.ПРНомерГашения.Заголовок="Номер гашения: "+ФОРМАТ(СведенияОПредыдущем.НомерГашения,"ЧГ=");
		ЭлементыФормы.ПРНакопление.Заголовок="Накопление: "+ФОРМАТ(СведенияОПредыдущем.Накопление)+" руб.";
		ЭлементыФормы.ПРНомерГашения.Видимость = Истина;
		ЭлементыФормы.ПРНакопление.Видимость = Истина;
	КонецЕсли;
КонецПроцедуры

Процедура ОбновитьОбразецЧека()	
	ЭлементыФормы.ФД.Очистить();
	ЭлементыФормы.ФД.ДобавитьСтроку("ИНН "+ДокументОбъект.Организация.ИНН);
	ЭлементыФормы.ФД.ДобавитьСтроку("Z-ОТЧЕТ ФИСКАЛЬНЫЙ");
	ЭлементыФормы.ФД.ДобавитьСтроку("ККМ "+ДокументОбъект.ККМ.СерийныйНомер);
	ЭлементыФормы.ФД.ДобавитьСтроку("ЗАКР.СМЕНЫ  "+ПРАВ("0000"+ФОРМАТ(ДокументОбъект.НомерГашения,"ЧГ="),4));
	ЭлементыФормы.ФД.ДобавитьСтроку("");
	ЭлементыФормы.ФД.ДобавитьСтроку("НАКОПЛЕНИЕ");
	ЭлементыФормы.ФД.ДобавитьСтроку("ГРОСС-ИТОГ");
	ЭлементыФормы.ФД.ДобавитьСтроку("  "+ПРАВ("..........."+ФОРМАТ(ДокументОбъект.Накопление,"ЧЦ=15; ЧДЦ=2; ЧРД=.; ЧН=0.00; ЧГ="),15));
	ЭлементыФормы.ФД.ДобавитьСтроку("ВЫРУЧКА");
	ЭлементыФормы.ФД.ДобавитьСтроку("  "+ПРАВ("..........."+ФОРМАТ(ДокументОбъект.Выручка,"ЧЦ=15; ЧДЦ=2; ЧРД=.; ЧН=0.00; ЧГ="),15));
	ЭлементыФормы.ФД.ДобавитьСтроку(Формат(ДокументОбъект.Дата,"ДФ=""дд.ММ.гг ЧЧ.мм""")+"Ф");
	ЭлементыФормы.ФД.ДобавитьСтроку("ВОЗВРАТЫ");
	ЭлементыФормы.ФД.ДобавитьСтроку("  "+ПРАВ("..........."+ФОРМАТ(ДокументОбъект.Возвраты,"ЧЦ=15; ЧДЦ=2; ЧРД=.; ЧН=0.00; ЧГ="),15));
КонецПроцедуры

Если используете управляемые формы, то получать ИНН организации и серийный номер ККМ нужно через вызов функции на сервере.

 

2 ЭТАП

Создаем средства проверки и контроля данных в z-отчетах. Для этого у нас уже существует решение для бухгалтеров «ЕДИНАЯ ПРОВЕРКА ОШИБОК». Добавляем раздел по проверке сразу всех Z-отчетов, внесенных в 1С за определенный период.

Макет для вывода результатов проверки там выглядит как-то так:

Макет отчета

Создаем процедуры по проверке документов «_ZОтчетФискальный»:

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

ОШИБКИ:

— В Z-отчете указаны неиспользованные чеки, но при этом ПКО оформлен на всю сумму выручки в Z-отчете на дату ХХХ
— В Z-отчете указаны оптовые продажи, но при этом ПКО с видом ""Прием розничной выручки"" оформлен на всю сумму выручки в Z-отчете на дату ХХХ

— Чистая выручка по Z-отчету ХХХ не соответсвует сумме ПКО ХХХ по кассе ККМ ХХХ на дату ХХХ
— Сумма неиспользованных чеков и оптовых продаж превышает общую выручку
— Сумма опта Z-отчетов ХХХ по подразделению ХХХ не сходится с суммой ПКО ХХХ на дату ХХХ
—
Не найден предыдущий Финансовый отчет (гашение) для ККМ ХХХ
— Уже существует документ с таким номером гашения для выбранной ККМ. Возможно вы задублировали документ. Ожидается номер ХХХ
— Существует документ с более поздним номером гашения для выбранной ККМ. Отмените более поздние гашения, и проведите их в порядке возрастания номера гашения.  Ожидается номер ХХХ
— Существуют пропущенные номера гашения для выбранной ККМ. Преверте номер гашения или проведите гашения для пропущенных номеров. Ожидается номер ХХХ
— Контроль накопления не пройден! Проверьте правильность внесения данных с бумажного чека "Z-ОТЧЕТ (фискальный)"!

 

ПРЕДУПРЕЖДЕНИЯ:

— По кассе ККМ ХХХ на дату ХХХ должен быть оформлен акт по неиспользованным кассовым чекам(КМ-3) на сумму ХХХ
— По кассе ККМ ХХХ на дату ХХХ должен быть оформлено заявление на возврат на сумму ХХХ
— По кассе ККМ ХХХ найдено несколько Z-отчетов с признаком "Начальные сведения"

 

 

 

has been added to your cart:
Оформление заказа