5 декабря 2009 г.

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

В бухгалтерских подсистемах типовых конфигураций есть всем известный документ «Операция». Бухгалтерам не приходится долго объяснять, как им пользоваться. Все по-бухгалтерски просто и лаконично: счет дебета, счет кредита, субконто, количество, сумма и прочие атрибуты бухгалтерских проводок. Проводки вводятся вручную, поэтому результат абсолютно прозрачен и понятен.

Время от времени возникает необходимость массово ввести большое количество проводок. Ситуации могут быть самыми разными: загрузка остатков или наоборот - списание с учета, исправление ошибок в учете и т. д. И тут уже дело за программистом.

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

Как же так? А вот так! Документ «Операция" используется в качестве регистратора, а проводки пишутся непосредственно в регистр бухгалтерии.

Решается задача довольно просто. Рассмотрим в качестве примера фрагмент кода обработки загрузки остатков по счету 001 «Арендованные основные средства» из dbf-таблицы.

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

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

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

Скачать Download

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

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

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

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

  1. Большое спасибо! Очень пригодилось)

    ОтветитьУдалить
  2. Громадное спасибо, очень помогло!

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