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

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

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

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

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


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

вторник, 23 февраля 2016 г.

Изменение порядка учётных записей в Thunderbird

Изменить порядок учётных записей в Thunderbird можно и без использования дополнений.

Вариант 1. Заходим в меню Правка / Настройки, закладка Основные, кнопка "Редактор настроек...". Обещаем, что будем осторожны, открывается редактор настроек. Ищем настройку mail.accountmanager.accounts. Её значение имеет вид account1,account2,account3. Это и есть порядок учётных записей. Например, если нужно чтобы последняя учётная запись стала первой, то необходимо изменить значение этой настройки на account3,account1,account2.

Вариант 2. Выходим из Thunderbird, переходим в директорию с профайлом, находим там файл prefs.js, открываем его любым текстовым редактором, находим в этом файле строку вида:
user_pref("mail.accountmanager.accounts", "account1,account2,account3");
и меняем порядок следования account-ов на требуемый. Например, если нужно чтобы последняя учётная запись стала первой, то необходимо изменить эту строку на:
user_pref("mail.accountmanager.accounts", "account3,account1,account2");
Сайт Thunderbird: https://www.mozilla.org/en-US/thunderbird/

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

вторник, 22 декабря 2015 г.

Как убедиться в том, что измененная типовая конфигурация 1С обновлена успешно?

Как убедиться, что измененную типовую конфигурацию мы обновили успешно и ничего не отвалилилось?
Итак, после обновления у нас есть 4 cf-ника:
  1. ПоставщикСтарая - старая конфигурация поставщика; 
  2. ПоставщикНовая - новая конфигурация поставщика - та, на которую обновляли; 
  3. ОсновнаяСтарая - измененная конфигурация, по сути это ПоставщикСтарая с нашими изменениями; 
  4. ОсновнаяНовая - то, что получилось после обновления ОсновнаяСтарая с помощью ПоставщикНовая. 
Теперь в двух конфигураторах сравниваем попарно:
  1. ПоставщикСтарая и ПоставщикНовая; 
  2. ОсновнаяСтарая и ОсновнаяНовая. 
Для каждого сравнения конфигураций формируем полный "Отчет о сравнении объектов..." (для всех объектов конфигурации) в формате "Подробно", с подчиненными объектами метаданных:
 

и сохраняем эти отчеты в текстовые файлы. Эти два текстовых файла сравниваем с помощью любой сравнивалки текста (я использую WinMerge).
Так вот - не считая технической информации, такой как номера строк с изменным/удаленным кодом и т.п., эти файлы НЕ ДОЛЖНЫ ОТЛИЧАТЬСЯ! Потому что оба отчёта показывают одно и то же - разницу, которую добавила в конфигурацию 1С.

После этого сравниваем попарно:
  1. ПоставщикСтарая и ОсновнаяСтарая; 
  2. ПоставщикНовая и ОсновнаяНовая. 
Аналогично сохраняем отчеты о сравнении в текстовые файлы и сравниваем эти текстовые файлы. Они тоже НЕ ДОЛЖНЫ ОТЛИЧАТЬСЯ! Потому что оба отчёта показывают одно и то же - разницу, которую добавили в конфигурацию мы.

Если что-то отличается (помимо технической информации) - значит или не накатили какое-то изменение из типовой, или затерли какое-то своё изменение.

P.S. Чтобы убрать из отчетов о сравнении неинформативный хлам (такой как номера строк с изменным/удаленным кодом и т.п.), можно выполнить в текстовых файлах с отчетами следующие замены по регекспам:
1. Заменить:
^(\s*)Объект присутствует только в(.+) конфигурации: \d+ - \d+$
на:
$1Объект присутствует только в$2 конфигурации: N - N

2. Заменить:
^(\s*)Изменено: \d+ - \d+$
на:
$1Изменено: N - N

