Очистка нулевых движений по регистру товаров в рознице УТ10.3

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

Как отключить нулевые движения

Нулевые движения – это движения с количеством ноль и ненулевой суммой. Часто они не нужны, наоборот, движения по документу «Переоценка» сильно мешают. Например, в моей базе эти паразитные движения занимали 10% самого объемного регистра «Товары в рознице», которая весила 6 Гб.

Чтобы их отключить, нужно сделать вставку кода в модуль набора записей регистра накопления «Товары в рознице»:

Процедура ПередЗаписью(Отказ, Замещение)

 

       //Осипов - отключаем учет сумм

       Для Каждого МЗ ИЗ ЭтотОбъект Цикл

             МЗ.СуммаПродажная = 0;

       КонецЦикла;

 

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

Принцип простой – если сумма нулевая, то и переоценки не будут делать движений.

Как удалить существующие нулевые движения

Прикладываю обработку, которая удаляет нулевые движения за указанный период:

Нужно выбрать дату начала и конца и она выполнит удаление. Результат выводится в окно сообщений, можно прервать работу обработки:

 

Код обработки простой, если у документа есть ненулевые движения, она их не затронет:

       З = Новый Запрос(

       "ВЫБРАТЬ РАЗЛИЧНЫЕ

       |      ТоварыВРознице.Регистратор

       |ИЗ

       |      РегистрНакопления.ТоварыВРознице КАК ТоварыВРознице

       |ГДЕ

       |      ТоварыВРознице.Количество = 0

       |      И ТоварыВРознице.Период МЕЖДУ &ДАТА1 И &ДАТА2

       |

       |УПОРЯДОЧИТЬ ПО

       |      ТоварыВРознице.Период");

       З.УстановитьПараметр("Дата1", Дата1);

       З.УстановитьПараметр("Дата2", КонецДня(Дата2));

       Выборка = З.Выполнить().Выбрать();

       Пока Выборка.Следующий() Цикл

             ТекДок = Выборка.Регистратор;

             НЗ = РегистрыНакопления.ТоварыВРознице.СоздатьНаборЗаписей();

             НЗ.Отбор.Регистратор.Значение = ТекДок;

             НЗ.Отбор.Регистратор.Использование = истина;

             НЗ.Прочитать();

             КУдалению = Новый Массив();

             Для Каждого МЗ ИЗ НЗ Цикл

                    Если МЗ.Количество = 0 Тогда КУдалению.Добавить(МЗ); КонецЕсли;

             КонецЦикла;

             Для Каждого МЗ Из КУдалению Цикл

                    НЗ.Удалить(МЗ);

             КонецЦикла;

             НЗ.ОбменДанными.Загрузка = истина;

             НЗ.Записать();

             Сообщить(ТекДок);

             ОбработкаПрерыванияПользователя();

       КонецЦикла;

 

 

Скачать