23 декабря 2009 г.

Как программно создать и заполнить документ «Корректировка записей регистров»

Документ «Корректировка записей регистров» в типовых конфигурациях 1С предназначен для ручной корректировки записей регистров накопления, зависимых регистров сведений и регистров бухгалтерии. Типичные ситуации, в которых может понадобиться документ «Корректировка записей регистров», - ввод начальных остатков, исправление ошибок в учете, отражение в учете операций, для которых в конфигурации нет специальных документов. В документе есть сервис автоматического заполнения движений с предопределенным действием «Сторно движений документа». С его помощь можно автоматически создать движения по регистрам бухгалтерии и регистрам накопления, аналогичные движениям указанного документа, но с отрицательными значениями.

Иногда количество вводимых записей по регистрам может быть велико и тогда целесообразно выполнить корректировку регистров программно. Документ «Корректировка записей регистров», как Вы уже, наверно, догадались, не совсем обычный. А иначе бы о нем не стоило и писать. В этом плане у него много общего с документом «Операция», который мы разбирали недавно.

В качестве примера, когда может потребоваться программно создать документ «Корректировка записей регистров», предлагаю рассмотреть операцию переоценки основных средств. Переоценка основных средств - ситуация хоть и нечастая, но все же вполне реальная, а специального документа для переоценки в типовых конфигурациях 1С нет. Чтобы пример получился более представительным (включал в себя все виды корректируемых регистров), я сделал обработку для конфигурации «1С:Управление производственным предприятием». Но с другой стороны, чтобы не перегружать пример лишней информацией, мы рассмотрим случай, когда в результате переоценки происходит увеличение стоимости основных средств и накопленной амортизации (дооценка).

В этом случае переоценка основных средств отражается в бухгалтерском учете проводками:

  • Дт. 01.01. - Кт. 83.01 - Увеличение первоначальной стоимости ОС.
  • Дт. 83.01. - Кт. 02.01 - Увеличение суммы накопленной амортизации ОС.

В налоговом учете операция переоценки основных средств не предусмотрена, но для того чтобы соблюдалось равенство БУ = НУ + ПР + ВР, мы должны отразить в учете возникновение постоянных разниц. Также мы должны сделать движения в регистрах накопления «СтоимостьОС», «СтоимостьОСБухгалтерскийУчет» и в регистрах сведений «ПараметрыАмортизацииОС», «ПараметрыАмортизацииОСБухгалтерскийУчет», «СобытияОС» и «СобытияОСОрганизаций».

Исходные данные для переоценки ОС берутся из dbf-таблицы с набором полей:

  • OS (строка) - код основного средства;
  • SumU (число) - сумма дооценки по управленческому учету в единицах валюты управленческого учета;
  • SumB (число) - сумма дооценки по бухгалтерскому учету;
  • AmortU (число) - сумма дооценки накопленной амортизации по управленческому учету в единицах валюты управленческого учета;
  • AmortB (число) - сумма дооценки накопленной амортизации по бухгалтерскому учету.

Скачать готовую обработку «Переоценка основных средств» можно в «Кладовке провинциального программиста»:

Скачать обработку «Переоценка основных средств»

Упрощенный фрагмент кода обработки, иллюстрирующий запись проводок в регистр бухгалтерии, представлен в листинге:

