Поиск по этому блогу

пятница, 25 июня 2021 г.

Отладка запросов в 1С: удобное заполнение текста и параметров запроса в Консоли Запросов через "Заполнить из XML"

Случайно тут наткнулся на интересную возможность штатной Консоли Запросов по отладке запросов. Правда, работает только с БСП.

В отладчике останавливаемся на интересующем нас запросе, вызываем диалог "Вычислить выражение (Shift + F9)", вставляем в поле "Выражение" следующую строку:

ОбщегоНазначения.ЗапросВСтрокуXML(Запрос)
или
ОбщегоНазначения.ЗначениеВСтрокуXML(Новый Структура("Текст, Параметры", Запрос.Текст, Запрос.Параметры))


Затем нажимаем "Рассчитать", копируем в буфер обмена полученное "Значение", закрываем диалог "Вычислить выражение", нажимаем "Продолжить отладку (F5)".

Теперь переходим в режим "Предприятие", открываем Консоль Запросов, вставляем скопированный текст в поле "Текст запроса", нажимаем "Ещё", выбираем пункт меню "Заполнить из XML":


И... получаем заполненный текст запроса и параметры (!!!):




понедельник, 12 октября 2020 г.

Send to SD card - сохранение на карту памяти из меню "Поделиться" в приложении для Android

Когда в приложении для Android открываешь меню "Поделиться", то там можно увидеть всё что угодно - и "Bluetooth", и "Сообщения", и "Обмен с окружением" и какой-то "Android Beam", но по умолчанию отсутствует самый логичный пункт - "Сохранить на карту памяти". Почему разработчики Android его не добавили я не знаю, но хорошо, что у нас есть F-Droid, в котором выложено приложение, исправляющее этот недочёт. Это приложение называется "Send to SD card":

После установки этого приложения в списке приложений появляется иконка "Настройки отправки на SD карту", нажав на которую, можно настроить папку, куда приложение будет сохранять отправляемый файл (я указал "Начальная папка" = "Последняя папка", чтобы приложение сохраняло файл в последнюю выбранную мною папку). И теперь при нажатии на иконку "Поделиться" в списке выбора появится иконка "SD карта", нажав на которую можно сохранить файл на карту памяти:



пятница, 17 апреля 2020 г.

Назначения профиля по умолчанию для PulseAudio

Начиная с какого-то момента (возможно, после перехода на очередной релиз), у меня в моём Linux Fedora перестал работать звук.
После каждой загрузки системы приходилось запускать pavucontrol, переходить на вкладку Конфигурация, и вместо выбранного по умолчанию профиля "Цифровой стерео (IEC958) выход" перевыбирать "Аналоговый стерео выход":
 

Разумеется, в какой-то момент мне это надоело, и я начал искать способ, как сделать так, чтобы профиль "Аналоговый стерео выход" устанавливался при загрузке системы автоматически. Простого способа, такого например, как кнопка "Установить по умолчанию" для профиля в том же самом pavucontrol-е, я не нашёл (что и понятно, это же Linux!), поэтому пришлось немного поразбираться с настройками PulseAudio.
Всё оказалось не так страшно. Даже совсем нестрашно. Но какое-то время на поиск решения всё же пришлось потратить. Надеюсь, что теперь кому-то смогу это время сэкономить.

Итак, в моём случае решение сводилось к правке файла /etc/pulse/default.pa. В самом конце я добавил:
set-card-profile alsa_card.pci-0000_00_1b.0 output:analog-stereo
set-sink-port alsa_output.pci-0000_00_1b.0.analog-stereo analog-output-lineout

И всё заработало!
После перезагрузки устанавливался нужный профиль и выбирался нужный порт для вывода звука - линейный выход.

