Решение:
Так как написать искусственный разум, который точно и без ошибок определит какой счет нужно проставить, какой из них более важный при совпадении дат, какие нужно заменить, а какие нет практически нереально, разработана обработка подстановки счетов организации в документы.
Обработку можно использовать отдельно или же в нашем случае мы ее вшили при записи банковского счета организации.
Алгоритм работы обработки следующий:
1) Обработка ищет все связанные с банковскими счетами этой организации ЗаказыПокупателей и РеализацииТоваровУслуг. Заполняет в поле «Документ», а также в столбик «Старый счет» заполняется счет, который на данный момент проставлен в документе.
2) Выполняется поиск подходящего счета по определенному приоритету и проставляется в столбик «Новый счет»
Приоритет «важности счета» (от меньшего к большему):
- Наименьший приоритет имеют счета, у которых не проставлены даты открытия и закрытия.
- Счет, у которого есть дата открытия, но нет даты закрытия.
- Счет, у которого есть дата закрытия, но нет даты открытия.
- Счет, у которого проставлены обе даты.
3) Поля, у которых старый и новый счет не совпадают, выделяются цветом…
4) Дальше включается пользователь и правит то, что не правильно подобрала обработка.
5) Ну и дальше кнопка выполнить и понеслось.
Технические моменты:
- Если нужно добавить какието еще документы кроме заказов и реализаци, можно поправить запрос в обработке, от там совсем простенький.
- Наше внедрение в справочник банковские счета выглядит так:
// Обработчик события "ПослеЗаписи" формы
Процедура ПослеЗаписи()
Если ТипЗнч(Владелец) = Тип("СправочникСсылка.Организации") Тогда
Режим = РежимДиалогаВопрос.ДаНет;
Текст = "Вы изменили банковский счет организации. Запустить обработку переподстановки банковских счетов организации в связанные документы с учетом временной хронологии?";
Ответ = Вопрос(Текст, Режим, 0);
Если Ответ = КодВозвратаДиалога.Да Тогда
ОбработкаЗаменыСчета = Обработки.ПереподстановкаСчетаОрганизацииВДокументы.Создать();
ОбработкаЗаменыСчета.Организация = Владелец;
ОбработкаЗаменыСчета.СчетОрганизации = Ссылка;
ОбработкаЗаменыСчета.ЗаполнитьТаблицуСвязанныхДокументов();
ФормаОбработки = ОбработкаЗаменыСчета.ПолучитьФорму("Форма");
Форма = ПолучитьФорму("Обработка.ПереподстановкаСчетаОрганизацииВДокументы.Форма.Форма");
Если Форма.Открыта() Тогда
Форма.Закрыть();
КонецЕсли;
ФормаОбработки.Открыть();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Надеюсь кому-то пригодится.