1с у счета отсутствует субконто заданное ссылкой на характеристику

Обновлено: 05.07.2024

При удалении или изменении настроек субконто на счете возникают ситуации, когда в проводках в качестве значений субконто остается значение Неопределено. Также данное явление имеет место быть при программном изменении настроек видов субконто на счете и записи счета в режиме ОбменДанными.Загрузка = Истина (без этого режима все отрабатывается корректно).

Правильной ситуацией является наличие пустых значений субконто, соответсвующего типа в данных проводках. В результате сводные отчеты по счету перестают показывать обороты и остатки по данным счетам в разрезе измененных субконто.

Тестирование и исправление в данном случае не помогает. Помогает перепроведение документов, т.к. в этом случае проводки перезаписываются с правильными значениями субконто.

Но не всегда есть возможность и желание у пользователей перепроводить документы (период закрыт, страшно за другие движения документов и т.д.).

Данная обработка предназначена для исправления пустых значений субконто в данных проводках. Т.е. для записи пустых значений корректных типов.

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

Обработка разработана и протестирована на релизе Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.75.58). Версия платформы: 8.3.15.1830.

Порядок работы:

Перед выполнением обработки рекомендуется сделать резервную копию базы данных.

Порядок работы с обработкой:

1. Открыть файл обработки через Файл-Открыть

2. Нажать кнопку "Найти проводки с некорректными значениями субконто". В результате в табличной части обработки будут отображены проблемные проводки, с указанием информации о документе-регистраторе, номере проводки, виде движения (дебет/кредит) и счете.

3. При наличии проблемных проводок нажать кнопку "Выполнить исправление"

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

Рекомендуем запустить ее выполнение в период низкой пользовательской нагрузки на базу данных.

В свое время в платформе была ошибка - после добавления субконто к счету платформа не производила рестутуризацию существующих проводок и в результате к ним не добавлялась строка с пустым значением нового субконто.

Внешне результат данной ошибки был виден в оборотке по счету. В группировке по данному субконто появлялось две пустые строки. Если выбирать запросом в консоли одна строка была пустым значением данного типа субконто а вторая NULL.

История "лечится" перепроведением или перезаписью движений.

Приведенный ниже запрос позволяет выявить такие ошибки

ВЫБРАТЬ
Хозрасчетный.Регистратор КАК Регистратор ,
Хозрасчетный.НомерСтроки КАК НомерСтроки ,
Хозрасчетный.СчетДт КАК Счет ,
Хозрасчетный.Сумма ,
Хозрасчетный.Организация ,
ЗНАЧЕНИЕ ( ВидДвиженияБухгалтерии.Дебет ) КАК ВидДвижения ,
"Д" КАК ВидДвиженияБуквой
ПОМЕСТИТЬ Движения
ИЗ
РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный

ВЫБРАТЬ
Хозрасчетный.Регистратор ,
Хозрасчетный.НомерСтроки ,
Хозрасчетный.СчетКт ,
Хозрасчетный.Сумма ,
Хозрасчетный.Организация ,
ЗНАЧЕНИЕ ( ВидДвиженияБухгалтерии.Кредит ),
"К"
ИЗ
РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Движения.Регистратор КАК Регистратор ,
Движения.НомерСтроки КАК НомерСтроки ,
ВЫБОР
КОГДА ХозрасчетныйСубконто.ВидДвижения = ЗНАЧЕНИЕ ( ВидДвиженияБухгалтерии.Кредит )
ТОГДА "К"
ИНАЧЕ "Д"
КОНЕЦ КАК ВидДвиженияБуквой ,
ХозрасчетныйСубконто.ВидДвижения ,
ХозрасчетныйСубконто.Вид КАК ВидСубконто
ПОМЕСТИТЬ ДвиженияССубконто
ИЗ
Движения КАК Движения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Субконто КАК ХозрасчетныйСубконто
ПО Движения.Регистратор = ХозрасчетныйСубконто.Регистратор
И Движения.НомерСтроки = ХозрасчетныйСубконто.НомерСтроки
И Движения.ВидДвижения = ХозрасчетныйСубконто.ВидДвижения
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
Движения.Регистратор КАК Регистратор ,
Движения.НомерСтроки КАК НомерСтроки ,
Движения.Счет ,
Движения.ВидДвижения
ИЗ
Движения КАК Движения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто
ПО Движения.Счет = ХозрасчетныйВидыСубконто. Ссылка
ГДЕ
НЕ ( Движения.Регистратор , Движения.НомерСтроки , Движения.ВидДвиженияБуквой , ХозрасчетныйВидыСубконто.ВидСубконто ) В
(ВЫБРАТЬ
ДвиженияССубконто.Регистратор ,
ДвиженияССубконто.НомерСтроки ,
ДвиженияССубконто.ВидДвиженияБуквой ,
ДвиженияССубконто.ВидСубконто
ИЗ
ДвиженияССубконто КАК ДвиженияССубконто )