P.P.S. Эти замены можно выполнить с помощью следующего макроса для Notepad++ (добавить в %appdata%\Notepad++\shortcuts.xml в раздел <Macros>...</Macros>)
<Macro name="&#x041E;&#x0431;&#x0440;&#x0430;&#x0431;&#x043E;&#x0442;&#x043A;&#x0430;&#x041E;&#x0442;&#x0447;&#x0435;&#x0442;&#x0430;&#x041E;&#x0421;&#x0440;&#x0430;&#x0432;&#x043D;&#x0435;&#x043D;&#x0438;&#x0438;" Ctrl="no" Alt="no" Shift="no" Key="0">
  <Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
  <Action type="3" message="1601" wParam="0" lParam="0" sParam="^(\s*)&#x041E;&#x0431;&#x044A;&#x0435;&#x043A;&#x0442; &#x043F;&#x0440;&#x0438;&#x0441;&#x0443;&#x0442;&#x0441;&#x0442;&#x0432;&#x0443;&#x0435;&#x0442; &#x0442;&#x043E;&#x043B;&#x044C;&#x043A;&#x043E; &#x0432;(.+) &#x043A;&#x043E;&#x043D;&#x0444;&#x0438;&#x0433;&#x0443;&#x0440;&#x0430;&#x0446;&#x0438;&#x0438;: \d+ - \d+$" />
  <Action type="3" message="1625" wParam="0" lParam="2" sParam="" />
  <Action type="3" message="1602" wParam="0" lParam="0" sParam="$1&#x041E;&#x0431;&#x044A;&#x0435;&#x043A;&#x0442; &#x043F;&#x0440;&#x0438;&#x0441;&#x0443;&#x0442;&#x0441;&#x0442;&#x0432;&#x0443;&#x0435;&#x0442; &#x0442;&#x043E;&#x043B;&#x044C;&#x043A;&#x043E; &#x0432;$2 &#x043A;&#x043E;&#x043D;&#x0444;&#x0438;&#x0433;&#x0443;&#x0440;&#x0430;&#x0446;&#x0438;&#x0438;: N - N" />
  <Action type="3" message="1702" wParam="0" lParam="768" sParam="" />
  <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" />
  <Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
  <Action type="3" message="1601" wParam="0" lParam="0" sParam="^(\s*)&#x0418;&#x0437;&#x043C;&#x0435;&#x043D;&#x0435;&#x043D;&#x043E;: \d+ - \d+$" />
  <Action type="3" message="1625" wParam="0" lParam="2" sParam="" />
  <Action type="3" message="1602" wParam="0" lParam="0" sParam="$1&#x0418;&#x0437;&#x043C;&#x0435;&#x043D;&#x0435;&#x043D;&#x043E;: N - N" />
  <Action type="3" message="1702" wParam="0" lParam="768" sParam="" />
  <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" />
</Macro>

четверг, 29 октября 2015 г.

Вывод статуса задач BOINC в терминале Linux

Чтобы контролировать ход вычислений в BOINC можно выполнить следующую команду в терминале:
watch -n 5 "boinccmd --get_tasks | grep -e '\(fraction done:\)\|\(project URL:\)\|\(active_task_state\)\|\(estimated CPU\)\|\(current CPU time\)\|\(---\)'"
При этом на экран будет выведена (и будет обновляться каждые 5 секунд) информация, подобная этой:
1) -----------
   project URL: http://sat.isa.ru/pdsat/
   final CPU time: 0.000000
   active_task_state: EXECUTING
   checkpoint CPU time: 29928.380000
   current CPU time: 30554.660000
   fraction done: 0.833333
   estimated CPU time remaining: 3773.624642
2) -----------
   project URL: http://sat.isa.ru/pdsat/
   final CPU time: 0.000000
   active_task_state: EXECUTING
   checkpoint CPU time: 14886.500000
   current CPU time: 15626.640000
   fraction done: 0.433333
   estimated CPU time remaining: 12963.986928
3) -----------
   project URL: http://www.worldcommunitygrid.org/
   final CPU time: 0.000000
   active_task_state: UNINITIALIZED
   checkpoint CPU time: 0.000000
   current CPU time: 0.000000
   fraction done: 0.000000
   estimated CPU time remaining: 81226.112086
Если BOINC запускается на отдельном сервере (или в отдельной виртуалке), то для автоматического запуска предыдущей команды можно добавить в .bashrc следующий код:
if [ $(tty) == "/dev/tty1" ]; then
  watch -n 5 "boinccmd --get_tasks | grep -e '\(fraction done:\)\|\(project URL:\)\|\(active_task_state\)\|\(estimated CPU\)\|\(current CPU time\)\|\(---\)'"
fi
Сайт проекта BOINC: https://boinc.berkeley.edu/

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

среда, 26 августа 2015 г.

Загрузка Tails с помощью Grub2 из iso-файла на жестком диске

Проверялось на Tails 1.5 x86_64.
Дописываем в /etc/grub.d/40_custom:
menuentry "Tails 1.5 x86_64 ISO" --class tails --class gnu-linux --class gnu --class os {
 set isofile=var/download/tails-i386-1.5/tails-i386-1.5.iso
 loopback loop (hd0,2)/$isofile
 linux (loop)/live/vmlinuz2 boot=live config findiso=$isofile apparmor=1 security=apparmor nopersistent noprompt timezone=Etc/UTC block.events_dfl_poll_msecs=1000 splash noautologin module=Tails  noapic noapm nodma nomce nolapic nomodeset nosmp vga=normal
 initrd (loop)/live/initrd2.img
}
при этом заменяем "(hd0,2)" на номер диска и раздела, на котором лежит iso-образ Tails, а "var/download/tails-i386-1.5/tails-i386-1.5.iso" заменяем на путь к файлу образа относительно корня этого раздела (обратите внимание, что слэш "/" в начале пути НЕ УКАЗЫВАЕМ!). После этого выполняем
в Ubuntu:
$ sudo update-grub2
в Fedora:
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
и перезагружаемся. В меню Grub2 должен появиться новый пункт "Tails 1.5 x86_64 ISO" для загрузки Tails.
Примечания:
  • Параметры загрузки взяты из <tails-i386-1.5.iso>/isolinux/live.cfg (раздел "label live-amd64"). Там же можно посмотреть параметры для загрузки в 32-хразрядном режиме (раздел "label live").
  • Вместо опции findiso=$isofile можно указать опцию fromiso=/dev/disk/by-uuid/3cb868a1-260e-45d0-a1c9-b42d09ff2aa3/$isofile (или fromiso=/dev/sda2/$isofile), заменив UUID (или название) раздела диска на свой.
