Как очистить регистр накопления

При помощи внешней обработки, доступной для скачивания в этой публикации, можно очистить регистр накопления, путем закрытия его остатков на указанную дату. Остатки закрываются при помощи типового документа ОперацияБух (Бухгалтерская справка), в него записываются движения (в разрезе всех измерений) противоположные по знаку остаткам выбранного регистра накопления. Данная внешняя обработка протестирована на конфигурации 1С:Бухгалтерия 2.0, для других конфигураций возможно потребуются некоторые доработки.

Очистить регистр накопления — скачать обработку

  • Запустите внешнюю обработку через Файл -> Открыть;
  • Установите дату закрытия (обнуления) остатков;
  • Отметьте все регистры которые необходимо очистить;
  • Нажмите кнопку Выполнить;


Регистры закрываются (обнуляются) на конец дня указанной в настройках даты.

Михаил Сайко

Для удобства хранения и обработки информации в программе 1С используются различные Регистры накопления. Все данные вносятся в программу с помощью документов, на основании которых и происходит запись в регистр. Использование данного механизма позволяет накапливать данные, обрабатывать их, рассчитывать итоги, выводя остатки и обороты по этим данным пользователю.

Если мы откроем любую конфигурацию 1С Предприятие, в дереве метаданных увидим раздел «Регистры накопления».


Если в пользовательском режиме мы зайдем в раздел «Все функции», то там тоже можем увидеть ветку «Регистры накопления».


Регистр накопления – это таблица, накапливающая информацию из движения документов (приход/расход, обороты). Откроем для примера регистр накопления «Зарплата к выплате». Мы видим, что строки «Начисление зарплаты» и «Отпуск» отмечены знаком «+», т.е. увеличивают данные регистра, а «Ведомость в банк» (документ, которым произведена выплата) отмечен знаком «-», т.е. уменьшает данные регистра по каждой записи, в данном случае – по физическому лицу (сотруднику).


Если мы откроем документ, например, «Ведомость в банк», и посмотрим его движения по регистрам (кнопка «Показать проводки и другие движения документа»), то увидим записи производимые документом в связанные с ним регистры.



Аналогично происходят записи в регистры накопления по приходу и расходу товара, материалов, по учету НДС и другие примеры. Используя данные таких таблиц, программе гораздо проще составить отчет по запросу пользователя.

Рассмотрим, как устроены регистры накопления изнутри, на примере программы «1С:Бухгалтерия 3.0».

Настройки регистра накопления

Мы можем разрабатывать свои регистры накопления при необходимости. Но для этого сначала разберемся в его настройках. Рассмотрим настройки регистра накопления на том же примере с зарплатой к выплате. Откроем регистр «ЗарплатаКВыплате». На закладке «Основные» мы видим имя регистра и его вид.


Регистры бывают двух видов – «Остатки» и «Обороты». Когда планируется получать только сведения об оборотах, то выбираем этот вид регистра (например, обороты реализации). Если необходимо получать данные и об оборотах, и об остатках (как например, остатки товаров на складах, остаток задолженности по заработной плате), то выбираем вид регистра «Остатки».

На закладке «Подсистема» отмечается подсистема, где задействован регистр.


На закладке «Данные» описывается структура регистра. Измерения – записи, по которым в дальнейшем мы можем получить остатки или посмотреть обороты. Ресурсы – реквизит для определения числовых данных по регистру. Это может быть сумма, количество (например, количество проданных товаров, сумма проданных товаров, сумма выплаченной или начисленной зарплаты).


Раздел «Реквизиты» предназначен для хранения сопутствующей информации и используется на усмотрение пользователя. Существует еще один набор стандартных реквизитов, список которых не изменяется. Кнопка «Агрегаты» активна только для регистров с видом «Обороты».


И самый интересный раздел – это «Регистраторы». Здесь определяются документы, которые будут производить записи в регистр, формируя движения по регистрам.


Имея представление о настройках регистров накопления, попробуем создать свой регистр и посмотрим, как отразятся в нем записи в режиме пользователя.

Читайте также:  Как найти wpalogon в редакторе реестра

Как сделать регистр накопления в 1С