УПОРЯДОЧИТЬ ПО
Регистратор
ИТОГИ ПО
Регистратор ,
НомерСтроки
АВТОУПОРЯДОЧИВАНИЕ

ВыборкаДокументов = РезЗапроса . Выбрать ( ОбходРезультатаЗапроса . ПоГруппировкам );
ВремяНачалаОбработки = ТекущаяДата ();
КоличествоСтрок = ВыборкаДокументов . Количество ();
НомерСтроки = 0 ;
Пока ВыборкаДокументов . Следующий () Цикл
ТекущийМоментВремени = ТекущаяДата ();
НомерСтроки = НомерСтроки + 1 ;
КоличествоСтрокОставшихся = КоличествоСтрок - НомерСтроки ;

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

ВыборкаПоСтрокам = ВыборкаДокументов . Выбрать ( ОбходРезультатаЗапроса . ПоГруппировкам );
Пока ВыборкаПоСтрокам . Следующий () Цикл
Проводка = НаборЗаписей [ ВыборкаПоСтрокам . НомерСтроки - 1 ];
Выборка = ВыборкаПоСтрокам . Выбрать ( ОбходРезультатаЗапроса . ПоГруппировкам );
Пока Выборка . Следующий () Цикл
Если Выборка . ВидДвижения = ВидДвиженияБухгалтерии . Дебет Тогда
Счет = Проводка . СчетДт ;
Субконто = Проводка . СубконтоДт ;
Иначе
Счет = Проводка . СчетКт ;
Субконто = Проводка . СубконтоКт ;
КонецЕсли;
СоответсвиеТекущихСубконто =Новый Соответствие ;
Для Каждого ВидСубконто ИЗ Счет . ВидыСубконто Цикл
СоответсвиеТекущихСубконто . Вставить ( ВидСубконто . ВидСубконто , Субконто [ ВидСубконто . ВидСубконто ]);
КонецЦикла;

Для Каждого ВидСубконто ИЗ Счет . ВидыСубконто Цикл
Субконто . Вставить ( ВидСубконто . ВидСубконто , ВидСубконто . ВидСубконто . ТипЗначения . ПривестиЗначение ());
Если СоответсвиеТекущихСубконто [ ВидСубконто . ВидСубконто ]<>Неопределено Тогда
Субконто . Вставить ( ВидСубконто . ВидСубконто , СоответсвиеТекущихСубконто [ ВидСубконто . ВидСубконто ]);
КонецЕсли;
КонецЦикла;

КонецЦикла;
КонецЦикла;
НаборЗаписей . Записать ();

СреднееВремя =( ТекущаяДата ()- ВремяНачалаОбработки )/ НомерСтроки ;
Состояние ( Строка ( НомерСтроки )+ "/" + Строка ( КоличествоСтрок )+ " (" + Строка ( ТекущаяДата ()- ТекущийМоментВремени )+ ") " + Строка ( ТекущаяДата ()+ КоличествоСтрокОставшихся * СреднееВремя ));
ОбработкаПрерыванияПользователя ();
КонецЦикла;

Перед выполением на больших базах рекомендуется отключить итоги и запрет границы редактирования.

Дополнительно,для вашего удобства, выкладываю файл .sel для консоли запроса с обработкой, который содержить оба текста.

Читайте также: