Поиск по блогу

суббота, 28 февраля 2015 г.

Вычисление хэш-суммы по алгоритму MD5

Вычисление хэш-сумм MD, SHA при помощи CAPICOM
Вычисление хэш-суммы по алгоритму ГОСТ Р 34.11-94
Вычисление хэш-суммы по алгоритму SHA-512

Как вычислять хэш-сумму по алгоритму SHA-512 описано в этой статье. SHA-512 применяется для защиты информации и считается довольно устойчивой хэш-функцией. Но не стоит забывать о старом добром MD5, который имеет 128 битную хэш-сумму, выполняется быстрее чем SHA-1, SHA-2 и отлично подходит для создания "отпечатков" большого объема данных.

Для вычисления хэш-суммы по алгоритму MD5 воспользуемся COM-объектами, нам потребуется объект с ProgID - System.Security.Cryptography.MD5CryptoServiceProvider. Он имеет метод ComputeHash, который возвращает хэш-сумму в виде 16-байтового массива.

пятница, 27 февраля 2015 г.

Рисуем красивые графики математических функций в поле HTML

Его величество amCharts


Для вывода графиков воспользуемся amCharts - это пакет для построения графиков, различных диаграмм и т.д., реализованный на JavaScript/HTML. Что мне больше всего понравилось в amCharts, он довольно мощный инструмент и его можно использовать абсолютно бесплатно. Единственный минус бесплатного использования проявляется в наличии маленького логотипа на графике.

В отличии от HighCharts, разработчики amCharts предоставили пользователям визуальный конструктор графиков, который значительно облегчает жизнь при настройке внешнего вида. Этот конструктор генерирует код на языке JavaScript в зависимости от значений свойств графика, а так же в режиме онлайн показывает как будет отображаться график.

четверг, 26 февраля 2015 г.

Коротко о режимах управляемых блокировок

Для чего нужна управляемая блокировка?


В режиме управляемых блокировок блокировка данных происходит на достаточно низком уровне изоляции транзакции в СУБД, что позволяет достичь высокой параллельности работы пользователей.
Существует два вида режима управляемых блокировок:
  1. Исключительная
  2. Разделяемая

Перемещение файлов с Сервера на Клиент

Иногда так случается, что код, выполняемый на сервере, выгружает файлы во временную папку сервера, а они нужны на клиенте. А всё из-за разделения выполнения кода на два контекста: на сервере и на клиенте. Что бы побороть эту проблему, в арсенале платформы 1С имеются две функции: ПолучитьФайл и ПолучитьФайлы. Эти функции получают набор файлов и сохраняют их в локальную файловую систему пользователя. Более подробнее описание смотри в синтакс-помощнике.

вторник, 24 февраля 2015 г.

Представление значения в динамическом списке

Допустим, у справочника А имеется реквизит Статус с типом Число. Этот реквизит может принимать только четыре числовых значения: 0, 1, 2, 3. Каждое числовое значение имеет свой смысл:  0 - Открыт, 1 - Обсуждается, 2 - Закрывается, 3 - Закрыт. В управляемой форме элемента справочника, элемент формы Статус, который имеет путь к данным реквизита Статус, по-умолчанию будет отображать числовые значения. Что бы задать каждому значению представление, необходимо элементу формы задать список выбора:
Список выбора элемента формы Статус

Копирование ключевого контейнера с РуТокен в Реестр с помощью КриптоПро

Проблемка


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

Так вот, о чем это я, в конторе имеется Рутокен с ЭП, одновременно он может потребоваться нескольким сотрудникам для подписи документов и тут начинаются конфликты. Но на самом деле не все так печально, если ключевой контейнер разрешает себя экспортировать, то его можно поместить с Рутокена в Реестр! Поместив контейнер в реестр и указав сертификату, что закрытый ключ храниться в реестре по такому-то адресу, наличие Рутокена в USB-порту отпадает.

пятница, 20 февраля 2015 г.

Добавление поддержки VBScript и JScript - расширяем возможности 1С

Поиск подходящего COM-объекта


