World 1C

Блог для программистов и пользователей платформы 1С:Предприятие

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

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

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

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

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

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

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

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

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

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

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

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

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

Поделиться
  • Twitter
  • Добавить ВКонтакте заметку об этой странице
  • Facebook
  • Одноклассники
  • LiveJournal
  • Мой Мир
  • В закладки Google
  • FriendFeed
  • Блог Я.ру

5 комментария(ев) к “Программная корректировка движений документа
  • NASH:

    а как можно разрешить ручную корректировку проводок в Управлении торговым предприятием 1с8,2?

    • admin:

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

  • Вера:

    А как скорректировать движения документа, если операция документа содержит забалансовый счет? Например, документ ПоступлениеНаРасчетныйСчет в режиме Поступление от продажи иностранной валюты формирует проводки по НЕ.01.9 и НЕ.04. При Записи документа после модификации движений по балансовым счетам вылетает на ошибку
    {РегистрБухгалтерии.Хозрасчетный.МодульНабораЗаписей(239)}: Преобразование значения к типу Число не может быть выполнено
    СуммаНеУчитываемыхДоходов = Проводка.Сумма – Проводка.СуммаВРДт – Проводка.СуммаПРДт;

    • admin:

      Строка на которой у Вас вылетает ошибка находится в процедуре “ОтразитьДоходыРасходыНеУчитываемыеВНалоговомУчете” модуля набора записей регистра “Хозрасчетный” и вызывается она только в том случае, если набор записывается в обычном режиме (а не в режиме обмена данными, как в моём примере). Проще говоря, очень похоже на то, что вы не используете вот этот кусок кода:

      
       // установим признак обмена данными
       НаборЗаписей.ОбменДанными.Загрузка = Истина;
       НаборЗаписей.Записать();
      

      Я проверил свой код на Вашем примере и никаких ошибок у меня не возникло.

  • Яна:

    Здравствуйте !!!!! Какие права должны быть у пользователя в 1С 8.0 версия 2.0, чтобы был виден флаг “Ручная корректировка движения документа” ?????? Заранее благодарю !!!!!!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>