В бухгалтерских подсистемах типовых конфигураций есть всем известный документ «Операция». Бухгалтерам не приходится долго объяснять, как им пользоваться. Все по-бухгалтерски просто и лаконично: счет дебета, счет кредита, субконто, количество, сумма и прочие атрибуты бухгалтерских проводок. Проводки вводятся вручную, поэтому результат абсолютно прозрачен и понятен.
Время от времени возникает необходимость массово ввести большое количество проводок. Ситуации могут быть самыми разными: загрузка остатков или наоборот - списание с учета, исправление ошибок в учете и т. д. И тут уже дело за программистом.
На первый взгляд задача может показаться простой: создать документ, заполнить таблицу проводок данными и провести. Но не тут-то было! Как только дело доходит до «Конфигуратора», начинаются сюрпризы. Оказывается, у документа «Операция» вообще нет таблицы проводок, которую мы видим в пользовательском режиме.
Как же так? А вот так! Документ «Операция" используется в качестве регистратора, а проводки пишутся непосредственно в регистр бухгалтерии.
Решается задача довольно просто. Рассмотрим в качестве примера фрагмент кода обработки загрузки остатков по счету 001 «Арендованные основные средства» из dbf-таблицы.
ДокОперация = Документы.ОперацияБух.СоздатьДокумент(); ДокОперация.Дата = ДатаДокумента; ДокОперация.Организация = Организация; ДокОперация.Ответственный = Ответственный; ДокОперация.Содержание = Содержание; ДокОперация.Комментарий = Комментарий; ДокОперация.Записать(); ДокОперацияСсылка = ДокОперация.Ссылка; РегХозрасчетный = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей(); РегХозрасчетный.Отбор.Регистратор.Значение = ДокОперацияСсылка; ДБФ.Первая(); Пока Не ДБФ.ВКонце() Цикл КодКонтрагента = СокрП(ДБФ.CA); Контрагент = Справочники.Контрагенты.НайтиПоКоду(КодКонтрагента); Если Контрагент.Пустая() Тогда Сообщить("Не найден контрагент с кодом " + КодКонтрагента, СтатусСообщения.Внимание); КонецЕсли; КодОС = СокрП(ДБФ.OS); ОсновноеСредство = Справочники.ОсновныеСредства.НайтиПоКоду(КодОС); Если ОсновноеСредство.Пустая() Тогда Сообщить("Не найдено ОС с кодом " + КодОС, СтатусСообщения.Внимание); КонецЕсли; РегЗапись = РегХозрасчетный.Добавить(); РегЗапись.Период = ДатаДокумента; РегЗапись.Регистратор = ДокОперацияСсылка; РегЗапись.Организация = Организация; РегЗапись.Содержание = "Корректировка стоимости ОС с 0 стоимостью"; РегЗапись.СчетДт = Сч001; БухгалтерскийУчет.УстановитьСубконто(РегЗапись.СчетДт, РегЗапись.СубконтоДт, "Контрагенты", Контрагент); БухгалтерскийУчет.УстановитьСубконто(РегЗапись.СчетДт, РегЗапись.СубконтоДт, "ОсновныеСредства", ОсновноеСредство); РегЗапись.Сумма = ДБФ.Sum; ДБФ.Следующая(); КонецЦикла; РегХозрасчетный.Записать();
Я полагаю, принцип работы кода понятен из примера. Сначала создаем и записываем документ «Операция». Сам документ не содержит никаких проводок. Затем создаем набор записей регистра бухгалтерии и записываем в него проводки, используя документ «Операция» в качестве регистратора.
Скачать готовую к использованию обработку можно в «Кладовке провинциального программиста»:
Большое спасибо! Очень пригодилось)
ОтветитьУдалитьГромадное спасибо, очень помогло!
ОтветитьУдалить