Search the Community

Showing results for tags 'suitecrm'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author



Filter by number of...

Found 38 results

  1. В SuiteCRM содержит в себе предустановленные модули с открытым исходным кодом: Advanced OpenSales Advanced OpenSales (AOS) - результат непрерывной пятилетней работы. Этот набор модулей и функционалов является, пожалуй, наиболее значимым вкладом в развитие SugarCRM Community Edition. Использование вами этих модулей позволит вам также активно пользоваться Отчётами (Reporting) и Документооборотом (Workflow). Новый модуль с Категориями Продуктов В модуле Контракты списки товаров и услуг В списки товаров и услуг добавлены описания продуктов В списки товаро и услуг добавлены артикулы товаров, и теперь продукты можно искать по артикулу наравне с поиском по названию продукта Добавлена возможность указания скидок Стала доступна активация/деактивация PDF-шаблонов Новая панель администрирования: Включение/отключение группировки списков товаров и услуг Возможность задать стартовый порядковый номер для Предложений и Счетов Список возможностей AOS весьма большой, и увеличивается с каждым релизом SuiteCRM. AOS подходит для безопасного обновления, так как онполностью совместим с архитектурой SugarCRM в части механизма обновлений системы. Основные модули, входящие в AOS: Модуль Предложений Модуль с Товарами Модуль с Договорами Модуль с Счетами PDF-шаблоны Advanced OpenWorkflow Advanced OpenWorkflow(AOW) - это комплекс измодулей длянастройки и автоматизации бизнес-процессов в SuiteCRM.AOWраспространяется с полностью открытым исходным кодом (GPL3). AOW очень понятно сделан. Новые пользователи, которые совсем недавно познакомились с SuiteCRM, способны разобраться в функционале настройки Процессов за считанные минуты, и смогут весьма быстро начать производить настройки бизнес-процессов. AOW распространяется с открытым исходным кодом. Вы можете скачивать эти модули, изменять их и распространять по своему усмотрению. AOW проработанный. В течении 3-х месяцев его проверяли и тестировали на SugarCRM. В AOW хороший функционал. В этом комплексе есть все основные возможности, которые могут вам потребоваться для выполнения настройки бизнес-процессов в вашей CRM-системе. Advanced OpenWorkflow по своей внутренней структуре кода похожа на структуру SugarCRM. Это позволяет программистам из SugarCRMлегко переносить в AOW наработки и легко разбираться в коде самого AOW дополняя его необхоимым функционалом. Advanced OpenReports Advanced OpenReports (AOR) комплексмодулей для построения отчётов в SugarCRM версий 5.x и 6.x с полностью открытым исходным кодом (GPL3). Интуитивно понятный интерфейс позволит быстро разобраться с особенностями построения модулей даже неопытным пользователям. ИспользуяAdvanced OpenReports вы сможете быстро получать необходимые вам срезы данных в виде таблиц, графиков или диаграмм. Данные вы сможете как просматривать прямо на страницах CRM-системы и в виде дашлетов на главной, так и выгружать их в виде CSV, HTML или PDF. ОсобенностиAdvanced OpenReports: Мощные и интуитивно понятные отчёты Большое количество используемых функций для получения и обработки данных Возможность запускать отчёты по расписанию Advanced OpenPortal Данный комплекс модулей позволяет подключить к вашей CRM-системе веб-портал, развернутый на Joomla. Интеграция достигается за счет компонента, устанавливаемого на портале и испльзующегоSugarCRM REST API. CRM-система со своей стороны получает возможность принимать обращения с сайта и определенным образом обрабатывать их отдавая нужные ответы. Таким образом вы можете получить CRM-систему в виде хранилища данных о вашем бизнесе (клиенты, сделки, договора и так далее) и возложить на нее какие-либо сложные обработки этих данных (формирование отчетов, маркетинговые рассылки и так далее), а при помощи сайта (портала) на Joomla получить "красивый" интерфейс для работы с этими данными (или, как один из вариантов, предоставить своим клиентам вход в личный кабинет, содержащий в себе данные, находящиеся в CRM-системе). Advanced OpenEvents Advanced OpenPortal представляет собой Менеджер Событий для таких мероприятий, как семинары и вебинары. При помощи этого модуля вы сможете рассылать приглашения посетителям вебинаров через электронную почту, а также отслеживать, получили ли они ваши приглашения, посетили или нет предлагаемые им мероприятия. При помощи модуля События вы сможете: Создавать События Добавлять Участников в Событие используя Списки адресатов, Адресаты, Контакты и Предварительные контакты Создавать и назначать шаблоны писем для использования их в Событиях Рассылать в рамках того или иного События письма, сформированные по заданным шаблонам, в которых могут быть встроены возможности Согласиться или Отказаться от участия в предлагаемом Событии Получатели вашей рассылки могут Согласиться или Отказаться от предлагаемого им участия в Событии Когда предполагаемый Участник вашего События получит приглашение, согласится с участием в нем или откажется - статус этого приглашения автоматически поменяется в CRM-системе, и вы сможете оперативно это отслеживать Присутствует управление посещаемостью События: посетил мероприятие участник или нет Google Maps В SuiteCRM добавлена поддержка карт Google Maps. Присутствует возможность построения кеша геоданных по Контрагентам: из информации оКонтрагентеизвлекается его адрес, который отправляется на сервера Google Maps. На основании полученных данных от Google SuiteCRM может построить карту с обозначениями где какой контрагент находится. Присутствует возможность поиска Контрагентов по выделенным областям на карте и прочие гео-возможности. SecuritySuite В SuiteCRM добавлена возможность работы в командах: можно базу клиентов разбить на сегменты, и предоставлять доступ тем или иным сотрудникам только к определенным сегментам (например, по типу клиентов, или по их географическому расположению). Также были расширены стандартные возможности разграничения прав доступа пользователей. Advanced OpenTheme Специально для SuiteCRM была разработана тема оформления, которая совместима с SugarCRM 6.5.x Разработанная тема поддерживает следующие возможности: Cleaner UI Меню на AJAX/CSS3 с действиями для модулей и списком последних просмотров Меню быстрого создания записей Возможность перейти на редактирование недавно просмотренной записи в один клик
  2. Задача: название создаваемой записи в модуле Проекты приобретало вид согласно шаблону. Пример 83-lptsystem.ru-Разработка сайта НОМЕР-КОНТРАГЕНТ-НАЗВАНИЕ ПРОКТА
  3. Пользовательский вид в зависимости от роли

    Всем привет! Нужно было, чтобы в зависимости от роли, по разному отображались модули.Долго искал решение вопроса, как на забугорных, так и на наших сайтах, полного решения нигде не нашел. Даже имея под рукой готовую систему как образец кастомизированную профи (а я таким себяне считаю =))) ), нашел в ней только вариант с использованием js скриптов, что меня не совсем устраивало. В итоге пришлось самому с помощью разных источников, красных глаз и многих сигарет создавать свое. Все работает =)))) как на родных, так и на своих модулях. Вид просмотра делается аналогично. Кому надо - берите Если найдете ошибки или идеи для оптимизации - пишите сюда - буду рад видеть. getUserRoles($GLOBALS['current_user']->id); if(in_array('ZakupControl',$roles)){ $viewDef = 'editviewdefs2'; } else{ $viewDef = 'editviewdefs'; } $coreMetaPath = 'modules/'.$this->module.'/metadata/' . $viewDef . '.php'; $metadataFile = 'custom/' . $coreMetaPath; return $metadataFile; } }
  4. Как скачать установленную CRM-систему в виде архива с базой данных

      • скачать
      • архив
      • (and 2 more)

        Tagged with:

      • suitecrm
      • регистрация
      • (and 2 more)

        Tagged with:

        • suitecrm
        • регистрация
        • crm
        • https://www.youtube.com/watch?v=zol2twlqqy0
  5. Русский язык в SuiteCRM

    Version 7.5.2

    83 downloads

    Русский язык для бесплатной CRM-системы SuiteCRM. Содержит перевод всех модулей и функционалов, присутствующих в базовой версии SuiteCRM. Изначально SuiteCRM распространялся с русским языком на борту. Он был встроенным, выбирался на момент установки CRM-системы и было довольно это удобно. Установка на русском, сразу русский есть в системе и можно пользоваться без дополнительных настроек. Начиная примерно с версии SuiteCRM 7.5.1 (или на версию ранее, не помню ее название) разработчики решили исключить русский язык из сборки. Так что теперь установка SuiteCRM происходит только на английском языке. А если хотите русифицировать SuiteCRM, то качаете отдельно локализацию и устанавливаете ее у себя в CRM-системе. Кстати, предлагаемый для скачивания архив на текущий момент идентичен тому, что предлагают на официальном сайте SuiteCRM. Вы с таким же успехом можете его скачать и там. Здесь я его задублирую для того, чтобы русскоязычным пользователям было проще находить себе русификацию SuiteCRM. Инструкция, как установить:
  6. Как создать свой вид для отображения карточки редактирования

    Кирилл: Добрый день! Искал на форуме информацию о том - как создать свой вид для отображения карточки редактирования, так и не нашел . Вообще такое возможно ? 11:51:07 Евгений: 11:51:27 Добрый день! для стандартного action=EditView 11:51:56 11:52:32 как правило работа с картами ограничена регулированием состава и месторасположения тех или иных полей и кнопок логика просто нужна такая - в зависимости от выбранного Селекта, показывать или прятать другие поля для редактирования в карте 11:53:11 11:53:37 в базовом функционале SuiteCRM этого нет 11:53:44 подобное есть в SugarCRM Pro 11:53:50 но оно не бесплатно Т.е. лучше создать свои отдельные экшены и там их кастомизировать ?! 11:53:57 11:54:35 лично мой опыт подобного - это подключается к странице javascript, который при помощи jquery отображает/скрывает те или иные поля 11:55:56 ну тоесть настраиваем $('#айдиполясселектом').change(function(){ а тут отображаем или скрываем другие поля}); с этим нет проблем. Просто поля будут местами скрыты и получаются пробелы ) а хочется чтобы они взаимно подтягивались к верху, но так как там таблица, а не бутстраповские grid блоки (к примеру) организовать такую структуру сложнее 11:56:46 вот и хотелось изменить шаблон вывода полей на свой 11:56:56 11:57:00 ну тогда видимо нужно использовать какую то кастомную вьюху вот ))) 11:57:05 можно ли кастомную вьюху создать для стандартного Экшена Редактирования карты ? 11:57:18 переопределить каким то образом ? 11:57:31 12:04:17 да 12:04:19 смотрите 12:04:59 в /custom/modules/Модуль/controller.php можно задавать свои собствннные контроллеры для модуля 12:05:16 В нужном вам модуле добавляете такой файл и в него: 12:05:47 view = "editcustom"; } } ?> 12:06:00 не, не так 12:06:02 так: 12:06:13 view = "editcustom"; } } ?> 12:06:33 таким образом вы определили свою новую вьюху для стандартного действия EditView 12:06:39 и назвали ее editcustom другие действия. как я понимаю, изменение не затронет ни коим образом?! ) 12:07:00 12:07:03 теперь создаем файл: /custom/modules/Модуль/views/view.editcustom.php 12:07:27 и в нем будет: да этот момент я помню из Ваших видео, довольно смышленая идея так разделить файлы 12:07:30 12:07:45 12:08:16 ну а в нутри уже по образу и подобию того, что есть в /custom/modules/Модуль/views/view.edit.php class AccountsViewDetail extends ViewDetail 12:08:31 только название своего модуля 12:08:43 12:09:00 ViewDetail не путать только с ViewEdit 12:09:10 а так по такому принципу и делать везде это само собой, но там суть видна из названий 12:09:13 12:09:22 и изменения будут касаться только того модуля, где это все определено и того экшена для которого Переопределено 12:09:33 12:09:36 ну да верно ? 12:09:36 12:09:43 для EditView в данном случае ок - попробую сейчас 12:09:44 классы у меня получилось сделать - добился контроля над ситуацией, но остается один вопрос - как подключить теперь файл TPL шаблона и как в него переменне передать ? 13:02:16 13:05:42 через $this->view_object_map['tpl'] 13:06:04 один из вариантов 13:06:05 public function display() { $tpl = $this->view_object_map['tpl']; $sugarSmarty = new Sugar_Smarty(); $sugarSmarty->assign('CALENDAR_FORMAT', $GLOBALS['timedate']->get_cal_date_format()); $sugarSmarty->assign('CALENDAR_FDOW', $GLOBALS['current_user']->get_first_day_of_week()); $sugarSmarty->assign("tpl", $this->view_object_map['tpl']); $sugarSmarty->display($tpl['template']); } 13:06:34 или 13:06:35 global $current_user; $tpl['date_format'] = $current_user->getPreference('date_format'); $tpl['template'] = 'custom/modules/nra_Contracts/tpls/Prolongation.tpl'; $tpl['prolongation_statuses'] = $GLOBALS['app_list_strings']['prolongation_statuses']; $tpl['find_prolongation_statuses'] = $GLOBALS['app_list_strings']['prolongation_statuses']; unset($tpl['find_prolongation_statuses']['']); $tpl['contract_statuses_list'] = $GLOBALS['app_list_strings']['contract_statuses_list']; $tpl['refusal_prolongation_reasons'] = $GLOBALS['app_list_strings']['refusal_prolongation_reasons']; $this->view = "default"; $this->view_object_map['tpl'] = $tpl;
  7. Конфигурация комбобоксов

    Кирилл: добрый день! Просмотрел ваши видео о SuiteCRM, очень все толково и прекрасно. Больше подобного материала на русском практически нет. Огромное спасибо за труды 12:05:51 Евгений: 12:06:17 добрый! 12:06:19 спасибо! Хотел уточнить, если такое возможно, где можно найти конфигурацию комбобоксов? они в базе все-таки сидят или так же как и поля редактируются в php файле? 12:06:33 12:07:36 Базовые комбобоксы, которые изначально были в системе, лежат в файле /include/language/ru_ru.lang.php а если я свои создаю через конструктор модуля ? 12:07:46 во время создания новых полей 12:07:52 12:08:04 если вы добавляете свои или редактируете базовые, то они лежат в /custom/include/language/ru_ru.lang.php 12:08:25 $GLOBALS['app_list_strings'] - переменная, доступная в системе и содержит все комбобоксы 12:09:26 базовые комбобоксы лучше не редактировать в файле, чтобы оставлять возможность апгрейда системы, и все правки делать в /custom/include/language/ru_ru.lang.php 12:10:06 можно и старые модифицировать, просто новую версию старого комбобокса указывать в /custom/include/language/ru_ru.lang.php да, я так и сделал ) старые не трогая, добавляю новые при создании полей. Ок вопрос. а тогда куда нужно скопировать из файла /custom/include/language/ru_ru.lang.php конфигурацию комбобокса, чтобы его можно было увидеть в Студии, в редакторе комбобоксов ? 12:10:50 12:10:55 никуда 12:11:12 это их нормальное местоположение и студия должна корректно с ними работать без дополнительных действий хм, странно. 12:11:12 12:12:53 вот например у меня есть комбобокс 12:12:54 $GLOBALS['app_list_strings']['nra_sentreports_status_list'] = array( 'new' => 'Сформирован', 'send' => 'Отправлен', ); 12:13:08 и он виден если зайти Администрирование - Редактор комбобоксов а если я его не в коде создавал а через конструтор модулей. Создал новоей поле DropDown и нажал Добавить (в плане добавить новый комбобокс) открылась вкладка, все сделал, сохранил, и где мне найти конфигурацию потом этого комбобокса? Конфигурацию поля я копирую оттуда, как Вы в видео показывали /custom/modulebuilder/packages/ realtor/modules/created_fields_module/vardefs.php в файл /custom/Extension/modules/myModule/Ext/Vardefs/customFields.php 12:15:50 12:17:27 Когда комбобокс создается в конструкторе, он находится в третьем местоположении 12:17:47 поищите его в /custom/Extension/application/Ext/Language 12:17:51 там файлы языковые 12:17:54 для разных модулей 12:17:58 он скорее всего там 12:18:07 но я стараюсь так не делать 12:18:24 я обычно сначало создаю комбобокс в /custom/include/language/ru_ru.lang.php 12:18:36 а потом уже в конструкторе модуля при добавлении поля указываю его Понял суть )) сначала создать Комбобокс, а потом уже при конструировании его привязывать 12:18:43 12:18:47 да Спасибо большое ) разобрался 12:18:58 12:19:03 пожалуйста 12:19:04 удачи Я еще заметил что система работает в основном через Ajax, и создается вопрос, для клиентской части целесообразно использовать фреймворк по типу Angular JS? 12:20:08 12:21:31 и работает она через Ajax кривенько прекривенько 12:21:41 я его обычно для модулей сразу отключаю 12:21:49 хорошо что такая возможность присутствует 12:22:02 наверное можно использовать все, что вам будет удобно 12:22:20 но считаю что лучше стараться в систему не привносить какие то новые технологии 12:22:30 а стараться разобраться с существующими 12:22:49 jquery например с YUI там за глаза хватает 12:23:18 а то будет кладбище разных технологий, которое закостылит весь проект, и после вас там никто разобраться ни с чем не сможет ))) 12:23:21 ка кто так ... Понял. Спасибо за проффессиональный взгляд. И полностью согласен. Система большая и много чего реализовано уже на старте
  8. Выбрать хостинг. Узнать стоимость ваших услуг

    Виктор: Евгений, добрый день 13:23:04 Евгений: 13:23:18 Добрый! Хотел у Вас поинтересоваться по поводу интеграции CRM. 13:24:04 Выбрать хостинг. Узнать стоимость ваших услуг 13:24:36 13:25:36 если хотите платный хостинг, берите чтобы стоил не менее 500 рублей в месяц 13:25:40 лучше 1000 или две 13:25:47 за эти деньги вам продадут более менее нормальный 13:25:57 это если не вдаваться в технические характеристики 13:26:03 мои услуги стоят 1500 рублей час Вы интегрируете CRM с эластиксом?? Там астерикс с freePBX 13:27:16 13:27:47 подобного опыта нет 13:28:02 но есть большой опыт работы с CRM Мне нужно чтобы оператор работая с CRM мог производить звонки из CRM, у vTiger вроде такая функция есть 13:29:24 И на эластиксе 4 я видел модуль под сахар 13:29:58 13:30:22 в теории я могу разобраться и настроить все это 13:30:33 я видел есть модули для интеграции с астериской 13:30:59 и мог бы или их попробовать поставить и допилить под вас, если такая необходимость будет 13:31:10 но готового предложения у меня нет 13:31:20 я не знаю сколько это будет стоить по поводу хостинга: 13:31:42 https://hosting.reg.ru/hosting/plan/Host-1-1209 13:31:55 такой подойдет 13:32:02 13:32:15 думаю вам будет проще обратиться в компанию, у которой есть опыт подобных интеграций... они хотя бы смогут сказать точную сумму 13:33:46 Объем выделяемой памяти: 256 Мб для каждого скрипта; 13:33:50 я обычно ставлю 512 13:33:55 Максимальный размер выделяемой памяти на процесс: 1 Гб; 13:34:03 не знаю что они под этим подразумевают 13:34:16 я с хостингами давно не имел дел 13:34:34 но если говорить про сервер, то надо чтобы было доступно не менее 2 гигабайт оперативы 13:34:43 это один из основных показателей нужных 13:34:47 можно и на 1 гигабайте 13:35:14 но периодически все будет подвисать. сложные выборки и какие то задачи крона будут или не работать или работать криво Что мне нужно. 3 оператора 3 исполнителя 1 админ постановка задач и ведение клиентской базы для сервисного центра 13:35:25 13:37:18 разместите у меня бесплатно )) Бессплатно- только сыр в мышеловке. Можем у вас произвести настройку проработку, а потом перекинуть??? 13:38:38 13:38:58 да, я как раз на днях добавил возможность скачать всю систему себе с моего хостинга 13:39:15 ну тоесть вы можете зарегистрироваться, получить црм-ку, настроить ее там по своему усмотрению 13:39:27 и в любой момент скачать ее полностью с базой данных и где то там у себя установить уже Вы за оплату сможте ее настоить для нас на своём хостинге, а потом перенести на мой??? 13:40:52 13:41:29 смотрите: установка црм-ки (или нескольких) делаете вы сами просто зарегистрируюясь на этом сайте в админке 13:41:37 вы там можете что хотите с ней делать 13:41:39 в интерфейсе 13:41:44 вам дается админ-доступ к црм 13:41:52 а потом вы также бесплатно можете ее скачать 13:42:02 если будет нужна моя помощь именно как специалиста 13:42:07 или нужно будет как то доделать црм 13:42:11 или помочь вам в чем то 13:42:18 я все смогу для вас сделать за доп.плату 13:42:22 мои услуги стоят 1500 рублей час Может у вас есть готовые решения для сервисного центра??? 13:42:45 13:44:06 нет, у меня нет готовых предложений каких либо бизнесов. хотя у меня и есть куча наработок в тех или иных областях, но у каждого из клиентов слишком все разное, чтобы я мог выделить какую то версию и продавать ее для того или иного вида бизнеса. да и я один работаю. у меня на это просто нет времени Спасибо Вам.
  9. Перестали сохраняться данные в созданных мною полях

    Роман: Здравствуйте! Помогите пожалуйста. Перестали сохраняться данные в созданных мною полях в модуле "Контакты". Что это может быть? 13:59:43 в suitecrm 14:00:07 Евгений: 14:02:33 добрый день! 14:02:41 возможно вы установили себе модуль какой нибудь 14:02:46 который некорректно встал 14:02:58 или у вас расхождения в полях с базой данных 14:03:09 сделайте себе быстрое восстановление 14:03:26 Администрирование - Восстановление - самая верхняя ссылка Быстрое восстановление спасибо огромное, буду пробовать! 14:03:29 14:03:38 там внизу потом сформируются sql-запросы 14:03:43 возможно 14:03:51 если будут - их надо будет тоже выполнить хорошо, спасибо большое
  10. Диплом в котором происходит внедрение SugarCRM в компанию

    Кирилл: Здравствуйте) Вопрос не стандартный) Так уж вышло что я решил сделать диплом в котором происходит внедрение SugarCRM в компанию. У Вас случайно дипломами не занимаются? ) 12:13:06 Евгений: 12:13:36 Добрый день! 12:13:57 напрямую нет 12:14:11 но я с удовольствием могу поделиться своими знаниями 12:14:36 час моего времени стоит 1500 рублей 12:14:46 за несколько часов я могу из вас сделать неплохого специалиста по шугару 12:14:57 если будете внимательно слушать и стараться разобраться 12:15:08 а потом еще и на работу возьму ))) Дело в том, что диплом у меня практически есть. Точнее есть, но что то мне в нем не устраивает. Вот хотел поинтересоваться на доработку диплома. 12:16:39 Мне нужны блок схемы бизнес процессов. И блок схемы аппаратной части (железо). Настройка sugar CRM и внедрение. Так как у меня специальность электронщик, то нужно больше по железу. как то так 12:20:39 12:23:58 я больше по практическому применению шугара 12:24:02 а не по теории 12:24:07 у меня нет блоксхем 12:24:27 зато есть знания как разворачивать и какие характеристики железа желаемы 12:24:30 и вообще что нужно 12:24:54 а сможет ли вы эту информацию у меня получить и оформить в виде графиков и схем - уже к вам вопрос ))) Понял. Связаться с Вами в сл раз тут же? 12:29:00 12:29:12 да, я обычно онлайн ок! спасибо 12:29:19 12:29:21 ну или пишите на admin@crmhosting.ru хорошо
  11. Делаю запрос в SeachFields

    Михаил: Добрый день! 12:38:45 Евгений: 12:39:02 Добрый! Делаю запрос в SeachFields. 12:39:33 SELECT buildings.`id` FROM buildings LEFT OUTER JOIN realty ON realty.`building_id` = buildings.id WHERE buildings.deleted<>1 AND realty.`deleted`<>1 AND realty.`square` = 12:39:34 В crm находит одно количество записей, а в обычном sql запросе - другое. 12:40:37 База данных одна и та же. Значения одни и те же. 12:41:08 В CRM записей появляется больше. 12:41:18 12:41:58 Посмотрите финальный запрос, который формирует CRM-система после всевозможных преобразований 12:42:11 находится он в файле data/SugarBean.php 12:42:24 function create_new_list_query 12:42:46 if($singleSelect) { unset($ret_array['secondary_where']); unset($ret_array['secondary_from']); unset($ret_array['secondary_select']); } print_r($ret_array['select'] . $ret_array['from'] . $ret_array['where'] . $ret_array['order_by']); if($return_array) { return $ret_array; } return $ret_array['select'] . $ret_array['from'] . $ret_array['where']. $ret_array['order_by']; 12:43:04 вот в конце надо вставить отображение результирующего sql-запроса 12:43:07 print_r($ret_array['select'] . $ret_array['from'] . $ret_array['where'] . $ret_array['order_by']); 12:43:19 и посмотреть что в конечном счете CRM сформировал 12:43:23 может станет понятнее... Спасибо, буду пробовать. 12:43:38 Евгений, вставить после return $ret_array['select'] . $ret_array['from'] . $ret_array['where']. $ret_array['order_by']; 12:50:37 ? 12:50:41 12:51:17 после return код в функции не выполняется 12:51:20 до return Я понял - в конце функции function create_new_list_query 12:52:26 12:52:32 да Первое что заметил это realty.`square` = '200%' Хотя в форме четко указываю 200 12:58:52 13:02:04 знак % подставляется при поиске тектовых значений 13:02:18 чтобы искало не точное соответствие а вхождение подстроки с начало строки 13:02:41 Ну тоесть если ищем слово "сталь", чтобы нашлось "Электросталь" 13:02:58 какой тип у поля square? 13:03:06 varchar? int(11) 13:03:48 Это в sql 13:04:08 13:04:20 а в шугаре? В searchdefs? 13:04:38 13:04:50 в vardef 13:06:22 можно в студии глянуть Кажется, что у меня там вообще ничего нет. 13:06:22 Поле добавил кастомно. Изменения только в SearchFields и в searchdefs 13:08:41 13:09:13 в студии в модуле надо найти это поле и посмотреть какой там тип указан 13:09:26 это Администрирование - Студия - Модуль - Поля 13:09:31 и там в таблице список полей будет 13:09:37 найти его в этом списке 13:09:43 там же должен быть указан тип 13:09:56 он скорее всего Integer будет, но на всякий... Не нахожу такого поля в студии. 13:10:49 Видимо не делал восстановение быстрое. 13:11:07 13:11:23 в модуле realty? 13:11:26 ищите 13:12:10 Integer 13:12:13 Все верно - Integer 14:07:15 14:16:02 Ну вообще такого поведения быть не должно у поля Integer 14:16:18 вот сейчас попробовал с полем типа Integer у себя 14:16:23 SELECT accounts.id ,accounts_cstm.id_custom_c,accounts_cstm.type_c, accounts.name , accounts.phone_office , jt0.user_name assigned_user_name , jt0.created_by assigned_user_name_owner , 'Users' assigned_user_name_mod, accounts.date_entered , accounts.assigned_user_id FROM accounts LEFT JOIN accounts_cstm ON accounts.id = accounts_cstm.id_c LEFT JOIN users jt0 ON accounts.assigned_user_id=jt0.id AND jt0.deleted=0 AND jt0.deleted=0 where ((accounts_cstm.id_custom_c = 5)) AND accounts.deleted=0 ORDER BY accounts.date_entered DESC 14:16:34 id_custom_c = 5 14:16:45 как ввел в фильтре 5 так оно и вывелось 14:17:14 возможно у subquery, если поиск идет по нему, в этом плане не доделаны возможности 14:17:29 я так понимаю оно не проверяет тип поля когда подключает второстепенный запрос 14:18:15 я думаю тут нужно переделывать немного механизм поиска подключаемых запросов - добавлять возможность поиска по прямому запросу без добавления % 14:18:57 возможно в SearchFields.php нужно будет добавить какой то параметр, который будет определять что должно искаться точное соответствие без : 14:18:59 % С этим ясно. Убираю знак % - результат тот же. 14:31:02 Убрал все лишнее из запроса, который у меня отображается в crm 14:31:20 Получилось - 14:31:27 SELECT buildings.id FROM buildings WHERE buildings.id IN (SELECT * FROM ( SELECT buildings.`id` FROM buildings LEFT OUTER JOIN realty ON realty.`building_id` = buildings.id WHERE buildings.deleted<>1 AND realty.`deleted`<>1 AND realty.`square` = '120') square_realty_derived) 14:31:28 Выдает 63 записи. 14:31:49 SELECT buildings.id FROM buildings LEFT OUTER JOIN realty ON realty.`building_id` = buildings.id WHERE buildings.deleted<>1 AND realty.`deleted`<>1 AND realty.`square` = '120' 14:31:51 Выдает 71 14:32:00 14:33:43 а если SELECT DISTINCT buildings.id FROM buildings LEFT OUTER JOIN realty ON realty.`building_id` = buildings.id WHERE buildings.deleted<>1 AND realty.`deleted`<>1 AND realty.`square` = '120' 14:33:44 ? 14:33:52 сколько записей? 63 14:34:15 14:34:30 потому что там или повторяющиеся или NULL 14:34:46 SELECT buildings.id FROM buildings WHERE buildings.id IN (SELECT * FROM ( SELECT buildings.`id` FROM buildings LEFT OUTER JOIN realty ON realty.`building_id` = buildings.id WHERE buildings.deleted<>1 AND realty.`deleted`<>1 AND realty.`square` = '120') square_realty_derived) 14:34:54 какой то слишком навороченный запрос Такой выдается в CRM 14:35:06 Это я его упростил. 14:35:19 SELECT buildings.id , buildings.building_id_for_site , buildings.name , LTRIM(RTRIM(CONCAT(IFNULL(jt0.first_name,''),' ',IFNULL(jt0.last_name,'')))) assigned_user_name , jt0.created_by assigned_user_name_owner , 'Users' assigned_user_name_mod, buildings.date_entered , buildings.assigned_user_id FROM buildings LEFT JOIN buildings_cstm ON buildings.id = buildings_cstm.id_c LEFT JOIN users jt0 ON buildings.assigned_user_id=jt0.id AND jt0.deleted=0 AND jt0.deleted=0 where ((buildings.id IN (select * from (SELECT buildings.`id` FROM buildings LEFT OUTER JOIN realty ON realty.`building_id` = buildings.id WHERE buildings.deleted<>1 AND realty.`deleted`<>1 AND realty.`square` = '120%') square_realty_derived))) AND buildings.deleted=0 ORDER BY buildings.building_id_for_site ASC 14:35:37 Вообще такой. 14:35:43 14:36:18 попробуейт из LEFT OUTER JOIN убрать OUTER 14:36:43 это же ведь ваша вставка в общий запрос? Да. 14:36:53 Ничего не меняет. 14:37:14 14:38:06 SELECT buildings.`id` FROM buildings 14:38:13 заменить на SELECT DISTINCT buildings.`id` FROM buildings 14:38:29 в подставляемом запросе SELECT DISTINCT buildings.id FROM buildings LEFT JOIN realty ON realty.`building_id` = buildings.id WHERE buildings.deleted<>1 AND realty.`deleted`<>1 AND realty.`square` = '120' Выводит 63 записи. 14:40:37 Столько же выводит запрос из crm без distinct, так и с ним. 14:41:15 14:41:42 ну значит не нужны 71 запись 14:41:47 там или лишние или вообще null Я так и понял. Это как-то в этом навороченном запросе обрабатывается, как я понял. 14:42:23 14:42:51 ну потому что ищет id среди того, что нашел select 14:43:01 если селект найдет null, то такого id в базе то нет 14:43:06 и эта запись не учитывается 14:43:17 а если находит нормальное значение - то засчитывается Спасибо!)ъ
  12. Настройка поиска в модуле используя записи другого модуля

    Михаил: В шуге поиск в одном модуле по данным из связного можно сделать через студию? 13:51:34 Евгений: 13:51:54 Добрый день! 13:52:50 да, там предусмотрен механизм такой. как искать по тем или иным полям определяется в файле modules/Модуль/metadata/SearchFields.php 13:53:05 Могжно глянуть на примере Accounts: 13:53:14 'email' => array ( 'query_type' => 'default', 'operator' => 'subquery', 'subquery' => 'SELECT eabr.bean_id FROM email_addr_bean_rel eabr JOIN email_addresses ea ON (ea.id = eabr.email_address_id) WHERE eabr.deleted=0 AND ea.email_address LIKE', 'db_field' => array ( 0 => 'id', ), 'vname' => 'LBL_ANY_EMAIL', ), 13:53:48 здесь будет поиск среди записей контрагентов, чей айдишник указан в запросе в виде eabr.bean_id 13:54:02 при этом ea.email_address LIKE - часть общего подзапроса 13:54:06 и будет подставлен емайл 13:54:19 вот по образу и подобию можно делать 13:55:19 вот буквально сегодня делал, чтобы при поиске названия контрагента искались все контрагенты, у которых или имя совпадает с искомой строкой, или в связанной с контрагентом записи из другого модуля название также совпадало с искомой строкой 13:55:32 'name' => array ( 'query_type' => 'default', 'operator' => 'subquery', 'subquery' => array( 'SELECT `id` FROM `accounts` WHERE `deleted` = 0 AND `name` LIKE', 'OR' => 'SELECT `nra_prevnames`.`parent_id` FROM `nra_prevnames` WHERE `nra_prevnames`.`deleted`=0 AND `nra_prevnames`.`name` LIKE', ), 'db_field' => array( 0 => 'id', ), ), 13:56:06 у модуля nra_PrevNames связь с аккаунтами через parent_id 13:57:12 subquery - тут массив. первая строка - чтобы искало по названию в самом модуле с контрагентами, вторая строка - чтобы искало по названию в модуле nra_PrevNames. ключ 'OR' говорит какая связь должна быть (по умолчанию AND) У меня вот такое поле. То есть значение задается, а потом еще и границы указываются. 14:01:15 К нему можно такой способ применить? 14:01:24 14:02:10 ну видимо нужно будет вместо`nra_prevnames`.`name` LIKE указать какое поле будет чему равно 14:02:28 например `realty`.`square` = 14:03:02 ну сам принцип: после этого выражения в финальном sql будет подставлено значение, пришедшее из формы Я понял, спасибо! Буду пробовать! 14:03:36 14:03:37 include/SearchForm/SearchForm2.php 14:03:46 вот в этом файле все это правится 14:04:05 у меня это 992 строка 14:04:06 switch(strtolower($operator)) { 14:04:08 примерно тут 14:04:18 public function generateSearchWhere($add_custom_fields = false, $module='') { 14:04:25 в этой функции 14:04:35 можно посмотреть что там и как генерится О, вот это вообще здорово!) 14:04:51 14:05:21 )) 14:05:44 А через студию это не делается
  13. Сабпанель с контактами в ProspectLists

    Алексей: День добрый 10:10:42 Евгений: 10:10:59 Добрый Есть Suitecrm. В модуле Prospectlists есть сабпанель Contacts. В ней кроме городского телефона хочу выводить и мобильный. Дописываю это поле в /custom/modules/Contacts/metadata/subpanels/ProspectLists_subpanel_contacts.php - никаких изменений. Всё получается, только если писать прямо в /modules/Contacts/metadata/subpanels/default.php. Но это не совсем правильно 10:14:19 А, да. В Студии модуля ProspectLists нет вообще 10:15:36 10:16:55 пару минут 10:17:05 я сейчас тут доделаю важное дело и пообщаемся ок, конечно 10:17:11 10:23:05 Смотрите, как там получается 10:23:27 modules/ProspectLists/metadata/subpaneldefs.php 10:23:46 тут храняться настройки какие сабпанели должны быть показаны при открытии карточки списка адресатов 10:23:56 'contacts' => array( 'order' => 20, 'module' => 'Contacts', 'sort_by' => 'last_name, first_name', 'sort_order' => 'asc', 'subpanel_name' => 'default', 'get_subpanel_data' => 'contacts', 'title_key' => 'LBL_CONTACTS_SUBPANEL_TITLE', 'top_buttons' => array( array('widget_class' => 'SubPanelTopButtonQuickCreate'), array('widget_class'=>'SubPanelTopSelectButton','mode'=>'MultiSelect'), ), ), 10:24:10 этот блок как раз говорит о том, что надо выводить контакты 10:24:15 'subpanel_name' => 'default', 10:24:25 это указывает на название сабпанели в модуле контактов 10:24:49 если мы посмотрим, то действительно найдем modules/Contacts/metadata/subpanels/default.php 10:25:05 но мы можем переименовать на другое название панели 10:25:09 например указываем так: 10:25:19 'subpanel_name' => 'ForProspectList', т.е. если здесь изменить default на <моё имя файла>,то заработает моя кастомная панель? 10:25:22 10:25:35 теперь нам надо создать описание этой сабпанели: 10:25:51 custom/modules/Contacts/metadata/subpanels/ForProspectList.php 10:25:57 создаем такой файл 10:26:15 он лежит в custom, по этому все норм с точки зрения совместимости 10:26:35 а туда можете перенести содержимое из modules/Contacts/metadata/subpanels/default.php и заменить его по собственному разумению 10:27:27 но чтобы уж все совсем было по феншую надо менять название сабпанели с контактами не в modules/ProspectLists/metadata/subpaneldefs.php уже заработало, спасибо огромное! 10:27:31 10:27:46 а пойти в custom/Extension/modules/ProspectLists/Ext/Layoutdefs 10:28:13 и туда добавить новый файл, чтобы он заменил собой дефолтный 10:28:26 $layout_defs['ProspectLists']['subpanel_setup']['contacts'] = array(......) 10:28:44 а потом в админке выполнить быстрое восстановление, чтобы кеш перестроился 10:29:06 тогда вы не трогая основные файлы из сборки чисто силами custom сделаете нужные изменения 10:29:49 если не хотите называть файл с конфигом сабпанели как то иначе можете оставить название default 10:30:16 тогда если в кастоме не будет конфига default, то подцепит его из стандартного места в модулях 10:31:00 ну тоесть оставляете 'subpanel_name' => 'default', 10:31:22 и копируете из modules/Contacts/metadata/subpanels/default.php в custom/modules/Contacts/metadata/subpanels/default.php понял, спасибо! 10:32:27 10:32:31 ))
      • suitecrm
      • prospectlist
      • (and 2 more)

        Tagged with:

        • suitecrm
        • prospectlist
        • сабпанель
        • контакты
  14. История одного диалога: Системные требования SugarCRM (SuiteCRM)

    Александр: Здравсивуйте 22:37:00 Евгений: 22:37:38 добрый вечер подскажите пожалуйста, установил suitecrm, вроде во всем разобрался. Но одно никак не получается, при назначении пользователям роли, они не назначаются, с чем это может быть связанно? 22:38:49 как правильно назначить пользователю конкретную роль? 22:39:19 22:39:51 в карточке пользователя (не сотрудника) переходите на вкладку доступы и внизу указываете роли 22:40:15 или через администрирование находите где роли, заходите в роль и внизу указываете пользователей, у котрых должна быть эта роль я так и указываю, появляется новое окно где надо выбрать пользователей, я выбираю, но они не назначаются, после появления знака загрузки в ролях все так же пусто 22:42:06 22:42:34 видимо у вас какая то ошибка происходит и связь не образуется 22:42:42 на вскидку не скажу в чем дело 22:42:47 не типовая ошибка 22:42:57 надо смотреть уже пару дней думаю, не получается решить 22:43:02 22:43:04 может ошибка в базе данных какая то 22:43:16 может вы поставили какие то расширения, которые криво работают расширений никаких не ставил, только руссифицировал. А при настройках прав доступа при создании роли модуль пользователи никак не получается выбрать тип доступа, это нормально? 22:44:16 22:47:24 да, это норм 22:47:39 найдите файл suitecrm.log в корне системы 22:47:43 очистите или удалите его 22:47:57 потом попробуйте еще раз какому нибудь пользователю указать роль 22:48:08 а потом гляньте что будет в этом файле 22:48:12 и тут покажите секундочку 22:48:44 он пуст 22:52:04 там было пару ошибок логина, а после удаления и повторения он пуст 22:52:27 22:53:34 ну тогда не видя не подскажу 22:53:46 думал туда ошибки если есть свалятся есть лог sugarcrm 22:54:01 22:54:41 хм Fri Mar 4 13:53:09 2016 [93342][-none-][FATAL] Query Failed: SELECT id FROM aow_workflow WHERE aow_workflow.flow_module = 'ACLActions' AND aow_workflow.status = 'Active' AND (aow_workflow.run_when = 'Always' OR aow_workflow.run_when = 'On_Save' OR aow_workflow.run_when = 'Create') AND aow_workflow.deleted = 0 : MySQL error 1146: Table 'user10225_vegang_crm.aow_workflow' doesn't exist 22:54:41 22:54:48 у вас два лога ведется? 22:54:55 а переходили из версии в версию? нет, только чистая установка 22:55:09 22:55:40 судя по ошибке у вас црм криво встала 22:55:51 не все таблицы нужные установлены 22:56:02 а судя по user10225_vegang_crm у вас какой то хостинг 22:56:10 явно не сервак свой 22:56:22 шугару нужно много ресурсов да хостинг 22:56:22 22:56:36 если это хостинг типа за 100 рублей в месяц - то работать врядли будет нормально Время ответа сервера: 0.24 секунд. Потребление памяти сервером: 6992216 (байт) Пиковое потребление памяти сервером: 8048840 (байт) 22:56:45 пока показатели не критичны, нам бы посмотреть его в деле, а там уже решать 22:56:59 22:57:03 не критичны при просморе 22:57:22 а вот когда устанавливалось все - там была потребность в ресурсах 22:57:24 и не встало 22:57:42 еще будет критично когда в студии например будете что то добавлять типа модулей или полей 22:57:50 тоже через раз работать скорее всего будет все таки советуете сразу на сервак ставить? 22:58:05 просто пока было интересно поставить покапаться 22:58:18 22:58:28 https://crmhosting.ru/site/crm-suitecrm-sugarcrm/ 22:58:36 и копайтесь сколько влезет 22:58:51 правда я давно не обновлял 22:58:58 но там не кардинально отличается 22:59:06 версия может пару месячной давности 22:59:16 вот хочу на праздниках последнюю поставить 22:59:31 но вам чтобы в принципе понять подходит или нет - думаю не критично да, главное попробовать настроить и протестировать, если пойдет то глубже будем вникать и смотреть. Спасибо за помощь! 23:00:46 23:01:22 дайте чтобы хотябы было 512 мегабайт оперативки для шугара 23:01:28 должно работать норм ок, попробуем так, еще раз спасибо за помощь 23:02:24 23:02:34 да незачто и наставление на путь) 23:02:35 о 23:06:59 поправил 23:07:04 отредактировал php.ini и выставил там 512м, максимальное время выполнения 120, и версию php 5.6, до этого 7ка стояла, забыл что ее ставил 23:07:56 роль назначилась, но потребление памяти возрасло до 30мб 23:08:16 23:08:30 на семерке пробовал 23:08:34 там как то криво работает 23:08:40 ну и гуд! вот и решение, и малый опыт) отметьте на форуме, может поможет кому) 23:09:10
  15. В этом видео я на примере добавления кнопки для генерации паролей расскажу как можно добавлять кнопки в редактирование карточек модулей и назначать обработчик их кликов.
  16. В этом видео я в карточку Задачи добавляю сверху кнопки, при нажатии на которые Задача переходит в соответствующий статус.
  17. В этом видео я чиню модуль E-mail: Когда приходит письмо от клиента, который есть в базе, автоматически не добавляются связи между письмом и соответствующим контактом и конрагентом.
  18. В этом видео я расширяю размер поля с названием проектной задачи до поля типа text (многострочное текстовое поле).
  19. Сегодня столкнулся с ошибкой, присутствовавшей в SuiteCRM 7.3.2 (а возможно и в более ранних и более поздних модификациях этой CRM): Если создать новый отчет в модуле Отчеты (AOR_Reports), и одним из параметров фильтрации указать поле типа Datetime, то при построении отчета записи по этому полю не ищутся. У меня это проявилось, когда я хотел найти все Задачи, созданные за определенный день (по календарику). Вот как выглядел отчет: Таким образом у нас отчет будет состоять из трех колонок: ID записи, Название и Дата создания записи. А фильтровать данные мы по идее должны по Дате создания записей: Но если заполнить поле в колонке "Значение" инажать на кнопку "Обновить", то ничего не происходит. Записи не ищутся, хотя я точно знаю, что они есть на указанную дату. В результате разбора модуляAOR_Reports было выявлено, что непосредственно генерацией WHERE-условия для выборки по отчету занимается функцияbuild_report_query_where, находящаяся в классеAOR_Report в файлеmodules/AOR_Reports/AOR_Report.php Результатом работы функцииbuild_report_query_where являлся массив: Array ( [select] => Array ( [0] => `project_task`.id AS 'project_task_id' [1] => `project_task`.id AS 'ID0' [2] => `project_task`.name AS 'Название1' [3] => `project_task`.date_entered AS 'Дата_создания2' ) [where] => Array ( [0] => `project_task`.date_entered = '23.12.2015' [1] => project_task.deleted = 0 который потом уже далее собирался в конечный SQL-запрос: SELECT `project_task`.id AS 'project_task_id', `project_task`.id AS 'ID0', `project_task`.name AS 'Название1', `project_task`.date_entered AS 'Дата_создания2' FROM `project_task` WHERE `project_task`.date_entered = '23.12.2015' AND project_task.deleted = 0 Как мы видим,`project_task`.date_entered = '23.12.2015' - абсолютно не то, что нам надо, чтобы корректно найти данные. Мало того, что формат даты указан не верный, так еще подвешенным остается что делать с временем. Ведьdate_entered (дата создания) у нас в базе имеет значения что то типа такого: 2015-12-23 12:34:02, что никак не идентично23.12.2015, хотя по логике это должно быть наше значение. В общем нам надо преобразовать наш запрос таким образом, чтобы занчения в базе уравнялись в формате с вводимыми значениями. Я решил, что самым оптимальным будет введенное значение оставить как есть, а модернизации подвергнуть указание поля в базе данных: у нас должен на выходе получиться вот такой запрос: SELECT `project_task`.id AS 'project_task_id', `project_task`.id AS 'ID0', `project_task`.name AS 'Название1', `project_task`.date_entered AS 'Дата_создания2' FROM `project_task` WHERE DATE_FORMAT(`project_task`.date_entered, '%d.%m.%Y') = '23.12.2015' AND project_task.deleted = 0 Таким образом прибегнув к функцииDATE_FORMAT мы сможем сделать эти значения идентичными по своему формату, что позволит их начать сравнивать. Реализация: Во первых в функциюbuild_report_query_where в самый верх добавляем строку с подключением глобальной переменной$timedate, из которой мы в последствии сможем извлечь текущие настройки формата даты для текущего пользователя: /** * @param array $query * @return array */ function build_report_query_where($query = array()){ global $beanList, $app_list_strings, $sugar_config; global $timedate; а чуть дальше в этой же функции ищем строчки: if ((isset($data['source']) && $data['source'] == 'custom_fields')) { $field = $this->db->quoteIdentifier($table_alias . '_cstm') . '.' . $condition->field; $query = $this->build_report_query_join($table_alias . '_cstm', $table_alias . '_cstm', $oldAlias, $condition_module, 'custom', $query); } else { $field = $this->db->quoteIdentifier($table_alias) . '.' . $condition->field; $condition->value = date($timedate->get_date_format(), strtotime("+{$timedate->getUserUTCOffset()} minutes", strtotime($condition->value))); } Здесь переменная $field - это название нашего поля в базе данных (`project_task`.date_entered). Нам надо указать его не как просто`project_task`.date_entered, а какDATE_FORMAT(`project_task`.date_entered, '%d.%m.%Y') Для этого модернизируем этот участок кода следующим образом: if ((isset($data['source']) && $data['source'] == 'custom_fields')) { $field = $this->db->quoteIdentifier($table_alias . '_cstm') . '.' . $condition->field; $query = $this->build_report_query_join($table_alias . '_cstm', $table_alias . '_cstm', $oldAlias, $condition_module, 'custom', $query); } elseif($condition_module->field_defs[$condition->field]['type'] == 'datetime') { // Для случая, когда поле с типом Datetime $field = "DATE_FORMAT(". $this->db->quoteIdentifier($table_alias) . '.' . $condition->field.", '" . $timedate->get_cal_date_format() . "')"; } else { // Все остальные стандартные случаи $field = $this->db->quoteIdentifier($table_alias) . '.' . $condition->field; } Теперь у нас для всех полей с типом Datetime будет происходить корректное применение фильтров в Отчетах. Ну а в нашем случае получился запрос: SELECT `project_task`.id AS 'project_task_id', `project_task`.id AS 'ID0', `project_task`.name AS 'Название1', `project_task`.date_entered AS 'Дата_создания2' FROM `project_task` WHERE DATE_FORMAT(`project_task`.date_entered, '%d.%m.%Y') = '23.12.2015' AND project_task.deleted = 0 И вот его результат работы: Патч для SuiteCRM, который исправляет описанную ошибку:
  20. Сегодня столкнулся с ошибкой, присутствовавшей в SuiteCRM 7.3.2 (а возможно и в более ранних и более поздних модификациях этой CRM): Если создать новый отчет в модуле Отчеты (AOR_Reports), и одним из параметров фильтрации указать поле типа Datetime, то при построении отчета записи по этому полю не ищутся. У меня это проявилось, когда я хотел найти все Задачи, созданные за определенный день (по календарику). Вот как выглядел отчет: Таким образом у нас отчет будет состоять из трех колонок: ID записи, Название и Дата создания записи. А фильтровать данные мы по идее должны по Дате создания записей: Но если заполнить поле в колонке "Значение" инажать на кнопку "Обновить", то ничего не происходит. Записи не ищутся, хотя я точно знаю, что они есть на указанную дату. В результате разбора модуляAOR_Reports было выявлено, что непосредственно генерацией WHERE-условия для выборки по отчету занимается функцияbuild_report_query_where, находящаяся в классеAOR_Report в файлеmodules/AOR_Reports/AOR_Report.php Результатом работы функцииbuild_report_query_where являлся массив: Array ( [select] => Array ( [0] => `project_task`.id AS 'project_task_id' [1] => `project_task`.id AS 'ID0' [2] => `project_task`.name AS 'Название1' [3] => `project_task`.date_entered AS 'Дата_создания2' ) [where] => Array ( [0] => `project_task`.date_entered = '23.12.2015' [1] => project_task.deleted = 0 который потом уже далее собирался в конечный SQL-запрос: SELECT `project_task`.id AS 'project_task_id', `project_task`.id AS 'ID0', `project_task`.name AS 'Название1', `project_task`.date_entered AS 'Дата_создания2' FROM `project_task` WHERE `project_task`.date_entered = '23.12.2015' AND project_task.deleted = 0 Как мы видим,`project_task`.date_entered = '23.12.2015' - абсолютно не то, что нам надо, чтобы корректно найти данные. Мало того, что формат даты указан не верный, так еще подвешенным остается что делать с временем. Ведьdate_entered (дата создания) у нас в базе имеет значения что то типа такого: 2015-12-23 12:34:02, что никак не идентично23.12.2015, хотя по логике это должно быть наше значение. В общем нам надо преобразовать наш запрос таким образом, чтобы занчения в базе уравнялись в формате с вводимыми значениями. Я решил, что самым оптимальным будет введенное значение оставить как есть, а модернизации подвергнуть указание поля в базе данных: у нас должен на выходе получиться вот такой запрос: SELECT `project_task`.id AS 'project_task_id', `project_task`.id AS 'ID0', `project_task`.name AS 'Название1', `project_task`.date_entered AS 'Дата_создания2' FROM `project_task` WHERE DATE_FORMAT(`project_task`.date_entered, '%d.%m.%Y') = '23.12.2015' AND project_task.deleted = 0 Таким образом прибегнув к функцииDATE_FORMAT мы сможем сделать эти значения идентичными по своему формату, что позволит их начать сравнивать. Реализация: Во первых в функциюbuild_report_query_where в самый верх добавляем строку с подключением глобальной переменной$timedate, из которой мы в последствии сможем извлечь текущие настройки формата даты для текущего пользователя: /** * @param array $query * @return array */ function build_report_query_where($query = array()){ global $beanList, $app_list_strings, $sugar_config; global $timedate; а чуть дальше в этой же функции ищем строчки: if ((isset($data['source']) && $data['source'] == 'custom_fields')) { $field = $this->db->quoteIdentifier($table_alias . '_cstm') . '.' . $condition->field; $query = $this->build_report_query_join($table_alias . '_cstm', $table_alias . '_cstm', $oldAlias, $condition_module, 'custom', $query); } else { $field = $this->db->quoteIdentifier($table_alias) . '.' . $condition->field; $condition->value = date($timedate->get_date_format(), strtotime("+{$timedate->getUserUTCOffset()} minutes", strtotime($condition->value))); } Здесь переменная $field - это название нашего поля в базе данных (`project_task`.date_entered). Нам надо указать его не как просто`project_task`.date_entered, а какDATE_FORMAT(`project_task`.date_entered, '%d.%m.%Y') Для этого модернизируем этот участок кода следующим образом: if ((isset($data['source']) && $data['source'] == 'custom_fields')) { $field = $this->db->quoteIdentifier($table_alias . '_cstm') . '.' . $condition->field; $query = $this->build_report_query_join($table_alias . '_cstm', $table_alias . '_cstm', $oldAlias, $condition_module, 'custom', $query); } elseif($condition_module->field_defs[$condition->field]['type'] == 'datetime') { // Для случая, когда поле с типом Datetime $field = "DATE_FORMAT(". $this->db->quoteIdentifier($table_alias) . '.' . $condition->field.", '" . $timedate->get_cal_date_format() . "')"; } else { // Все остальные стандартные случаи $field = $this->db->quoteIdentifier($table_alias) . '.' . $condition->field; } Теперь у нас для всех полей с типом Datetime будет происходить корректное применение фильтров в Отчетах. Ну а в нашем случае получился запрос: SELECT `project_task`.id AS 'project_task_id', `project_task`.id AS 'ID0', `project_task`.name AS 'Название1', `project_task`.date_entered AS 'Дата_создания2' FROM `project_task` WHERE DATE_FORMAT(`project_task`.date_entered, '%d.%m.%Y') = '23.12.2015' AND project_task.deleted = 0 И вот его результат работы:
  21. Version 1.0.0

    7 downloads

    Патч исправляет ошибку в работе модуля Отчёты: поиск по дате и поиск в диапазоне. Про ручное устранение этой ошибки я писал в статье: Но потом родилась мысль: а почему бы не начать писать расширения под SuiteCRM? Скачать и установить расширении ведь удобнее, чем руками лазить по коду! Вот так и родилась эта идея. И вот предлагаю дебютный мой выход в этом направлении: Патч устраняет указанные выше недостатки. Кстати, для желающих поучавствовать вот проект на Bitbucket.org:https://bitbucket.org/crmhosting/suitecrm_bugfix_reports
  22. Патч исправляет ошибку в работе модуля Отчёты: поиск по дате и поиск в диапазоне. Про ручное устранение этой ошибки я писал в статье: Но потом родилась мысль: а почему бы не начать писать расширения под SuiteCRM? Скачать и установить расширении ведь удобнее, чем руками лазить по коду! Вот так и родилась эта идея. И вот предлагаю дебютный мой выход в этом направлении: bugfix_patch_reports.13.01.2016.15.45.31.zip Патч устраняет указанные выше недостатки. Сейчас я еще все тут продумаю, как лучше организовать этот раздел, и, думаю, открою какую то полнофункциональную рубрику по разработке патчей. Кстати, для желающих поучавствовать вот проект на Bitbucket.org:https://bitbucket.org/crmhosting/suitecrm_bugfix_reports
  23. В данной статье я расскажу, как подготовить рабочий компьютер для начала работ с исходным кодом SuiteCRM. За основу будет взят компьютер с недавно установленной Windows 10. Я расскажу, какое программное обеспечение можно поставить и как его настроить для того, чтобы было комфортно работать с SuiteCRM в плане его адаптации под ваши нужды. Все программное обеспечение можно будет установить и использовать бесплатно без значимого ухудшения функционала. SuiteCRM - это веб-ориентированная CRM-система. Это значит, что SuiteCRM - это фактически тот же сайт, написанный на PHP с использованием базы данных MySQL! И работать он должен на таком же хостинге, на котором могут работать обычные сайты! По этому если вам хорошо знакомо веб-программирование на PHP и MySQL, объектно-ориентированное программирование и MVC,то разобраться с SuiteCRM будет несколько легче, чем без подобных знаний. Ну а для начинающих веб-программистов я все таки расскажу какой инструментарий потребуется для доработки SuiteCRM. Вот необходимый минимум средств, при помощи которых вы сможете дорабатывать SuiteCRM по своему усмотрению: Веб-сервер, развернутый у вас локально на компьютере, на котором вы сможете отлаживать ваши наработки Среда программирования (IDE), в которую вы загрузите ваш проект с SuiteCRM и сможете его дорабатывать Приложение для удобной работы с базой данных Cистемаконтроля версий на базе GIT Это самый необходимый минимум, который обязательно у вас должен быть. Если вкратце, то работать это будет следующим образом: Вы устанавливаете у себя веб-сервер; В папку, где должны храниться файлы CRM-системы, вы заливаете исходные файлы SuiteCRM(это могут быть файлы из архива с чистой системой, загруженной на официальном сайте SuiteCRM, но я в этой статье буду исходить из того, что исходные файлы SuiteCRMнаходятся уже в GIT-репозитории, и вы должны клонировать себе уже существующий проект). Вы запускаете приложение по работе с PHP-проектами, настраиваете новый проект на работу с загруженными файлами и выполняете необходимые доработки; Результаты своих действий проверяете у себя локально на компьютере в браузере. Веб-сервер Веб-сервер, это совокупность программ, позволяющих на компьютереразмещать веб-сайт и получать его содержимое при запросах из браузера. Это очень упрощенное моё вольное толкование )). По факту это связка из Apache + PHP + MySQL, которая устанавливается на вашем компьютере и настраивается таким образом, чтобы PHP-файлы CRM-системы работали как полноценный сайт. Существует масса способов заставить сайт заработать на локальной машине: можно поставить по отдельности каждый из компонентов (отдельно Apache, отдельно PHP и отдельно MySQL), а потом все это настраивать на совместную работу. Все приложения распространяются свободно и бесплатно. Но давайте не будем углубляться в дебри тонкой настройки веб-серверов, и возьмем решение, которое за нас произведет все необходимые настройки, и вполне хватит для начала работ. А если в дальнейшем потребуется более тонкая настройка - то вы сможете уже однозначно понимая что вам нужно и чего не хватает в предлагаемом мной варианте выполнить установку веб-сервера по другому. Ну а сейчас - MAMP! MAMP - это бесплатная сборка Apache + MySQL + PHP с упрощенной процедурой установки и настройки. То, что как раз нужно начинающему веб-программисту! Качаем последнюю бесплатную версию MAMP с официального сайтаhttps://www.mamp.info: После того, как скачаете приложение, запустите его и пройдите не сложную процедуру установки: классический NEXT-NEXT-OK (соглашаемся со всеми настройками по-умолчанию и давим постоянно кнопку "Далее"). После успешной установки на рабочем столе у вас должны появиться иконки MAMP и MAMP PRO. Для начала нам будет достаточно бесплатно распространяемого MAMP, а в дальнейшем, если будет такое желание, сможете приобрести MAMP PRO и пользоваться более расширенными возможностями по настройке вашего веб-сервера. Итак, запускаем на рабочем столе ярлык MAMP. Веб-сервер можно запускать/останавливать кнопкой Start Servers и Stop Servers. MAMP по умолчанию создает папку с файлами и кладет туда какие то тестовые PHP-скрипты. Их работу можно увидеть, если нажать кнопку Open start page: Чтобы веб-сервер корректно отдавал файлы, они должны быть расположены в корневой папке веб-сервера. Согласно настройкам по-умолчанию для MAMP такой папкой является C:\MAMP\htdocs Таким образом надо файлы SuiteCRM размещать в этой папке. И тогда при запросе в браузере адреса http://localhostваш веб-сервер будет корректно отображать результаты работы CRM-системы. Система управленияверсиями (GIT) В рамках этой статьи я не буду рассматривать почему именно GIT, а не Subversion (SVN) или например Mercurial. Просто GIT. Что лучше и для чего вы сможете потом самостоятельно понять исследуя эту тематику. Распишу лишь для чего вообще нужна система управления версиями. Итак: GIT нужен для того, чтобы выгружать ваши наработки в CRM на сервер и заливать себе наработки других программистов! То есть выберете CRM-систему, загружаете ее себе на свой локальный сервер, дорабатываете функционал так, как вам того хочется, и выгружаете обратно свои наработки чтобы они применились на основном сервере, где работает эта CRM-система. С одной стороны вы по идее могли бы это сделать и при помощи обычного FTP-клиента, но есть ряд "НО", который мешает такому подходу: Если вы отредактируете не один-два файла, а много файлов в разных папках, то вы просто забудете какие файлы вы редактировали и через FTP можете выгрузить не все изменения. GIT за вас помнит и точно знает где что вы изменяли, и вам не надо о этом помнить и как то заботиться, чтобы все ваши изменения попали на рабочий сервер. Вы конечно можете после своих изменений выгрузить ВЕСЬ проект по FTP на удаленный сервер. Но тут встают две проблемки: Проблема №1 - это просто долго. В SuiteCRM порядка 30 мегабайт и несколько десятков тысяч файлов. Для какой то небольшой модификации выгружать весь проект - это доооооооолго. Проблема №2 - выгрузкой по FTP вы легко можете затереть работу других программистов, работающих на этом проекте! Если вы один единственный обслуживаете CRM-систему - то все немного проще: изменения могут в систему прийти только от вас и никому ничего вы не затрете (ну разве что юзеры успеют что то сделать в Студии пока вы допиливали систему, и вы благополучно затрете все их старания слив свою версию папки custom). А вот если над проектом работают и другие программисты, то очень даже вероятна ситуация, когда вы слили себе проект, следом за вами его слил другой программист. потом вы сделали необходимые изменения и залили свои файлы обратно. а другой программист чуть позже тоже залил свои файлы обратно. но в его файлах нет тех изменений, что вы добавляли. и потому он просто своими файлами затирает ваши наработки. Все! Ваша работа затерта, ничего не работает и глючит! От этого нас и избавляет GIT: он корректно сливает изменения разных программистов даже в рамках одного файла, ну или сообщает о конфликтах и предлагает их разобрать. И с GIT удобнее работать с удаленным сервером: можно настроить так называемый deploy, и закончив работу с файлами у себя на локальном компьютере они автоматически попадают на удаленный сервер! не надо заходить на сервер и что либо там делать - все произойдет автоматически В общем GIT отличная система, позволяющая работать с исходным кодом и избавляющая программиста от огромной части рутинной работы по выявлению глюков, связанных с переносом доработанного кода. Скачать GIT вы можете по прямой ссылке:https://git-scm.com/download/win Автоматически начнется скачивание приложения (примерно 30 мегабайт). Далее запускаете скачанный дистрибутив. Установка также не отличается сложностью: соглашаемся со всеми установками, выставленными по умолчанию дойдя до конца мастера установки. По окончанию установщик просто закончит свою работу ничего не запустив. Этого и не требуется: GIT - это не какое то отдельное приложение. Это штука просто добавляется в систему и дополняет собой менюшку когда вы щелкаете правой клавишой по папкам в системе: Это говорит о том, что GIT был корректно установлен, и теперь его можно использовать в дальнейших работах с CRM-системой. Давайте теперь в качестве тестирования установим последнюю версию SuiteCRM при помощи GIT. Для этого мы можем клонировать себе на локальный компьютер в корневую папку нашего веб-сервера проект SuiteCRM из GitHub. Для этого откройте в Проводнике Windows папкуC:\MAMP\htdocs и кликните на ней правой клавишей мыши. В появившемся меню выберите Git Bash Here. Это откроет терминал с возможностью ввода команд git. Введите в командной строке такую команду: git clone https://github.com/salesagility/SuiteCRM.git Эта команда произведет копирование всех файлов SuiteCRM из репозитория на ваш компьютер. Дождитесь завершения копирования (должно появиться примерно следующее): $ git clone https://github.com/salesagility/SuiteCRM.git Клонирование в «SuiteCRM»… remote: Counting objects: 35738, done. remote: Compressing objects: 100% (299/299), done. remote: Total 35738 (delta 128), reused 0 (delta 0), pack-reused 35423 Получение объектов: 100% (35738/35738), 42.21 MiB | 882.00 KiB/s, готово. Определение изменений: 100% (20760/20760), готово. Проверка соединения… готово. Распаковка файлов: 100% (10643/10643), готово. В результате в корневой папке веб-сервераC:\MAMP\htdocs появится подпапка с исходными кодами SuiteCRM: Теперь у вас есть SuiteCRM на вашем компьютере. Нужно лишь его настроить для работы. Среда программирования в PHP (IDE) Чисто теоретически вы можете разрабатывать сайты используя Блокнот! У меня даже был хороший знакомый, который умудрился написать аналог avto.ru в vi (это такой редактор для командной строки в linux). На самом деле программисту должно быть удобно работать с кодом. И если ему в Блокноте комфортно - да радибога! Но это должен быть осознанный выбор того или иного программиста, что он отказался от программного обеспечения, целенаправленно созданного для разработки программ на PHP в угоду каким то своим представлениям о идеальной среде программирования. Мы же не будем (по крайней мере на первых порах) особенно выпендриваться и познакомимся с тем программным обеспечением, которымпользуются очень большой процент разработчиков для веб. Вот лично я работаю в PHPStorm от JetBrains. Мне очень нравится эта система! Я в ней работаю не первый год и очень к ней привык! На самом деле мне наверное в ежедневной работе нужна только 10-ая (а может и 100-ая) часть всего того функционала, что присутствует в этом приложении: Подсветка синтаксиса, используемых переменных; Возможность кликнув на функцию или свойство перескочить в участок кода, где эта функция или свойство описываются; Индексация всего проекта, и, как следствие, мгновенный поиск по всему проекту с подсветкой найденных участков кода; Возможность как создать локальный проект, так и снять копию с проекта на сервере и вносить правки на удаленный сервер просто сохранив локальный файл; И много других плюшек с разным уровнем использования. Но это приложение распространяется платно. Цена порядка $90 для персонального использования, а продление вроде еще дешевле. В цену входит поддержка на год (бесплатные обновления, которые случаются весьма регулярно). Так что лично мои рекомендации по тому, в чем будет комфортно работать с SuiteCRM - то это PHPStorm. Но я вижу в качестве задачи текущей статьи - рассказать как начать работать с SuiteCRM с минимальными затратами по деньгам и времени погружения в рабочий процесс имея лишь желание и чистую Windows. Потому для анализа мы тут будем использовать другую не менее популярную, но уже бесплатную IDE - NetBeans IDE! NetBeans IDE - это приложение для программирования на разных языках. И на PHP в том числе. Несколько моих знакомых веб-программистов успешно работают на NetBeans и вполне им довольны. NetBeans также подсвечивает PHP-код, поддерживает работу с удаленными серверами и работу с кодом через GIT. Для установки NetBeans идем на официальный сайт в раздел PHP Development -https://netbeans.org/features/php/ Здесь вверху страницы нажимаем кнопку Download. Открывается страница с выбором редакции для скачивания и установки. Нам нужна версия NetBeans для PHP: Скачиваем её и устанавливаем. Установка не отличается какими-либо особенностями и все происходит достаточно стандартно: соглашаемся со всеми установками по-умолчанию, жмем кнопку "Далее" до тех пор, пока установщик не дойдет до финиша. В результате установки на рабочем столе появится значек запуска NetBeans. Теперь мы можем комфортно редактировать файлы SuiteCRM, которые ранее закачали на наш компьютер при помощи GIT: Запускаете ярлык NetBeans на рабочем столе; Когда NetBeans загрузится, мы должны создать новый проект с файлами SuiteCRM. Для этоговыбираем в меню File -> New Project В открывшемся окошке указываем, что создаем PHP Application: В следующем окошке мы указываем в качестве названия проекта: SuiteCRM, и также обязательно указываем путь до папки с файлами проекта: Ну а дальше ничего нигде можно не указывать и согласиться с настройками по-умолчанию. В результате будет создан новый проект и все исходные файлы SuiteCRM будут в него загружены и проиндексированы: Ура! Теперь вы можете вносить свои изменения в SuiteCRM и наблюдать результат своей работы! Для этого необходимо в браузере открыть адрес http://localhost/SuiteCRM/ Для только что загруженной SuiteCRM будет открыта страница установки CRM-системы: Правда я заметил, что в этой версии SuiteCRM отсутствует русский язык (внизу там на скриншете видно пункт Choose your language). Но так как данная статья о том, как начать программировать в SuiteCRM, а не как установить бесплатную руссифицированную SuiteCRM, то мы на этом не будем заострять внимание. Тем более что SuiteCRM на русском можно скачать на официальном сайте SuiteCRM, а все, что описано в этой статье, пригодится и для установки SuiteCRM из архива, а не из GIT. Работа с MySQL При работе с SuiteCRM вы часто будете взаимодействовать с базой данных. При чем не в виде запросов, а именно обращаться к структуре базы данных, смотреть наличие и названия тех или иных таблиц в ней и полей в таблицах. Так же весьма часто прийдется отлаживать ваши скрипты путем анализа SQL-запросов: вы создаете какой то SQL-запрос, и выполняете его напрямую в базе данных. Это быстро и удобно. Пожалуй наибольшую популярность получил PHPMyAdmin, как средство доступа к базе данных. Я предполагаю что популярность его объясняется бесплатностью, неплохим функционалом, легкостью установки (а зачастую он уже идет в составе тех или иных компонентов устанавливаемого веб-сервера). Где на сервере есть Apache+PHP+MySQL, значит там будет работать и PHPMyAdmin, ведь он написан на PHP, а значит это тот же сайт, только задача которого - получить доступ к базе данных. Но у PHPMyAdmin в какой то момент времени я выявил ряд недостатков, которые лично для меня стали решающими для того, чтобы я вычеркнул PHPMyAdmin из списка инструментов, которыми я ежедневно пользуюсь при работе с SuiteCRM: Пожалуй самое главное: в PHPMyAdmin нельзя сохранять в разных окнах разные SQL-запросы! В качестве примера: Ищем мы какую то ошибку в работе SuiteCRM. При разборе того или иного функционала мы ставим отображение SQL-запросов, отправляемых в базу данных. И мы допустим хотим эти запросы выполнить в базе данных и посмотреть, что она вернет в ответ. И таких запросов может быть несколько в рамках решения одной проблемы. Удобно, когда мы можем открыть нужное кол-во вкладок с SQL-запросами, и эти SQL-запросы там разместить, выполнить их, как то модернизировать, даже уйти со страницы выполнения SQL-запроса, чтобы посмотреть содержимое какой то таблицы, вернуться обратно и опять продолжить работу с нашими ранее сохраненными SQL-запросами. Это все происходит достаточно часто при отладке SuiteCRM. А PHPMyAdmin такую возможность не предоставлял (во всяком случае тогда давно, когда я от него отказался, может сейчас ситуация изменилась?). PHPMyAdmin нужно устанавливать на сервер. Не всегда бывает возможным подключиться к удаленной базе данных только по ее IP. Не все сервера позволяют внешнее подключение к базам данных. Нужно залить файлы, позаботиться о разрешениях на файлы (chmod и chown), возможно еще будут требоваться еще какие то настройки. Это все какое то не удобное. Хочется иметь возможность подключаться к новым базам данных в пару кликов, ну или с наименьшими телодвижениями. Ну и на конец лично я для себя определил, что мне очень не комфортно, когда дважды кликнув по названию таблицы или по названию поля в таблице я не могу получить это название, заключенное в апострафы: `table_name`. Кликая по названиям я очень быстро получаю их в буфер обмена и могу быстро вставить в создаваемый мной SQL-запрос. Зачастую таблицы имеют весьма заковыристые длинные названия, связи этих таблицимеют еще более заковыристые названия, а поля в таблицах связи вообще какая то абра-кадабра елеопределяемая что куда. Потому точное указание названия таблиц и полей, и при этом БЫСТРОЕ указание - вполне себе проблема, решение которой позволит значительно увеличить скорость вашей работы и уменьшить количество багов, вызванных синтаксическими ошибками. В общем после того, как я познакомился с SQLYog, моя жизнь в веб-дизайне уже не была прежней ))) SQLYog - это Windows-приложение, которое позволяет собрать в одном месте доступы к самым разным базам данных моих клиентов. Вот примерный перечень того, за что я полюбил SQLYog: Одно приложение для всех доступных мне баз данных. Не надо вспоминать где какой пароль на каком сервере. Один раз сохранил настройки доступа и все. Удобно! Подключение базы данных на удаленном сервере можно выполнить или указав SSH-доступ к этому серверу + доступ к базе данных, или, если нет SSH-доступа (что бывает не часто), скачав 1 (один) PHP-файл на удаленный сервер указать его в виде туннеля. Это реально быстро и Удобно! Веб-сайт всегда проигрывал в скорости работы обычным приложениям. Приложения - это быстрая работа с ними. Удобно! SQL-запросы можно сохранять в отдельных вкладках. При этом можно внутри одной вкладки запускать отдельные SQL-запросы просто выделив их мышкой. Удобно! Кликая на название таблицы или поля оно появляется в окне редактора SQL-запросов. Оттуда я его копирую (да здравствует горячие клавиши) и использую в дальнейшем при построении SQL-запросов при отладке SuiteCRM. Это Удобно! В SQLYog есть СУПЕР-МЕГА-удобная вещь: копирование базы данных и отдельных таблиц! Подключаемся сразу к двум разным базам данных (например, к своей локальной базе данных и к базе удаленной CRM-системы), и в пару кликов можем закачать себе удаленную базу данных на свой компьютер. Это действительно оооочень удобно. Не надо заморачиваться с архивами или еще чем то. Указал откуда качаем, указал куда качаем, нажал кнопку и понеслась. А если есть таблицы с очень большим размером (например, зачастую, таблица emails_text содержит весь тот спам, который сыпется в почтовые ящики, подключеныне к SuiteCRM, и можно галочкой убрать эту таблицу чтобы закачка происходила быстрее). Очень Удобно! Ну и все остальные плюшки, типа просмотра содержимого базы данных, редактора таблиц и индексов и тд и тп. SQLYog является платным продуктом и стоит $99 на одного пользователя в минимальной комплектации. Или можно скачать триал-версию с официального сайта. Но мы тут пишем как начать программировать под SuiteCRM с минимальными временными и денежными затратами. По этому я предлагаю для начала воспользоваться бесплатной версией SQLYog Community Edition, которая распространяется бесплатно и имеет почти весь функционал, который я тут описал. Главное, что эта бесплатная версию SQLYog-а оказалась на порядок (а то и больше) удобнее того, что в то время предлагал PHPMyAdmin, и этого стало достаточно, чтобы я забыл PHPMyAdmin как страшный сон и больше никогда ничего другого и не искал, когда речь касалась при помощи чего я буду работать с базами данных на MySQL. Для установки SQLYog CE идем на страницу выбора версий для скачивания:https://code.google.com/p/sqlyog/wiki/Downloads Качаем нужную вам версию (под винду я ставилSQLyog Community Edition - 12.09 (64-Bit)). Весит она что то около 10 мегабайт. После закачки запускаем файл установщика. Установка также не чем не выделяется из общего ряда: NEXT-NEXT-OK, то есть соглашаемся со всеми настройками по умолчанию и постоянно давим "Дальше" пока установка не будет окончательно выполнена. По завершении установки у вас на рабочем столе появится ярлык SQLYog, при нажати на который вы сможете запускать его. При первом запуске приложение попросит вас создать подключение. Давайте подключимся к нашей локальной базе данных. Для этого нажимаем кнопку New и указываем название нашего подключения localhost (но можете тут обзывать как угодно): Далее вам нужно указать название хоста, имя пользователя и пароль подключения к базе данных. Название хоста - как правило это localhost. Имя пользователя и пароль понятное дело у каждого сервера свои, а у нас с нашим установленным и запущенным MAMP имя пользователя = root, пароль = root: Убедиться в том, что все данные указаны верно, вы можете нажав кнопку внизу Test Connection. Если все верно, то приложение покажет всплывающую плашку с версией MySQL, к которой вы подключаетесь. А если что то указано не верно, то будет долго-долго не отображать ничего, а потом выкинет сообщение с ошибкой подключения. Сохраните это ваше подключение, и в дальнейшем, вы сможете быстро его открывать просто выбрав в списке доступных подключений! Ну вот вроде все, что хотелось сказать про базовый набор программиста, желающего освоить работу с SuiteCRM. Работа с качественным инструментом должна приносить только удовольствие от работы. Это касается всех сфер деятельности человека, и программирование тут не исключение. В этой статье я лишь поверхностно рассмотрел основную идею: что нужно программисту для работы с SuiteCRM. В каждом из рассмотренных инструментариев можно бесконечно долго углубляться в тонкости его настройки, принципы работы и так далее. Если у вас возникнуть какие-либо вопросы по этому материалу, я с удовольствием на них отвечу!