Сообщения

Сообщения за февраль, 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-байтового массива.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Подготовка SOAP-сообщения перед созданием подписи XMLDSIG на примере СМЭВ Проверка подписи органа власти с помощью сервиса СМЭВ Проверка подписи XMLDSIG (WS-Security) с помощью сервиса СПЭП СМЭВ Для начала, нам необходимо установить КриптоПро CSP  и КриптоПро CADESCOM. Скачать данные продукты можно по этой  ссылке . Если используется клиент-серверный вариант работы платформы 1С, то устанавливаем продукты КриптоПро на тот же компьютер, где установлен сервер 1С:Предприятие. Все ниже используемые API-функции описаны по адресу  вот тут  в разделе КриптоПро ЭЦП. Руководство разработчика .

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

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

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

Вычисление хэш-сумм MD, SHA при помощи CAPICOM Вычисление хэш-суммы по алгоритму ГОСТ Р 34.11-94 Вычисление хэш-суммы по алгоритму MD5 Появилась задачка по оповещению пользователей через службу коротких сообщений (СМС). Проанализировав рынок операторов, был выбран сервис SMS.RU. Приступил к изучению API функций данного сервиса и выяснил, что одна из функций требует хэш-сумму sha512(пароль+token) для усиленной авторизации. Пошарил  по синтакс-помошнику, но стандартной функции не нашел (естественно, платформа 1С создавалась не для выполнения сложным математических операций).

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

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