Сч01_01 = ПланыСчетов.Хозрасчетный.ОСвОрганизации;
Сч02_01 = ПланыСчетов.Хозрасчетный.АмортизацияОС_01;
Сч83_01 = ПланыСчетов.Хозрасчетный.ПриростСтоимостиИмуществаПоПереоценке;
ДБФ = Новый XBase;
ДБФ.ОткрытьФайл(ИмяФайла);
Если ДБФ.Открыта() Тогда
    Попытка
        НачатьТранзакцию();
        
  ДокКорректировка = Документы.КорректировкаЗаписейРегистров.СоздатьДокумент();
        ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(ДокКорректировка.ЭтотОбъект, ПараметрыСеанса.ТекущийПользователь);
        ДокКорректировка.Дата = Период;            

  НоваяСтрокаРегБух = ДокКорректировка.ТаблицаРегистровБухгалтерии.Добавить();
        НоваяСтрокаРегБух.Имя = "Хозрасчетный";
        НоваяСтрокаРегБух.Представление = "Журнал проводок (бухгалтерский учет)";
        
        ДокКорректировка.Записать();
        ДокКорректировкаСсылка = ДокКорректировка.Ссылка;
  
        НЗХозрасчетный = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
        НЗХозрасчетный.Отбор.Регистратор.Значение = ДокКорректировкаСсылка;
  
        ДБФ.Первая();
        Пока Не ДБФ.ВКонце() Цикл
            ОсновноеСредство = Справочники.ОсновныеСредства.НайтиПоКоду(СокрЛП(ДБФ.OS));
            Если ОсновноеСредство.Пустая() Тогда
                Сообщить("Не найдено ОС с кодом " + ДБФ.OS + "!", СтатусСообщения.Важное);
                Продолжить;
            КонецЕсли;

            ЗХозрасчетный = НЗХозрасчетный.Добавить();
            ЗХозрасчетный.Период = Период;
            ЗХозрасчетный.Регистратор = ДокКорректировкаСсылка;
            ЗХозрасчетный.Организация = Организация;
            ЗХозрасчетный.Содержание  = "Увеличение первоначальной стоимости ОС";
            ЗХозрасчетный.СчетДт = Сч01_01;
            ЗХозрасчетный.СчетКт = Сч83_01;     
            БухгалтерскийУчет.УстановитьСубконто(ЗХозрасчетный.СчетДт, ЗХозрасчетный.СубконтоДт, "ОсновныеСредства", ОсновноеСредство);
            БухгалтерскийУчет.УстановитьСубконто(ЗХозрасчетный.СчетКт, ЗХозрасчетный.СубконтоКт, "ОсновныеСредства", ОсновноеСредство);
            ЗХозрасчетный.Сумма = ДБФ.SumB;

            ЗХозрасчетный = НЗХозрасчетный.Добавить();
            ЗХозрасчетный.Период = Период;
            ЗХозрасчетный.Регистратор = ДокКорректировкаСсылка;
            ЗХозрасчетный.Организация = Организация;
            ЗХозрасчетный.Содержание  = "Увеличение накопленной амортизации ОС";
            ЗХозрасчетный.СчетДт = Сч83_01;
            ЗХозрасчетный.СчетКт = Сч02_01;     
            БухгалтерскийУчет.УстановитьСубконто(ЗХозрасчетный.СчетДт, ЗХозрасчетный.СубконтоДт, "ОсновныеСредства", ОсновноеСредство);
            БухгалтерскийУчет.УстановитьСубконто(ЗХозрасчетный.СчетКт, ЗХозрасчетный.СубконтоКт, "ОсновныеСредства", ОсновноеСредство);
            ЗХозрасчетный.Сумма = ДБФ.AmortB;

            ДБФ.Следующая();
        КонецЦикла;
        ДБФ.ЗакрытьФайл();
        НЗХозрасчетный.Записать();

        ЗафиксироватьТранзакцию();
    Исключение
        Сообщить(ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
        ОтменитьТранзакцию();
    КонецПопытки;
КонецЕсли;

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

P. S. Не забывайте про обмен ссылками, кампания продолжается.

Комментировать в ВКонтакте

Комментировать в Facebook

Комментировать в Blogger

3 комментария:

  1. Оч познавательно. Спасибо большое!!!

    ОтветитьУдалить
  2. спасибо, то что нужно... статья очень помогла

    ОтветитьУдалить
  3. Спасибо, очень доходчивая статья, очень помогла

    ОтветитьУдалить