Списание (корректировка) задолженности контрагентов УНФ 1.6

Обнуление задолженности контрагентов в конфигурации «Управление небольшой (нашей) фирмой» версии 1.6 с помощью документа «Корректировка регистров».

Обработка по корректировке задолженности с помощью документа "Корректировка регистров" (КР). Делалась для УНФ для Украины, но думаю подойдет для любой страны. По срезу остатков на дату по всем измерениям регистров расчетов (покупателей, поставщиков, прочих) заполняет табличную часть КР для закрытия в "ноль". Отборы: Организация, Контрагент. 

Часто можно увидеть "зависшие копейки", либо в отчетах группировка есть, а сумм нету (неправильно закрылся регистр по измерениям). С этим справляется и даже больше. 

Можно использовать как внешнюю независимую обработку или подключить как дополнительную обработку (адаптирована).

 

Релиз платформы тот, который рекомендован для УНФ 1.6, но не ниже 8.3.5 (для объекта СхемаЗапроса). 

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

 

//фрагмент кода

МассивНужныхРегистров = Новый Массив;

Если НЕ Метаданные.РегистрыНакопления.Найти("РасчетыСПокупателями") = Неопределено Тогда
МассивНужныхРегистров.Добавить("РасчетыСПокупателями");
КонецЕсли;
Если НЕ Метаданные.РегистрыНакопления.Найти("РасчетыСПоставщиками") = Неопределено Тогда
МассивНужныхРегистров.Добавить("РасчетыСПоставщиками");
КонецЕсли;
Если НЕ Метаданные.РегистрыНакопления.Найти("РасчетыСПрочимиКонтрагентами") = Неопределено Тогда
МассивНужныхРегистров.Добавить("РасчетыСПрочимиКонтрагентами");
КонецЕсли;

ТаблицыДвижений = Новый Структура;

Для Каждого М Из МассивНужныхРегистров Цикл

МетаРегистраИзмерения = Метаданные.РегистрыНакопления[М].Измерения;
МетаРегистраРесурсы = Метаданные.РегистрыНакопления[М].Ресурсы;

СхемаЗапроса = Новый СхемаЗапроса;
ЗапросВыборки = СхемаЗапроса.ПакетЗапросов[0];
ОператорВыборки = ЗапросВыборки.Операторы[0];

ЗапросВыборки.ВыбиратьРазрешенные = Истина;

ИсточникРасчетов = ОператорВыборки.Источники.Добавить("РегистрНакопления."+М+".Остатки",М+"Остатки");

ИсточникРасчетов.Источник.Параметры[0].Выражение = Новый ВыражениеСхемыЗапроса("&КонПериода");
ИсточникРасчетов.Источник.Параметры[1].Выражение = Новый ВыражениеСхемыЗапроса("Организация = &Организация И Контрагент = &Контрагент");

_инд = 0;

ОператорВыборки.ВыбираемыеПоля.Добавить("ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)");
ЗапросВыборки.Колонки[_инд].Псевдоним = "ВидДвижения";
_инд=_инд+1;
ОператорВыборки.ВыбираемыеПоля.Добавить("ИСТИНА");
ЗапросВыборки.Колонки[_инд].Псевдоним = "Активность";
_инд=_инд+1;
ОператорВыборки.ВыбираемыеПоля.Добавить("&Период");
ЗапросВыборки.Колонки[_инд].Псевдоним = "Период";
_инд=_инд+1;

Для Каждого МРИ Из МетаРегистраИзмерения Цикл
ОператорВыборки.ВыбираемыеПоля.Добавить(МРИ.Имя);
ЗапросВыборки.Колонки[_инд].Псевдоним = МРИ.Имя;
_инд=_инд+1;
КонецЦикла;

Для Каждого МРР Из МетаРегистраРесурсы Цикл
ОператорВыборки.ВыбираемыеПоля.Добавить("-"+МРР.Имя+"Остаток");
ЗапросВыборки.Колонки[_инд].Псевдоним = МРР.Имя;
_инд=_инд+1;
КонецЦикла;

ОператорВыборки.ВыбираемыеПоля.Добавить("&СодержаниеПроводки");
ЗапросВыборки.Колонки[_инд].Псевдоним = "СодержаниеПроводки";

Запрос = Новый Запрос;
Запрос.Текст = СхемаЗапроса.ПолучитьТекстЗапроса();

Запрос.УстановитьПараметр("КонПериода",  Парам.ДатаОстатков);
Запрос.УстановитьПараметр("Организация",  Парам.Организация);
Запрос.УстановитьПараметр("Контрагент",  Парам.Контрагент);
Запрос.УстановитьПараметр("Период",  Парам.ДатаОстатков);
Запрос.УстановитьПараметр("СодержаниеПроводки",  НСтр("ru = 'Корректировка задолженности'; uk = 'Коригування заборгованості'"));

РезультатЗапроса = Запрос.Выполнить().Выгрузить();

Если НЕ РезультатЗапроса.Количество() = 0 Тогда
ТаблицыДвижений.Вставить(М,РезультатЗапроса);
КонецЕсли;

КонецЦикла;

Если ТаблицыДвижений.Количество() = 0 Тогда
Возврат НСтр("ru = 'Нет данных к корректировке'; uk = 'Нема даних до коригування'");
КонецЕсли;

ДокОбъект = Документы.КорректировкаРегистров.СоздатьДокумент();

//далее заполнение документа

 

P.S. Код открыт, делалась для себя, выкладываю как есть.

1 Comment

  1. jaroslav.h

    Дякую

    Reply

Leave a Comment

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