Size: a a a

SilverBulleter's, LLC

2021 September 30
SilverBulleter's, LLC
⚙️ Релиз 2021.6 плагина 1C (BSL) Plugin для SonarQube

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

Что нового?

➡️ Выпустили 7 новых правил проверки кода. Среди них проверка Метод недоступный в веб-клиенте (UnavailableWebClientMethod), которую мы реализовали с помощью контекста выполнения методов.

➡️ Добавили поддержку разыменования предопределенных значений в грамматике языка запросов. Например, (ЗНАЧЕНИЕ(Справочник.ТипыНМЦ.ПризнаниеПредметаАрендыППА)).МодульПоУмолчанию КАК Модель.

➡️ Расширили описания проверок профиля качества Безопасность.

Полный перечень изменений смотреть здесь ➜ 📄 История релизов.
источник
2021 October 06
SilverBulleter's, LLC
☄️ Плагин 1C (BSL) Plugin для SonarQube.

Корректное использование функции СтрШаблон

Функция СтрШаблон крайне полезная функция, которая появилась в платформе 1С: Предприятие начиная с версии 8.3.6. Она позволяет удобно сформировать строку подставляя переменное количество параметров.

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

Подробнее о правильном использовании СтрШаблон читайте в нашем ➜ блоге.
источник
2021 October 08
SilverBulleter's, LLC
🛠 Релиз 1.10.0 встраиваемой подсистемы 1С для обмена сообщениями с промышленными серверами событий (Event Servers Binder)

Что нового?

Основная подсистема
* в поставку включена подсистема в виде расширения

Взаимодействие с Kafka
* настройка подключения для каждого подписчика
* работа с заголовками сообщений
* управление смещением в разделах
* обмен двоичными данными

Взаимодействие с RabbimMQ
* работа с заголовками сообщений
* работа с заголовками точек обмена
источник
2021 November 03
SilverBulleter's, LLC
☄️ Проверка качества кода 1С: Опечатки в текстах запросов

Чем плохи опечатки в текстах запросов? Они могут привести к различным проблемам:

* более сложный поиск и рефакторинг кода;
* ошибки "Поле объекта не обнаружено ..." при работе с выборкой результата запроса;
* метод ЗаполнитьЗначенияСвойств пропустит нужные свойства.

Рассмотрим фрагмент кода:

Запрос = Новый Запрос;
Запрос.Текст =
   "ВЫБРАТЬ
 |  ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)        КАК ВидДвижения,
 |  Источник.Период                               КАК Период,
 |  Источник.Регистратор                          КАК Регитсратор // <--- опечатка
 |ИЗ
 |  РегистрНакопления.НДСЗаписиКнигиПокупок КАК Источник";    

// ... получение результата в Выборка

Для Каждого Запись Из ЗаписиДляМодификации() Цикл                        
   // свойство Регистратор не будет заполнено                
 ЗаполнитьЗначенияСвойств(Запись, Выборка[0], "Регистратор, Период");
КонецЦикла;

В момент заполнения каждой Запись не будет заполнено поле Регистратор из-за опечатки в псевдониме Регитсратор.

Как этого можно было избежать?

* быть внимательнее при написании псевдонимов и проводить code-review;
* тестировать доработки с помощью Vanessa ADD / Vanessa Automation;
* использовать статический анализ кода - SonarQube + 1C (BSL) Plugin.

P.S. небольшой пример реального срабатывания🧐
источник
2021 November 04
SilverBulleter's, LLC
Митап с Артемом Кузецовым "Как НЕ сгореть на обновлениях" уже завтра, в 19:00.


Будем транслировать практикум, где Артем на конкретном примере покажет  методику обновления сильно доработанной типовой конфигурации.

К трансляции можно подключиться по ссылке.

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

