четверг, 27 октября 2016 г.

Как восстановить из бекапа Битрикс только каталог товаров

На проектах, интегрированных с 1С, может возникнуть ситуация, когда после обмена что-то где-то пошло не так, картинки затерлись, свойства перезаписались не те, которые нужно, и возникает необходимости восстановить каталог товаров из бекапа. При этом тупо развернуть полный бекап часто бывает нельзя, так как за время, прошедшее с формирования бекапа успели нападать заказы, наполнялись корзины пользователей, шли работы над шаблоном сайта.

Чтобы восстановить из бекапа только товарный каталог Битрикс, не трогая все остальное, нужно:
1) Взять полный бекап и развернуть его на тестовом сервере (на локальном, например);
2) Зайти на тестовом сервере в phpmyadmin и сделать экспорт в sql файл данных всех таблиц со словом iblock в названии и таблицы b_files, положить этот файл на рабочий сервер в папку /bitrix/backup/
3) Запустить на рабочем сервере файл restore.php, выбрать вариант архив уже распакован, система перейдет к восстановлению БД, выбрать подготовленный на предыдущем шаге sql файл.
4) Сделать на тестовом сервере бекап публичной части сайта, исключив из него все файлы и папки, кроме upload
5) Распаковать полученный на 4м шаге бекап на рабочем сервере.

вторник, 11 октября 2016 г.

Интеграция Битрикс и 1С: с какого бока подойти к ней, если каталог исторически наполняется на стороне сайта.

Многие клиенты обращаются ко мне с такой проблемой: Есть интернет-магазин с довольно большой базой товаров, 1С УТ раньше не использовали, но теперь хотят начать использовать ее, чтобы вести складской учет и управлять ценами на номенклатуру. При этом описания товаров, картинки и прочие свойства хотят продолжать вести на сайте, так как там уже есть штат контент-менеджеров, которых на 1С пересаживать не удобно.

Раньше я убеждала клиентов в том, что каталог необходимо единоразово импортировать с сайта в 1С со всеми картинками и свойствами, на стороне 1С УТ причесать каталог, привести его в порядок при необходимости, и вдальнейшем вести каталог только на стороне 1С.

Сейчас я изменила свою точку зрения на эту проблему, и думаю, что все не так однозначно. Есть кейсы для которых использовать 1С УТ как единственный источник данных о номенклатуре, действительно, крайне неудобно. Это неудобно в частности для интернет-магазинов одежды, где для каждого торгового предложения существуют свои картинки. Да, на стороне 1С сейчас тоже можно добавлять картинки для характеристик товаров, но удобство интерфейса для контент-менеджера - страдает, не говоря уже о том, как проблематично становится при необходимости перезагрузить весь каталог с картинками из 1С на сайт на объемных базах.

Я нашла для себя решение задачи настройки интеграции интернет-магазинов товаров с торговыми предложениями и 1С УТ с возможностью вести картинки и описательные свойства товаров на стороне сайта с минимальными модификациями стандартного модуля обмена. Решение это не является единственным, но на мой взгляд оно самое простое:

1) На сайте назначаем (скриптом) всем разделам XML_ID равное ID_раздела, товарам XML_ID равное ID_товара,  а торговым предложениям XML_ID, равный ID_товара#ID_торгового_предложения.

2) Допиливаем экспорт каталога с сайта в 1С (на стороне Битрикс) так чтобы вместо XML_ID в 1С уходило ID торгового предложения (это проверенный рецепт: обратно из 1С XML_ID торговых предложений будут приходить в виде ID_товара#ID_торгового_предложения, поэтому если мы хотим когда либо повторно использовать помощник импорта товаров с сайта в 1С, надо в 1С отправлять просто ID предложения, а обратно ждать его через решеточку с ID товара).

3) На стороне 1С отключаем галочку "Контроль уникальности рабочего наименования характеристик и номенклатуры".

4) На стороне 1С создаем тип товара с индивидуальными характеристиками. Реквизиты для характеристик не заводим.

5) Если на стороне сайта есть такие разделы, где имеются одновременно и товары с предложениями (SKU), и простые товары, то на стороне 1С дописываем в процедуру СоздатьТовары следующий код:

    Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ХарактеристикиНоменклатуры.Ссылка
|ИЗ
| Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
|ГДЕ
| ХарактеристикиНоменклатуры.Владелец = &Владелец";
Запрос.УстановитьПараметр("Владелец",Номенклатура);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
обном=Номенклатура.ПолучитьОбъект();
обном.ИспользованиеХарактеристик=Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать;
//обном.ВидНоменклатуры=Объект.ВидНоменклатуры;
обном.Записать();
КонецЕсли;

Этот код вставляем после вызова функции СоздаватьХарактеристикиНоменклатуры

6) Проводим импорт номенклатуры с сайта в созданный нами на стороне 1С тип товаров при помощи помощника импорта.

7) Настраиваем на стороне 1С узел обмена для товаров, помечая к выгрузке все, кроме свойств и картинок. Не ставим флажок "Деактивировать товары, не вошедшие в выгрузку", ставим отбор по наличию остатка на складах.

8) Вводим документы поступления на склад для тех товаров, к-е будем пробовать выгружать обратно на сайт. Делаем импорт товаров из 1С в каталог на диске на каком-то маленьком разделе, выписываем внешние коды каталога, инфоблока торговых предложений, внешний код цены, складов, вписываем эти внешние коды в соответствующие поля на сайте. Следим за тем, чтобы названия складов на стороне 1С и на стороне сайта совпадали, а то 1С перезапишет их названия на стороне сайта.

9) На стороне сайта в настройках обмена ставим галочки "не импортировать верхний уровень группы товаров, если он единственный", "Не менять код (название) типа цены, если используется внешний код (XML_ID)".

10) Запускаем импорт товаров из 1С на сайт, если все сделали внимательно, все ляжет именно туда, куда нужно.

Такой способ настройки интеграции позволит клиентам:
- обновлять остатки и цены на стороне 1С УТ для старых товаров и торговых предложений, которые изначально были заведены на стороне Битрикс;
- заводить на стороне 1С новые товары, импортировать их на сайт и дозаполнять уже там, а впоследствии актуализировать их цены и остатки на стороне 1С;
- заводить новые товары на стороне сайта и отправлять их в 1С повторным запуском помощника импорта номенклатуры;

воскресенье, 31 июля 2016 г.

Битрикс24 - пакетное изменение ответственных за лиды/компании и все связанные с ними сущности

В некоторых организациях, где мы внедряли Битрикс24 практикуется такой регламент: вся CRM система раз в период перетасовывается между ответственными менеджерами.

Менять ответственных вручную - достаточно трудоемкий процесс даже когда речь идет о смене ответственного всего за один лид или компанию: ведь нужно сменить его и в лиде, и в компании, и во всех сделках, делах и задачах, которые прикреплены к лиду или компании. А если где-то забыть сменить - то у менеджера могут возникать проблемы с доступом к какому-нибудь старому письму клиента, прикрепленного к сущности CRM и важного для общего понимания истории взаимодействия с данным клиентом. Если же нужно сменить ответственных, к примеру, для 100 лидов или компаний - процесс становится вообще практически нереализуемым вручную.

Для того, чтобы упростить нашим заказчикам процесс смены ответственного за сущность  в CRM Битрикс24 мы разработали бизнес-процессы смены ответственного за лид и за компанию вместе с привязанными к ним сущностями, а так же механизм, позволяющий менять ответственных за лиды и компании и их связанные сущности - пакетно.

Пользователь с правами на смену ответственного или с правами суперадминистратора портала может запустить процесс смены ответственного для лида или для компании:


Запущенный бизнес-процесс просит пользователя указать нового ответственного, после чего ответственный за данную сущность (лид или компанию), а так же ответственный за все сущности, связанные с данной (сделки, дела, задачи) переводятся на указанного ответственного, и данное изменение сохраняется в истории. 

Для чего сохранять предыдущего ответственного в историю? Для того, чтобы в дальнейшем можно было проверить, не был ли уже данный менеджер ранее ответственным за данную компанию или лид. При перетасовке CRM системы это бывает важно.

Сами бизнес-процессы по смене ответственного и для лида, и для компании - достаточно простые, однако они избавляют пользователей от множества рутинных действий:


Пакетная смена ответственных за лиды/компании - более интересный кейс. Перед нами стояла задача: брать данные по новым ответственным за компании/лиды из csv файла и переводить указанные лиды/компании вместе со всеми прикрепленными к ним сущностями пакетно и пошагово (чтобы при этом не создавалась излишняя нагрузка на сервер). Так как данный кейс необходимо было реализовать в коробочной версии Битрикс24, мы решили взять за основу стандартный Битриксовый механизм импорта данных из csv и написать импорт данных для смены ответственного по аналогии с ним. (Я уже как-то писала в своем блоге, как удобно писать разные пакетные импорты в битрикс/ экспорты из битрикс на основе этого механизма).


Пользователь - администратор портала запускает профиль импорта для смены ответственных в лидах или компаниях, заполняет параметры импорта, нажимает "Далее" и процесс смены ответственных запускается для всего файла в пошаговом режиме.



Формат файла - это всего 2 колонки: ID лида (или ID компании) и логин ответственного.

Для того, чтобы сделать перетасовку CRM между менеджерами руководителю достаточно дать команду, и администратор портала может в считанные минуты выгрузить текущие ID лидов/компаний с ответственными менеджерами в exсel, отрандомайзить колонки, внести при необходимости какие-то изменения вручную и загрузить новую расстановку обратно в CRM систему.



понедельник, 25 апреля 2016 г.

История настройки одной телефонии в Битрикс24 (коробка)

Обратился к нам недавно один клиент и говорит: "Купили Битрикс24 почти год назад, и с тех пор никто не может настроить нам телефонию". Я подумала, что стоит разобраться с проблемой этого клиента - телефонию мы до этого в коробочной версии Битрикс24 настраивали неоднократно, и я думала, что меня вряд ли можно чем-то удивить по части ее настройки. Однако впереди нас ждали увлекательные открытия. 

Зайдя в портал клиента на страницу Телефония - Балланс и статистика, я увидела 2 арендованных номера внутренней Битриксовской телефонии, но ни страница детализации звонков, ни страницы настроек этих телефонных номеров - не открывались. Я предположила, что модуль телефонии поврежден либо на уровне файлов, либо на уровне БД. Мониторинг качества показывал, что файлы модуля телефонии не были модифицированны. А вот в БД отсутствовала таблица b_voximplant_config. Я восстановила таблицы модуля телефонии из одного из старых бекапов портала клиента, к-е, к счастью, снимались у клиента автоматически. 

Страницы детализации звонков и настройки телефонных номеров стали открываться, и в статистике даже были кое-какие записи звонков, из которых я заключила, что телефония у клиента уже была настроена, но потом почему-то отвалилась. Однако ни на входишие звонки, ни на исходящие - телефония не работала, а серверный тест Битрикс показывал кучу ошибок, относящихся к работе бизнес-функций портала, модуля Push and Pull 

Мы перенесли клиента на Сервера без забот хостинга Русоникс, а так же настроили для портала клиента SSL сертификат и работу по протоколу https, после этого серверный тест Битрикс перестал выявлять проблемы, а исходящие и входящие звонки через телефонию Битрикс стали осуществляться нормально. Я сказала клиентам, что они могут тестировать телефонию, и я видела по журналу в детализации звонков, что они активно ею пользуются. 

Однако ИТ отдел клиента начал жаловаться мне, что они "не знают тех людей, чьи записи звонков прослушивают в детализации". Сначала я подумала, что они просто не знают всех сотрудников своей компании, но когда начала сама прослушивать записи звонков в портале, я поняла, что в портал моего клиента сохраняются записи каких-то совершенно "левых" звонков (там в записях сотрудники почти всегда называли название другой компании, представляясь). 

Я написала об этой проблеме в ТП Битрикс. Битриксоиды начали прорабатывать проблему по своим каналам, и выяснилось, что предыдущий подрядчик клиента (то ли самый первый, то ли промежуточный - клиент их сменил несколько) как-то умудрился по ошибке ввести лицензионный ключ от портала моего клиента в портале другого клиента, и после этого аккаунты телефоний этих двух клиентов "склеились", и нам падали записи звонков тех других клиентов, а они, в свою очередь, могли слушать у себя в портале записи наших тестовых звонков. 

Битриксоиды заменили моему клиенту лицензионный ключ - но это не решило проблему - сами по себе аккаунты телефонии не расклеились. Я продолжала писать сообщения об этом в поддержку Битрикса, и в итоге они сменили моему клиенту и номер аккаунта на стороне информационного посредника voximplant, но, правда, все настройки модуля телефонии пришлось удалить и отвязать арендованные телефоны, ну и деньги на аккаунте клиента сгорели, конечно, но это уже были мелочи в масштабе всех проблем. 

Арендовали клиенту новый номер в телефонии Битрикс24 - и на нем все работало как надо. Чужие телефонные звонки мы больше не слушали. 

Эпопея на этом не закончилась. У клиента был еще арендован старый телефонный номер у Плюсофона https://plusofon.ru/, и, естественно, клиент не хотел терять этот номер, а хотел привязать его в Битрикс24 через SIP. Поддержка Плюсофона сообщила нам, что их телефоны еще ни разу не удалось подключить к Битрикс24, но я подумала, что SIP - он и в Африке SIP, и решила, что он заработает, если хорошо захотеть и проявить терпение и методичность, общаясь с обеими техподдержками. 

Для начала я запросила логины/пароли SIP аккаунтов у Плюсофона, и не стала сразу пробовать подключить их в Битрикс24, а скачала себе на телефон популярный SIP клиент Зойпер, чтобы изолированно проверить, работает ли у них SIP вообще. Подключиться не удавалось. Расследование показало, что те логины/пароли SIP к-е видели админы моего клиента в личном кабинете Плюсофона - были неправильными. Плюсофоновцы уже пофиксили эту проблему. 

Далее я ввела логин/пароль одного из SIP пользователей в подключение на стороне Битрикс24. Исходящий звонок не проходил - пользователь SIP светился в сети Плюсофона как оффлайн. Пообщавшись немного с техподдержкой Плюсофона, я натолкнула их на мысль, что у них на серверах IP-адреса, с которых проходит сигнал от Битрикс - в черных списках. Действительно, на Плюсофоне к SIP было разрешено подключаться только с Российских IP-адресов, а так как звонок из Битрикс идет через информационного посредника voximplant, сигнал приходил на Плюсофон с IP-адресов, относящихся к территории США. Плюсофоновцы разрешили коннекты с этих адресов, и исходящие звонки через SIP стали проходить из портала клиента. 

На этом история не закончилась. Я заметила, делая звонки через SIP из портала клиента, что запись звонков не происходит, хотя стоит соответствующая галка, а тестовые минуты для тестирования SIP не списываются (жаль, не провела исследование, сколько так реально можно бесплатно звонить). Написала снова в ТП Битрикс, они сказали мне включить на стороне сервера директиву proxy_ignore_client_abort on; - это решило проблему. 

Далее я начала тестировать SIP на входящие звонки в портал. Звонки то проходили, то не проходили. По логам Плюсофона теперь уже сервера voximplant отклоняли их коннекты (не каждый раз). Долго я посылала эти логи в поддержку Битрикса. Они долго отказывались признавать эту проблему, потом я уже не выдержала и написала Рыжикову (спасибо ему, что вник). После этого Битриксоиды что-то подкрутили на стороне voximplant, и звонки через SIP, наконец то, стали проходить стабильно. 

В следующем посте, я расскажу, как мы интегрировали с порталом Битрикс24 клиента программную АТС на базе Астриск.

воскресенье, 24 апреля 2016 г.

Как я сдавала второй экзамен по Битрикс

Как я писала в прошлом посте, с сентября 2016 года для подтверждения статуса Золотого партнера, нужно иметь в команде, как минимум, 1го разработчика, сертифицированного по новой системе до уровня "Профессионал" и второго разработчика, сертифицированного до уровня "Базовый". Мне нужно подтверждать статус золотого партнера только в январе 2017, но я привыкла готовить сани летом, поэтому уже сейчас занялась этой проблемой.

Забегая вперед, скажу, что я уже сертифицировалась до уровня "Профессионал" лично, а мои ребята уже начали экзаменоваться на "Базовый" уровень, и я надеюсь, они все получат в ближайшем будущем и "Профессионала".

А теперь о том, как это было. Второй экзамен был сложнее первого. К первому я не готовилась - на первом экзамене меня больше волновали технические моменты: нормально ли распознается снимок моего паспорта, хорошо ли работает моя камера и тому подобное.

Просмотрев 2 предложенных для подготовки открытых билетов для экзамена по теме "Основные технологии и расширение типовых возможностей системы", я поняла, что второй экзамен без подготовки - может не прокатить, потому что заданий в билете достаточно много для 4х часов, отведенных на экзамен. Я прорешала оба эти билета, измерила примерное время и, наученная опытом первого экзамена, умножила это время на 1,5 - потому что на тормозном экзаменационном сервере все получается медленнее в полтора раза, да плюс - мандраж.