Необходимо было получить текущее время на сервере с точностью до миллисекунд. К сожалению платформа 1С вообще не знает что такое миллисекунды, у неё там свои моменты времени. Подходящего COM-объекта я не обнаружил, но на сайте MSDN нашел интересную технологию MS Script Control. Данная технология позволяет исполнять код в своем приложении на языке Visual Basic или JavaScript, то есть в 1С у нас развязываются руки и мы получаем инструмент для работы с системной информацией операционной системы WINDOWS: получить информацию о железе компьютера, записать параметр в реестр и т.д.

среда, 18 февраля 2015 г.

Отличия функций РеквизитФормыВЗначение и ДанныеФормыВЗначение

Первые проблемы


Во времена толстого клиента вызов процедуры модуля объекта из модуля формы был прост. Достаточно было определить процедуру модуля как экспортируемую и вызвать её в модуле формы.
Вызов процедуры модуля в толстом клиенте обычное приложение

понедельник, 16 февраля 2015 г.

Как я победил свойство Возможно пустое значение у параметра операции Веб-сервиса

Создавая операцию consGetQuestions у веб-сервиса OnlineConsultant, мне потребовалось, что бы у этой операции параметры могли принимать пустое значение. Такое условие позволяет накладывать различные отборы в запросе в зависимости от значений параметров. То есть, если значение параметра пустое, то отбор не делаем, если не пустое, то накладываем отбор.

Операция параметра в конфигураторе выглядит следующим образом:
Операция веб-сервиса
У неё три параметра ConsultantCode, FromDate и ShowClosed, которые могу принимать пустое значение (свойство Возможно пусто значение = Истина). Например:
Свойство - Возможно пустое значение

воскресенье, 15 февраля 2015 г.

Отправляем СМС через сервис SMS.RU

Постановка задачи


В библиотеке стандартных подсистем (БСП), которая разрабатывается фирмой 1С с целью облегчить жизнь разработчикам, имеется подсистема Отправка SMS. Данная подсистема содержит ряд процедур и функций, с помощью которых можно выполнять отправку коротких сообщений (СМС) посредством операторов МТС и Билайн. Так как ценовая политика этих операторов не устраивала, решено было выполнять отправку СМС через сервис SMS.RU.

Задача: добавить в подсистему Отправка SMS сервис SMS.RU.

пятница, 13 февраля 2015 г.

Использование регулярных выражений в 1С. Да-да, это возможно!

  Регулярное выражение - это шаблон текста, который состоит из обычных символов и/или специальных метасимволов.

Поиск необходимого COM-объекта

  Потребовалось мне выбрать из строки слова, заключенные в квадратные скобки. Например, имеется строка: "Строка с [Квадратными] скобками для [примера]", результат должен быть: "Квадратными" и "примера". Так как у платформы 1С нету стандартной функции по выполнению регулярного выражения, то сразу же полез на просторы MSDN. Там я нашел класс System.Text.RegularExpressions.Regex, но создать COM-объект этого класса у меня не получилось :(, думаю, может как-то по-другому создается COM-объект для этого класса и полез в Редактор реестра:
VBScript.RegExp в редакторе реестра
  Там я обнаружил в ветке HKEY_CLASSES_ROOT имя COM-объекта VBScript.RegExp. Этот объект работает на основе библиотеки vbscript.dll и именуется технологией VBScript Regular Expressions.

Передача файла с клиента на сервер или почему метод Прочитать у табличного документа работает на сервере.

Описание проблемы


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

среда, 11 февраля 2015 г.

Запись объекта, имеющего ссылку на еще не записанный объект

Задача

Имеется справочник А,  у него в подчинении справочник Б (реквизит Владелец у справочника Б имеет тип СправочникСсылка.А). При записи элемента справочника А в базу данных, нужно сперва создать и записать элементы справочника Б, которые будут ссылаться на элемент справочника А через реквизит Владелец. Все операции записи должны выполняться в одной транзакции! Если при записи элементов справочника Б происходит ошибка, то необходимо отказаться от записи элемента справочника А.

понедельник, 9 февраля 2015 г.

Составной тип - коварный тип!

Список значений в составном типе. Задание типа значения списка.

1) Проверка заполнения реквизита.

    Если реквизит составного типа, то проверка реквизита на заполненность значением выполняем только с помощью функции ЗначениеЗаполнено().
    Ответ таков: когда у составного реквизита тип не выбран, то он имеет значение Неопределено, поэтому проверки типа ПустаяСтрока(Реквизит) Или Реквизит.Пустая() могут сгенерировать исключительную ошибку.