Продолжим рассматривать пример с регистрами по зарплате. Создадим новый регистр накопления (кнопка «Добавить») и назовем его «ДолгСотруднику».


На закладке «Основные» укажем название и вид регистра – «Остатки».


На закладке «Подсистемы» указываем подсистему «ВзаиморасчетыССотрудниками».


На «Функциональные опции», в которых участвует наш регистр, устанавливаем галочку «ИспользоватьНачислениеЗарплаты» (блок учета заработной платы в конфигурации «Бухгалтерия»).


На закладке «Данные» добавим для примера несколько измерений – «Сотрудник» и «Основание» (отражающий документ основание записи).


Для измерения «Сотрудник» указываем тип – СправочникСсылкаСотрудники, а для «Основания» – ОпределяемыйТипДокументОснованияЗарплатыКВыплате.


На закладке «Регистраторы» перечислим документы, которые будут производить запись в наш регистр. В нашем примере сделаем акцент на документе «Ведомость на выплату зарплаты в банк» и далее будем следить за движениями регистра, сделанными этим документом.



Для того чтобы наш регистр работал, необходимо выполнить некоторые настройки в самом документе движения. Откроем в дереве метаданных документ «ВедомостьНаВыплатуЗарплатыВБАнк». На закладке «Движения» мы видим наш новый регистр «ДолгСотруднику». Далее с помощью кнопки «Конструктор движений» нам нужно сопоставить, в какие поля, какие данные из документа должны фиксироваться.


Открываем наш регистр.


Тип движения в нашем примере «Расход» (т.к. выплачивая зарплату, мы уменьшаем задолженность сотруднику). И в таблицу с реквизитами надо прописать (сопоставив) реквизиты документа. Выбрать их можно двойным щелчком на соответствующей строке. Заполнив, нажимаем «Ок».


Программа автоматически конструктором создаст модуль обработки.


Обновим данные конфигурации и запустим программу в пользовательском режиме.

Запись в регистр накопления 1С 8.3

Проведем документ «Ведомость в банк» и посмотрим, какие движения по регистрам он сформировал (кнопка Кнопка – «Показать проводки и другие движения документа»). Мы видим, что у нас появилась закладка с движениями по нашему регистру «Долг сотруднику» — строка «Расход».


Наш регистр заработал. Аналогично можно выполнить настройку регистра для отражения записей других документов, в том числе, формирующих вид движения «Приход».

Как изменить регистр накопления в 1С 8.3? Корректировка регистров накопления 1С

Иногда возникает необходимость обнулить или подкорректировать записи регистров накопления. Для этого в «1С:Бухгалтерия» можно воспользоваться документом «Операция введенная вручную» (в разделе меню «Операции»). Создав новую операции, перейдем по кнопке «Еще» к пункту «Выбор регистров».


Выбираем регистр, по которому хотим сделать корректировочную запись, и нажимаем «Ок».


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


Сформировать отчет по регистрам накопления, мы можем, воспользовавшись «Универсальным отчетом» (раздел «Отчеты»), выбрать вариант отчета – по регистрам накопления, и указать нужный для анализа регистр. В отчете мы видим, что в нем отразилась наша корректировочная запись по регистру «Учет доходов для исчисления НДФЛ».


Еще один способ очистки регистров и их корректировки – это выполнение свертки информационной базы. Подробно мы на этом останавливаться не будем, т.к. это отдельная тема. Отмечу лишь, что в результате этой процедуры все остатки по счетам и регистрам переносятся в операции, записанные концом года, удаляя при этом все документы. Записи формируются отдельно по каждому регистру и при необходимости их можно откорректировать или удалить.


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

Материал опубликован на сайте SoftPoint.Ru/

Как известно, для регистров остатков 1С хранит отдельно движения по регистру и отдельно итоги по регистру на начало периодов (зависит от периодичности оперативных итогов). Так вот, идеальное состояние этих 1с регистров возникает в момент загрузки данных из архива. В этот момент в таблице итогов регистра отсутствуют «нулевые записи». «Нулевые записи» – это значит, что в регистре итогов присутствует запись, в которой каждый из ресурсов регистра – нулевой.

