UPD В v1.1 Добавлена кнопка проверки и исправление идёт сразу по трём контурам, Валюты, Направления деятельности, Подразделения.
Для исправления этой проблемы необходимо выполнить приведение типов, в старых документах (а иногда и в новых) 1С зачастую выполняют запись то значения NULL, то значения Справочники.Валюты.ПустаяСсылка что приводит к некорректному отображению в ОСВ.
Создана обработка, которая приводит значения к корректному NULL. Обработка "В одну кнопку", разумеется, сначала необходимо запустить её на тестовой базе.
Выполнялась проверка данного действия на ERP 2.5.8.245 и ERP 2.5.7.402, также, вероятнее всего, подойдёт и для КА соответствующих версий.
Код открытый. Обработка одноразовая, однако можно приведение типов внедрить и в регламентное задание, и в событие перед записью в регистр.
&НаКлиенте
Процедура ОбработатьПроводки(Команда)
ОбработатьПроводкиНаСервере();
КонецПроцедуры
&НаСервере
Процедура ОбработатьПроводкиНаСервере()
Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ
| Хозрасчетный.Регистратор КАК Регистратор
|ИЗ
| РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
|ГДЕ
| (Хозрасчетный.ВалютаДт = ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)
| ИЛИ Хозрасчетный.ВалютаКт = ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| И НЕ ТИПЗНАЧЕНИЯ(Хозрасчетный.Регистратор) = ТИП(Документ.ОперацияБух)
|
|СГРУППИРОВАТЬ ПО
| Хозрасчетный.Регистратор
|АВТОУПОРЯДОЧИВАНИЕ";
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
СтарыеПроводки = Результат.Регистратор.ПолучитьОбъект().Движения.Хозрасчетный;
СтарыеПроводки.Прочитать();
НовыеПроводки = Результат.Регистратор.ПолучитьОбъект().Движения.Хозрасчетный;
НовыеПроводки.Прочитать();
Для Каждого НоваяПроводка из НовыеПроводки Цикл
Если НоваяПроводка.СуммаВРДт = Null Тогда
//Сообщить("Исправлен тип пустого поля проводки ВРКт " + Результат.Регистратор);
НоваяПроводка.СуммаВРДт = 0;
КонецЕсли;
Если НоваяПроводка.СуммаПРДт = Null Тогда
//Сообщить("Исправлен тип пустого поля проводки ПРКт " + Результат.Регистратор);
НоваяПроводка.СуммаПРДт = 0;
КонецЕсли;
Если НоваяПроводка.СуммаВРКт = Null Тогда
//Сообщить("Исправлен тип пустого поля проводки ВРКт " + Результат.Регистратор);
НоваяПроводка.СуммаВРКт = 0;
КонецЕсли;
Если НоваяПроводка.СуммаПРКт = Null Тогда
//Сообщить("Исправлен тип пустого поля проводки ПРКт " + Результат.Регистратор);
НоваяПроводка.СуммаПРКт = 0;
КонецЕсли;
Если НоваяПроводка.ВалютаДТ = Справочники.Валюты.ПустаяСсылка() Тогда
НоваяПроводка.ВалютаДТ = NULL;
КонецЕсли;
Если НоваяПроводка.ВалютаКТ = Справочники.Валюты.ПустаяСсылка() Тогда
НоваяПроводка.ВалютаКТ = NULL;
КонецЕсли;
Для Каждого Субконто Из НоваяПроводка.СубконтоДт Цикл
Если НЕ ЗначениеЗаполнено(Субконто.Ключ) Тогда
НоваяПроводка.СубконтоДт.Удалить(Субконто.Ключ);
КонецЕсли;
КонецЦикла;
Для Каждого Субконто Из НоваяПроводка.СубконтоКт Цикл
Если НЕ ЗначениеЗаполнено(Субконто.Ключ) Тогда
НоваяПроводка.СубконтоКт.Удалить(Субконто.Ключ);
КонецЕсли;
КонецЦикла;
КонецЦикла;
РегистрыБухгалтерии.Хозрасчетный.ВыполнитьДопОбработкуПроводок(НовыеПроводки);
Для Каждого НоваяПроводка из НовыеПроводки Цикл
Если НЕ ЗначениеЗаполнено(НоваяПроводка.Регистратор) Тогда
НовыеПроводки.Удалить(НоваяПроводка);
//Сообщить("Новая проводка в документе " + Результат.Регистратор);
Продолжить;
КонецЕсли;
КонецЦикла;
НовыеПроводки.ОбменДанными.Загрузка = Истина;
НовыеПроводки.Записать();
КонецЦикла;
Сообщить("Готово.");
КонецПроцедуры
Если будете запускать на других конфигурациях, строчку
РегистрыБухгалтерии.Хозрасчетный.ВыполнитьДопОбработкуПроводок(НовыеПроводки);
можно убрать, она в принципе вспомогательная. Запускает типовую обработку проводок.
Было время, я делал в событии перед записью хозрасчетного обработку проводок, вот пример:
Процедура актУдалитьПустыеВалютыВПроводках(Проводки) Экспорт
Для Каждого СтрокаТЧ из Проводки Цикл
Если СтрокаТЧ.ВалютаДТ = Справочники.Валюты.ПустаяСсылка() Тогда
СтрокаТЧ.ВалютаДТ = NULL;
КонецЕсли;
Если СтрокаТЧ.ВалютаКТ = Справочники.Валюты.ПустаяСсылка() Тогда
СтрокаТЧ.ВалютаКТ = NULL;
КонецЕсли;
КонецЦикла;
КонецПроцедуры