1С: Программная установка пользовательских настроек при открытии отчёта СКД


&НаСервере
Процедура УстановитьПараметраКомпоновки(ИмяПараметра, Значение) Экспорт
	
	ПараметрКД = Новый ПараметрКомпоновкиДанных(ИмяПараметра);
	ОтборКД = Новый ПолеКомпоновкиДанных(ИмяПараметра);
	
	НастройкиКомпановщика = Отчет.КомпоновщикНастроек.ПолучитьНастройки();
	
	Для Каждого Поле Из НастройкиКомпановщика.ПараметрыДанных.Элементы Цикл
		Если Поле.Параметр = ПараметрКД Тогда
			Поле.Значение = Значение;
		КонецЕсли;
	КонецЦикла;
	
	Для Каждого Отбор Из НастройкиКомпановщика.Отбор.Элементы Цикл
		Если Отбор.ЛевоеЗначение = ОтборКД Тогда
			Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
			Отбор.Использование = Истина;
			Отбор.ПравоеЗначение = Значение;
		КонецЕсли;
	КонецЦикла;
	
	Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКомпановщика);
	ЭтаФорма.СоздатьЭлементыФормыПользовательскихНастроек(,РежимОтображенияНастроекКомпоновкиДанных.БыстрыйДоступ);	
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьЕМКНаСервере()
	
  СписТочек = Новый СписокЗначений;
  рез=СтрРазделить(отчет.ЕМК,символы.ПС);
  для каждого стр из рез цикл
	  стр=стрзаменить(стр,";","");
	  СписТочек.Добавить(сокрЛП(стр));
  конеццикла;	  
  УстановитьПараметраКомпоновки("ЕдиныйМежсистемныйКод",СписТочек);
   
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьЕМК(Команда)	
	ЗаполнитьЕМКНаСервере();
КонецПроцедуры

Lazarus: чтение и разбор Json

Задача: прочитать Json с URL и распарсить его

Решение:

На неком удалённом ресурсе находится файл вида:

{
"error": false,
"result": [
{
"dt": "2023-01-16T10:49:14",
"url": "https://rfefe.грибовы.рф/?p=41",
"title": "Очень важное уведомление",
"text": "Олала",
"read": true
},
{
"dt": "2023-01-15T10:49:14",
"url": "https://erferf.грибовы.рф/?p=40",
"title": "Очень важное уведомление 2",
"text": "Олала 2",
"read": false
}
]
}

Сначала прочитаем файл в строку, а затем распарсим полученный json и переберем его в виде массива или выведем текст ошибки:

procedure TForm1.LoadJson(Sender: TObject);
var
  url, json : String;
  jsd: TJSONData;
  error : Boolean;
  Arr:TJSONData;
  i : integer;

begin
  url := 'http://ewrdfwerf.xn--90acbu5aj5f.xn--p1ai/get_events.php';
  Try
     json := TFPCustomHTTPClient.SimpleGet(url);
  Except
      json:='{"error": true,"result": "Ошибка получения данных"}';
  end;
  jsd:=GetJSON(json);
  error :=  jsd.FindPath('error').AsBoolean;
  if error=true then begin
    MessageDlg(jsd.FindPath('result').AsString, mtInformation,[mbOk],0);
  end;
  if error=false then
   begin
     for i:=0 to jsd.FindPath('result').Count-1 do
     begin
          MessageDlg(jsd.FindPath('result').Items[i].FindPath('title').AsString, mtInformation,[mbOk],0);
     end;
    end;
end;
  

Lazarus: сворачиваем приложение в трей после запуска

Эх..давно я шашку в руки не брал (лет 10 точно уже с Lazarus/Delphi дела не имел), а тут снова пришлось.

За работу с треем, в Lazarus отвечает компонент TrayIcon, Перетащим её на форму. В процедуре создания формы разместим:

TrayIcon1.Visible := True;
Application.ShowMainForm:= False;

Далее добавим событие по клику на иконку трея:

      Show; // показываем окно
      WindowState := wsNormal; // разворачиваем окно