Поняла, что в 4 часа уложиться будет возможно, только отрепетировав решение экзаменационных задач практически до автоматизма.

И я отрепетировала все мелкие задания на локалке, так, чтобы тратить на каждое не более 7-10 минут. Планировала на экзамене потратить на всю мелочевку не более часа, а остальное время посвятить заданиям про создание простого и комплексного компонента - там много вылизывать. (На экзамене у меня на мелочевку реально ушло 2 часа, и еще 1,5 часа - на разработку простого и комплексного компонента. 30 минут осталось на самопроверку.)

Накануне экзамена я решила сразу выбрать наиболее подходящий стандартный компонент в качестве основы для решения задачи про разработку простого компонента для вывода списка вакансий. Вот тут вышел казус, которым я просто не могу не поделиться.

В одном из пробных билетов (или в обоих) этот компонент - список вакансий должен был помимо прочего поддерживать технологию Эрмитаж. Выбрала я стандартный битриксовский компонентик, который как раз поставляется с решением «Корпоративный сайт производственной компании» - называется furniture.vacancies.

Посмотрела его - переделывать нужно минимально, эрмитаж - реализован. На экзамене его и взяла.

А в нем для вычисления адресов Эрмитажевских кнопок шел такой код:
$arResItems["EDIT_LINK"] = '/bitrix/admin/iblock_element_edit.php?ID='.$arResItems["ID"].'&type='.$arParams["IBLOCK_TYPE"].'&lang='.LANGUAGE_ID.'&IBLOCK_ID='.$arParams["IBLOCK_ID"].'&find_section_section='.$arResItems["IBLOCK_SECTION_ID"].'&bxpublic=Y&from_module=iblock';
$urlDelete = CIBlock::GetAdminElementListLink($arParams["IBLOCK_ID"], array('action'=>'delete'));
$urlDelete .= '&'.bitrix_sessid_get();
$urlDelete .= '&ID='.(preg_match('/^iblock_list_admin\.php/', $urlDelete)? "E": "").$arResItems["ID"];
$urlDelete = "/bitrix/admin/".$urlDelete;
$arResItems['DELETE_LINK'] = $urlDelete;
Я его оставила - этот код рабочий, он решает поставленную передо мной задачу и он использован в стандартном компоненте Битрикс, а стандартные компоненты - это для нас пример и эталон правильного кода. Какого же было мое удивление, когда экзаменаторы указали мне на ошибку:

- Значительная ошибка: в компоненте кнопки для технологии "Эрмитаж" вычисляются "в лоб" (файл component.php, строки 56-62). Следует использовать метод CIBlock::GetPanelButtons

Вот так друзья - не все стандартные компоненты Битрикс можно брать за образец. Нет, я, конечно, никогда не претендовала на то, чтобы мой код был образом чистоты, порядка и эффективности - слава богу, в моей команде есть программисты сильнее меня, а если бы было не так - это был бы мой прокол, как руководителя.

Но вот такое ханжество проверяющих меня слегка зацепило. Ханжество - требовать от других соответствия критериям, которым не соответствуешь сам. Как же так? В коробке Битрикс живут компоненты со Значительными ошибками?  Хотя, конечно, мне грех обижаться - ведь экзамен мне зачли успешно сданным, несмотря на эту ошибку.


И да, в целом это был интересный и полезный опыт для меня.  Когда над тобой уже много лет нет проверяющего, когда никто не контролирует твой код, когда ты растешь только благодаря какому-то обмену опытом с друзьями-коллегами - взгляд со стороны получать время от времени очень важно. Если Битриксоиды в будущем выпустят третий и четвертый экзамены, как обещали, я обязательно пойду и на них.

среда, 6 апреля 2016 г.

Как я сдавала новый экзамен по Битрикс

На зимней партнерской конференции 2016г нас обрадовали известием о том, что старые сертификаты разработчиков с сентября 2016г будут терять силу, и для того, чтобы остаться золотым сертифицированным партнером в 2017 году, мне нужно сертифицировать, как минимум, 2х разработчиков из своей команды по новой системе.

