Александр Кунташов — про 1С и не только
2.47K subscribers
219 photos
10 videos
417 links
Заметки про разработку и смежные штуки: 1С, Vanessa Automation, DevOps в 1С, OneScript, PHP, Linux, JS, Python и всякое вокруг и около ИТ.
Download Telegram
#СекретыБитрикс24

Про важность настройки нумерации счетов в Б24 для обмена с 1С

При использовании штатного модуля 1С "Обмен с сайтом" для настройки обмена счетами между 1С и Битрикс24 важно помнить, что длина номера счета на стороне Б24 с учетом всех префиксов должна быть не более 11 символов. В противном случае правая часть номера будет обрезаться и если счет на стороне Б24 будет изменен, то вместо обновления ранее загруженного счета в 1С вы получите новый счет.

Напомню также, что Б24 при обмене с 1С к номеру для печати счета в Б24 добавляет префикс, который указывается в настройках обмена [1] и по умолчанию это "CRM_", т.е. целых 4 символа. А еще вы могли настроить префиксацию номера счета в настройках нумерации счета [2], что также "съест" разрядность значимой части номера.

Пример:
Допустим, вы хотите, чтобы печатные номера счетов в Б24 были максимально похожи на печатные номера счетов в 1С:УТ11
И вы настраиваете в Б24 5-значный префикс "как в 1С", например "BX24-"
Тогда вы получаете в Б24 у первого счета номер "BX24-1", а у сотого - "BX24-100".

Если у вас в настройках "Префикс номера счета при выгрузке" [1] установлен по умолчанию
Тогда в выгрузку в 1С попадут номера "CRM_BX24-1" и "CRM_BX24-100" соответственно, и как видите, второй из них уже имеет длину 12 символов, а значит в 1С при выполнении поиска ранее загруженных документов он превратится в "CRM_BX24-10", т.к. будет обрезан справа до 11 символов.

Как уменьшить риски возникновения проблемы или избавиться от нее (если она возникла)?

1. Без доработок: очистить значение "Префикс номера счета при выгрузке" [1] или сделать его короче. Необходимость в нем есть только если вам нужно в одну базу 1С загружать счета из разных порталов Б24. Этот префикс (если на разных порталах он будет разный) обеспечивает уникальность номеров счетов из кадого портала. Кстати, это можно обеспечить и включанием префиксации в настройках нумерации счета [2] (префиксы на разных порталах конечно же должны быть разными). Если же портал у вас один, то этот префикс вам не нужен.

2. С доработками: в общем модуле "ОбменССайтом" в функции "ЗагрузитьЗаказы" увеличить в объявлении таблицы НомераИДатыЗаказов длину значения колонки "НомерЗаказа" до необходимого значения (по идее длина этой колонки должна соответствовать максимальной длине значения дополнительного реквизита, выбранного в настройке "Номер заказа на сайте" в узле плана обмена с сайтом).

Сноски:
[1] Путь в интерфейсе Б24: CRM - Настройки - Интеграции - Интеграция с 1С:Предприятие - Настроить синхронизацию счетов - поле "Префикс номера счёта при выгрузке"
[2] Путь в интерфейсе Б24: CRM - Настройки - Другое - Прочие настройки - Номера счетов
#СекретыБитрикс24

Про особенность совместной работы модуля обмена счетами и 1С-трекера

Модуль для обмена счетами между Битрикс24 и 1С создает в 1С новых контрагентов, но не умеет выгружать контрагентов из 1С в Битрикс24.
А модуль 1С-трекер для 1С не умеет загружать новых контрагентов в 1С, но умеет экспортировать контрагентов из 1С в Битрикс24.

Логично захотеть использовать оба этих модуля вместе, чтобы вновь созданные в Б24 контрагенты попадали в 1С, а изменения, сделанные в 1С выгружались обратно в Б24.

Но, к сожалению, эта мечта без доработок не реализуема:

1С-трекер при выгрузке контрагентов в Б24 у Компаний и Контактов заполняет служебные реквизиты:

* ORIGIN_ID = уникальный идентификатор ссылки 1С
* ORIGINATOR_ID=1C
* ORIGIN_VERSION (возможно) - ВерсияОбъекта 1С

и именно по этим реквизитам выполняет поиск при синхронизации (при повторных выгрузках из 1С).

