Генератор документов - феррари на которой можно ездить только вокруг дома, Новый модуль получился хорошим но не предназначен для использования разработчиками.
Александр Медведев написал: Олег Брага , попробуйте событие onBeforeProcessDocument и подмените значения на лету
Приветствую, ну ручками тянуть все значения реквизитов и заменять их по кодам, как-то печально, так как по идее должно быть достаточно подменить привязку к компании, а все остальное должно уже автоматом подтянуться. Проблем только с тем, что бы сделать это в правильный момент или иметь возможность каким-то образом перезапустить процесс подтягивания этих данных после замены в поле MY_COMPANY
Олег Брага написал: Вообще конечно мне не понятно почему нет изначально поля моя компания в Сделке, которое бы влияло на выбор потом при печати правильных реквизитов, в случае когда компаний несколько.
Кажется, в сделку планировали внедрить селектор выбора реквизитов, по аналогии со счетами. Когда это будет сделано - не скажу.
Вам надо в обработчике события вызвать $document->setValues(['MY_COMPANY' => 1]); Вычисление конкретных значений полей происходит позже, после этого события. Там будут учтены переданные вами данные
Антон Горбылев написал: По поводу события onBeforeProcessDocument Александр Медведев вам правильно рассказал. Вам надо в обработчике события вызвать $document->setValues(['MY_COMPANY' => 1]);
в моем случае вот такой код внутри обработчика события onBeforeProcessDocument:
код точно выполняется и в $newMyCompanyId точно лежит правильный ID одной из моих компаний. Но все равно в файле печатается название той у которой идентификатор меньше.
А вот такой код меняет наименование организации в конечном документе:
Приветствую, Александр Медведев, Наименование вставляется из реквизитов, показано на скриншоте screen_1 а насчет логов вы правы, там этот блок встречается дважды поскольку я забыл отключить обработчик события onCreateDocument, где обновляю привязку к моей компании непосредственно в данных документа. сейчас проведу еще раз более чистый эксперимент.
Уберите вызов \Bitrix\DocumentGenerator\Document::getFields() до того, как вы вызываете setValues()
Важно, чтобы ид моей компании был указан до того, как документ произведет инициализацию цепочки провайдеров и вычислит значения их полей. А в getFields() как раз идёт вычисление значений. После этого менять значение провайдера бесполезно, там будет работать только смена конечных значений.
Понятно, спасибо, сейчас попробую. Правда у меня на этом была основана проверка, нужно ли вообще обновлять это поле, не прописано ли оно уже правильное. Ну ладно пусть каждый раз обновляет.