Передо мной встала дилемма: сдавать ли экзамены самой или просто заставить сдать экзамены 2х других разработчиков из моей команды, которые, в общем то практикуют программирование под Битрикс намного чаще чем я в силу того, что 70% моего рабочего времени я внедренец, менеджер проектов и продажник в одном лице, а они целыми днями только программируют и вообще не тратят время ни на что постороннее.

Думала я, думала. И решила, что должна сдать экзамены сама, чтобы не потерять уважение и авторитет в своей маленькой компании.

Когда я прочитала все требования к экзамену по новой системе и экзаменационные билеты у меня началась дикая головная боль: где сдавать: дома или в офисе?, какую камеру воткнуть?, с ПК или с ноута? Билеты по теме "Интеграция дизайна и настройка системы" не вызывали у меня особых вопросов, хотя лично я не занималась интеграцией дизайна в Битрикс уже, наверное, года 4 с тех пор, как я научилась полноценно делегировать. Я освежила память видеокурсом по данной теме, развернула у себя на виртуалке демку экзаменационной среды, посмотрела на нее. Хотела прорешать билеты для подстраховки, но в времени не нашла - как раз навалилось много клиентских проектов, когда я уже выбрала день экзамена.

В день экзамена (это была суббота) я заперлась дома в одной из комнат, предварительно выгнав кошку, которая всегда лежит у меня на компьютерном столе, если я за ним сижу. Запаслась орбитом - он спасает меня, когда я нервничаю, и начала сдавать. Я нажала на кнопочку "Сдать экзамен" - система показала мне поток моей камеры и попросила сделать фотку моего лица - для этого там на страничке прямо под трансляцией потока камеры была кнопка "сделать снимок", я сделала, потом аналогично нужно было сделать фото паспорта, да так чтобы был виден его номер (переделывала раз 5 - почему-то когда снимался снимок, возможности моей камеры, а она реально очень хорошее разрешение может давать, не использовались на полную катушку), потом несколько снимков помещения, в котором сдаешь экзамен. После этого, система предупредила меня, что по нажатию следующей кнопки экзамен начнется. Я нажала.

Мне пришли реквизиты доступа к экзаменационному серверу. Я подключилась с ними к сереверу через NoMashine. Ссылка на мой экзаменационный билет, а так же скомпиленная справка по Битрикс-апи и по php лежали на рабочем столе сервера. Не удобным было то, что там на сервере было очень низкое разрешение экрана и на моем огромном мониторе получался только маленький прямоугольник в центре. Я уверена, что это можно было как-то растянуть на весь мой экран, но не стала терять время. Ну, может быть, стоило и потратить на это время, потому что приходилось щуриться - все было так мелко, и я постоянно то впечатывала символ не там, то стирала не то, что хотела. А так по скорости работы ничего не тормозило (дома у меня 30М канал, если не ошибаюсь).

Заданий в билете было 13 - счастливое число. И объем работы там было прямо таки приличный. Думать особо некогда - нужно знать как делать и делать сразу. Когда я сделала 2 задания и посмотрела, сколько времени уже прошло, меня начало даже слегка мандражить, потому что я поняла что надо ускоряться. (Все же когда ты работаешь не одна, а в команде - ответственность перед другими сильно давит на психику. Думаешь: "Я не могу их подвести" И от этого пальцы начинают заплетаться на клавиатуре.) Я уничтожила пачку орбита, ускорилась. И в общем, когда я прорешала все 13 заданий, прошло 3 часа от начала экзамена. Я еще раз прошлась по всему заданию, выискивая места, которые я не правильно поняла или невнимательно прочитала - даже нашла 2 таких места, было время спокойно их исправить. Где-то за полчаса до окончания экзамена, я подумала, что дальше проверять себя нет смысла - устала уже, и я нажала кнопку "Завершить досрочно".

В итоге сегодня мой экзамен проверили и выдали мне мой сертификат:



В принципе, я довольна, что проверила себя и планирую в ближайшее время пойти на 2й экзамен. И еще я знаю, что если ко мне в команду придет готовый специалист с сертификатом по интеграции дизайна и настройке платформы Битрикс, я смело смогу кинуть его на огромное количество клиентских задач и 100% загружу его работой выше крыши, потому что тот набор технологий, которые он изучил, готовясь к сдаче данного экзамена - владея только ими можно решать огромный пласт типовых задач. 