Но при создании компании/контакта непосредственно в Б24 эти поля там не заполняются (и понятно, эти элементы же не из 1С).
В результате получаем такую картину:

1. Новый контрагент, допустим "Рога и копыта", создается в Б24, выписывается счет
2. Счет загружается в 1С, и поскольку в 1С контрагента "Рога и копыта" не было, он создается.
3. При запуске выгрузки контрагентов при помощи 1С-трекера он не находит по сочетанию ORIGIN_ID+ORIGINATOR_ID в Б24 компанию "Рога и копыта", а поэтому создает новую, у которой и заполняет соответствующие реквизиты.

В результате у нас в Б24 теперь две компании "Рога и копыта".

Как заставить работать оба модуля совместно без дублирования контрагентов?

1. Без доработок: можно попробовать регулярно в Б24 запускать процедуру поиска и объединения дублей компаний и контрагентов.
Но нет уверенности что поможет (сам не проверял этот вариант, т.к. всегда реализую именно второй).

2. С доработками: нужно "научить" модуль "Обмен с сайтом" заполнять ORIGIN_ID, ORIGINATOR_ID и ORIGIN_VERSION для тех контрагентов, которые были в 1С созданы при загрузке счетов. Делать это придется при помощи REST API.
#Битрикс

Повышение нагрузки на сайт на Битриксе из-за множества обращений к ресурсу /bitrix/rk.php

Последнее время зачастились фишинговые атаки на Битрикс через битриксовый скрипт /bitrix/rk.php для учета переходов по баннерам вот по такой схеме: https://pr.do.am/news/baza_trastovykh_sajtov_kak_samomu_prognat_sajt_besplatno/2014-03-23-250

Симптомы такой атаки - постоянная повышеная нагрузка на ваш сервер, при этом в access log веб-сервера будет много обращений вида

GET /bitrix/rk.php?goto=https://example.com HTTP/1.0

где в качестве https://example.com будут различные не известные вам адреса.

В Битриксе есть встроенная защита от этой атаки - настройка "Защита от редиректов" в модуле "Проактивная защита" [1]. Но если оставить настройки этой защиты по умолчанию, то можно получить DoS-атаку на mysql, т.к. каждую попытку атаки модуль Проактивная защита будет записывать в Журнал событий (event log).

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

Сноски:
[1] В админке Битрикса: Настройка - Проактивная защита - Защита от редиректов - Включить защиту от редиректов
https://habrahabr.ru/company/yandex/blog/345044/

Яндекс.Трекер = Ya.Tracker = Yet Another [Issue] Tracker

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

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

Кстати, Битрикс24 как раз создает отдельный инстанс под каждую организацию, и вроде не страдают от большей себестоимости такого решения.
#Codeception #Тестирование

https://davertmik.github.io/slides-testing-architecture/

Презентация от автора Codeception об архитектуре тестирования.

Резюме: тесты должны быть читабельными (сосредотачиваться на бизнес-логике, избегать моков, где возможно, в случае приемочных - проверять позитивные сценарии), стабильными (быть независимыми друг от друга, использовать собственные наборы данных) и быстрыми (не более 20 секунд на выполнение одного теста, не более 20 минут на запуск всех тестов на CI).
https://dev.1c-bitrix.ru/api_help/sale/algorithms/index.php
#БитриксУправлениеСайтом
Описание алгоритмов взаимодействия учетной системы и 1С-Битрикс. Управление сайтом при обмене данными (алгоритмы выгрузки и загрузки данных, алгоритм обмена в режиме "реального времени"). Актуально прежде всего для битриксового модуля обмена, а первые два пункта - и для модуля "Обмен с сайтом", встроенного во все типовые конфигурации 1С.
#СекретыБитрикс24

Особенности выгрузки статусов "Отгружен" и "Оплачен" из 1С в Битрикс24

Статус "Отгружен" и "Оплачен" модуль обмена на стороне 1С вычисляет по наличию документов оплаты/отгрузки, введенных на основании Заказа клиента (аналог счета Б24 в 1С), т.е. вручную в документе "Заказ клиента" его поменять нельзя. Если говорить о технических деталях, то никакого статуса оплаты/отгрузки на самом деле не выгружается, а выгружается информация о наличии документов отгрузки и документов оплаты при условии, что оплата или отгрузка выполнены на 100% (например, частичная оплата не выгружается, мы с вами это в личной переписке обсуждали, причем, кажется, вы сказали, что реализовали выгрузку статуса частичной оплаты по алгоритму, который я вам рассказал, я ошибаюсь?).