Это мы берем пример работы в последнем по времени периоде итогов. А если перепровести документ годичной давности? Тогда во всех последующих периодах, начиная с текущего, по каждому из наборов измерений присутствующих в движениях данного документа в таблице итогов будут присутствовать данные наборы измерений. И если партия закончилась сразу же, то, значит, все они будут нулевыми. Если в приходной накладной 100 строк, то с учетом годичной давности мы получим 1200 лишних записей в таблице итогов регистра.

Читайте также:  Как полечить компьютер от вирусов бесплатно

Также очень хорошо это можно понять на примере таблицы итогов регистра резервов. Тут вообще ситуация такая, что количество «нулевых» записей по итогам регистра будет стремиться к 100% от общего количества записей в таблице итогов. Так как резервы создаются на короткое время (ну скажем от трех дней до недели), то, как правило, большинство из них не переходят на следующий месяц, а снимаются либо накладными, либо снятиями резерва. По идее в таблице итогов должны присутствовать только резервы, переходящие через период итогов (в общем случае на следующий месяц). Но, как уже было сказано выше, это совсем не так.

Я произвел замеры на своей базе по регистру «Заказы». В этом регистре учитываются заказы товара поставщику, которые снимаются приходом товара или отменяются. В общем, и целом – полная аналогия с регистром резервов. Так вот – из порядка 900000 записей в таблице итогов из них пустыми были порядка 880000, то есть полезный объем (20000) составлял от полного объема около 2,5%. Остальные данные были излишними…

Разумеется, я не мог с этим смириться просто так. Вскоре была написана обработка, которая выдает соотношение полезной информации в таблицах итогов по всем присутствующим в конфигурации регистрам остатков и полного объема таблиц. Кроме того, можно сразу удалить эти неиспользуемые записи.

Обработка работает только для баз в формате SQL. Написана с использованием Rainbow. Если у вас нет компоненты Rainbow, то ее можно загрузить здесь. Используйте обработку на свой страх и риск.

Текст модуля можно посмотреть здесь:

