Генератор документов - феррари на которой можно ездить только вокруг дома, Новый модуль получился хорошим но не предназначен для использования разработчиками.
Администратор
Сообщений: Баллов: 55Регистрация: 22.01.2014
10.04.2020 16:13:51
Цитата
Алексей Гребнев написал: т.к. первым будет все равно вызываться провайдер Bitrix\Crm\Integration\DocumentGenerator\DataProvider\Deal
На предыдущей странице этого топика я рассказывал, что можно сделать.
Вам надо перехватить результат отправки аякс-запроса на получение списка шаблонов для текущей сущности и переопределить его, добавив туда нужный вам провайдер вместо стандартного.
После этого всё должно заработать само, из сделки будет печататься документ через ваш провайдер
Генератор документов - феррари на которой можно ездить только вокруг дома, Новый модуль получился хорошим но не предназначен для использования разработчиками.
Администратор
Сообщений: Баллов: 55Регистрация: 22.01.2014
09.04.2020 19:31:51
Цитата
Алексей Гребнев написал: Как я понимаю в этот список полей попасть невозможно вообще.Эти окна вызываются из окна просмотра/редактирования сделки - а там, в свою очередь, в запросе отправляется класс DataProvider
попасть в список полей стандартного провайдера нельзя, только через пользовательские поля, но вы туда не добавите свой провайдер.
Цитата
Алексей Гребнев написал: Если разбирать компонент documentgenerator.placeholders, то он вот тут он все равно выберет родной класс модуля crm -
сразу же при переходе из сделки получить в фильтре свой провайдер-наследник не получится, только если хаками с переопределением компонента или внедрением js, которое поменяет фильтр и применит его.
Главное проверить, что ваш провайдер появился в списке провайдеров в фильре. Дальше дело техники.
Цитата
Алексей Гребнев написал: А в один шаблон документа можно плейсхолдеры (макросы) вставлять из разных провайдеров?
теоретически - можно, но там всё непросто. Надо пробовать и дебажить. Проще уже на событии получать нужные значения и записывать их.
Вы попробовали способ, который я посоветовал? Там для прототипа работы совсем немного
Генератор документов - феррари на которой можно ездить только вокруг дома, Новый модуль получился хорошим но не предназначен для использования разработчиками.
Администратор
Сообщений: Баллов: 55Регистрация: 22.01.2014
08.04.2020 15:55:43
Это будет непросто. Порядок действий примерно следующий:
1. унаследовать \Bitrix\Crm\Integration\DocumentGenerator\DataProvider\Deal - это будет ваш новый провайдер, из которого вы будете печатать документы. Это будет та же сделка, но с дополнительным набором полей 2. добавить этот класс через событие onGetDataProviderList () с привязкой к модулю crm. Проверить, что провайдер отобразился в списке в настройке шаблона. 3. Добавить ваши новые поля в ваш новый провайдер
Б24 - documentgenerator
Администратор
Сообщений: Баллов: 55Регистрация: 22.01.2014
08.04.2020 10:25:17
Через onBeforeProcessDocument самый простой вариант. Посмотрите тему , там есть много примеров. С помощью события в документ можете прокинуть что угодно. Проблема в том, что ваши поля не будут отображаться в интерфейсе, т.е. для формирования шаблона вам придется где-то поддерживать и показывать список полей для значений списка.
Чтобы поля появились в интерфейсе понадобится намного больше телодвижений.
Генератор документов - феррари на которой можно ездить только вокруг дома, Новый модуль получился хорошим но не предназначен для использования разработчиками.
Администратор
Сообщений: Баллов: 55Регистрация: 22.01.2014
30.03.2020 10:16:26
Цитата
Ахат Баязи написал: В принципе несерьезный, но нервы может попортить пользователям.
про баг знаю, спасибо. Собственно, из-за него по-нормальному работать сложно.
Я бы предложил такой вариант: добавить к ссылке какой-то свой уникальный get-параметр, а в обработчике события его обрабатывать и вызывать метод
Код
$document->enableStamps(true);
костыль, но должно помочь. Я надеюсь, что в ближайшее время вернусь к модулю и поправлю баги, которые накопились.
Цитата
Ахат Баязи написал: По провайдеру смотреть, только не понял, как правильно в фильтре провайдер задать
Генератор документов - феррари на которой можно ездить только вокруг дома, Новый модуль получился хорошим но не предназначен для использования разработчиками.
Администратор
Сообщений: Баллов: 55Регистрация: 22.01.2014
24.03.2020 23:21:58
Цитата
Ахат Баязи написал: 1. можно ли как-то переопределять штатные события вызова генератора через JS? 2. Есть ли аналог BX.DocumentGenerator.Document.onBeforeCreate в BX24? 3. А если реализовать это через активити, то такого не сделаешь с использованием БП. Или я не прав? Тогда поподробнее можно логику?
1. Оптимальный вариант будет следующий: При клике на кнопку "Документ" в первый раз идёт аякс-запрос на получение списка доступных шаблонов. На js аякс вызывается тут
На php этот запрос обрабатывается тут \Bitrix\DocumentGenerator\Controller\Document::getButtonTemplatesAction()
Вам надо перехватить событие onAjaxSuccess, в этом событии по урлу определить, что это нужный запрос, и в обработчике переопределить список шаблонов (видимо, придётся сделать ещё один аякс запрос). Больше ничего делать не надо, можно вообще никуда не лезть
2. вам надо сделать запрос к методу crm.documentgenerator.document.list
3. Через активити показать слайдер с документом конечно не получится. Может и есть способ, но мне не известен
Цитата
Ахат Баязи написал: 1. Каким методом можно это реализовать из локального приложения (через REST) 2. Как сгенерировать ссылку, чтобы она открывала документ в слайдере (см. скриншот ниже)?
Если нужен именно рест, то вам нужен метод crm.documentgenerator.document.list (там есть пример с фильтром)
Ссылка на просмотр существующего документа crm в слайдере имеет вид
здесь надо подставить нужный провайдер, ид шаблона и ид сущности
Генератор документов - феррари на которой можно ездить только вокруг дома, Новый модуль получился хорошим но не предназначен для использования разработчиками.
Администратор
Сообщений: Баллов: 55Регистрация: 22.01.2014
23.03.2020 12:42:45
Цитата
Ахат Баязи написал: Задача: Необходимо при определенных условиях подменить шаблон перед генерацией документа.
В обработчике события onBeforeProcessDocument нельзя подменить шаблон.
Для реализации такой логики вам лучше сделать создание документа через активити "Создание документа CRM".
Вы можете перед этим активити проверять ваши условия, в зависимости от них записать ид нужного документа в переменную и передать его в активити создания документа.
Другой вариант - подсовывать какую-то свою логику на js.
Генератор документов - феррари на которой можно ездить только вокруг дома, Новый модуль получился хорошим но не предназначен для использования разработчиками.
Администратор
Сообщений: Баллов: 55Регистрация: 22.01.2014
23.03.2020 12:33:08
Цитата
Ахат Баязи написал: Значения свойств переназначить получилось, а вот доп. поле $dataValue['W4A_TUTUT'] вывести не получилось, хотя в провайдер данное значение попадает
Добрый день.
Чтобы новое поле добавилось в документ, вам надо передать его описание.
а в сам шаблон добавьте поле {ProductsProductW4aTutut}
В этом случае его значение появится в документе. Локально проверил, работает
Генератор документов - феррари на которой можно ездить только вокруг дома, Новый модуль получился хорошим но не предназначен для использования разработчиками.
Администратор
Сообщений: Баллов: 55Регистрация: 22.01.2014
11.02.2020 15:10:58
Игорь Акинфиев, код из предыдущего примера должен работать. Можете подебажить стандартный механизм создания документа (через интерфейс) и посмотреть. Там также работает.
Ваш вариант с использованием апи корректный, файл будет создан. Но это просто файл, он его даже в базу не сохранит. Ни как файл, ни как документ.
Попробуйте воспользоваться стандартным активити, а данные в документ подсовывайте на событии onBeforeProcessDocument. Код тот же самый, но всё остальное должно работать.
Генератор документов - феррари на которой можно ездить только вокруг дома, Новый модуль получился хорошим но не предназначен для использования разработчиками.
Администратор
Сообщений: Баллов: 55Регистрация: 22.01.2014
11.02.2020 10:34:32
Игорь Акинфиев, проверьте, что ваш шаблон с ид 42 привязан к сущности "счет". Проверьте в интерфейсе в форме редактирования шаблона.