Да, Антон Горбылев, вы правы, можно и без обработки на создание. Я просто подумал сначала, что то событие только на данные в рантайме перед генерацией документа влияет, а в базу не сохранит.
Наше дело:
|
Да, Антон Горбылев, вы правы, можно и без обработки на создание. Я просто подумал сначала, что то событие только на данные в рантайме перед генерацией документа влияет, а в базу не сохранит.
Наше дело:
|
|
|
|
|
|
Антон Горбылев, спасибо, все получилось.
В конечно итоге я сделал в обработчике 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.
Наше дело:
|
|||
|
|
|
|
Приветствую, Антон Горбылев,
Спасибо большое за подробный ответ, а то очень долго пытался разными способами сформировать данные для setFields для поля PRODUCTS, но все никак не получалось правильный формат объекта составить, а оказывается надо было одновременно и setFields и setValues использовать. Ну и ArrayDataProvider наверное не правильно через new пытался создавать. А можете еще показать, как можно отредактировать какие-нибудь поля например NAME внутри списка продуктов в провайдере Product? Можно ли как-то не создавай с нуля целиком весь пункт, ну или с пересозданием но, что бы большую часть не изменяемых полей получить из текущего объекта и передать обновленное значение туда при пересоздании?
Наше дело:
|
|
|
|
|
|
Приветствую.
Подскажите пожалуйста, можно ли в событии onBeforeProcessDocument как-то добраться до списка Products полей? И модифицировать его, а то насколько я вижу методы getFields и setValues работают только с обычными не списковыми (не ArrayDataProvider) полями? Ну или возможны какие-то другие способы, как выводить в документ не все позиции из сделки? Самый простой пример из жизни: в сделке Есть товар и услуга (доставка например), нужно сгенерить документы закрывающие, на товар нужно генерить накладную, куда доставка попасть не должна. Каким образом лучше это сделать? Насколько японимаю никаких условных операторов в шаблонах нет пока, думал получится через событие, но там смог модифицировать только обычные поля, а до списков пока не понял как добраться.
Наше дело:
|
|
|
|
|
Наше дело:
|
|||
|
|
|
Здравствуйте, а можете детализировать вот этот ответ, а то я не очень понял, что и где надо прописать, что бы товары выгрузились в уже созданный инфоблок? Где в 1С нужно указать этот GUID? И собственно как его получить? Насколько я понимаю, нигде в системе он не виден. Я конечно могу залезть напрямую в базу, но это как-то не интуитивно. Почему нельзя нигде в настройках задать в какой информационный блок нужно выгружать товары из 1С?
Наше дело:
|
|||
|
|
|
|
Для постоянной совместной работы. С радостью возьмём хорошего человека в штат, но не откажемся и от удалённого сотрудничества с не менее хорошим и обязательным человеком. Если не будете подводить - будем сотрудничать долго и плодотворно.
Обязательно: знание PHP, Java Script, HTML; отличное знание Битрикс. Не менее обязательно: возможность сразу взяться за работу и выдержать обещанные вами сроки. Желательно: нахождение в Москве или в Подмосковье и возможность встречи в нашем офисе (ст. м. Южная). Пишите на info@ru-site.ru или звоните по телефону 792-27-28. Валерий.
Наше дело:
|
|
|
|
|