Перем ТекМета ;
Перем СтрокаСообщения ;
//________________________________________________________
Процедура ЧиститьРегистры ()
Если Вопрос( СтрокаСообщения , 4 )= 6 Тогда
ЗапросРадуги =СоздатьОбъект( "ODBCQuery" );
Для к = 1 по Метаданные. Регистр () Цикл
Если Метаданные. Регистр ( к ). ТипРегистра = "Остатки" Тогда
ТекИдентификатор =Метаданные. Регистр ( к ). Идентификатор ;
ТекСиноним =Метаданные. Регистр ( к ). Синоним ;
Если ТекСиноним = "" Тогда
ТекСиноним = ТекИдентификатор ;
КонецЕсли;
ИмяТаблицы = ТекМета . ИмяТаблицыИтогов ( ТекИдентификатор );
ТекстЗапроса = "DELETE
|FROM " + ИмяТаблицы + "
|WHERE " ;
Для й = 1 по Метаданные. Регистр ( к ). Ресурс () Цикл
ТекИдРесурса =Метаданные. Регистр ( к ). Ресурс ( й ). Идентификатор ;
ТекстЗапроса = ТекстЗапроса +?( й = 1 , "" , " AND " )+ "(SP" + ТекМета . ИдРесурсаРегистра ( ТекИдентификатор , ТекИдРесурса )+ "=0)" ;
КонецЦикла;
//Теперь выполняем запрос
Если ЗапросРадуги . Prepare ( ТекстЗапроса , 1 , 1 )= 1 Тогда
Если ЗапросРадуги . Open ()= 1 Тогда
Сообщить( "Обработан регистр + ТекСиноним + ">" , "i" );
ЗапросРадуги . Close ();
Иначе
Предупреждение( "Ошибка открытия запроса!" , 10 );
КонецЕсли;
ЗапросРадуги . Reset ();
Иначе
Предупреждение( "Ошибка выполнения запроса!" , 10 );
КонецЕсли;
КонецЕсли;
КонецЦикла;
ЗапросРадуги = "" ;
КонецЕсли;
КонецПроцедуры
//________________________________________________________
Процедура ПосчитатьРегистры ()
ЗапросРадуги =СоздатьОбъект( "ODBCQuery" );
Для к = 1 по Метаданные. Регистр () Цикл
Если Метаданные. Регистр ( к ). ТипРегистра = "Остатки" Тогда
ТекИдентификатор =Метаданные. Регистр ( к ). Идентификатор ;
ТекСиноним =Метаданные. Регистр ( к ). Синоним ;
Если ТекСиноним = "" Тогда
ТекСиноним = ТекИдентификатор ;
КонецЕсли;
ИмяТаблицы = ТекМета . ИмяТаблицыИтогов ( ТекИдентификатор );
ТекстЗапроса = "SELECT COUNT(*)
|FROM " + ИмяТаблицы + "
|WHERE " ;
Для й = 1 по Метаданные. Регистр ( к ). Ресурс () Цикл
ТекИдРесурса =Метаданные. Регистр ( к ). Ресурс ( й ). Идентификатор ;
ТекстЗапроса = ТекстЗапроса +?( й = 1 , "" , " AND " )+ "(SP" + ТекМета . ИдРесурсаРегистра ( ТекИдентификатор , ТекИдРесурса )+ "=0)" ;
КонецЦикла;
//Выполняем запрос на общее количество
ПолноеЧисло = 0 ;
Если ЗапросРадуги . Prepare ( "SELECT COUNT(*) FROM " + ИмяТаблицы , 1 , 1 )= 1 Тогда
Если ЗапросРадуги . Open ()= 1 Тогда
ЗапросРадуги . GotoNext ();
Если ЗапросРадуги . IsOK ()= 1 Тогда
ПолноеЧисло = ЗапросРадуги . GetLong ( 0 );
КонецЕсли;
ЗапросРадуги . Close ();
Иначе
Предупреждение( "Ошибка открытия запроса!" , 10 );
КонецЕсли;
ЗапросРадуги . Reset ();
Иначе
Предупреждение( "Ошибка выполнения запроса!" , 10 );
КонецЕсли;
//Теперь выполняем запрос на количество пустых
ПустоеЧисло = 0 ;
Если ЗапросРадуги . Prepare ( ТекстЗапроса , 1 , 1 )= 1 Тогда
Если ЗапросРадуги . Open ()= 1 Тогда
ЗапросРадуги . GotoNext ();
Если ЗапросРадуги . IsOK ()= 1 Тогда
ПустоеЧисло = ЗапросРадуги . GetLong ( 0 );
КонецЕсли;
ЗапросРадуги . Close ();
Иначе
Предупреждение( "Ошибка открытия запроса!" , 10 );
КонецЕсли;
ЗапросРадуги . Reset ();
Иначе
Предупреждение( "Ошибка выполнения запроса!" , 10 );
КонецЕсли;
Сообщить( "Пустых строк итогов по регистру + ТекСиноним + "> : " + ПустоеЧисло + " из " + ПолноеЧисло + " возможных." , "i" );
КонецЕсли;
КонецЦикла;
ЗапросРадуги = "" ;
КонецПроцедуры
//________________________________________________________
Процедура ЧиститьБухучет ()
Если Метаданные. ОсновнойПланСчетов . Выбран ()= 0 Тогда
Предупреждение( "В данной конфигурации бухгалтерский учет не ведется. " , 20 );
Возврат;
КонецЕсли;
Если Вопрос( СтрокаСообщения , 4 )= 6 Тогда
ЗапросРадуги =СоздатьОбъект( "ODBCQuery" );
ТекстЗапроса = "DELETE
|FROM _1SBKTTL
|WHERE (OBDT1 = 0) AND (OBKT1 = 0) AND (OBDT2 = 0) AND (OBKT2 = 0) AND (OBDT3 = 0) AND (OBKT3 = 0) AND (SD = 0)" ;
Если ЗапросРадуги . Prepare ( ТекстЗапроса , 1 , 1 )= 1 Тогда
Если ЗапросРадуги . Open ()= 1 Тогда
Сообщить( "Обработана таблица остатков (сальдо и обороты по субконто)" , "i" );
ЗапросРадуги . Close ();
Иначе
Предупреждение( "Ошибка открытия запроса!" , 10 );
КонецЕсли;
ЗапросРадуги . Reset ();
Иначе
Предупреждение( "Ошибка выполнения запроса!" , 10 );
КонецЕсли;
ТекстЗапроса = "DELETE
|FROM _1SBKTTLC
|WHERE (OB1 = 0) AND (OB2 = 0) AND (OB3 = 0)" ;
Если ЗапросРадуги . Prepare ( ТекстЗапроса , 1 , 1 )= 1 Тогда
Если ЗапросРадуги . Open ()= 1 Тогда
Сообщить( "Обработана таблица итогов (обороты по синтетическим счетам)" , "i" );
ЗапросРадуги . Close ();
Иначе
Предупреждение( "Ошибка открытия запроса!" , 10 );
КонецЕсли;
ЗапросРадуги . Reset ();
Иначе
Предупреждение( "Ошибка выполнения запроса!" , 10 );
КонецЕсли;
ЗапросРадуги = "" ;
КонецЕсли;
КонецПроцедуры
//________________________________________________________
Процедура ПосчитатьБухучет ()
Если Метаданные. ОсновнойПланСчетов . Выбран ()= 0 Тогда
Предупреждение( "В данной конфигурации бухгалтерский учет не ведется. " , 20 );
Возврат;
КонецЕсли;
ЗапросРадуги =СоздатьОбъект( "ODBCQuery" );
//Сначала таблица остатков (обороты по субконто и сальдо)

Читайте также:  Как программировать pro mini

//Выполняем запрос на общее количество
ПолноеЧисло = 0 ;
Если ЗапросРадуги . Prepare ( "SELECT COUNT(*) FROM _1SBKTTL" , 1 , 1 )= 1 Тогда
Если ЗапросРадуги . Open ()= 1 Тогда
ЗапросРадуги . GotoNext ();
Если ЗапросРадуги . IsOK ()= 1 Тогда
ПолноеЧисло = ЗапросРадуги . GetLong ( 0 );
КонецЕсли;
ЗапросРадуги . Close ();
Иначе
Предупреждение( "Ошибка открытия запроса!" , 10 );
КонецЕсли;
ЗапросРадуги . Reset ();
Иначе
Предупреждение( "Ошибка выполнения запроса!" , 10 );
КонецЕсли;

//Теперь выполняем запрос на количество пустых
ПустоеЧисло = 0 ;
ТекстЗапроса = "SELECT COUNT(*)
|FROM _1SBKTTL
|WHERE (OBDT1 = 0) AND (OBKT1 = 0) AND (OBDT2 = 0) AND (OBKT2 = 0) AND (OBDT3 = 0) AND (OBKT3 = 0) AND (SD = 0)" ;
Если ЗапросРадуги . Prepare ( ТекстЗапроса , 1 , 1 )= 1 Тогда
Если ЗапросРадуги . Open ()= 1 Тогда
ЗапросРадуги . GotoNext ();
Если ЗапросРадуги . IsOK ()= 1 Тогда
ПустоеЧисло = ЗапросРадуги . GetLong ( 0 );
КонецЕсли;
ЗапросРадуги . Close ();
Иначе
Предупреждение( "Ошибка открытия запроса!" , 10 );
КонецЕсли;
ЗапросРадуги . Reset ();
Иначе
Предупреждение( "Ошибка выполнения запроса!" , 10 );
КонецЕсли;
Сообщить( "Пустых строк в таблице остатков (сальдо и обороты по субконто): " + ПустоеЧисло + " из " + ПолноеЧисло + " возможных." , "i" );

//Теперь таблица итогов (обороты по синтетическим счетам)

//Выполняем запрос на общее количество
ПолноеЧисло = 0 ;
Если ЗапросРадуги . Prepare ( "SELECT COUNT(*) FROM _1SBKTTLC" , 1 , 1 )= 1 Тогда
Если ЗапросРадуги . Open ()= 1 Тогда
ЗапросРадуги . GotoNext ();
Если ЗапросРадуги . IsOK ()= 1 Тогда
ПолноеЧисло = ЗапросРадуги . GetLong ( 0 );
КонецЕсли;
ЗапросРадуги . Close ();
Иначе
Предупреждение( "Ошибка открытия запроса!" , 10 );
КонецЕсли;
ЗапросРадуги . Reset ();
Иначе
Предупреждение( "Ошибка выполнения запроса!" , 10 );
КонецЕсли;

Adblock
detector