Всем доброго дня! Сначала опишу задачу, а потом свои попытки решения:
Настроена типовая синхронизация УНФ -> БП. По определенным причинам "Отчет о розничных продажах" в УНФ может содержать продажи номенклатуры с нулевыми суммами. Конфигурация БП полностью типовая и не допускает наличия таких строк, поэтому при переносе документа он не проводится. Т.к. снимать с замка ради такой мелочи не хочется, было написано расширение, которое в "Обработка проверки заполнения" исключает реквизит "Товары.Сумма" из обязательных реквизитов. Теперь, при ручном проведении документа он успешно проводится, но при синхронизации все равно срабатывает какая-то проверка и документ не проводится.
Собственно, не понимаю, как мне принудительно проводить ОРП при переносе. С КД 3 не работал, обрывками почитал про модули и принципы и было принято решение в отладчике попытаться добраться до момента, где срабатывает проверка. Синхронизация настроена через COM-соединение, я подключил отладку по вот этой статье https://odines.blogspot.com/2020/11/com.html . Далее, захожу в в УНФ, прожимаю синхронизацию, идет сначала "Получение" данных из БП - точки останова в БП срабатывают, затем идет, непосредственно, "Выгрузка" и вот тут точки останова не работают. Конкретно пробовал их ставить в процедуре "ПКО_Документ_ОтчетОРозничныхПродажах_ПередЗаписьюПолученныхДанных" и "ПКО_Документ_ОтчетОРозничныхПродажах_ПриКонвертацииДанныхXDTO"
Удалось обойти следующим образом: изначально регламентное задание по синхронизации было настроено на стороне УНФ. Т.к. при прямом подключении отладчиком не получалось поймать нужные функции на стороне БП, то для тестирования перевел обмен на режим "через файл". В итоге выяснилось, что через файл всё работает корректно - мы нажимаем "Синхронизировать" на стороне УНФ, формируется файл выгрузки. Затем, мы жмем "Синхронизировать" на стороне БП, в базу записывается непроведенный ОРП. После чего срабатывает процедура ОбменДаннымиСервер.ВыполнитьОтложенноеПроведениеДокументов() и мы имеем проведенный документ. Это натолкнуло на мысль, что при прямом обмене мы можем регламентное задание настроить на стороне БП, что и решило поставленную задачу.
Видимо, если запускать регламентное задание на стороне отправителя, то физиология обмена несколько меняется, и такое отложенное проведение документов не запускается.
(2) Эту вещь я понимаю. Вопрос, как это программно обойти. Документ же физически переносится и записывается, но не проводится. Разве нельзя где-то в какой-то момент встроится и все-таки провести документ?
Удалось обойти следующим образом: изначально регламентное задание по синхронизации было настроено на стороне УНФ. Т.к. при прямом подключении отладчиком не получалось поймать нужные функции на стороне БП, то для тестирования перевел обмен на режим "через файл". В итоге выяснилось, что через файл всё работает корректно - мы нажимаем "Синхронизировать" на стороне УНФ, формируется файл выгрузки. Затем, мы жмем "Синхронизировать" на стороне БП, в базу записывается непроведенный ОРП. После чего срабатывает процедура ОбменДаннымиСервер.ВыполнитьОтложенноеПроведениеДокументов() и мы имеем проведенный документ. Это натолкнуло на мысль, что при прямом обмене мы можем регламентное задание настроить на стороне БП, что и решило поставленную задачу.
Видимо, если запускать регламентное задание на стороне отправителя, то физиология обмена несколько меняется, и такое отложенное проведение документов не запускается.