При добавлении нового субконто счету, бывает возникает ситуация, когда в ОСВ по счету с группировкой по этому субконто появляются две строки <…>. Это субконто с типом Неопределено и Пустая ссылка.
Эта обработка позволяет найти и исправить Неопределено на ПустаяСсылка. Указывается период за который исправляем, Субконто и тип Пустой ссылки.
Есть несколько замечаний по коду:
1) Регистр надо сохранять не после обработки каждой записи по дебету или кредиту, а после обработки всего набора записей документа, т.е. в конце внешнего цикла
2) Не стоит искать значение плана вида характеристик по наименованию, когда известно его значение заранее
3) Подсчет записей происходит неверно, т.к. считается число строк, а в значении «из» число документов.
4) Если в запросе поставить «выбирать различные», то и сворачивать таблицу по регистратору не нужно
После всего вышесказанного код будет выглядеть так + вставил прерывание на всякий случай:
Процедура Обработать() Экспорт
Запрос = Новый Запрос;
Запрос.Текст = «ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЕПСБУСубконто.Регистратор
|ИЗ
| РегистрБухгалтерии.ЕПСБУ.Субконто КАК ЕПСБУСубконто
|ГДЕ
| ЕПСБУСубконто.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
| И ЕПСБУСубконто.Вид = &Вид
| И ЕПСБУСубконто.Значение = НЕОПРЕДЕЛЕНО
|
|УПОРЯДОЧИТЬ ПО
| ЕПСБУСубконто.Регистратор.Дата»;
Запрос.УстановитьПараметр(«ДатаНачала», ДатаНачала);
Запрос.УстановитьПараметр(«ДатаОкончания», КонецДня(ДатаОкончания));
Запрос.УстановитьПараметр(«Вид», ВыбСубконто);
Результат = Запрос.Выполнить().Выгрузить();
КолЗ = Результат.Количество();
КолД = Результат.Количество();
ТекДата = ТекущаяДата();
Сообщить(«количество документов » + КолД + «. Количество записей » + КолЗ + » » + ТекущаяДата());
н = 0;
Для Каждого Стр Из Результат Цикл
Док = Стр.Регистратор;
Рег = РегистрыБухгалтерии.ЕПСБУ.СоздатьНаборЗаписей();
Рег.Отбор.Регистратор.Значение = Док;
Рег.Прочитать();
Для Каждого Дв Из Рег Цикл
Для Каждого Субконто Из Дв.СубконтоДт Цикл
Если Субконто.Ключ = ВыбСубконто Тогда
Если Субконто.Значение = Неопределено Тогда
Дв.СубконтоДт.Вставить(ВыбСубконто, ТипСубконто.Ссылка);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для Каждого Субконто Из Дв.СубконтоКт Цикл
Если Субконто.Ключ = ВыбСубконто Тогда
Если Субконто.Значение = Неопределено Тогда
Дв.СубконтоКт.Вставить(ВыбСубконто, ТипСубконто.Ссылка);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Рег.Записать();
н = н+1;
Состояние(«Записан » + н + » из » + КолЗ + «. Скорость » + Окр((ТекущаяДата() — ТекДата)/н,5) + » » + Строка(Док));
ОбработкаПрерыванияПользователя();
КонецЦикла;
Сообщить(«Обработка завершена»);
КонецПроцедуры
у меня такая проблемка разьехался 71.01 счет, запросом проверил, что есть субконто с видом NULL, как мне их заменить на НЕОПРЕДЕЛННО или ПУСТУЮ ссылку чтобы схлопнуть субконто…Заранее Спасибо