Проведенные чеки без движений в УНФ

В УНФ обнаружились проведенные чеки без движений, за период в два года таких набралось 81 штука. Если такие чеки перепровести, движения появляются.

Нашел все такие чеки запросом:

   ВЫБРАТЬ РАЗЛИЧНЫЕ
	Т.Ссылка КАК Ссылка, Т.Организация, Т.СуммаДокумента
ИЗ
	Документ.ЧекККМ КАК Т
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи КАК Продажи
		ПО (Продажи.Регистратор = Т.Ссылка)
		
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗапасыНаСкладах КАК ЗапасыНаСкладах
		ПО (ЗапасыНаСкладах.Регистратор = Т.Ссылка)
		
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РасчетыСПокупателями КАК РасчетыСПокупателями
		ПО (РасчетыСПокупателями.Регистратор = Т.Ссылка)
ГДЕ
	Т.Проведен
	И Т.Дата МЕЖДУ &Дата1 И &Дата2
	И Продажи.Регистратор ЕСТЬ NULL И ЗапасыНаСкладах.Регистратор ЕСТЬ NULL  И РасчетыСПокупателями.Регистратор ЕСТЬ NULL
УПОРЯДОЧИТЬ ПО Т.Организация, Т.Дата

Но хотелось бы, чтобы УНФ их автоматом проводила.

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

Процедура ОбработатьНеПроведенныеЧеки() Экспорт    
	
	//Отладка: дор_С.ОбработатьНеПроведенныеЧеки()
	
	ДнейПроверки = 100; //Насколько глубоко внутрь обрабатываем чеки
	Дата2 = КонецДня(ТекущаяДата());
	Дата1 = началоДня(Дата2) - 3600*24*ДнейПроверки;
	З = Новый Запрос();
	З.Текст = 
	"ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	Т.Ссылка КАК Ссылка,
	|	Продажи.Регистратор КАК Регистратор
	|ИЗ
	|	Документ.ЧекККМ КАК Т
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи КАК Продажи
	|		ПО (Продажи.Регистратор = Т.Ссылка)
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗапасыНаСкладах КАК ЗапасыНаСкладах
	|		ПО (ЗапасыНаСкладах.Регистратор = Т.Ссылка)
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РасчетыСПокупателями КАК РасчетыСПокупателями
	|		ПО (РасчетыСПокупателями.Регистратор = Т.Ссылка)
	|ГДЕ
	|	Т.Проведен
	|	И Т.Дата МЕЖДУ &Дата1 И &Дата2
	|	И Продажи.Регистратор ЕСТЬ NULL
	|	И ЗапасыНаСкладах.Регистратор ЕСТЬ NULL
	|	И РасчетыСПокупателями.Регистратор ЕСТЬ NULL";
	З.УстановитьПараметр("Дата1", Дата1);
	З.УстановитьПараметр("Дата2", Дата2);
	Выборка = З.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		Попытка      
			ДО = Выборка.Ссылка.ПолучитьОбъект();
			ДО.Записать(РежимЗаписиДокумента.Проведение);
		Исключение                                       
			ЗаписьЖурналаРегистрации("Отладка.ПроведениеЧековБезДвижения",,, Выборка.Ссылка, "Не удалось провести: "  + ОписаниеОшибки());
		КонецПопытки;
	КонецЦикла;

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

И добавил его в регламентное задание, выполняющееся редко, раз в 2 часа. Теперь таких чеков не должно быть.

Среда: 3.0.13.238 Объем: 0.8 час.

image_pdfimage_print

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Вам может также понравиться...

комментариев 6

  1. Виталий:

    «Теперь таких чеков не должно быть» — смелый вывод для решения, которое причину не устраняет. Перепроведение каждые 2 часа механизм не чинит, а превращает базу в самовосстанавливающуюся помойку: что-то сломалось, само перепровелось, следов нет, причина неизвестна, зато вроде красиво.

    • вы живете в идеальном мире, а в реальном проблемы решают по мере наличия бюджета и поступления.
      Зачем клиенту оплачивать 5 часов (это минимум) на поиск причины проблемы если можно оплатить 1 час на устранение последствий?

  2. ShEmVi:

    Я пользуюсь УНФ. Такие чеки появляются, если чек полностью оплачивали бонусами по дисконтной карте. Правлю перепроводками

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *