Каталог решений - Корректировка движений регистра (Проведение без Проведения)

Корректировка движений регистра (Проведение без Проведения)

Корректировка движений регистра (Проведение без Проведения)

В наличии

Вариант проведения документов по одному выбранному Регистру (для конфигураций 1с 8.1/8.2)

Категория:

Описание

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

Основная идея заключается в том, что движения делаются с помощью алгоритмов проведения самой конфигурации, но в результате (после перепроведения) оставляется изменение движений только по выбранному регистру.

Этот пример может пригодится, например, в аналогичных описываемому случаях ввода остатков по отдельному регистру, либо в случае изменения алгоритма проведения по определенному регистру.

Не претендуя на оригинальность самой идеи отменять транзакцию, тем не менее хочу представить работающий алгоритм (для конфигураций 1С 8.1/8.2). Возможно, кому-то пригодится в работе. Мне он помогал ещё в нескольких случаях.

В примере приводится проведение по регистру накопления «Размещение». Это регистр был добавлен в конфигурацию и не относится к типовым. Алгоритм легко переделать на другой (другие) нужный регистр. Как с любыми операциями с регистрами, и этой операцией тоже следует пользоваться аккуратно )

Текст самих процедур (8.1/8.2)

Процедура ПерепровестиДокументыПоРегистру()

    //отбираем все проведенные документы, которые могут делать движения по нужному нам
    //регистру (РегистрыНакопления.Размещение)
    //за указанный период с Дата1 по Дата2

    ИмяРегистра = «Размещение»;

    ТекстЗапроса = «ВЫБРАТЬ Документы.Ссылка ИЗ («;
    Для Каждого
Документ Из Метаданные.Документы Цикл
        Если Не
Документ.Движения.Содержит(Метаданные.РегистрыНакопления[ИмяРегистра]) Тогда
            Продолжить;
        КонецЕсли;
       
ТекстЗапроса = ТекстЗапроса + «ВЫБРАТЬ » + Документ.Имя + «.Ссылка КАК Ссылка, » +
       
Документ.Имя + «.Дата КАК Дата  ИЗ Документ.» + Документ.Имя + » КАК » + Документ.Имя +
       
» ГДЕ » + Документ.Имя + «.Дата МЕЖДУ &НачПериода И &КонПериода И «
       
+ Документ.Имя + «.Проведен ОБЪЕДИНИТЬ ВСЕ «;
    КонецЦикла;
   
ТекстЗапроса = ТекстЗапроса + «ВЫБРАТЬ NULL, NULL ) КАК Документы ГДЕ НЕ Документы.Ссылка ЕСТЬ NULL УПОРЯДОЧИТЬ ПО Документы.Дата»;
   
Запрос = Новый Запрос(ТекстЗапроса);

    Запрос.УстановитьПараметр(«НачПериода», НачалоДня(Дата1));
   
Запрос.УстановитьПараметр(«КонПериода», КонецДня(Дата2));

    Выборка = Запрос.Выполнить().Выбрать();
   
Сообщить(Выборка.Количество());
    Пока
Выборка.Следующий() Цикл
       
ОбработкаПрерыванияПользователя();
       
ДокСсылка=Выборка.Ссылка;
       
Сообщить(» «+СокрЛП(ДокСсылка));
       
ПровестиПоРегистру(ДокСсылка,ИмяРегистра);
    КонецЦикла;
КонецПроцедуры

Процедура ПровестиПоРегистру(ДокСсылка, ИмяРегистра)
   
ДокОбъект = ДокСсылка.ПолучитьОбъект();

    НачатьТранзакцию();

    ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
   
ДокОбъект.Движения[ИмяРегистра].Прочитать();
   
ТаблицаДвиженийРегистра = ДокОбъект.Движения[ИмяРегистра].Выгрузить();

    //здесь отменяем проведение документа, чтобы ничего не изменилось
    //в прошлых периодах (по другим регистрам)
   
ОтменитьТранзакцию();

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

 

Решение похожей задачи (но другим способом) для платформы 7.7 описано в статье «Технологическое перепроведение документов» 

 

ps. (03/03/2012)

Забавно — сегодня обнаружил полный аналог этого алгоритма, описанный ранее на «Инфостарт» —  «Перепроведение документов только по выбранным регистрам» …. Похожие идеи витают в воздухе 🙂

has been added to your cart:
Оформление заказа