Услуги профессионального Битрикс-программиста

Шаблоны документов - заготовки


Модификаторы для шаблонов  - https://dev.1c-bitrix.ru/api_d7/bitrix/documentgenerator/modifiers.php
Про шаблоны - https://helpdesk.bitrix24.ru/open/7622241/
{TotalBeforeDiscount} - Сумма без скидки и налогов
{TotalDiscount} - Сумма скидки
{TotalSum} - Общая сумма

Модификаторы для "денег"
  • WZ - сокращение от With Zeros. Если WZ=Y, то в сумме всегда будут показаны незначащие нули, независимо от выбранного формата валюты.
  • NS - сокращение от No Sign. Если NS=Y, то сумма будет отображаться без символа валюты, если NS=N, то наоборот символ валюты будет показан.
  • W - сокращение от Words. Если W=Y и валюта одна из списка (рубль, белорусский рубль, гривна, тенге), то сумма будет написана прописью.

Это поле отдается только в рамках CRM, поэтому в других модулях его нельзя будет использовать. Этот же тип поля используется для численных значений (поля количества товаров, количества строк), но там по умолчанию NS=Y Также все денежные значения возвращают этот тип, в том числе пользовательские поля типа "Деньги".
Пример:
1200.00руб. - {TotalSum~WZ=N, NS=N}
1200.00 - {TotalSum~WZ=N, NS=Y}
1200руб. - {TotalSum~WZ=Y, NS=N}
1200 - {TotalSum~WZ=Y, NS=Y}
Одна тысяча двести рублей 00 копеек {TotalSum~W=Y}

Для счета
{RequisiteHomeAddressText} - адрес регистрации
{RequisiteRegisteredAddressText} - юридический адрес

Поставщик: {MyCompanyRequisiteRqCompanyName}, ИНН {MyCompanyRequisiteRqInn}, КПП {MyCompanyRequisiteRqKpp}, {MyCompanyRequisiteRegisteredAddressText}, тел.: {MyCompanyPhone}
Покупатель (физ лицо):  {ContactLastName} {ContactName} {ContactSecondName}
Покупатель (юр лицо): {RequisiteName}, ИНН {RequisiteRqInn}

Товары
{ProductsIndex} - №
{ProductsProductName} - Товары (работы, услуги)
{ProductsProductQuantity} - Кол-во
{ProductsProductMeasureName} - Единица
{ProductsProductPriceRaw~WZ=Y} - Цена
{ProductsProductPriceRawSum~WZ=Y} - Сумма
{ProductsProductDiscountTotal~WZ=N } - Сумма скидки в товаре

Доставка для заказа
{PriceDelivery~WZ=X}

Дата
для форматирования даты https://www.php.net/manual/ru/datetime.format.php
{DocumentCreateTime~d.m.Y} > 07.10.2021
{DocumentCreateTime~”j” F Y}г. > "7" октября 2021г.