Делитесь ссылкой с друзьями, тема крутая и полезная!
YouTube
Обновление нетиповой 1С 8.3 от профессионала. Новый метод обновления 1С.
Все еще обновляете 1С 8.3 по старинке? А может и не знаете как обновить 1С? Вот вам новый метод обновления нетиповых конфигураций.
Сразу скажу, что метод сложный и подходит только для профессионалов, кому постоянно приходится обновлять сильно доработанные 1C конфигурации. Зато один раз научившись, сократите время на обновление 1С в разы.

Тайм-коды:
00:00:00 Вступление
00:04:57 Какие проблемы есть при стандартном процессе обновления 1С
00:06:10 Что будет на вебинаре и чего НЕ будет
00:07:10 Правила доработки типовых конфигураций 1С
00:08:35 Почему стоит обновлять 1С через GIT
00:09:08 Основной процесс при обновлении 1С
00:10:45 Интерфейс SourceTree - загружаем 1С конфигурации
00:14:25 Объединяем ветки
00:15:15 Анализ конфликтов слияния
00:16:40 Ключевые точки обновления 1С
00:16:54 Где взять конфигурацию поставщика (используем YARD)
00:20:45 Создаем ветки автоматически (используем Rector)
00:23:10 Решение конфликтов объединения 1С конфигураций (используем kdiff)
00:31:00 Почему важно сравнивать по процедурно…
источник
2021 November 08
SilverBulleter's, LLC
⚙️ Релиз 2.0.0 библиотеки Vanessa.Usher для Jenkins

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

Для тех кто еще не знает, Vanessa.Usher - это библиотека автоматизации сборочного цикла для 1С в Jenkins, поставляется в виде shared library.

В чем отличие от версии 1.х?

* настройка pipeline через json-файл;
* теперь используется объектная модель и скрипты;
* появилось матричное тестирование (beta).

Основные возможности библиотеки:

* экспорт истории хранилища 1С в git проект
* конвертация исходного кода из формата EDT в XML формат конфигуратора
* подготовка окружения и проверка обновления информационнойбазы
* синтаксическая проверка конфигурации
* статический анализ кода в SonarQube
* TDD тестирование
* BDD тестирование
* публикация отчетов тестирования в форматах Allure и jUnit
* сборка поставки конфигурации
* отправка уведомлений на email или в Slack

А вы используете shared library?😃
источник
2021 November 10
SilverBulleter's, LLC
☄️ Проверка качества кода 1С

Функция должна заканчиваться возвратом

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

Можно написать такой код:

Функция Тест()
 Сообщить("Привет, мир!");
КонецФункции

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

Функция Тест()
 Сообщить("Привет, мир!");
 Возврат Неопределено;
КонецФункции

Что же в этом плохого? К сожалению, такое заботливое поведение может "подложить свинью" в случаях, когда программист ошибся в логике своего кода. Например:

// Определяет один из банковских счетов организации.
//
// Параметры:
//   Организация - СправочникСсылка.Организации - организация;
//   Банк - ОпределяемыйТип.БанкОбменСБанками - банк.
//
// Возвращаемое значение:
//   СправочникСсылка.БанковскиеСчета - банковский счет.
//
Функция БанковскийСчет(Знач Организация, Знач Банк)
 
 МассивБанковскихСчетов = Новый Массив;
 ПолучитьБанковскиеСчета(Организация, Банк, МассивБанковскихСчетов);
 Если МассивБанковскихСчетов.Количество() Тогда
   Возврат МассивБанковскихСчетов[0];
 КонецЕсли;
 
 // Здесь вернется Неопределено!
КонецФункции

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

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

Функция БанковскийСчет(Знач Организация, Знач Банк)
 
 МассивБанковскихСчетов = Новый Массив;
 ПолучитьБанковскиеСчета(Организация, Банк, МассивБанковскихСчетов);
 Если МассивБанковскихСчетов.Количество() Тогда
   Возврат МассивБанковскихСчетов[0];
 КонецЕсли;
 
 Возврат Справочники.БанковскиеСчета.ПустаяСсылка();
КонецФункции

Как этого можно было избежать:

