Astra Linux: установить обои из консоли

Задача: необходимо установить свои обои на рабочем столе Astra Linux при помощи скрипта на bash

Решение: проблема решается буквально одной строчкой:

#!/bin/bash
fly-wmfunc FLYWM_UPDATE_VAL WallPaper "~/scripts/wallpapersden.com_atomic-heart-gaming_1920x1200.jpg"

Для автоматической установки достаточно положить этот скрипт в ~/.config/autostart

1С: работа с регистром «АдресныйОбъект»

Намедни прилетела интересная задача: создать визуальный построитель адреса доставки счёта клиента согласно данным ФИАС в древней не обновляемой конфигурации 1С. Первоначально подумал покопать в сторону сервиса https://fias-public-service.nalog.ru/api/spas/v2.0/swagger/index.html, написал заявку на генерацию ключа API для доступа, отправил её на указанную электронную почту…и тишина. Тащить самому адреса ФИАС и файлов и создавать для этого обвязку в конфигурараторе — трудоёмко. Но неожиданно возникла идея — а есть же обновляемая регулярно конфигурация 1С «Бухгалтерия», где этот справочник вполне используется и регулярно обновляется. Следовательно мы можем просто создать..ну например WEB сервис, при помощи которого будем тянуть данные для построения адреса из Бухгалтерии. Можно данные тянуть из регистров АдресныйОбъект, ДополнительныеАдресныеСведения, ИерархияАдресов и т.д, а можно покопать БСП, найти все нужные функции. За сим и оформил сервис:

&НаСервере
Функция ПолучитьПрокси()	
	Определение = Новый WSОпределения(
							Константы.СК_БУХURLВебСервиса.Получить(),
							Константы.СК_БУХИмяПользователя.Получить(),
							Константы.СК_БУХПароль.Получить()
							//,ИнтернетПрокси
						);
    
    Прокси = Новый WSПрокси(
						Определение,
						Константы.СК_БУХURIПространстваИмен.Получить(),
						"sk_SOAP_Services",
						"sk_SOAP_ServicesSoap"
						);
	Прокси.Пользователь = Константы.СК_БУХИмяПользователя.Получить();
	Прокси.Пароль = Константы.СК_БУХПароль.Получить();
	
	Возврат Прокси;
КонецФункции

Функция sk_gr_fias_exchange(request, params)  
	params=JSONВСтруктуру(params);
	МассивДляВозврата=Новый Массив();
	if (request="GetAdresses") тогда       
		//Parent,Level,TypeAddress,Counts,Poz,FindStr
		ДополнительныеПараметры=Новый Структура("КоличествоЗаписей,Позиция,СтрокаПоиска",params.Counts,params.Poz,params.FindStr);
		ТЗ=АдресныйКлассификаторСлужебный.АдресаДляИнтерактивногоВыбора(Новый УникальныйИдентификатор(params.Parent), params.Level, params.TypeAddress, ДополнительныеПараметры);		
		МассивДляВозврата=Новый Массив();
		для каждого стр из ТЗ.Данные цикл
			инф=Новый Структура("Идентификатор,Представление",Строка(стр.Идентификатор),Строка(стр.Представление));
			МассивДляВозврата.Добавить(инф);	
		конеццикла;					
	конецесли;	
	if (request="GetHomes") тогда       	
		ТЗ=АдресныйКлассификаторСлужебный.СписокДомов(Новый УникальныйИдентификатор(params.Parent),params.FindStr,params.Counts);		
		МассивДляВозврата=Новый Массив();
		для каждого стр из ТЗ цикл
			инф=Новый Структура("Идентификатор,Представление,Индекс",Строка(стр.Идентификатор),Строка(стр.Представление),Строка(стр.Значение.Индекс));
			МассивДляВозврата.Добавить(инф);	
		конеццикла;						
	конецесли;	
	
	Возврат СтруктураВСтрокуJSON(МассивДляВозврата);
КонецФункции

На целевой конфигурации, остаётся только дергать вызовы:

&НаСервере                                                  
Функция ПолучитьСписокАдресов(Родитель,Уровень)
// Уровень: 1- регион,2 - район, 3 - муниципальный район, 4-поселение, 5-город, 6 -нс, 7 - территория, 8 - улица
		Прокси=ПолучитьПрокси();		
			params=Новый Структура("Parent,Level,TypeAddress,Counts,Poz,FindStr");
			params.Parent=Строка(Родитель);
			params.Level=Уровень;
			params.TypeAddress="Административно-территориальный";
			params.Counts=500;
			params.FindStr="";
			Результат=Прокси.sk_gr_fias_exchange("GetAdresses",СтруктураВСтрокуJSON(params)); 
			//сообщить(Результат);
		возврат JSONВСтруктуру(Результат);

КонецФункции
&НаСервере                                                  
Функция ПолучитьСписокДомов(Родитель)
		Прокси=ПолучитьПрокси();		
			params=Новый Структура("Parent,Level,TypeAddress,Counts,Poz,FindStr");
			params.Parent=Строка(Родитель);
			params.Counts=500;
			params.FindStr="";
			Результат=Прокси.sk_gr_fias_exchange("GetHomes",СтруктураВСтрокуJSON(params)); 
			//сообщить(Результат);
		возврат JSONВСтруктуру(Результат);	
КонецФункции

И визуализировать всё подобным образом:

1С:Размещение индикатора прогресс бара на форме

Никогда не было и вот опять (с). Давненько не выводил на форму индикатор прогресс бара, и вот итог: забыл как это делается. И главное гугл/яндекс не особо помог. Во всех попадающихся ссылках расписывается как вывести данные в этот индикатор, а вот как вывести его на форму подразумевается что это настолько элементарно, что не требует пояснения 😉 Однакож вот, забыл. И так:

  1. В реквизиты формы добавляем реквизит с типом число
  2. Перетаскиваем его на форму и поле вид выбираем «Поле индикатора»
  3. Для обновления значения, используем «ЭтаФорма.Индикатор=12»
индикатор на форме 1с

P.S. А вот уж как в фоново обновлять индикатор, есть мои другие статьи

1С: Обновление формы после изменения данных на сервере

При обновлении данных на сервере, иногда бывает необходимость обновить содержимое клиентской формы. Сделать это можно вот так:

&НаКлиенте
Процедура СинхронизироватьСписок(Команда)
	СинхронизироватьСписокНаСервере();
	ОповеститьОбИзменении(Тип("СправочникСсылка.цукцукацук")); 
КонецПроцедуры

HTML: Ограничение ввода числа, с дробной частью более двух знаков

Задача: позволять вносить в поле input числа со значимой частью не более 2-х знаков после запятой.

Решение: к сожалению стандарт HTML на текущий момент не предусматривает в штатном виде такое колдовство. Единственно что возможно — проставить в теге тип равным «число», и шаг равным .01, например вот так:

<input type="number" step=".01">

Но это будет действовать только если пользователь ввод числа осуществляет при помощи стрелочки. Если руками — то поле всё равно позволит ввести любое число. Значит придётся задействовать javascript. На обработчик onchange навесим задание приводить любое значение в поле к числу с разрядностью 2:

<input type="number" step=".01" onchange="this.value = parseFloat(this.value).toFixed(2);">
два знака после запятой в поле input

1 19 20 21 22 23 308