Генератор документов - феррари на которой можно ездить только вокруг дома, Новый модуль получился хорошим но не предназначен для использования разработчиками.
Антон Горбылев, ну коль пошла такая пьянка... Следующая задача: Вытащить из Сделки, все сгенерированные КП, которые привязанные к сделке (те что отображаются в TimeLine). Вопрос: 1. Каким методом можно это реализовать из локального приложения (через REST) 2. Как сгенерировать ссылку, чтобы она открывала документ в слайдере (см. скриншот ниже)?
Ахат Баязи написал: 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 в слайдере имеет вид /bitrix/components/bitrix/crm.document.view/slider.php?documentId=10&IFRAME=Y&IFRAME_TYPE=SIDE_SLIDERчтобы в слайдере начался процесс генерации нового документа ссылка должна быть такой /bitrix/components/bitrix/crm.document.view/slider.php?providerClassName=Bitrix\Crm\Integration\DocumentGenerator\DataProvider\Deal&templateId=1&value=1&analyticsLabel=generateDocument&templateCode=BILL_RU&IFRAME=Y&IFRAME_TYPE=SIDE_SLIDERздесь надо подставить нужный провайдер, ид шаблона и ид сущности
буду пробовать. СПАСИБО!! по результатам отпишусь, если код приложения будет компактным, то выложу сюжа.
Ахат Баязи написал: Следующая задача:Вытащить из Сделки, все сгенерированные КП, которые привязанные к сделке (те что отображаются в TimeLine).Вопрос:1. Каким методом можно это реализовать из локального приложения (через REST)
Ахат Баязи написал: А через API как получить список? Что-то в доках нигде не могу найти.
Для понимания сути задачи, опишу ее полностью: Задачи: 1. Ком. предложение ( далее по тексту КП) генерируется через генератор документов по шаблону; 2. В зависимости от условий в сделке (заполненность полей), должен использоваться свой шаблон (это связано с тем, что разное количество полей в таблице товаров); 3. Утверждение КП - это штатный функционал Б24 - "С подписью и печатью", доступный в слайдере превью генератора документа; 4. Утверждение КП должно быть доступно по кнопке [Утвердить], только у Директора; 5. У сделки должно быть только 1 утвержденное КП; ================== Решение: Задача №1. Генерация документов - проблем нет (штатный функционал)
Задача №2. Выбор шаблона в зависимости от условий - проблема решена (решение: тут)
Задача №3. Утверждение КП - это штатный функционал Б24 - "С подписью и печатью", доступный в слайдере превью генератора документа; - тут все понятно, правда есть небольшой баг в штатном функционале. Антон Горбылев, подскажите где поправить, я этот компонент вынес в свое пространство имен, т.к. при обновлении не исчезнет Проблемы при реализации данной задачи: Сначала хотел кнопку [Утвердить] посадить в карточку сделки, чтобы слайдер открывался сразу с наложение печати и подписи, но не нашел способа открыть слайдер, чтобы сразу открывался слайдер с запуском генерации документа с печатью. Попытки управления переменной stampsEnabled не привели к успеху: не рабочие конструкции: 3.1. добавить в GET при открытии слайдера:
Код
let link = '/bitrix/components/bitrix/crm.document.view/slider.php'; // original handler
link = '/local/components/w4a.bitrix/crm.document.view/slider.php'; // custom handler
link += '?providerClassName=Bitrix\\Crm\\Integration\\DocumentGenerator\\DataProvider\\Deal';
link += '&templateId='+templateId+'&value='+ownerID+'&analyticsLabel=generateDocument&templateCode=null';
link += '&stampsEnabled=1'; // попытка запуска генератора с подписью и печатью (ACHTUNG!!! Не работает.)
let img = '/bitrix/components/bitrix/crm.document.view/templates/.default/images/document_view.svg';
BX.DocumentGenerator.Document.onBeforeCreate(link, {}, img)
3.2. прямое изменение переменной: файл: /local/components/w4a.bitrix/crm.document.view/templates/.default/script.js
Код
this.progress = true;
this.pdfUrl = '';
this.printUrl = '';
this.emailDiskFile = 0;
BX('crm-document-stamp').disabled = true;
var stampsEnabled = 1; // тут в наглую замена на "1" не дало эффекта
if(BX('crm-document-stamp').checked)
{
alert('BX.Crm.DocumentView.updateDocument - 002');
stampsEnabled = 1;
}
if(BX.type.isDomNode(this.preview.imageNode))
{
alert('BX.Crm.DocumentView.updateDocument - 003');
BX.hide(this.preview.imageNode);
}
Решение: Перенес кнопку [Утвердить] в слайдер превью документа (вместо checkbox-"С подписью и печатью") ACHTUNG!!! Вопрос №1 Как запустить слайдер, с активным параметром: "С подписью и печатью"?
Задача №4. Утверждение КП должно быть доступно по кнопке [Утвердить], только у Директора; - проблем нет (штатный функционал: добавил роль директора)
Задача №5. У сделки должно быть только 1 утвержденное КП; 5.1. Алгоритм: 5.1.1. При открытии слайдера проверяем сделку на все привязанные КП; 5.1.2. Проверяем на наличие в них КП с подписью 5.1.3. Если есть, то сообщаем пользователю, что имеется подписанное КП. Далее сценарий: [Подписать новое КП] [Посмотреть подписанное КП] [Отменить]
Итак проблемы: ACHTUNG!!! Вопрос №2 Как сделать ПРАВИЛЬНО выборку привязанных КП к сделке? акцент: ПРАВИЛЬНО, потому что решение вроде нашел, но мне кажется, что оно из разряда: "костыль". Как можно подробнее расписал ниже: Нашел только через сущность, не знаю правильно или нет. код:
в результате получил выборку по полю "VALUE"? которое содержит ИД сделки. Антон Горбылев, Тогда напрашивается вопрос: Фильтр не содержит тип сущности, и если документ генерировался из Лида, и из Сделки, то ИД- могут повторяться в этом поле. Тогда будет нарушаться целостность данных? Как правильно вытащить список созданных документов, которые привязаны к Сделки (ИД=13)? ============================ А ВСЕ ПОНЯЛ!!! ------------------------------------------------ По провайдеру смотреть, только не понял, как правильно в фильтре провайдер задать? пробовал сл. способами:
Антон Горбылев написал: Ссылка на просмотр существующего документа crm в слайдере имеет вид /bitrix/components/bitrix/crm.document.view/slider.php?documentId=10&IFRAME=Y&IFRAME_TYPE=SIDE_SLIDER
полный код для открытия документ в слайдере:
Код
<span id="w4a_get_signed_quote" data-action="GET_SIGNED_QUOTE" class="ui-btn ui-btn-success">
<?=GetMessage('W4A_GET_SIGNED_QUOTE')?>
</span>
<sc ript>
BX.bind(
BX('w4a_get_signed_quote'),
"click",
BX.delegate(function(){
let documentId = 594;
let handler = '/local/components/w4a.bitrix/crm.document.view/slider.php';
BX.SidePanel.Instance.open(handler + '?documentId='+documentId+'&IFRAME=Y&IFRAME_TYPE=SIDE_SLIDER', {
width: 980, // Максимальная ширина слайдера
cacheable: false, // Кешировать слайдер после закрытия. Если указано false, при закрытии слайдер будет автоматически уничтожен. По умолчанию true.
allowChangeHistory: false, // Менять адрес страницы на адрес открытого слайдера. По умолчанию true.
animationDuration: 200,
requestMethod: "post",
requestParams: { // Произвольный набор своих данных для слайдера, с которыми можно работать (чтение/запись/удаление) на всем жизненном цикле.
// action: "load",
// ids: [1, 2, 3],
// dictionary: {
// one: 1,
// two: 2
// }
}
});
}, this)
);
</sc ript>