Значения параметров для этих команд в вашем случае могут быть другие. Их можно посмотреть с помощью "pacmd list-cards" (вывод команды сокращён для удобства чтения; значения интересующих нас параметров выделены красным цветом):
$ pacmd list-cards
1 card(s) available.
    index: 0
 name: <alsa_card.pci-0000_00_1b.0>
 driver: <module-alsa-card.c>
 owner module: 6
 properties:
  alsa.card = "0"
  alsa.card_name = "HDA Intel"
  ...
 profiles:
  input:analog-stereo: Аналоговый стерео вход (priority 65, available: no)
  output:analog-stereo: Аналоговый стерео выход (priority 6500, available: no)
  output:analog-stereo+input:analog-stereo: Аналоговый стерео дуплекс (priority 6565, available: no)
  output:analog-surround-21: Аналоговый объёмный 2.1 выход (priority 1300, available: no)
  ...
  output:iec958-stereo: Цифровой стерео (IEC958) выход (priority 5500, available: unknown)
  output:iec958-stereo+input:analog-stereo: Цифровой стерео (IEC958) выход + Аналоговый стерео вход (priority 5565, available: no)
  off: Выключено (priority 0, available: unknown)
 active profile: <output:analog-stereo>
 sinks:
  alsa_output.pci-0000_00_1b.0.analog-stereo/#6: Встроенное аудио Аналоговый стерео
 sources:
  alsa_output.pci-0000_00_1b.0.analog-stereo.monitor/#6: Monitor of Встроенное аудио Аналоговый стерео
 ports:
  analog-input-front-mic: Фронтальный микрофон (priority 8500, latency offset 0 usec, available: no)
   properties:
    device.icon_name = "audio-input-microphone"
  ...
    
  analog-output-lineout: Линейный выход (priority 9000, latency offset 0 usec, available: no)
   properties:
    
  analog-output-headphones: Наушники (priority 9900, latency offset 0 usec, available: no)
   properties:
    device.icon_name = "audio-headphones"
  iec958-stereo-output: Цифровой выход (S/PDIF) (priority 0, latency offset 0 usec, available: unknown)
   properties:
Для команды set-card-profile нас интересуют:
  • Имя звуковой карты. В моём случае это "alsa_card.pci-0000_00_1b.0".
  • Имя профиля. В моём случае это "output:analog-stereo".
Для команды set-sink-port нас интересует:
  • Имя sink-а. В моём случае это "alsa_output.pci-0000_00_1b.0.analog-stereo".
  • Имя порта. В моём случае это "analog-output-lineout". Если бы я захотел, чтобы по умолчанию звук выводился на наушники, то в качестве имени порта я бы указал "analog-output-headphones".

Перед тем, как изменять файл /etc/pulse/default.pa нужно:
  1. Сделать его резервную копию. Во-первых, потому что нужно всегда делать резервные копии файлов настроек перед их редактированием, а во-вторых, потому что если в этом файле накосячить, то PulseAudio вообще не запустится.
  2. Проверить правильность ваших параметров, запустив предварительно подготовленные команды через pacmd в терминале. Например:
  3. $ pacmd set-card-profile alsa_card.pci-0000_00_1b.0 output:analog-stereo
    $ pacmd set-sink-port alsa_output.pci-0000_00_1b.0.analog-stereo analog-output-lineout
    

четверг, 16 августа 2018 г.

Прослушивание аудиокниг в "турбо-режиме"

Для меня аудиокниги всегда имели два очень серьёзных недостатка (по сравнению с "обычными": электронными или бумажными):
1. Стоит хоть немного отвлечься и вот уже утратил нить повествования, нужно перематывать обратно и слушать ещё раз. Особенно часто отвлекаешься, если книга начитана медленным, заунывным голосом.
2. На прослушивание аудиокниги уходит куда больше времени, чем на чтение этой же "обычной" книги. За то время, пока слушаешь "одну страницу", можно успеть прочитать штук пять.
Тем не менее, неоспоримым преимуществом аудиокниг для меня всегда было то, что их можно слушать даже в таких условиях, когда "обычную" книгу не почитаешь: во время ходьбы, в темноте и т.п.
И вот однажды, слушая один подкаст (уже сейчас не вспомню какой), я узнал о существовании метода, который может в значительной степени устранить оба "недостатка" аудиокниг: всего лишь нужно слушать аудиокниги на ускоренном воспроизведении. Начать можно с 1,3x, потом довести до 1,5х.
Довольно быстро выяснилось, что штатный плеер на моём Android-телефоне не умеет воспроизводить аудиофайлы в ускоренном режиме. Поэтому полез на F-Droid. Там нашлась программа Voice (Simple audiobook player), которая вполне меня устроила (она же есть и в Google Play под названием Voice Audiobook Player):

После выбора аудиокниги надо нажать на значок и выбрать желаемую скорость воспроизведения.

Дополнение от 06.12.2019: Аналогичным образом в "турбо-режиме" можно смотреть видео на YouTube. Для этого нужно открыть меню "Настройки", и в разделе "Скорость" выбрать желаемую скорость воспроизведения:


Данный текст доступен по лицензии Creative Commons Attribution (CC BY)

вторник, 3 октября 2017 г.

Вычисление хэш суммы MD5 в 1С 8.3

Следующая функция вернёт хэш MD5 для указанного файла.

Код:
Функция ВычислитьMD5Файла(ИмяФайла) Экспорт ХэшированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5); ХэшированиеДанных.ДобавитьФайл(ИмяФайла); Хэш = НРег(СтрЗаменить(ХэшированиеДанных.ХешСумма, " ", "")); Возврат Хэш; КонецФункции