При получении информации о наличии документа отгрузки в 1С Б24 устанавливает статус, указанный в настройках обмена счетами в Битрикс24 "Статус, в который переводить счёт при получении отгрузки от "1С:Предприятие" (CRM - Настройки - Интеграция - Интеграция с 1С:Предприятием - Настроить синхронизацию счетов с 1С).

Есть еще одна особенность: статус отгрузки всегда загружается битриксом в последнюю очередь. С учетом того, что статусы у счетов последовательны, то если вы отгружаете в кредит и сначала заказ 100% отгружен, но в настройке "Статус, в который переводить счет..." вы укажете какой-то промежуточный статус (например, создадите свой статус "Товар отгружен"), то при поступлении оплаты в 1С и последующей загрузке в Б24 у вас статус счета будет не "Оплачен" (счет закрыт), а "Товар отгружен". А в истории счета вы увидите цепочку статусов "Товар отгружен" - "Оплачен" - "Товар отгружен".
https://habrahabr.ru/company/itsumma/blog/345976/
Пора пробовать rkt? Или опенсорс вырулит?
Все-таки докер максимально дружественен к пользователю, очень будет жаль, если его похоронят вот так вот.
https://hyper.is/
#devtools

Открыл для себя эмулятор терминала Hyper, реализованный на веб-ките при помощи js/html/css.
Выглядит здорово, но пока в работе активно использовать не успел - буду пробовать.

На старте столкнулся с тем, что некорректно отображал кириллицу, решилось добавлением в ~/.config/fish/config.fish строк:

set -x LC_ALL ru_RU.UTF-8
set -x LANG ru_RU.UTF-8
set -x LC_CTYPE ru_RU.UTF-8


Ну и еще в текущей версии, которая лежит в официальном репозитории Debian нет контекстного меню, но его заменяет гамбургер-меню (которое в линуксе по умолчанию отключено; включается в конфигурационном файле ~/.hyper.js)
#hyper

Ввязался в расследование бага с темой для Гипера: см. https://github.com/zeit/hyper/issues/294#issuecomment-357339391 и https://github.com/zeit/hyper/issues/294#issuecomment-357375621

