1С: Запрет запуска дубля регламентного задания

Иногда бывает что регламентное задание нужно запускать как можно чаще, но вот в чём дело: при запуске есть вероятность что предыдущее задание еще не завершено. В результате они как матрешка будут всё расти и расти…ну и наверное в конце концов будет какой-то коллапс.

Решение: да простое. Просто перед запуском задания, убедимся что предыдущая копия уже отработала. Во первых, нужно у регламентного задания прописать ключ. А во вторых, непосредственно перед запуском объемной части задания, нужно проверять фоновые задания, и если задание с таким ключём в списке активных…то ничего далее не делать:

Функция ОтправитьДанныеИзПланаОбменаРегламентно()
	// проверим, а вдруг еще не завершено предыдущее регламентное задание?
	Фоновые = ФоновыеЗадания.ПолучитьФоновыеЗадания();    
    Для Каждого Фоновое из Фоновые Цикл        
        Если Найти(Фоновое.Ключ, "отправка_данных_шины") > 0 И Фоновое.Состояние = СостояниеФоновогоЗадания.Активно Тогда            
            Возврат 0;            
        КонецЕсли;                        
    КонецЦикла;	
...
КонецФункции

Открытие URL ссылки на 1с в Linux

Задача: необходимо чтобы при нажатии на URL вида: e1c://server/srv-1c/basename#e1cib/data/%D… автоматически открывалась 1С с открытым документом.

Решение: Linux открывает подобные ссылки в почте и прочих местах через утилиту xdg-open, которая в свою очередь открывает такие ссылки в т.ч. согласно ярлычкам *.desktop находящимся в  ~/.local/share/applications/. Следовательно достаточно разместить там файл с содержимым:

[Desktop Entry]
Exec=/opt/1cv8/common/1cestart /url %U
Name=1C:Enterprise x64
GenericName=1C:Enterprise x64
Terminal=false
TryExec=/opt/1cv8/common/1cestart
Type=Application
MimeType=x-scheme-handler/e1c
NoDisplay=true

И далее перечитать кэш связей протокола:

update-desktop-database ~/.local/share/applications

1С: Сброс пароля администратора в файловой БД

Рассматриваю вариант под ОС Linux. В некотором смысле это получается даже проще чем под Windows — не нужно искать никаких дополнительных утилит типа редактора HEX- всё уже есть «базе»

1) Открываем на просмотр в mc файл 1Cv8.1CD

2) Переходим в режим просмотра HEX — F4.

3) Ищем в режиме поиска в шестнадцатеричном формате сочетание 00 09 00 75 00 73

4) Заменяем 00 09 на 01 09, сохраняем изменения

5) Ищем 56 38 55 53 45 52 53 4D , заменяем 56 на 48

6) Открываем утилиту chdbfl из папки /opt/1cv8/x86_64/8.3.25.1445 (у вас папка другая конечно), и восстанавливаем базу.

После чего запускаем конфигуратор и входим без пароля

Пользовательское уведомление через шину gdbus

Команда:

gdbus call \
    --session \
    --dest org.freedesktop.Notifications \
    --object-path /org/freedesktop/Notifications \
    --method org.freedesktop.Notifications.Notify \
    --"identifier" "идентификатор сообщения" \
    "значёк уведомления" 
    "заголовок уведомления" \
    "описательная часть уведомления" \
    "['действие кнопки','название кнопки']" \
    "{подсказки}" \
    "время истечения уведомления в мс"

Пример использования:

gdbus call --session --dest org.freedesktop.Notifications --object-path /org/freedesktop/Notifications --method org.freedesktop.Notifications.Notify "test-notify-actions" "0" "gimp" "Test" "Нажми на кнопку, получишь результат" "['https://грибовы.рф','Перейти']" "{}" "0"

Как можно «ловить» реакции на нажатие кнопки сообщения:

gdbus monitor --session \
              --dest org.freedesktop.Notifications \
              --object-path /org/freedesktop/Notifications

Устранение ошибок Битрикс после обновления PHP до 8.2

Выпала задача обновить на одном из сайтов PHP с 7.3 до 8.2. на операционной системе RedOS. Далее что делал.

Обновление PHP

dnf install php81-release
dnf clean all
dnf makecache
dnf update php

Обновление БД

alter table b_iblock_element_property modify ID bigint not null auto_increment;

Далее необходимо из панели администратора обновить ядро и сторонние решения до актуальных версий.

После чего лично у меня стала вылезать ошибка вида:

count(): Argument #1 ($value) must be of type Countable|array, null given (0)
/var/www/html/bx-site/bitrix/templates/aspro-allcorp2/components/bitrix/news.detail/services/component_epilog.php:21

На строки в коде вида:

<?if(count($templateData['GALLERY_BIG'])):?>

А всё просто. Если в PHP 7.3 допустимо было так обращаться к переменным не являющимися массивами, то в PHP 8.2, где введено более строгое отношение к типизации, так уже нельзя. Поэтому все подобные конструкции нужно заменить на вида:

<?php
$templateData['GALLERY_BIG'] = (array)$templateData['GALLERY_BIG'];
if(count($templateData['GALLERY_BIG'])):
....
?>

Ну или я просто поискал все подобные конструкции которые встречаются в файле и в шапку добавил:

$templateData['VIDEO'] = (array)$templateData['VIDEO'];
$templateData['VIDEO_IFRAME'] = (array)$templateData['VIDEO_IFRAME'];
$templateData['GALLERY_BIG'] = (array)$templateData['GALLERY_BIG'];
$templateData['LINK_SALE'] = (array)$templateData['LINK_SALE'];
$templateData['LINK_NEWS'] = (array)$templateData['LINK_NEWS'];
$arElement['PROPERTY_LINK_STAFF_VALUE'] = (array)$arElement['PROPERTY_LINK_STAFF_VALUE'];

1 3 4 5 6 7 299