Александр Кунташов — про 1С и не только
2.46K subscribers
219 photos
10 videos
417 links
Заметки про разработку и смежные штуки: 1С, Vanessa Automation, DevOps в 1С, OneScript, PHP, Linux, JS, Python и всякое вокруг и около ИТ.
Download Telegram
Пытаюсь начать пользоваться Visual Studio Code вместо Sublime Text 3, но пока не все нравится.

Прежде всего визуально VSС более шумный: различные маркеры, пиктограммы файлов цветные, а хотелось бы монохромные. Подсветка фона текущей строки в режиме "line" одного цвета с фоном выделенного текста (пришлось переключить в режим "gutter").

Шаг размера шрифтов другой и я так и не смог сделать размер шрифта таким же, как и в Sublime - либо меньше получается, либо больше :(

Почему же пытаюсь перейти? Потому что он активнее сейчас развивается (как минимум в части поддержки OScript) и подавляющая часть сообщества сидит на нем.

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

И да, почему не atom? Да потому что в нем свистелок еще больше чем в VSC, и это уже точно не для меня.
https://1cfresh.com/articles/so_addprocess
Как добавить в 1С:Фреше расширение или внешний (дополнительный) отчет/обработку своим клиентам.
Куча требований, но ожидаемо: безопасность.
https://github.com/fzaninotto/Faker

Крутая библиотека для генерации случайных данных (ФИО людей, адреса, параметры кредитных карт и т.п.). Крайне полезна для создания тестовых наборов данных (фикстур).

Давно собирался сделать аналог для 1С, возможно в новогодние праздники удастся посвятить этому несколько часов.
#SublimeText vs #VSCode

VSC в очередной раз не прошел испытание исходниками РМС :(

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

На VSC то и дело подтупливает, хотя я phpcs отключил (а в Саблайме у меня линтер подключен!). Правда поставил в VSC плагин Intelliphense, т.к. без него автодополнение php не работает (в саблайме работает без плагинов).

Плюс много мелких неудобств, связанных с поведением редактора и плохая контрастность темы Solirized Light по сравнению с Саблаймом заставили вернуться к последнему.

Сдаюсь в третий раз :)
Саблайм, прости, ты лучший!
Рубрика #СекретыБитрикс24

Почему изменения счета в Б24 могут не загружаться в 1С?

При обмене счетами с 1С изменения счетов, сделанные в Б24, в 1С будут загружены только если в 1С у соответствующего заказа статус "Ожидается согласование".

Если статус другой, то изменения не будут загружены, т.к. любой статус заказа, отличный от указанного трактуется как "закрытый" статус. В принципе, это логично. Статусы "Закрыт" и "Отменен" - очевидно не требуют загрузки. Статус "К выполнению" означает, что заказ принят в работу и его изменение будет чревато какими-либо ошибками: например, заказ начали собирать на складе. Или в случае, если условия расчетов требуют предоплаты/аванса, то статус "К выполнению" будет означать, что эти условия выполнены, т.е. поступила оплата.

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

Кстати, обратно изменения из 1С в Б24 выгружаются безусловно, но с этим тоже есть особенность: если в табличной части Товары в заказе 1С скопировать (продублировать) строку, то будет загружена только самая последняя! Это скорее баг компоненты импорта Битрикс24, чем фича и точно не баг 1С. Впрочем, это неприятное поведение можно обойти, избавившись на стороне 1С от дублей в табличной части.
#СекретыБитрикс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 в качестве БД.