Back to top

Программная корректировка движений документа

Опубликовано e-1c@mail.ru - вс, 05/21/2017 - 04:50

В некоторых типовых конфигурациях фирмы 1С существует возможность ручной корректировки движений документа по регистрам. В конфигурации 1С: Бухгалтерия 8 для этого, при наличии соответствующих прав, нужно открыть движения документа и установить флаг “Ручная корректировка”. Однако, иногда возникает необходимость выполнить корректировку движений большого количества документов. В этом случае нам понадобится обработка, которая изменит движения документов без перепроведения.

Рассмотрим как изменить движения документа на примере конфигурации 1С: Бухгалтерия 8. Менять будем движения по регистру бухгалтерии “Хозрасчетный”. Пусть перед нами стоит задача заполнить суммы налогового учета по данным бухгалтерского. Предположим, что у нас уже есть обработка, которая выбирает необходимые нам документы и последовательно обрабатывает их с помощью описанной нами процедуры “ИзменитьДвиженияДокумента”. Посмотрим как должна выглядеть эта процедура.

Процедура ИзменитьДвиженияДокумента(ДокументСсылка)
     // прочитаем набор записей регистра по документу 
    НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка);
    НаборЗаписей.Прочитать();
     Если НаборЗаписей.Количество() = 0 Тогда
         Возврат;
    КонецЕсли;
    // переберем все записи набора и заполним суммы по налоговому учету
    Для каждого Запись из НаборЗаписей Цикл
         // перед изменением сумм проверяем ведется ли налоговый учет на выбранном счёте
         Если Запись.СчетДт.НалоговыйУчет Тогда
            Запись.СуммаНУДт = Запись.Сумма;
        КонецЕсли;
        Если Запись.СчетКт.НалоговыйУчет Тогда
            Запись.СуммаНУКт = Запись.Сумма;
        КонецЕсли;
    КонецЦикла;
    // установим признак обмена данными
    НаборЗаписей.ОбменДанными.Загрузка = Истина;
    НаборЗаписей.Записать();
    // установим признак ручной корректировки документа,
    // предварительно установив признак обмена данными
    ДокументОбъект = ДокументСсылка.ПолучитьОбъект();
    ДокументОбъект.ОбменДанными.Загрузка = Истина;
    ДокументОбъект.РучнаяКорректировка = Истина;
    ДокументОбъект.Записать(); 
КонецПроцедуры

Хотелось бы отметить, что без проверки ведения налогового учета на счёте, при попытке записать набор, содержащий проводку с ненулевой суммой по счёту на котором не ведется налоговый учет, возникнет ошибка следующего содержания:

Запись не верна! Поле “Сумма (налоговый учет)” должно быть пустым! 
(Регистр бухгалтерии: Журнал проводок (бухгалтерский и налоговый учет); 
Номер строки: 1)

Режим обмена данными устанавливается следующими строками:

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

Это необходимо для того, чтобы не выполнялся программный код, находящийся в обработчиках событий “ПередЗаписью” модуля набора записей регистра бухгалтерии “Хозрасчетный” и модуля корректируемого документа. В каждом из них (для типовых конфигураций) есть проверка следующего вида:

Если ОбменДанными.Загрузка Тогда
    Возврат;
КонецЕсли;

Признак ручной корректировки документа (ДокументОбъект.РучнаяКорректировка = Истина) необходимо устанавливать для того, чтобы изменения сохранились при повторном проведении документа. При проведении такого документа в конфигурации 1С:Бухгалтерия 8 выдается следующее сообщение:

Движения документа отредактированы вручную и не могут быть автоматически актуализированы