P.S. Немного не в тему, но где-то надо было написать... Для запуска из iso-файла DoudouLinux 2.1 Hyperborea можно попробовать такой вариант (у меня работает только в виртуалке, а на десктопе зависает в процессе загрузки; впрочем, он зависает на этом же месте и при загрузке с usb-флешки, так что проблема скорее всего не параметрах загрузки, а в чём-то другом; разбираться пока времени нет):
menuentry "DoudouLinux 2.1 ISO" --class doudoulinux --class gnu-linux --class gnu --class os {
 set isofile=var/download/doudoulinux-hyperborea-2.1-ru.iso
 loopback loop (hd0,2)/$isofile
 linux (loop)/live/vmlinuz findiso=$isofile boot=live config locales=ru_RU.UTF-8 keyboard-layouts=ru,us keyboard-variant=oss,, keyboard-options=grp:alt_shift_toggle,lv3:ralt_switch,compose:menu,terminate:ctrl_alt_bksp utc=no timezone=Europe/Moscow nox11autologin nomodeset video=uvesafb:mode_option=640x480-16,mtrr=3,scroll=ywrap username=tux hostname=doudoulinux
 initrd (loop)/live/initrd.img
}
Сайт Tails: https://tails.boum.org/
Сайт DoudouLinux: http://www.doudoulinux.org/

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

вторник, 18 августа 2015 г.

Выгрузка из 1С:Бухгалтерия декларации по НДС, содержащей ошибки

Проверялось на: 1С:Бухгалтерия 2.0.64.31.
1С:Бухгалтерия не даёт выгрузить декларацию по НДС, в которой есть ошибки. Чтобы обойти это справедливое, но не всегда нужное ограничение, можно воспользоваться описанным ниже способом.
  1. Читаем http://kb.mista.ru/article.php?id=105, создаем обработку Отладка.epf, в модуле которой пишем код: 
    Функция Присвоить(А, Б) Экспорт
      А = Б;
      Возврат А;
    КонецФункции
  2. Запускаем Конфигуратор, находим в дереве конфигурации отчет РегламентированныйОтчетНДС, открываем форму ФормаОтчета2015Кв1, переходим в текст модуля формы и ставим точку остановка в функции Функция ВыгрузкаВозможна(Параметры)  на последнем операторе "Возврат СтатусПроверки;".
  3. Запускаем 1С:Предприятие в режиме отладки, заходим в Регламентированную отчетность, запускаем выгрузку декларации по НДС. Срабатывает точка останова.
  4. Переходим в Конфигуратор, нажимаем Shift+F9 ("Вычислить выражение..."), в поле "Выражение" пишем (всё одна строка):
    ВнешниеОбработки.Создать("C:\Путь\Куда\Сохранили\Обработку\Отладка.epf").Присвоить(СтатусПроверки, Истина)
    и нажимаем кнопку "Рассчитать". После этого закрываем окно "Вычислить выражение..." и по кнопке F5 ("Продолжить отладку") продолжаем выполнение кода.
  5. Профит!
Лучше один раз увидеть, чем сто раз услышать (скриншот):


P.S. Если есть возможность вносить изменения в конфигурацию, то можно просто временно поменять "Возврат СтатусПроверки;" на "Возврат Истина;".

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

понедельник, 17 августа 2015 г.

Создание многострочного электронного письма из командной строки Thunderbird

Чтобы создать многострочное (с символами перевода строки) электронное письмо в Thunderbird из командной строки можно воспользоваться следующими способами

В Linux создаём файл body.txt c текстом письма и выполняем команду (это всё одна строка):
thunderbird -compose "to='larina@example.com',subject='Привет',body='$(cat body.txt)'"
В Windows (это всё одна строка):
"C:\Program Files\Mozilla Thunderbird\thunderbird.exe" -compose "format=1,to='onegin@example.com',subject='Привет',body='<p>Я к вам пишу - чего же боле?<br>Что я могу еще сказать?<br>Теперь, я знаю, в вашей воле...<br></p><p>Т.Л.</p>'"
Сайт Thunderbird: https://www.mozilla.org/en-US/thunderbird/

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