понедельник, 7 марта 2016 г.

Битрикс24 в локальной сети клиента - что делать, если не приходят письма с портала?

Я думаю, то, что я сейчас опишу в данном посте - это отнюдь не новость для unix-администраторов. Но я думаю, это может быть полезено внедренцам для того, чтобы дать администратору задание копать в нужном направлении.

Итак, что же делать, если письма из портала Битрикс24, расположенного в локальной сети предприятия не приходят адресату (порой даже не попадают в папку Спам)?

1) Нужно произвести диагностику. Для этого можно воспользоваться специальным сервисом, к примеру: https://www.mail-tester.com Смысл сервиса в том, что вам дается специальный емейл, на который нужно отправить письмо для диагностики. Отправляешь письмо - сервис пишет список проблем, которые не дают данному письму быть доставленным адресатом.

2) Большинство проблем, которые показывает сервис диагностики связаны с неправильной настройкой ДНС домена. Если почта хостится на гугле или на яндексе, или на мейле - эти почтовые службы обычно пишут, какие ДНС должны быть прописаны для домена, чтобы письма корректно отправлялись.

Например:


То есть, необходимо проверить, что в доменной зоне того домена, который привязан к порталу Битрикс24 правильно прописаны MX, SPF и TXT записи с подписью.

3) Если Битрикс24 расположен в локальной сети предприятия, для корректной отправки почты с него необходимо так же позвонить провайдеру (интернет-провайдеру, который предоставляет предприятию статичный IP адрес) и попросить его прописать "обратную зону" для данного IP адреса и привязанного к нему домену.

4) Ну и конечно, нужно убедиться, что правильно настроен Postfix. По этому вопросу есть подробная инструкция в учебных курсах по Битрикс.

вторник, 16 февраля 2016 г.

Добавление нового контакта CCrmContact::Add - себе на память

$ct=new CCrmContact(false);
$arParams = array('HAS_PHONE'=>'Y');

$arParams['FM']['PHONE'] = array(
'n0' => array(
'VALUE_TYPE' => 'WORK',
'VALUE' => '12345678',
)
);
$arParams['FM']['EMAIL'] = array(
'n0' => array(
'VALUE_TYPE' => 'WORK',
'VALUE' => 'gfgfgf@gfh.ru',
)
);

$arParams['FULL_NAME']="Иванов Иван Иванович";
$arParams['LAST_NAME']="Иванов";
$arParams['HAS_EMAIL']='Y';
$arParams['HAS_PHONE']='Y';
$arParams['COMPANY_ID']=748;
$arParams['TYPE_ID'] ='CLIENT';
$arParams['SOURCE_ID']= 'WEB';
$arParams['OPENED'] = 'Y';


$new_contact_id=$ct->Add($arParams, true, array('DISABLE_USER_FIELD_CHECK' => true));


if ($new_contact_id){
print  $new_contact_id."<br/>";
}
else{
print $ct->LAST_ERROR;
}

И сюда же еще добавлю ссылочку на заметку другого разработчика: http://dev.1c-bitrix.ru/community/webdev/user/23714/blog/13659/?commentId=73155

Себе на память: как проапдейтить телефон контакта CCrmContact::Update

$ct=new CCrmContact(false);
$arParams = array('HAS_PHONE'=>'Y');

$arParams['FM']['PHONE'] = array(
'n0' => array(
'VALUE_TYPE' => 'WORK',
'VALUE' => '12345678',
)
);

$ct->Update(1400,$arParams);

понедельник, 8 февраля 2016 г.

Себе на память: обновление сделки в корпортале Битрикс24

function OnAfterCrmDealAddHandler(&$arFields)
    {
    define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"]."/custom_crm_log.txt");
   
        global $DB;

        $DB->StartTransaction();

        $arUpdateData = array(
               'COMMENTS' => "Hello world"
            );

        $deal = new CCrmDeal;

            if($deal->Update(
                $arFields['ID'],
                $arUpdateData,
                true,
                true,
                array('DISABLE_USER_FIELD_CHECK' => true))
            ) {
               AddMessage2Log("Successfully added", "custom_crm");
               $DB->Commit();
               $arErrors = array();
            }
            else
            {
               AddMessage2Log($deal->LAST_ERROR, "custom_crm");
               $DB->Rollback();
            }
   
    }