Для себя уже поправил, форкнув (https://github.com/kuntashov/hyper-solarized-light/tree/xterm-colors), но раз потрачено на исследование пару часов, то хочется разобраться в причине, надеюсь кто-нибудь из разработчиков прокомментируют.
#СекретыБитрикс24

Не выполняется обмен Б24 с 1С с нужной периодичностью. Почему и что делать?

Проблема: В файловой версии 1С настроенный по расписанию обмен с Битрикс24 не выполняется в первой половине дня, но выполняется во второй. Расписание - запуск обмена раз в 5 минут.

В файловой версии 1С регламентные задания выполняются в рамках отдельного клиентского сеанса 1С (по умолчанию, в сеансе того пользователя, кто зашел в базу первым, см. https://v8.1c.ru/o7/201305fi/index.htm) и - обратите внимание - в один момент времени выполняется одно регламентное задание (порядок выполнения не определен, считайте - произвольный).

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

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

Лучшим решением конечно будет перейти на клиент-серверную версию 1С - в ней регламентные задания выполняются параллельно и агентом сервера, а не в пользовательском сеансе. Если у вас одновременно работающих пользователей в 1С не более 5, то есть бюджетный вариант - мини-сервер 1С на 5 пользователей + бесплатная PostreSQL в качестве БД.
Скайп - пожалуй, одно из самых ужасных приложений Микрософта.

Под линуксом - точно. Много лет пользуюсь Linux Mint, в настоящий момент у меня релиз 17.3 Rosa, который базируется на Ubuntu 14 Trusty. Я редко пользуюсь скайпом и у меня была установлена какая-то древняя версия.

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

Но, как уже можно догадаться, он не заработал. Точнее так, я его успешно установил из официального пакета Микрософта, но голос и видео не работали. У меня и раньше время от времени были проблемы со звуком, и я отложил разборки на выходные, т.к. разговор клиент перенес на понедельник.

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

Погуглил и получил более, чем исчерпывающий ответ: https://answers.microsoft.com/en-us/skype/forum/skype_linux-skype_startms-skype_installms/upgraded-to-the-latest-skype-linux-version-but

В общем, проблема массовая для пользователей Debian, Ubuntu, Mint'а. У разных людей работают разные решения:

* кому-то помог запуск под рутом (sudo /usr/share/skypeforlinux/skypeforlinux)
* кому-то помог откат до версии 8.11 (sudo apt-get install -y skypeforlinux=8.11.0)
* кому-то помог многократный запуск (skypeforlinux; skypeforlinux)
* кому-то помогла задержка перез запуском скайпа (sleep 30; env PULSE_LATENCY_MSEC=30 skypeforlinux)

У меня заработал третий вариант - но с поправкой: вызывать скайп нужно трижды ("Сне-гу-роч-ка! Сне-гу-роч-ка! Сне-гу-роч-ка!"). Интерфейс скайпа тогда загрузился, но делать вызовы я так и не смог: кнопки не нажимаются (ну или ничего не происходит при нажатии).

В итоге я сначала попробовал веб-версию скайпа (https://web.skype.com) и в ней как оказалось звонки работают. Удивительно, что не работает skypeforlinux, ведь это судя по комментариям - та же веб версия, просто обернутая в десктопное приложение (вроде бы это веб-кит).

Там же на форуме поддержки нашел альтернативу для десктопа - Ghetto Skype (https://github.com/stanfieldr/ghetto-skype) и в ней тоже все ок, правда как может быть иначе - это по сути та же веб-версия, "обернутая" в Electron.
#hyper #fish
В Гипере с темой Solirized Light стало не видно автоподсказку для дополнения в fish. В xterm эта подсказка выводилась серым цветом.

По исходникам fish нашел, что цвет автоподсказки задается в переменной окружения fish_color_autosuggestion, в которой нужно указать hex-код цвета (как в CSS, только без #).

Задал новый цвет командой set -x fish_color_autosuggestion 839496 и все заработало.
Можно ли интегрировать облачную Бухгалтерию предприятия (1С:Фреш) с облачным Битрикс24?
#СекретыБитрикс24

Штатно в Бухгалтерии нет модуля "Обмен с сайтом", значит настроить обмен счетами штатными средствами между 1С и Б24 нельзя.

Функционал конфигураций на технологии 1С:Фреш можно кастомизировать только при помощи внешних обработок и/или расширений.

1С-трекер (выгрузка контрагентов из 1С в Б24) требует внедрения в конфигурацию, поэтому его нельзя установить.

Единственная штатная интеграция, выпущенная 1С-Битриксом, доступная сейчас в виде расширения, это Экспорт печатных форм и отчетов (https://1c.1c-bitrix.ru/intranet/download.php?id=6790661), теоретически (на практике я пока пытался этого сделать), это расширение можно установить в облако Фреш (я имею в виду https://1cfresh.com/, а не частное облако 1С:Фреш).

Как добавить расширение в облаке 1С:Фреше описано здесь: https://1cfresh.com/articles/so_addprocess

Есть возможность запустить приложение 1С:Фреш внутри Битрикс24. Это не совсем полноценная интеграция, приложения так и остаются независимыми просто 1С запускается внутри интерфейса Б24, тем не менее, кому-то может подойти: https://www.bitrix24.ru/apps/?app=bitrix.1cfresh

Ну и, наконец, есть вариант - написать для интеграции свое расширение для 1С (или внешнюю обработку), используя REST API Битрикс24.
#СекретыБитрикс24

Исходный вопрос: все привет. кто-то может подсказать пример получения всех, а не 50 элементов? я знаю, что есть метод batch, никак не пойму как правильно его использовать.
Если вообще, то выборка элементов порционная, по 50 элементов. В ответе вместе с первыми 50 элементами будет еще свойтво next . Для получения очередной порции данных нужно повторить исходный запрос добавив еще параметр start, значением у которого указать значение, полученное в next.

Если на js, то в битриксовой JS-библиотеке для работы с REST API у полученного result есть методы more() и next() которые реализуют описанный выше алгоритм "автоматически". Пример есть здесь: https://dev.1c-bitrix.ru/rest_help/crm/company/crm_company_list.php

Пакетным (батч) - запросом теоретически можно (на практике не делал), но его нужно формировать динамически (количество запросов в пакете будет КоличествоЭлементов в списке всего / 50). Значение next из предыдущего запроса нужно будет передавать как start = $result[qN-1][next], где qN-1 - идентификатор предыдущего запроса.