пятница, 6 февраля 2015 г.

Создание канонической XML

Перед формированием подписи (XMLDSIG) сообщение XML должно иметь канонический вид. Канонизация XML - это приведение XML к определенному формату по строгим правилам форматирования и требованиям к содержанию. На платформе 1С создание канонической XML можно выполнить двумя способами:

  1. Новый КаноническаяЗаписьXML;
  2. Новый КаноническийDOM.

Рассмотрим подробнее каждый из методов.

Проверка подписи XMLDSIG на примере СМЭВ

Подготовка SOAP-сообщения перед созданием подписи XMLDSIG на примере СМЭВ
Проверка подписи органа власти с помощью сервиса СМЭВ
Проверка подписи XMLDSIG (WS-Security) с помощью сервиса СПЭП СМЭВ

Для начала, нам необходимо установить КриптоПро CSP и КриптоПро CADESCOM. Скачать данные продукты можно по этой ссылке. Если используется клиент-серверный вариант работы платформы 1С, то устанавливаем продукты КриптоПро на тот же компьютер, где установлен сервер 1С:Предприятие.

Все ниже используемые API-функции описаны по адресу вот тут в разделе КриптоПро ЭЦП. Руководство разработчика.

четверг, 5 февраля 2015 г.

Сохраняем отчетные данные в формате doc, xls, pdf без COM-объектов

Пришел начальник и сказал: "выведи мне такую-то отчетную информацию, да что б в Excel'е я мог открыть!". Смотрим методы табличного документа и видим метод Записать().

Описание метода
Синтаксис:
    Записать(<ИмяФайла>, <ТипФайлаТаблицы>)
Параметры:
    <ИмяФайла> (обязательный)
    Тип: Строка.
    Имя файла, в котором сохраняется табличный документ.
    <ТипФайлаТаблицы> (необязательный)
    Тип: ТипФайлаТабличногоДокумента.
    Формат, в котором будет сохранен табличный документ.
    Значение по умолчанию: MXL
Описание:
    Записывает табличный документ в файл.

Аха, с первым параметром все понятно, а что за второй параметр?

Вычисление хэш-суммы по алгоритму SHA-512

Вычисление хэш-сумм MD, SHA при помощи CAPICOM
Вычисление хэш-суммы по алгоритму ГОСТ Р 34.11-94
Вычисление хэш-суммы по алгоритму MD5

Появилась задачка по оповещению пользователей через службу коротких сообщений (СМС). Проанализировав рынок операторов, был выбран сервис SMS.RU. Приступил к изучению API функций данного сервиса и выяснил, что одна из функций требует хэш-сумму sha512(пароль+token) для усиленной авторизации.

Пошарил  по синтакс-помошнику, но стандартной функции не нашел (естественно, платформа 1С создавалась не для выполнения сложным математических операций).

среда, 4 февраля 2015 г.

Грамотно назначаем типы реквизитам объектов метаданных конфигурации

Создавая новый реквизит, каждый раз ломал голову, какой разрядности задать числовой тип, какую выбрать длину строки и т.п. К счастью, были найдены рекомендации фирмы 1С, описывающие, какие значения необходимо задавать для реквизитов объектов конфигурации.

Числовой тип

  • Реквизиты Флаг - тип данных Булево;
  • Реквизиты Сумма - длина 15, точность 2;
  • Реквизиты Количество - длина 15, точность 3;
  • Реквизиты Коэффициент  - длина 10, точность 3;
  • Реквизиты Курс - длина 10, точность 4;
  • Реквизиты Процент - длина 5, точность 2.