Пишем плагин для WordPress

Для того чтобы не изобретать велосипеды, необходимо с генерировать шаблоны файлов плагина. Например при помощи этого сервиса. В моём случае плагин называется ssk_read, поэтому далее везде фигурирует в названиях файлов он.

Получится структура папок вида:

Необходимо поместить все файлы в папку /wp_content/plugins..и собственно на этом моменте плагин уже будет доступен в админке для ативации.

Далее попробуем нарисовать страницу настроек в панели администрирования. Для этого добавим в /admin/class-ssk_read-admin.php в функцию конструкта класса хук добавления пункта меню:

add_action( 'admin_menu', 'register_my_config_page');

И далее в основном теле плагина skk_read.php добавим функцию register_my_config_page, которая непосредственно регистрирует этот пункт меню к выводу на экран:

function register_my_config_page(){
    add_menu_page( 'SSK_Read', 'SSK_Read', 'edit_others_posts','ssk_read', 'DrawPage', plugins_url( 'ssk_read/images/logo.png' ), 6 );
}
function DrawPage(){
 ?>
    <h1 class="wp-heading-inline">Основные настройки</h1>    
 <?php
};

После этого в меню админки появится новый пункт меню, с выводом пустой страницы. Добавим в функцию DrawPage функционал вывода сохраненных настроек:

function DrawPage(){
 ?>
    <h1 class="wp-heading-inline">Основные настройки</h1>
    <form method="post" action="options.php">
    <?php
        settings_fields('ssk_read_settings');
        do_settings_sections( 'ssk_read');
        submit_button();
    ?>
    </form>

 <?php
};

На этом этапе пока появится только кнопка «сохранить изменения», потому как мы еще не указали ядру, какие именно настройки мы хотим хранить. Для этого добавим в /admin/class-ssk_read-admin.php в функцию конструкта класса хук инициализации настроек:

add_action( 'admin_init', 'ssk_read_fields');

И далее в основном классе ssk_read.php добавим функции регистрации полей и их вывода:

function ssk_read_fields(){

    register_setting('ssk_read_settings','api_doc_url','string');
    register_setting('ssk_read_settings','api_doc_login','string');
    register_setting('ssk_read_settings','api_doc_password','string');

    add_settings_section( 'ssk_settings_section_id', 'Соединение с 1С Документооборот','', 'ssk_read' );

    add_settings_field('api_doc_url','URL вызова API','DrawApiTxtField','ssk_read','ssk_settings_section_id',array('name' => 'api_doc_url'));
    add_settings_field('api_doc_login','Логин','DrawApiTxtField','ssk_read','ssk_settings_section_id',array('name' => 'api_doc_login'));
    add_settings_field('api_doc_password','Пароль','DrawApiPasswordField','ssk_read','ssk_settings_section_id',array('name' => 'api_doc_password'));

}

function DrawApiTxtField($args){
    $value = get_option( $args[ 'name' ] );
    echo '<input type="text"  id="'.$args[ 'name' ].'" name="'.$args[ 'name' ].'" value="'.$value.'" />';
}
function DrawApiPasswordField($args){
    $value = get_option( $args[ 'name' ] );
    echo '<input type="password"  id="'.$args[ 'name' ].'" name="'.$args[ 'name' ].'" value="'.$value.'" />';
}

Получилось функционирующее сохранение:

Однако не хватает уведомления об успешном сохранении. Добавим хук:

add_action( 'admin_notices', 'ssk_custom_notice' );

И вывод сообщения:

function ssk_custom_notice(){
 if (
        isset( $_GET[ 'page' ] )
        && 'ssk_read' == $_GET[ 'page' ]
        && isset( $_GET[ 'settings-updated' ] )
        && true == $_GET[ 'settings-updated' ]
    ) {
        echo '<div class="notice notice-success is-dismissible"><p>Настройки сохранены!</p></div>';
    }
}
1 55 56 57 58 59 308