Да, Антон Горбылев, вы правы, можно и без обработки на создание. Я просто подумал сначала, что то событие только на данные в рантайме перед генерацией документа влияет, а в базу не сохранит.
Наше дело:
|
Да, Антон Горбылев, вы правы, можно и без обработки на создание. Я просто подумал сначала, что то событие только на данные в рантайме перед генерацией документа влияет, а в базу не сохранит.
Наше дело:
|
|
|
|
|
|
Антон Горбылев, спасибо, все получилось.
В конечно итоге я сделал в обработчике onBeforeProcessDocument переопределение для печати, как вы писали, а в onCreateDocument изменение данных самого объекта документа, без запуска генерации (update со вторым параметром false), что бы при открытии данных тоже правильная компания привязанная отображалась.
Наше дело:
|
|
|
|
|
|
Приветствую, Александр Медведев,
Наименование вставляется из реквизитов, показано на скриншоте screen_1 а насчет логов вы правы, там этот блок встречается дважды поскольку я забыл отключить обработчик события onCreateDocument, где обновляю привязку к моей компании непосредственно в данных документа. сейчас проведу еще раз более чистый эксперимент.
Наше дело:
|
|
|
|
|
|
Приветствую, Антон Горбылев,
В init.php событие (указание на соответствие ID компании ее наименованию из реквизитов на скриншоте screen_1):
Выдержки из логов (полный файл ):
Результат генерации документа на скриншоте screen_2
Наше дело:
|
|||||
|
|
|
|
Приветствую, Антон Горбылев,
не работает это:
Но все равно в файле печатается название той у которой идентификатор меньше. А вот такой код меняет наименование организации в конечном документе:
но это совсем не то что хочется, перебивать отдельные параметры совсем бы не хотелось.
Наше дело:
|
|||||||
|
|
|
Наше дело:
|
|||
|
|
|
|
Приветствую,
пытаюсь поменять выбранную свою компанию в генерируемых документах (у компании несколько подразделений и в зависимости от разных условий в документах должны быть разные реквизиты разных подразделений). Для этого в событии onCreateDocument делаю обновление документа такого вида:
Что не так? Как добиться того, что бы сразу при создании документ перегенирировался с правильными данными? Сначала подумал, что успевает сгенерироваться первый файл, поэтому второй уже не генерится, попробовал сделать так: $document->setPdfId(0); перед апдейтом, но тоже не сработало. Да и вообще добавив логи в метод getFile прямо перед вызовом transform() выяснил что в fields там уже обновленные данные и при этом никакого идентификатора PDF еще нет, так что до вызова transform дело доходит. я конечно понимаю, что подход не совсем красивый, потому что происходит первая бесполезная генерация, но как этого эффекта добиться в событии onBeforeProcessDocument, не заменяя там все рекивизиты, а только переопределив поле MY_COMPANY я тоже не понимаю, к тому же там при создании нельзя использовать update что бы обновить сами данные документа, так как при первом вызове этого события документ еще не сохранен. Вообще конечно мне не понятно почему нет изначально поля моя компания в Сделке, которое бы влияло на выбор потом при печати правильных реквизитов, в случае когда компаний несколько.
Наше дело:
|
|||
|
|
|
Можете дать пример кода для создания нового объекта \Bitrix\DocumentGenerator\DataProvider и инициализации его данными из уже имеющегося такого же объекта? То есть вытаскиваем из $product внутри цикла данные и описания (ну с описанием полей как раз вроде все ясно) и передаем в конструкцию: \Bitrix\DocumentGenerator\DataProviderManager::getInstance()->createDataProvider($product->getFields()['PRODUCT'] (если я правильно понимаю), $productData (вот их как правильно получить из $product?), $provider (сюда кстати какого провайдера в этом случае?), 'PRODUCT'); Как-то так ведь это будет? Ключевой вопрос про получение $productData из $product.
Наше дело:
|
|||
|
|
|