Форматирование имени
{FormattedName~Format=#TITLE# #LAST_NAME# #NAME# #SECOND_NAME#}
  • #TITLE# - обращение;
  • #NAME# - имя;
  • #LAST_NAME# - фамилия;
  • #SECOND_NAME# - отчество;
  • #NAME_SHORT# - первая буква имени с точкой;
  • #LAST_NAME_SHORT# - первая буква фамилии с точкой;
  • #SECOND_NAME_SHORT# - первая буква отчества с точкой.
{ContactFormattedName} - контакт
{AssignedFormattedName} - ответственный

Падежи
{FormattedName~Case=0} выведет имя в родительном падеже.
  • Case=-1 - именительный;
  • Case=0 - родительный;
  • Case=1 - дательный;
  • Case=2 - винительный;
  • Case=3 - творительный;
  • Case=4 - предложный
Адрес
{Address~Format=3,Separator=3}

Format (формата адреса,  принятый в стране)

  • Format=1 - Европа;
  • Format=2 - Великобритания;
  • Format=3 - Северная Америка;
  • Format=4 - Россия (улица -> страна);
  • Format=5 - Россия (страна -> улица).

Separator (разделитель строк)

  • Separator=1 - запятая;
  • Separator=2 - без разделителя;
  • Separator=3 - перевод строки.
Телефон

{ClientPhone~format=E.164}

  • format=E.164  +79535851309
  • format=International  +7 953 585-13-09
  • format=National  8 (953) 585-13-09
Множественные поля
Важно! Шаблоны документов не поддерживают множественные поля с типом Файл и Привязка к элементам CRM.
Телефон, Почта, Мессенджер или любое пользовательское поле со свойством Множественное.
{MyField~mfirst=n}
  • mfirst=y - выводить только первое значение
  • mfirst=n - выводить все значения

Для договора с ООО

{MyCompanyRequisiteRqCompanyFullName}, именуемое в дальнейшем «Лицензиар»,
в лице директора {MyCompanyRequisiteRqDirector~Format=#LAST_NAME# #NAME# #SECOND_NAME#,Case=0}, действующего на основании
Устава, с одной стороны, и {RequisiteName}, именуемое в дальнейшем «Лицензиат», в лице {UfCrm1614686800} {ContactFormattedName~Format=#LAST_NAME# #NAME# #SECOND_NAME#,Case=0},  действующего на основании {UfCrm1614513805}, с другой стороны,
заключили настоящий Договор о нижеследующем

Для договора с ИП

{MyCompanyRequisiteRqCompanyFullName}, именуемое в дальнейшем «Лицензиар», в лице директора {MyCompanyRequisiteRqDirector~Format=#LAST_NAME# #NAME# #SECOND_NAME#,Case=0}, действующего на основании Устава, с одной стороны, и {RequisiteName}, именуемое в дальнейшем «Лицензиат», с другой стороны, заключили настоящий Договор о нижеследующем

Реквизиты в договоре с ООО

 
Лицензиар
 
Лицензиат
 
{MyCompanyRequisiteRqCompanyName}
ИНН {MyCompanyRequisiteRqInn},
КПП   {MyCompanyRequisiteRqKpp},
Адрес: {MyCompanyRequisiteRegisteredAddressText},  
Р/с {MyCompanyBankDetailRqAccNum}
{MyCompanyBankDetailRqBankName}
БИК {MyCompanyBankDetailRqBik}
Корр.счет {MyCompanyBankDetailRqCorAccNum}
тел.:   {MyCompanyPhone}
                                                                                         
 
     
 
{RequisiteName}
ИНН {CompanyRequisiteRqInn},  
КПП {CompanyRequisiteRqKpp},  
Адрес:{CompanyRequisiteRegisteredAddressText}
Р/с   {CompanyBankDetailRqAccNum}
{CompanyBankDetailRqBankName}
БИК {CompanyBankDetailRqBik}
Корр.счет   {CompanyBankDetailRqCorAccNum}
тел.: {ClientPhone}

 
_________________________ /{MyCompanyRequisiteRqDirector~Format=#LAST_NAME#   #NAME_SHORT# #SECOND_NAME_SHORT#}/
М.П.
 
_______________/{ContactFormattedName~Format=#LAST_NAME#   #NAME_SHORT# #SECOND_NAME_SHORT#}/
М.П.

Реквизиты в договоре с ИП

 
Лицензиар
 
Лицензиат
 
{MyCompanyRequisiteRqCompanyName}
ИНН {MyCompanyRequisiteRqInn},
КПП   {MyCompanyRequisiteRqKpp},
Адрес: {MyCompanyRequisiteRegisteredAddressText},  
Р/с {MyCompanyBankDetailRqAccNum}
{MyCompanyBankDetailRqBankName}
БИК {MyCompanyBankDetailRqBik}
Корр.счет {MyCompanyBankDetailRqCorAccNum}
тел.:   {MyCompanyPhone}
                                                                                         
 
     
 
{RequisiteName}
ИНН {CompanyRequisiteRqInn},  
Адрес:{CompanyRequisiteRegisteredAddressText}
Р/с   {CompanyBankDetailRqAccNum}
{CompanyBankDetailRqBankName}
БИК   {CompanyBankDetailRqBik}
Корр.счет   {CompanyBankDetailRqCorAccNum}
тел.: {ClientPhone}

 
_________________________ /{MyCompanyRequisiteRqDirector~Format=#LAST_NAME#   #NAME_SHORT# #SECOND_NAME_SHORT#}/
М.П.
 
_______________/{RequisiteName}/
М.П.

Обработчик для коробки, который заполняет поля в предложении для шаблона КП
Есть поля-константы, которые должны периодически заполняться менеджером по качеству. Например, "количество внедренных проектов". Данные поля используются в нескольких видах КП. Править вручную все шаблоны не хочется.
тут как кастомизировать генерацию документов https://dev.1c-bitrix.ru/api_d7/bitrix/documentgenerator/customization.php
  1. Сделала нужные поля в Предложении, указала их в шаблонах
  2. Сделала предложение-шаблон  с заполненными данными полями.
  3. Завела глобальную переменную в БП с указанием ID данного предложения-шаблона
  4. Сделала БП с php-кодом, которая при создании Предложения запускает функцию  FillingCP,
  5. Сделала фукнцию FillingCP в init.php, которая проставляет в новом предложении значения из предложения-шаблона
function FillingCP($id,$idSample){

   if(!empty($id)&& !empty($idSample) && ($id !=$idSample) && CModule::IncludeModule('crm')){
      $arFilter = array(
         "ID"=>$idSample, //выбираем определенную сделку по ID
         "CHECK_PERMISSIONS"=>"N" //не проверять права доступа текущего пользователя
      );            
      $arSelect = array(
         "ID",         
         "UF_CRM_QUOTE_1634559317377", // постоянных клиентов
         "UF_CRM_QUOTE_1634559336425", //возраст компании
         "UF_CRM_QUOTE_1634559363042", //количество сертификатов         
         "UF_CRM_QUOTE_1634559439169",//количество специалистов компании
         "UF_CRM_QUOTE_1634562568132",//положительных отзывов
         "UF_CRM_QUOTE_1634567328573",//внедренных решений  
      );            

      $res = CCrmQuote::GetList(Array(), $arFilter,false,false, $arSelect);
      if($arQuote = $res->Fetch()){
         unset($arQuote["ID"]);         
         $quote = new CCrmQuote(false);         
         $arOptions = array("CURRENT_USER"=> 1); //из под кого обновляем         
         $upRes = $quote->Update($id, $arQuote, true, true, $arOptions); 
         
      }      
   }
}

обработчик, который подтягивает данные из пользователя из доп свойства (в моем случае номер и дату доверенности для договора)
я использовала 2 поля из пользователя, которые в моем случае нигде не используются и их подменяю нужными значениями
\Bitrix\Main\EventManager::getInstance()->addEventHandler('documentgenerator', 'onBeforeProcessDocument', function(\Bitrix\Main\Event $event){
   //{AssignedPersonalGender} заменяем на доверенность ООО 
   //{AssignedPersonalCountry} заменяем на доверенность ИП

   $document = $event->getParameter('document');
   $template = $document->getTemplate();
   if($template && $template->MODULE_ID == 'crm'){
      $provider = $document->getProvider();      
      $ownerType = $provider->getCrmOwnerType();      
      if($ownerType == 2){
         $dealId = $provider->getSource();
         $arFilter = array(
            "ID"=>$dealId, //выбираем определенную сделку по ID
            "CHECK_PERMISSIONS"=>"N" //не проверять права доступа текущего пользователя
         );            
         $arSelect = array(
            "ID",
            "ASSIGNED_BY_ID"            
         );            
         $res = CCrmDeal::GetList(Array(), $arFilter, $arSelect);
         if($row = $res->Fetch()){
            $userId = $row["ASSIGNED_BY_ID"]; // ID пользователя
            $userBy = "id";
            $userOrder = "desc";
            $userFilter = array(
               'ID' => $userId,
               
            );
            $userParams = array(
               'SELECT' => array(
                  "UF_USR_1636023611005", //доверенность  1 ООО
                  "UF_USR_1636023629101", ////доверенность 2 ИП
                  "UF_USR_1636023649756" // доверенность ООО 2
               ),
               'NAV_PARAMS' => array(
                  'nTopCount' => 1
               ),
               'FIELDS' => array(
                  'ID',        
               ),               
            );

            $rsUser = CUser::GetList(
                $userBy,
                $userOrder,
                $userFilter,
                $userParams
            );

            if ($arUser = $rsUser->Fetch()){
               $document->setValues(['AssignedPersonalGender' => $arUser['UF_USR_1636023649756']]);
               $document->setValues(['AssignedPersonalCountry' => $arUser['UF_USR_1636023629101']]);               
            }
         }
      }      
   }
});

Вероника Малышева
Битрикс-программист
+7 (953) 585-1309
Если пост был полезным, можете угостить меня чашечкой кофе :)



Это QR код для оплаты через мобильный банк. Как сделать свой написано тут.
Можно по номеру телефона (Сбер, Альфа). Спасибо!


Смотреть все посты