Следующая функция вернёт хэш MD5 для двоичных данных или строки в кодировке UTF8.

Код:
// Данные - ДвоичныеДанные или Строка в кодировке UTF8 Функция ВычислитьMD5(Данные) Экспорт ХэшированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5); ХэшированиеДанных.Добавить(Данные); Хэш = НРег(СтрЗаменить(ХэшированиеДанных.ХешСумма, " ", "")); Возврат Хэш; КонецФункции
Дополнение от 13.01.2022: вместо СтрЗаменить(ХэшированиеДанных.ХешСумма, " ", "") можно (и нужно?) использовать ПолучитьHexСтрокуИзБуфераДвоичныхДанных(ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ХэшированиеДанных.ХешСумма))

Данный текст доступен по лицензии Creative Commons Attribution (CC BY)

суббота, 22 апреля 2017 г.

Добавление штампов (stamps) в Tux Paint

При установке Tux Paint из штатных репозиториев некоторых дистрибутивов Linux (в частности, Fedora 25) или на Android (через F-Droid) не устанавливаются штампы (stamps).

А как без них жить? :)


Чтобы установить штампы нужно:
В Linux (Fedora 25):
  • Распаковать содержимое папки /TuxPaint/data/stamps/ из архива в папку /usr/share/tuxpaint/stamps/ чтобы получилось так:
/usr/share/tuxpaint/stamps/animals/amphibians/frog-1_desc_be.ogg
/usr/share/tuxpaint/stamps/animals/amphibians/frog-1_desc_bg.ogg
/usr/share/tuxpaint/stamps/animals/amphibians/frog-1_desc_ca.ogg
/usr/share/tuxpaint/stamps/animals/amphibians/frog-1_desc_da.ogg
/usr/share/tuxpaint/stamps/animals/amphibians/frog-1_desc_es.ogg
/usr/share/tuxpaint/stamps/animals/amphibians/frog-1_desc_fr.ogg
/usr/share/tuxpaint/stamps/animals/amphibians/frog-1_desc_ro.ogg
/usr/share/tuxpaint/stamps/animals/amphibians/frog-1_desc_ru.ogg
/usr/share/tuxpaint/stamps/animals/amphibians/frog-1.png
/usr/share/tuxpaint/stamps/animals/amphibians/frog-1.txt
...
В Android:
  • Распаковать содержимое папки /TuxPaint/data/stamps/ из архива в папку /mnt/sdcard/TuxPaint/ (на Samsung Galaxy Tab это папка /storage/emulated/0/TuxPaint/).
Теперь запускаем Tux Paint и наслаждаемся!

P.S. Чтобы уменьшить объем, который занимают файлы штампов, можно удалить "лишние" файлы с озвучкой на неиспользуемых языках - все файлы *_desc_*.ogg, кроме *_desc_ru.ogg.

    четверг, 25 февраля 2016 г.

    Как убрать лишние пробелы при выводе строковых полей в отчёте на СКД

    Понадобилось мне при выводе отчёта на системе компоновки данных (СКД) обрезать пробелы в строковых значениях (а именно, концевые пробелы у номеров документов).
    Решения, найденные с помощью гугления и яндексирования, в основном сводились либо к обрезанию пробелов в запросе (что для моей задачи было всё-таки чрезмерным усложнением), либо к использованию глобальных функций общих модулей (что требовало внесения изменения в конфигурацию, и тоже по сути являлось решением из разряда "из пушки по воробьям").
    В итоге остановился на самом простом варианте, который только пришёл в голову: обрезать пробелы в процедуре ПриКомпоновкеРезультата() при выводе данных в табличный документ.

    Код:
    Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Настройки = КомпоновщикНастроек.ПолучитьНастройки(); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.НачатьВывод(); Пока Истина Цикл ЭлементРезультата = ПроцессорКомпоновки.Следующий(); Если ЭлементРезультата = Неопределено Тогда Прервать; КонецЕсли; Для Каждого ЗначПарам Из ЭлементРезультата.ЗначенияПараметров Цикл Если ТипЗнч(ЗначПарам.Значение) = Тип("Строка") И ЗначПарам.Значение <> СокрЛП(ЗначПарам.Значение) Тогда ЗначПарам.Значение = СокрЛП(ЗначПарам.Значение); // <--- обрезаем пробелы тут КонецЕсли; КонецЦикла; ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата); КонецЦикла; ДокументРезультат = ПроцессорВывода.ЗакончитьВывод(); КонецПроцедуры


    Данный текст доступен по лицензии Creative Commons Attribution (CC BY)