* не верить всему, что написано в документации к методу и лично проверять, что возвращает функция;
* тщательно тестировать свои доработки/исправления. Даже если у вас нет автотестов или QA, разработчик не должен лениться самостоятельно запустить и проверить свою доработку;
* использование статических анализаторов/линтеров, которые могут в автоматическом режиме проверить все возможные варианты возврата из функции и указать на упущенные кейсы.

P.S. Что может пойти не так в этом коде ? 😃
источник
2021 November 11
SilverBulleter's, LLC
🛠 Знакомство с КафкаКоннектор версии 1.0

"Мы строили, строили и наконец построили. Ура!" (с)

Этап R&D закончился и мы готовы представить нашу новую подсистему - КафкаКоннектор. Эта подсистема 1С предназначена для быстрой организации обмена между 1С + 1С / ЧтоТо, используя распределенный брокер сообщений Apache Kafka. Взаимодействие с брокером сообщений организовано с помощью внешней нативной компоненты "Apache Kafka для платформы 1С".

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

Пара примеров интерфейса:
* настройка подключения к кластеру Kafka
* настройка синхронизации объекта и его "схема"

Почему за основу транспорта сообщений выбран именно Apache Kafka?

* возможность хранения сообщений после их получения;
* тонкая настройка под каждый поток данных;
* масштабирование из "коробки";
* высокая пропускная способность.

Сейчас в подсистеме есть:

* регистрация объектов для обмена (справочники, документы, записи регистров);
* построение схем данных по выбранным объектам обмена;
* автоматический обмен и обновление схем данных;
* настройка регламентных заданий отправки/получения;
* ведение журнала отправленных/полученных сообщений.

В планах на следующие релизы:

* поддержка Avro формата;
* кастомное создание topic прямо из 1С;
* поставка подсистемы в виде расширения (регламентные задания тоже будут работать 😉 );
* интеграции из "коробки":
 * версионирование  истории изменения объектов;
 * логирование.
* мониторинг через Zabbix / Prometheus.

❗️По всем вопросам пишите нам на b2b@silverbulleters.org или в Intercom на нашем сайте.

P.S. А сколько вы тратите времени на внедрение обмена данными? 🧐
источник
2021 November 15
SilverBulleter's, LLC
💼 Разыскивается младший релиз-инженер

Полная занятость, полный день
Удаленная работа / работа в офисе
Зарплатная "вилка": ₽110-160 тыс.

❗️В нашу "не типичную" команду мы ищем младшего релиз-инженера. Тебе, наш дорогой друг, придется автоматизировать все, что "движется", а все, что не "движется" - толкать и тоже автоматизировать. А теперь более подробно😉.

С чем придется работать

* Jenkins
* GitLab / GitLab CI
* OneScript
* Groovy
* Docker
* SonarQube

Как вы будете делать мир лучше

* участвовать в постоянном улучшении CI/CD;
* автоматизировать текущие процессы;
* взаимодействовать с разработкой в рамках подготовки релизов;
* участвовать в проектах внедрения инженерных практик 1С.

Мы ожидаем у вас

* опыт разработки на платформе 1С от 2-х лет;
* опыт разработки хотя бы на одном из языков Java / Groovy / Kotlin / TypeScript от 1 года (в OpenSource считается);
* уверенное владение git, командной строкой, bash / PowerShell;
* умение разбираться в чужом и своем коде;
* владение английским языком на уровне чтения технической документации.

Будет круто, если вы

* понимаете принципы CI/CD;
* уверенный пользователь Linux / Windows;
* разрабатываете на OneScript;
* следите за актуальными возможностями и способами применения инструментария разработки на стеке 1С.

Вам у нас понравится

* белая зарплата;
* удаленно или в удобном офисе в центре Москвы (5 минут от м. Фрунзенская);
* работа в команде «гиков»;
* график работы 5/2 (с 9:00 до 18:00 или с 10:00 до 19:00);
* испытательный срок 3 месяца.

✉️ Резюме отправлять на hr@silverbulleters.org
источник