ЗП программистов в компании и стоимость часа –- это вещи взаимосвязанные. Сколько должен стоить час программирования ит-компании, какая при этом будет ЗП программистов, сколько заработает компания? Давайте разберемся. [spoiler]
Известно, что спрос определяет предложение. И я должен огорчить красноярских веб-разработчиков -- согласно существующего спроса, рынок ИТ в Красноярске (а веб-разработки особенно) уже давно лежит ниже плинтуса:
“Показательно соотношение спроса и предложения в сфере информационных технологий. На рынке труда Красноярска востребованы инженеры-программисты (в 12 раз больше вакансий), инженеры по автоматизации (превышение предложения - в 8 раз), а также инженеры по защите информации (в 2 раза). Средняя заработная плата составляет 20 тыс. руб.
…
Согласно расценкам сайта «Росработа» зарплата: электромонтажника составляет сегодня 30-32 тыс. руб., электрогазосварщика от 12 до 30 тыс. руб., плотника-бетонщика 20-30 тыс. руб., слесаря-сантехника от 10 до 30 тыс. руб. и т. д.” http://www.dela.ru/news/other/24767/
Электромонтажники ценнее программистов. Вот так. И это реальность. Крупные нефтегазовые компании и различные администрации в расчет не берем -– это государство в государстве.
По этому, смешно читать коллег пишущих о дефиците кадров “мы предлагаем целых 20тр веб-программисту, а к нам никто не идет”. Моё мнение, работать веб-программистом за 20т.р. пойдет только калека, чистоплюй (офисный планктон), лентяй и в самом лучшем случае -- энтузиаст. Потому, что нормальный человек пойдет работать программистом ABAP, JAVA, 1С. На худой конец пойдет электромонтажником, но никак не веб-разработчиком. Сегодня, PHP-программист это самый низкооплачиваемый программист: http://www.developers.org.ua/archives...-oct-2010/
Кого же брать на работу компаниям занимающимся веб-разработкой? Нормальные люди к нам не пойдут, а лентяи, калеки и чистоплюи не нужны нам -- остаются энтузиасты. Но, компания, работа которой основана на таких энтузиастах это не коммерческое предприятие, а секта. Работать нужно за достойные деньги, а не за идею! В России уже более 4000 веб-студий, а разработка сайта уже ничего не стоит. Стране не хватает геологов, а все хотят быть веб-дизайнерами! (с)
Значит, наша (партнеров 1-Битрикс) задача разорвать этот порочный круг. Чтобы в профессию битрикс-программиста пошли нормальные люди (будущие профессионалы) нужно повышать ее привлекательность. Сделать профессию престижной. Абстрагироваться от всех остальных веб-разработчиков. А для этого ЗП битрикс-программиста должна быть как минимум не ниже чем ЗП электромонтажника! Для Красноярска, это должна быть белая ЗП, от 30000 на руки. Для работодателя это будет 30000+34%(ЕСН)+13%(НДФЛ)=44100 рубля.
В Красноярске, это минимум -- с такой ЗП человек может создать семью, и на пару с супругой взять ипотеку, т.е. тупо иметь возможность продолжить свой род.
Давайте вместе посчитаем, сколько при этом должен стоить час ит-компании.
Всего часов в месяце: 22 дня * 8 часов = 176 часов. Но, практика показывает, что на каждые проданные 3 часа, в среднем, приходится 1 час гарантийного обслуживания. Это 176/4=44 часа в месяц на гарантию и консультации. Итого, в месяц программисту реально выполнить работ на ~132 часа. Причем, саморазвитие, изучение нового, чтение документации, установку ПО -- я закладываю именно в эти часы. А когда еще этим заниматься разработчику? Буржуи придумали 8-часовой рабочий день не из-за человеколюбия. У человека должно оставаться время на себя. Дома нужно помыться, постираться, приготовиться к следующему рабочему дню и пр.
Компания может отдавать программисту максимум 40% стоимости проданного часа. Это проверено на целой армии 1С-франчайзи. 60% останется у компании -- сюда входят налоги, отпускной и больничный фонды, аренда, амортизация оборудования, приобретение необходимого ПО, ЗП менеджеров, ведение бухгалтерии и прочие расходы компании + доход фирмы. Учитывая это, час программиста компания не может продавать ниже следующей цены:
А в идеале 100$/час, столько платят за 1 час abap-программиста фирме аутсорсеру внедряющей SAP R3. Чем веб-программисты хуже?
Кстати, стоимость часа работы фрилансера не платящего налоги, работающего на пиратском софте и часть ЗП тратящего на амортизацию оборудования я бы посчитал так: Примерно половину времени он ищет заказ и ведет переговоры с клиентом 176/2=88 88/4=22 – гарантия (если она есть). 66 – остается на непосредственно программирование Стоимость часа при той же желаемой ЗП -- 30000/66=454 рублей. 340 рублей – без гарантии.
Вот такая арифметика.
И напоследок, рейтинг стоимости часа различных профессий, по моим наблюдениям:
заверить доверенность у нотариуса, например о передаче доменного имени — 800 рублей. 15 минут. отрегулировать фары японского автомобиля в автосервисе аффилированном с пунктом прохождения ТО — 600 рублей. 30 минут работы человека с 8 классами школы и средне-специальным образованием. модельная стрижка в парикмахерской — 300 рублей. 30 минут. шиномонтаж — 600 рублей. 20 минут (в сезон) нормо-час в хорошем автосервисе (Красноярск) — 700 рублей поставить пломбу у дантиста — 1000 рублей. 30 минут. приват танец стриптизерши (без образования, но с хорошей генетикой) — 1000 рублей / 10 минут работа массажиста с высшим медицинским образованием — 500р./час исковое заявление в суд на 1-2 страницы подготовленное профессиональным юристом стоит от 2000р. Как вы думаете сколько должны стоить 2 страницы php-кода? найм американского программиста — ~100$/час индийского — 30-60$/час программист abap SAP в России – 3000р./час программист 1С в России – 1000р./час обряд крещения в церкви — 3000р. 1 час (вот у кого жизнь удалась! )
PS: Такие мысли у меня были 1 год назад и течении года стоимость часа нашей компании увеличилась в два раза с ~325 до 650р. (с частью старых клиентов пришлось расстаться, но зато пришло много новых более платежеспособных), а штат программистов вырос в три раза, с 1 энтузиаста до 3-х Заветные 100$/час еще впереди!
8ми часовой рабочий день придумали не буржуи, а советская власть. Один из лозунгов кстати. А буржуи ВЫНУЖДЕННЫ были подстраиваться, чтоб показать И капитализм с человеческим лицом...
Точнее, если бы это было так просто, я бы об этом не писал
Задача
Представим такую задачу: нужно разработать форму, изменения из которые будут приняты только в том случае, если пользователь правильно введёт свой текущий пароль. Пример такой формы можно увидеть, к примеру, на free-lance.ru (Настройки → Основные настройки).
Проблема
Предположим, что проблем с у формой у нас не возникло. Но вот беда, как проверить пароль из формы на соответствие текущему паролю пользователя? К сожалению, стандартной функции в API Битрикса я для этого не нашёл.
Всё проблемы имеют решение
Сначала я подумал, что в поле PASSWORD Битрикс хранит простой MD5-хеш от пароля. Но всё оказалось не всё так-то просто
Оказывается, Битрикс прибявляет к паролю так называемую "соль" (подробности — в спец. литературе). Покопавшись в метода CUser::Login() можно узнать и алгорим сверки. А дальше дело за маленьким: реализовать этот алгорим у себя.
Модуль REST в БУСе. Как с ним работать. В 18 версии БУС появился модуль rest открывающий возможность получать с сайта данные по rest api. Как по мне так rest api в БУС не хватало достаточно сильно, особенно учитывая всевозможные fron-end технологии типа react/vue с серверным рендерингом. Вообще кастомизация некоторых компонентов битрикса это ад адский, к примеру компонент оформления заказа. Поэтому разделение back-end и front-end + серверный рендеринг мне кажется очень удобным и гибким подходом. Да, на back-end можно сделать вывод нужных данных в json и этого уже хватит для большинства задач. Но вот когда надо не просто отдать данные о товарах или новостях, а сделать оформление заказа или отслеживание тех-же заказов, то на реализацию подобного потребуется больше времени нежели простой вывод списка новостей в json. У меня скоро стартует проект по разработке мобильного приложения и хотелось уже узнать, как работать с rest в БУСе. Лучше ведь делать на том, что есть «в коробке» т.к. хочется верить, что там все продумано с учетом всех особенностей платформы. В поддержке мне не помогли разобраться с модулем, сказав, что документация в разработке, а принципиально rest бус - это rest b24. Я до этого не работал с b24 api и поэтому не знал, как и что там устроено. Для начала работы с Б24 через rest нужно создать приложение через специальную форму, но вот как создать приложение в БУСе? В админке БУСа нету раздела с приложениями. Я напрямую задал вопрос в поддержку "Как добавить приложение в БУСе (REST) ?" и получил ответ:
Вы можете разместит компонент bitrix:rest.marketplace.localapp на странице и добавлять приложения в БУСе
Что я и сделал. Разместив компонент, мы увидим точно такую же форму добавления приложения, как и в Б24. Указываем название приложения, ставим галочку «Приложение использует только API», указываем права доступа, указываем ссылку на приложение, жмем «сохранить». Для прав доступа я указал только user т.к. почти все остальное из Б24 и для моих целей не подходит и в списке не хватает многого, например sale (как я выяснил позже доступа к iblock, catalog нету в принцепе). В ответ получаем «Код приложения», «Ключ приложения». Теперь все как в Б24 за исключением нескольких мелочей. Отправляем запрос на https://<ваш сайт>/oauth/authorize/?client_id=< Код приложения >. Нас кинет на авторизацию, если мы не авторизованы. Потом нас кинет на url, который мы указали при его создании с GET параметрами. Далее получаем токен как в б24. Получив токен, мы можем работать с rest. Если модуль rest установлен, то уже можно запрашивать url /rest/ к Вашему сайту. В файле /bitrix/modules/rest/services/rest/index.php уже размещен компонент который отвечает за арботу с rest, bitrix:rest.provider с указанием url /rest/ в качестве url для rest. А внутри этого компонента вызывается другой компонент bitrix:rest.server, в котором указано, что он использует класс CRestProvider. В CRestProvider описаны несколько методов для rest напрмиер methods, который выводит список доступных методов согласно вашему уровню доступа, указанному при создании приложения. Если передать этому методу параметр FULL=true, то получим все возможные методы на данным момент. Для того чтобы получить список платежных систем я так понимаю служит метод sale.paysystem.list, но при его вызове получаем ошибку sale.paysystem.list. Для получения списка платежных систем нужно иметь доступ к sale и pay_system. Но в списке уровней доступа нету этих пунктов. А раскуривать коды компонента добавить эти уровни чет уже и не хочется, сложно все это. Похоже, что все это абсолютно не пригодно к использованию.
Добрый день! Большое спасибо за данную статью. А можно ли где то найти более подробное описание данного модуля? Тоже стоит задача реализовать апи, только обращение к сайту будут идти с внешнего сервера. В данном случае с приложения для Windows( НЕ Битрикс24:) ). Или может сможете подсказать более верное решение?
Шевченко Вячеслав, здравствуйте! Помогите, пожалуйста, подключить api на сайте.
По вашей рекомендации добавил bitrix:rest.marketplace.localapp на странице(пробовал и в админку и в публичку). Форма выводится, но при нажатии на кнопку "Добавить" просто обновляется страница.
Этот способ ещё не устарел?
Сообщение вы написали в 2018 году, сейчас 2021, доки по api в бус так и нет 🤦♂️
echo "hello from mail.com.ru." | msmtp --debug -a site.ru test@site.ruгде site.ru - значение account в конфиге .msmtprc
пример конфига для яндекса
# smtp account configuration for site.ru account site.ru logfile /home/bitrix/msmtp_site.ru.log host smtp.yandex.ru port 587 from noreply@site.ru keepbcc on auth on user noreply@site.ru password *********** tls on tls_starttls on tls_certcheck off
Не помогают вариации настроек главного модуля для отправки почты и т.д.
Укажите тут /bitrix/admin/settings.php?lang=ru&mid=main&tabControl_active_tab=tab_mail&back_url_settings= "Дополнительный параметр для передачи функции mail:" -a site.ru (см. скрин)
Чтобы гуглю было проще искать: SUCCESS_EXEC='F' , b_event, не работает почта msmtprc
была у меня в закладках хорошая статейка, а щас вот открыл - а ее нет:( хорошо, хоть у гугла есть сохраненная копия страницы. автор, простите за репост без подписи ...
В веб-окружении Битрикса по-умолчанию стоит msmtp для отправки писем. Если ваш домен привязан к Яндекс.Почте для домена, и вы хотите отправлять почту через реально существующий почтовый ящик с авторизацией, вам придётся внести в файл конфигурации некоторые изменения, чтобы всё работало хорошо.
Файл /home/bitrix/.msmtprc:
account default
logfile /var/log/msmtp.log
host smtp.yandex.ru #(smtp.gmail.com - для гугла) #
port 587 # именно этот порт! #lkz гугля рекомендуют ставить 465, хотя в просторах сети читал, что и 587 подходит ...#
from robot@domain.ru
keepbcc on
auth on
user robot@domain.ru
password <password>
tls on
tls_starttls on # обязательно для Яндекс.ПДД
tls_certcheck off
И не задавайте слишком длинных паролей.
P.S: при работе с GMail вторую строку (tls_starttls) наоборот включать не нужно.
UPDATE 2014-09-08
полный файлик с настройками для gmail:
account default
logfile /var/log/msmtp.log
host smtp.gmail.com
port 587
from user@gmail.com
auth on
user user@gmail.com
password password
tls on
tls_starttls on
tls_certcheck off
keepbcc on
для корректности настройки можно выполнить из сервера команду:
php -r "mail('test@email.com', 'Test', 'Test');"
UPDATE 2014-12-02
Для проверки из сайта, в командную строку можно ввести код:
if (mail("moe_mylo@gmail.com","test subject", "test body","From: otpravitel@bitrix.ru"))
echo "Сообщение передано функции mail, проверьте почту в ящике.";
else
echo "Функция mail не работает, свяжитесь с администрацией хостинга.";
Только email-адресы ставьте ваши
P.P.P.S Перенес инструкцию (вместе с дополнениями) себе на сайт
Похоже отправка через Яндекс накрылась (по крайне мере у нас так - работала годами, теперь - всё - Яндекс против, что слегка завуалированно следует из ответа их техподдержки ). Настроил Гугл - работает, посмотрим, насколько долго это продлится .
В Битриксе, начиная с версии 7.1.3, появилась возможность переопределить стандартный механизм отправки почты.
Когда может быть полезен такой финт ушами? К примеру, когда в конторе есть какой-то централизованный сервис отправки почты, который должны использовать все приложения (SMTP-сервер на другой машине, веб-служба, что угодно). Для примера, рассмотрим GMail в качестве такого сервиса.[spoiler]
Механика простая: везде, где должна вызываться функция mail(), вызывается bxmail(). А уже в этой функции, перед вызовом стандартной функции mail(), Битрикс проверяет, определена ли функция custom_mail() и, если да, вызывает её вместо mail(). Соответственно, чтобы переопределить механизм отправки, нужно всего лишь написать функцию custom_mail() (в /bitrix/php_interface/init.php, к примеру (если хотим, чтобы такой механизм отправки действовал для всех сайтов на данной копии)).
Приступим к делу! Лично мне для отправки почты через GMail ближе всего Zend_Mail, но... Ни эта библиотека, ни другие не позволяют установить "сырые" заголовки для письма. А разбирать $additional_headers мне что-то не очень хочется. Следовательно, выбор перепадает на PEAR::Net_SMTP, как на механизм прямой работы с SMTP-сервером.
Итак, ближе к коду!
require_once 'Net/SMTP.php';
/**
* Отпраляем почту через SMTP-сервер GMail (пользователь: user@gmail.com).
*
* @see CEvent::HandleEvent()
* @see bxmail()
*
* @param string $to Адрес получателя.
* @param string $subject Тема.
* @param string $message Текст сообщения.
* @param string $additionalHeaders Дополнительные заголовки передаются Битриксом почти всегда ("FROM" передаётся здесь).
*
* @return bool
*/
function custom_mail($to, $subject, $message, $additionalHeaders = '')
{
/*
* Настройки можно (нужно) вынести в админку, но это уже домашнее задание :)
*/
$smtpServerHost = 'ssl://smtp.gmail.com';
$smtpServerHostPort = 465;
$smtpServerUser = 'user@gmail.com';
$smtpServerUserPassword = 'password';
if (!($smtp = new Net_SMTP($smtpServerHost, $smtpServerHostPort))) {
return false;
}
if (PEAR::isError($e = $smtp->connect())) {
return false;
}
if (PEAR::isError($e = $smtp->auth($smtpServerUser, $smtpServerUserPassword))) {
return false;
}
preg_match('/From: (.+)\n/i', $additionalHeaders, $matches);
list(, $from) = $matches;
$smtp->mailFrom($from);
$smtp->rcptTo($to);
/*
* Получаем идентификатор конца строки у Битрикса.
*/
$eol = CAllEvent::GetMailEOL();
$additionalHeaders .= $eol . 'Subject: ' . $subject;
if (PEAR::isError($e = $smtp->data($additionalHeaders . "\r\n\r\n" . $message))) {
return false;
}
$smtp->disconnect();
return true;
}
Вынесение настроек в админку, создание статического объекта соединения (чтобы не тратить время при отправке множества писем за раз) — это всё задания на дом
Добрый день. Запутался маленько, получается с помощью данного механизма можно разделить почту по типам. В стиле информация о задачах с 1 почты, информация о событиях календаря с другой?
CRM-формы - инструмент, который многим знаком не понаслышке, в том числе и разработчикам Bitrix24. Порой на сложных сайтах приходится не просто передавать в CRM то, что вобьет в полях формы посетитель, но и различную дополнительную информацию.
Вопросов с тем, как передать в Bitrix24 значения полей, которые не размещены на этой форме, не возникает, это доходчиво описано вот здесь - https://helpdesk.bitrix24.ru/open/6200265/. Непонятно было, как это сделать, если вебформа уже подгружена, а нужные значения вдруг претерпели изменения в процессе действия посетителя сайта.
Конкретный пример на сайте https://dia-box.ru - карточки товаров закрываются без перезагрузки страницы, открываются новые, а форма для передачи заявки на товар, в обязанности которой входит донести до CRM, какой именно товар имеется в виду - уже подгружена.
Осталось скрестить одно с другим - передавать в функцию, которая обновляет параметры для загрузки формы, и пресеты, и значения полей. И вызвать при клике на кнопку.
Итак, функция для переопределения параметров CRM-формы приняла такой вид (добавлены пресеты и значение для полей):
Эти переменные определяются при загрузке карточки товара. По клику на кнопку они передаются в функцию, которая переделывает форму, как в примере выше по ссылке
var reinitForm = function (presets, fields) {
if(!window.Bitrix24FormObject || !window[window.Bitrix24FormObject])
return;
if(!window[window.Bitrix24FormObject].forms)
return;
Bitrix24FormLoader.unload(b24paramsload);
b24paramsload = initForm(presets, fields);
Bitrix24FormLoader.params = b24paramsload;
Bitrix24FormLoader.init();
Bitrix24FormLoader.showPopup(b24paramsload);
}
.......
//тем временем при загрузке карточки
presets = {"izdelie": ''+element.ITEM.NAME};
.......
BX.ready(function () {
BX.bind(
BX('portfolio_detail_form_open'),
'click',
BX.delegate(
function(e){
e.preventDefault();
//console.log(e); //посмотреть на Иван Иваныча
reinitForm(presets, {"values": { "LEAD_COMMENTS" : 'Хочу такое же - ' +presets.izdelie}});
}, this
)
);
});
Настройка CRM-формы и что получаем в результате (со всеми вытекающими):
У нас клиент заметил это обновление - все кнопки "купить/заказать" стали нерабочими. И документации толком никакой нет, записки блогеров только, ну кнопочку там какую нажать только можно узнать.
ЗП программистов в компании и стоимость часа –- это вещи взаимосвязанные. Сколько должен стоить час программирования ит-компании, какая при этом будет ЗП программистов, сколько заработает компания? Давайте разберемся. [spoiler]
Известно, что спрос определяет предложение. И я должен огорчить красноярских веб-разработчиков -- согласно существующего спроса, рынок ИТ в Красноярске (а веб-разработки особенно) уже давно лежит ниже плинтуса:
“Показательно соотношение спроса и предложения в сфере информационных технологий. На рынке труда Красноярска востребованы инженеры-программисты (в 12 раз больше вакансий), инженеры по автоматизации (превышение предложения - в 8 раз), а также инженеры по защите информации (в 2 раза). Средняя заработная плата составляет 20 тыс. руб.
…
Согласно расценкам сайта «Росработа» зарплата: электромонтажника составляет сегодня 30-32 тыс. руб., электрогазосварщика от 12 до 30 тыс. руб., плотника-бетонщика 20-30 тыс. руб., слесаря-сантехника от 10 до 30 тыс. руб. и т. д.” http://www.dela.ru/news/other/24767/
Электромонтажники ценнее программистов. Вот так. И это реальность. Крупные нефтегазовые компании и различные администрации в расчет не берем -– это государство в государстве.
По этому, смешно читать коллег пишущих о дефиците кадров “мы предлагаем целых 20тр веб-программисту, а к нам никто не идет”. Моё мнение, работать веб-программистом за 20т.р. пойдет только калека, чистоплюй (офисный планктон), лентяй и в самом лучшем случае -- энтузиаст. Потому, что нормальный человек пойдет работать программистом ABAP, JAVA, 1С. На худой конец пойдет электромонтажником, но никак не веб-разработчиком. Сегодня, PHP-программист это самый низкооплачиваемый программист: http://www.developers.org.ua/archives...-oct-2010/
Кого же брать на работу компаниям занимающимся веб-разработкой? Нормальные люди к нам не пойдут, а лентяи, калеки и чистоплюи не нужны нам -- остаются энтузиасты. Но, компания, работа которой основана на таких энтузиастах это не коммерческое предприятие, а секта. Работать нужно за достойные деньги, а не за идею! В России уже более 4000 веб-студий, а разработка сайта уже ничего не стоит. Стране не хватает геологов, а все хотят быть веб-дизайнерами! (с)
Значит, наша (партнеров 1-Битрикс) задача разорвать этот порочный круг. Чтобы в профессию битрикс-программиста пошли нормальные люди (будущие профессионалы) нужно повышать ее привлекательность. Сделать профессию престижной. Абстрагироваться от всех остальных веб-разработчиков. А для этого ЗП битрикс-программиста должна быть как минимум не ниже чем ЗП электромонтажника! Для Красноярска, это должна быть белая ЗП, от 30000 на руки. Для работодателя это будет 30000+34%(ЕСН)+13%(НДФЛ)=44100 рубля.
В Красноярске, это минимум -- с такой ЗП человек может создать семью, и на пару с супругой взять ипотеку, т.е. тупо иметь возможность продолжить свой род.
Давайте вместе посчитаем, сколько при этом должен стоить час ит-компании.
Всего часов в месяце: 22 дня * 8 часов = 176 часов. Но, практика показывает, что на каждые проданные 3 часа, в среднем, приходится 1 час гарантийного обслуживания. Это 176/4=44 часа в месяц на гарантию и консультации. Итого, в месяц программисту реально выполнить работ на ~132 часа. Причем, саморазвитие, изучение нового, чтение документации, установку ПО -- я закладываю именно в эти часы. А когда еще этим заниматься разработчику? Буржуи придумали 8-часовой рабочий день не из-за человеколюбия. У человека должно оставаться время на себя. Дома нужно помыться, постираться, приготовиться к следующему рабочему дню и пр.
Компания может отдавать программисту максимум 40% стоимости проданного часа. Это проверено на целой армии 1С-франчайзи. 60% останется у компании -- сюда входят налоги, отпускной и больничный фонды, аренда, амортизация оборудования, приобретение необходимого ПО, ЗП менеджеров, ведение бухгалтерии и прочие расходы компании + доход фирмы. Учитывая это, час программиста компания не может продавать ниже следующей цены:
А в идеале 100$/час, столько платят за 1 час abap-программиста фирме аутсорсеру внедряющей SAP R3. Чем веб-программисты хуже?
Кстати, стоимость часа работы фрилансера не платящего налоги, работающего на пиратском софте и часть ЗП тратящего на амортизацию оборудования я бы посчитал так: Примерно половину времени он ищет заказ и ведет переговоры с клиентом 176/2=88 88/4=22 – гарантия (если она есть). 66 – остается на непосредственно программирование Стоимость часа при той же желаемой ЗП -- 30000/66=454 рублей. 340 рублей – без гарантии.
Вот такая арифметика.
И напоследок, рейтинг стоимости часа различных профессий, по моим наблюдениям:
заверить доверенность у нотариуса, например о передаче доменного имени — 800 рублей. 15 минут. отрегулировать фары японского автомобиля в автосервисе аффилированном с пунктом прохождения ТО — 600 рублей. 30 минут работы человека с 8 классами школы и средне-специальным образованием. модельная стрижка в парикмахерской — 300 рублей. 30 минут. шиномонтаж — 600 рублей. 20 минут (в сезон) нормо-час в хорошем автосервисе (Красноярск) — 700 рублей поставить пломбу у дантиста — 1000 рублей. 30 минут. приват танец стриптизерши (без образования, но с хорошей генетикой) — 1000 рублей / 10 минут работа массажиста с высшим медицинским образованием — 500р./час исковое заявление в суд на 1-2 страницы подготовленное профессиональным юристом стоит от 2000р. Как вы думаете сколько должны стоить 2 страницы php-кода? найм американского программиста — ~100$/час индийского — 30-60$/час программист abap SAP в России – 3000р./час программист 1С в России – 1000р./час обряд крещения в церкви — 3000р. 1 час (вот у кого жизнь удалась! )
PS: Такие мысли у меня были 1 год назад и течении года стоимость часа нашей компании увеличилась в два раза с ~325 до 650р. (с частью старых клиентов пришлось расстаться, но зато пришло много новых более платежеспособных), а штат программистов вырос в три раза, с 1 энтузиаста до 3-х Заветные 100$/час еще впереди!
8ми часовой рабочий день придумали не буржуи, а советская власть. Один из лозунгов кстати. А буржуи ВЫНУЖДЕННЫ были подстраиваться, чтоб показать И капитализм с человеческим лицом...
Точнее, если бы это было так просто, я бы об этом не писал
Задача
Представим такую задачу: нужно разработать форму, изменения из которые будут приняты только в том случае, если пользователь правильно введёт свой текущий пароль. Пример такой формы можно увидеть, к примеру, на free-lance.ru (Настройки → Основные настройки).
Проблема
Предположим, что проблем с у формой у нас не возникло. Но вот беда, как проверить пароль из формы на соответствие текущему паролю пользователя? К сожалению, стандартной функции в API Битрикса я для этого не нашёл.
Всё проблемы имеют решение
Сначала я подумал, что в поле PASSWORD Битрикс хранит простой MD5-хеш от пароля. Но всё оказалось не всё так-то просто
Оказывается, Битрикс прибявляет к паролю так называемую "соль" (подробности — в спец. литературе). Покопавшись в метода CUser::Login() можно узнать и алгорим сверки. А дальше дело за маленьким: реализовать этот алгорим у себя.
Модуль REST в БУСе. Как с ним работать. В 18 версии БУС появился модуль rest открывающий возможность получать с сайта данные по rest api. Как по мне так rest api в БУС не хватало достаточно сильно, особенно учитывая всевозможные fron-end технологии типа react/vue с серверным рендерингом. Вообще кастомизация некоторых компонентов битрикса это ад адский, к примеру компонент оформления заказа. Поэтому разделение back-end и front-end + серверный рендеринг мне кажется очень удобным и гибким подходом. Да, на back-end можно сделать вывод нужных данных в json и этого уже хватит для большинства задач. Но вот когда надо не просто отдать данные о товарах или новостях, а сделать оформление заказа или отслеживание тех-же заказов, то на реализацию подобного потребуется больше времени нежели простой вывод списка новостей в json. У меня скоро стартует проект по разработке мобильного приложения и хотелось уже узнать, как работать с rest в БУСе. Лучше ведь делать на том, что есть «в коробке» т.к. хочется верить, что там все продумано с учетом всех особенностей платформы. В поддержке мне не помогли разобраться с модулем, сказав, что документация в разработке, а принципиально rest бус - это rest b24. Я до этого не работал с b24 api и поэтому не знал, как и что там устроено. Для начала работы с Б24 через rest нужно создать приложение через специальную форму, но вот как создать приложение в БУСе? В админке БУСа нету раздела с приложениями. Я напрямую задал вопрос в поддержку "Как добавить приложение в БУСе (REST) ?" и получил ответ:
Вы можете разместит компонент bitrix:rest.marketplace.localapp на странице и добавлять приложения в БУСе
Что я и сделал. Разместив компонент, мы увидим точно такую же форму добавления приложения, как и в Б24. Указываем название приложения, ставим галочку «Приложение использует только API», указываем права доступа, указываем ссылку на приложение, жмем «сохранить». Для прав доступа я указал только user т.к. почти все остальное из Б24 и для моих целей не подходит и в списке не хватает многого, например sale (как я выяснил позже доступа к iblock, catalog нету в принцепе). В ответ получаем «Код приложения», «Ключ приложения». Теперь все как в Б24 за исключением нескольких мелочей. Отправляем запрос на https://<ваш сайт>/oauth/authorize/?client_id=< Код приложения >. Нас кинет на авторизацию, если мы не авторизованы. Потом нас кинет на url, который мы указали при его создании с GET параметрами. Далее получаем токен как в б24. Получив токен, мы можем работать с rest. Если модуль rest установлен, то уже можно запрашивать url /rest/ к Вашему сайту. В файле /bitrix/modules/rest/services/rest/index.php уже размещен компонент который отвечает за арботу с rest, bitrix:rest.provider с указанием url /rest/ в качестве url для rest. А внутри этого компонента вызывается другой компонент bitrix:rest.server, в котором указано, что он использует класс CRestProvider. В CRestProvider описаны несколько методов для rest напрмиер methods, который выводит список доступных методов согласно вашему уровню доступа, указанному при создании приложения. Если передать этому методу параметр FULL=true, то получим все возможные методы на данным момент. Для того чтобы получить список платежных систем я так понимаю служит метод sale.paysystem.list, но при его вызове получаем ошибку sale.paysystem.list. Для получения списка платежных систем нужно иметь доступ к sale и pay_system. Но в списке уровней доступа нету этих пунктов. А раскуривать коды компонента добавить эти уровни чет уже и не хочется, сложно все это. Похоже, что все это абсолютно не пригодно к использованию.
Добрый день! Большое спасибо за данную статью. А можно ли где то найти более подробное описание данного модуля? Тоже стоит задача реализовать апи, только обращение к сайту будут идти с внешнего сервера. В данном случае с приложения для Windows( НЕ Битрикс24:) ). Или может сможете подсказать более верное решение?
Шевченко Вячеслав, здравствуйте! Помогите, пожалуйста, подключить api на сайте.
По вашей рекомендации добавил bitrix:rest.marketplace.localapp на странице(пробовал и в админку и в публичку). Форма выводится, но при нажатии на кнопку "Добавить" просто обновляется страница.
Этот способ ещё не устарел?
Сообщение вы написали в 2018 году, сейчас 2021, доки по api в бус так и нет 🤦♂️
echo "hello from mail.com.ru." | msmtp --debug -a site.ru test@site.ruгде site.ru - значение account в конфиге .msmtprc
пример конфига для яндекса
# smtp account configuration for site.ru account site.ru logfile /home/bitrix/msmtp_site.ru.log host smtp.yandex.ru port 587 from noreply@site.ru keepbcc on auth on user noreply@site.ru password *********** tls on tls_starttls on tls_certcheck off
Не помогают вариации настроек главного модуля для отправки почты и т.д.
Укажите тут /bitrix/admin/settings.php?lang=ru&mid=main&tabControl_active_tab=tab_mail&back_url_settings= "Дополнительный параметр для передачи функции mail:" -a site.ru (см. скрин)
Чтобы гуглю было проще искать: SUCCESS_EXEC='F' , b_event, не работает почта msmtprc
была у меня в закладках хорошая статейка, а щас вот открыл - а ее нет:( хорошо, хоть у гугла есть сохраненная копия страницы. автор, простите за репост без подписи ...
В веб-окружении Битрикса по-умолчанию стоит msmtp для отправки писем. Если ваш домен привязан к Яндекс.Почте для домена, и вы хотите отправлять почту через реально существующий почтовый ящик с авторизацией, вам придётся внести в файл конфигурации некоторые изменения, чтобы всё работало хорошо.
Файл /home/bitrix/.msmtprc:
account default
logfile /var/log/msmtp.log
host smtp.yandex.ru #(smtp.gmail.com - для гугла) #
port 587 # именно этот порт! #lkz гугля рекомендуют ставить 465, хотя в просторах сети читал, что и 587 подходит ...#
from robot@domain.ru
keepbcc on
auth on
user robot@domain.ru
password <password>
tls on
tls_starttls on # обязательно для Яндекс.ПДД
tls_certcheck off
И не задавайте слишком длинных паролей.
P.S: при работе с GMail вторую строку (tls_starttls) наоборот включать не нужно.
UPDATE 2014-09-08
полный файлик с настройками для gmail:
account default
logfile /var/log/msmtp.log
host smtp.gmail.com
port 587
from user@gmail.com
auth on
user user@gmail.com
password password
tls on
tls_starttls on
tls_certcheck off
keepbcc on
для корректности настройки можно выполнить из сервера команду:
php -r "mail('test@email.com', 'Test', 'Test');"
UPDATE 2014-12-02
Для проверки из сайта, в командную строку можно ввести код:
if (mail("moe_mylo@gmail.com","test subject", "test body","From: otpravitel@bitrix.ru"))
echo "Сообщение передано функции mail, проверьте почту в ящике.";
else
echo "Функция mail не работает, свяжитесь с администрацией хостинга.";
Только email-адресы ставьте ваши
P.P.P.S Перенес инструкцию (вместе с дополнениями) себе на сайт
Похоже отправка через Яндекс накрылась (по крайне мере у нас так - работала годами, теперь - всё - Яндекс против, что слегка завуалированно следует из ответа их техподдержки ). Настроил Гугл - работает, посмотрим, насколько долго это продлится .
В Битриксе, начиная с версии 7.1.3, появилась возможность переопределить стандартный механизм отправки почты.
Когда может быть полезен такой финт ушами? К примеру, когда в конторе есть какой-то централизованный сервис отправки почты, который должны использовать все приложения (SMTP-сервер на другой машине, веб-служба, что угодно). Для примера, рассмотрим GMail в качестве такого сервиса.[spoiler]
Механика простая: везде, где должна вызываться функция mail(), вызывается bxmail(). А уже в этой функции, перед вызовом стандартной функции mail(), Битрикс проверяет, определена ли функция custom_mail() и, если да, вызывает её вместо mail(). Соответственно, чтобы переопределить механизм отправки, нужно всего лишь написать функцию custom_mail() (в /bitrix/php_interface/init.php, к примеру (если хотим, чтобы такой механизм отправки действовал для всех сайтов на данной копии)).
Приступим к делу! Лично мне для отправки почты через GMail ближе всего Zend_Mail, но... Ни эта библиотека, ни другие не позволяют установить "сырые" заголовки для письма. А разбирать $additional_headers мне что-то не очень хочется. Следовательно, выбор перепадает на PEAR::Net_SMTP, как на механизм прямой работы с SMTP-сервером.
Итак, ближе к коду!
require_once 'Net/SMTP.php';
/**
* Отпраляем почту через SMTP-сервер GMail (пользователь: user@gmail.com).
*
* @see CEvent::HandleEvent()
* @see bxmail()
*
* @param string $to Адрес получателя.
* @param string $subject Тема.
* @param string $message Текст сообщения.
* @param string $additionalHeaders Дополнительные заголовки передаются Битриксом почти всегда ("FROM" передаётся здесь).
*
* @return bool
*/
function custom_mail($to, $subject, $message, $additionalHeaders = '')
{
/*
* Настройки можно (нужно) вынести в админку, но это уже домашнее задание :)
*/
$smtpServerHost = 'ssl://smtp.gmail.com';
$smtpServerHostPort = 465;
$smtpServerUser = 'user@gmail.com';
$smtpServerUserPassword = 'password';
if (!($smtp = new Net_SMTP($smtpServerHost, $smtpServerHostPort))) {
return false;
}
if (PEAR::isError($e = $smtp->connect())) {
return false;
}
if (PEAR::isError($e = $smtp->auth($smtpServerUser, $smtpServerUserPassword))) {
return false;
}
preg_match('/From: (.+)\n/i', $additionalHeaders, $matches);
list(, $from) = $matches;
$smtp->mailFrom($from);
$smtp->rcptTo($to);
/*
* Получаем идентификатор конца строки у Битрикса.
*/
$eol = CAllEvent::GetMailEOL();
$additionalHeaders .= $eol . 'Subject: ' . $subject;
if (PEAR::isError($e = $smtp->data($additionalHeaders . "\r\n\r\n" . $message))) {
return false;
}
$smtp->disconnect();
return true;
}
Вынесение настроек в админку, создание статического объекта соединения (чтобы не тратить время при отправке множества писем за раз) — это всё задания на дом
Добрый день. Запутался маленько, получается с помощью данного механизма можно разделить почту по типам. В стиле информация о задачах с 1 почты, информация о событиях календаря с другой?
CRM-формы - инструмент, который многим знаком не понаслышке, в том числе и разработчикам Bitrix24. Порой на сложных сайтах приходится не просто передавать в CRM то, что вобьет в полях формы посетитель, но и различную дополнительную информацию.
Вопросов с тем, как передать в Bitrix24 значения полей, которые не размещены на этой форме, не возникает, это доходчиво описано вот здесь - https://helpdesk.bitrix24.ru/open/6200265/. Непонятно было, как это сделать, если вебформа уже подгружена, а нужные значения вдруг претерпели изменения в процессе действия посетителя сайта.
Конкретный пример на сайте https://dia-box.ru - карточки товаров закрываются без перезагрузки страницы, открываются новые, а форма для передачи заявки на товар, в обязанности которой входит донести до CRM, какой именно товар имеется в виду - уже подгружена.
Осталось скрестить одно с другим - передавать в функцию, которая обновляет параметры для загрузки формы, и пресеты, и значения полей. И вызвать при клике на кнопку.
Итак, функция для переопределения параметров CRM-формы приняла такой вид (добавлены пресеты и значение для полей):
Эти переменные определяются при загрузке карточки товара. По клику на кнопку они передаются в функцию, которая переделывает форму, как в примере выше по ссылке
var reinitForm = function (presets, fields) {
if(!window.Bitrix24FormObject || !window[window.Bitrix24FormObject])
return;
if(!window[window.Bitrix24FormObject].forms)
return;
Bitrix24FormLoader.unload(b24paramsload);
b24paramsload = initForm(presets, fields);
Bitrix24FormLoader.params = b24paramsload;
Bitrix24FormLoader.init();
Bitrix24FormLoader.showPopup(b24paramsload);
}
.......
//тем временем при загрузке карточки
presets = {"izdelie": ''+element.ITEM.NAME};
.......
BX.ready(function () {
BX.bind(
BX('portfolio_detail_form_open'),
'click',
BX.delegate(
function(e){
e.preventDefault();
//console.log(e); //посмотреть на Иван Иваныча
reinitForm(presets, {"values": { "LEAD_COMMENTS" : 'Хочу такое же - ' +presets.izdelie}});
}, this
)
);
});
Настройка CRM-формы и что получаем в результате (со всеми вытекающими):
У нас клиент заметил это обновление - все кнопки "купить/заказать" стали нерабочими. И документации толком никакой нет, записки блогеров только, ну кнопочку там какую нажать только можно узнать.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».