Дело было вечером, делать было нечего и мы решили поднять точность определяемого типа ЗначениеПоказателяРасчетаЗарплаты до 5 знаков, а то пляски с территориальными коэффициентами норовили потерять копейку.
Меняем "Число 10.2" на "Число 10.5", проверяем расчет - все стало четко, применяем на рабочую базу и идем домой.
(все, что выше, делал не я, так что подробностей не расскажу)
Утром удивленные кадровики обнаружили, что в штатном расписании оклад в 115000 превращается в 99999.99999, как только нажимаешь энтер. Упс.
Поиск ссылок на тип "ЗначениеПоказателяРасчетаЗарплаты" даёт 159 позиций, многие из которых разворачивается еще на сотню документов.
Итогом борьбы стала приложенная обработка, которая умеет делать следующее:
1. Искать проблемы:
по списку из результата поиска ссылок на объект типа
Справочник.МестаРаботы.ТабличнаяЧасть.Показатели.Реквизит.Значение.Тип
Справочник.ШтатноеРасписание.Реквизит.Значение.Тип
умеет искать сбойные значения для регистров, справочников и документов, включая табличные части. ( в частном случае 99999). Выводит количество грусти через "Сообщить". (список нужно положить в макет ПроверяемыеРеквизиты)
2. Решать проблемы:
Для документов и ТЧ документов умеет подключившись к эталонному бэкапу через V83.COMConnector находить аналогичный документ, проверять, что все кроме цифр в исправляемой строке (или документе) совпадает и исправлять сбойный реквизит на верный.
Как это работает и как пользоваться:
1. Решение сделано в толстом обыкновенном режиме, так как мне в условиях линукс сервера сопрягать серверные запросы к нашей базе с клиентским COMом в эталонную кажется излишним извращением.
2. В функции ПодключениеКЭталону() нужно переопределить параметры подключения. Так как обработка не предполагает еженедельного использования, то интерфейс и настройки прошиты в коде.
3. В функциях ПолучитьЗапросКТЧ, ПолучитьЗапросКОбъекту нужно в условиях прописать, как найти ваши проблемы.
4. Контроль неизменности эталона по отношению к исправляемому объекту осуществляется в ИсправитьПроблемы(), в блоке "//3. Проверить, что нецифровые строчки совпадают." У меня там проверка на совпадение всех нецифровых реквизитов через совпадение результата "ЗначениеВСтрокуВнутр". Думаю в большинстве случаев это всех устроит, но если что - менять там. (в двух местах, для ТЧ и для документов)
После этого остаётся жать кнопку "Выполнить" и ждать чуда.
Блок исправления регистров писать не стал, так как в нашем случае они были все ведомые, обошлись перепроведением регистраторов и отменой лишних перерасчетов. Если кому понадобиться, можно или дописать по аналогии с документами, или заинтересовать меня, чтобы это сделал я.
PS Испытывалось на 1С:Предприятие 8.3 (8.3.13.1690), но должно запуститься на 8.3.6+ (из за СтрРазделить).