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

среда, 30 декабря 2015 г.

Настройка системы для формирования документов Word или Excel на стороне сервера

Допустим, необходимо формировать документ офисного пакета Microsoft Office на стороне сервера, то есть от имени сервера 1С, но не всегда установка "из коробки" позволяет выполнять данную операцию. так как обычно происходит исключительная ошибка создания COM-объекта. В этом случае требуется более тонкая настройка системы в целом. Настройка заключается в установке прав доступа сервера 1С к DCOM-приложению и папке Desktop. Рассмотрим процесс настройки.

Откройте оснастку "Службы компонентов", для этого в командной строке выполните команду dcomcnfg (или comexp.msc /32 для 64-разрядной Windows, см. рисунок 1).
Рисунок 1. Запуск оснастки "Службы компонентов"
В узле Настройка DCOM найдите элемент Microsoft Excel Application(если хотите выполнять формирование документов Excel) или элемент Документ Microsoft Office Word 97 - 2003(если хотите выполнять формирование документов Word), нажмите правой кнопкой мыши и выберите пункт Свойства (см. рисунок 2).
Рисунок 2. Выбор приложения DCOM

воскресенье, 27 декабря 2015 г.

Актуальные часовые пояса на старой платформе

Изменения в часовых поясах страны напрямую затрагивают информационную систему, которая функционирует в нескольких часовых поясах. Обычно такие масштабы использования ИС используются в крупных организациях. С проблемой часовых поясов могут столкнуть и мелкие организации, которые, допустим, производят обмен данным между собой с использованием универсального времени (UTC).

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

Обновить информацию о часовых поясах можно двумя способами:
  1. Обновить платформу;
  2. Указать путь к актуальной базе часовых поясов.
Первый способ актуализации информации о часовых поясах нарушает золотое правило системного администратора "Работает - не лезь", так как обновление платформы может повлечь за собой другие проблемы, отнять уйму времени и сил! Второй способ отлично подходит для решения проблемы с минимальными затратами.

четверг, 17 декабря 2015 г.

Неправильный параметр набора ключей при создании ЭП на стороне сервера


Создание электронной подписи на платформе 1С с помощью СКЗИ КриптоПро CSP можно выполнять как на стороне сервера, так и на стороне клиента. В обоих случаях может появиться довольно неприятная ошибка:
Неправильный параметр набора ключей.

Неприятна данная ошибка тем, что у неё множество причин, и что бы её исправить, нужно провести целый комплекс мероприятий.

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


Допустим, имеется информационная база, с которой платформа 1С работает в клиент-серверном варианте. Создание электронной подписи будем выполнять на стороне сервера, в этом случае рекомендуется использовать сертификаты и ключи, находящиеся в хранилище локального компьютера, так как они будут доступны любому пользователю Windows. А так же имеется установленный сертификат в хранилище локального компьютера в разделе Личное (см. рисунок 1) с привязкой к закрытому ключу (см. рисунок 2).
Рисунок 1. Сертификат локального хранилища

среда, 9 декабря 2015 г.

СКД. Программная компоновка результата.

Рассмотрим программное формирование результата отчета на примере события ПриКомпоновкеРезультата, которое вызывается по-умолчанию при формировании отчета или при выполнении отчета с помощью метода СкомпоноватьРезультат().

// 1. Установим признак отказа от выполнения стандартной обработки события.
СтандартнаяОбработка = Ложь;

// 2. Получим макет, в котором хранится "шапка" и "подвал" отчета.
МакетДопОформление = ЭтотОбъект.ПолучитьМакет("ПФ_MXL_ДопОформлениеСКД");

// 3. Выведем в табличный документ шапку отчета.
ШапкаОтчета = МакетДопОформление.ПолучитьОбласть("ШапкаОтчета");
ДокументРезультат.Вывести(ШапкаОтчета);


// 4. Получим копию настроек компоновки данных.
НастройкиОтчета = ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки();

// 5. Установим значение параметра компоновки данных ОтчетнаяДата (Вкладка "Параметры" схемы компоновки данных).
ПараметрОтчетнаяДата = Новый ПараметрКомпоновкиДанных("ОтчетнаяДата");
Если НастройкиОтчета.ПараметрыДанных.НайтиЗначениеПараметра(ПараметрОтчетнаяДата) <> Неопределено Тогда
 НастройкиОтчета.ПараметрыДанных.УстановитьЗначениеПараметра(ПараметрОтчетнаяДата, ЭтотОбъект.ОтчетнаяДата);
КонецЕсли;

четверг, 3 декабря 2015 г.

Сжатие (шринк) журнала транзакций в MS SQL

Краткое описание моделей восстановления MS SQL

Довольно популярная ошибка СУБД в кругах 1Сников "Журнал транзакций для базы данных заполнен", если информационная база развернута в клиент-серверном варианте с использованием MS SQL и все настройки были оставлены по-умолчанию (см. рисунок 1).
Рисунок 1. Ошибка переполнения журнала транзакций
Конечно, MS SQL умеет автоматически усекать журнал транзакций (физически размер файла журнала транзакций не уменьшается), но бывают исключения, при которых происходит задержка усечения (начинается физическое увеличение размера файла журнала транзакций).

Для борьбы с переполнением журнала транзакций предусмотрены следующие вариант настройки СУБД:
  • создание резервной копии журнала;
  • освобождение места на диске, чтобы журнал мог автоматически расти;
  • перемещение файла журнала на диск с достаточным объемом свободного места;
  • увеличение размера файла журнала;
  • добавление файла журнала на другой диск;
  • завершение или уничтожение длительной транзакции.
Но, бесконечно свободного места на жестком диске не бывает, а усечение не уменьшает размер файла физического журнала, поэтому для уменьшения физического размера файла журнала необходимо выполнить его сжатие (шринк).

среда, 2 декабря 2015 г.

СКД. Вывод информации табличной части в одну ячейку.

Использование нескольких схем компоновки данных в одном отчете
Выгрузка отчета в таблицу/дерево значений

1) Использование функции СКД - СоединитьСтроки().


У данного способа, как мне кажется, есть минус, но он работает, но минус большой. Рассмотрим на примере: имеется в конфигурации документ "Поступление товара" с табличной частью "Товары", необходимо вывести в отчет документы и наименования поступившего товара для каждого документа.

Создадим отчет, добавим основную схему компоновки данных, в СКД добавим набор данных типа "запрос" и сформируем простенький запрос (см. рисунок 1).
Рисунок 1. Запрос набора данных

вторник, 10 ноября 2015 г.

Рекомендации по настройке и использованию веб-браузера Internet Explorer

Рекомендации по настройке и использованию веб-браузера корпорации добра (Google Chrome)
Рекомендации по настройке и использованию веб-браузера Mozilla Firefox

Настройки использования веб-браузера


Для использования веб-браузера необходимо выполнить настройку свойств обозревателя. Для этого в меню Сервис (Tools) выберите пункт Свойства обозревателя (Internet Options) и выполните настройки:

1) Разрешите выполнение JavaScript скриптов.
  • на вкладке Безопасность (Security) для зоны Internet нажмите кнопку Другой (Custom level); 
  • в разделе Сценарии (Scripting) для параметра Активные сценарии (Active scripting) установите Разрешить (Enable);
  • в разделе Прочие (Miscellaneous) для параметра Отображение разнородного содержимого (Display mixed content) установить значение Включить (Enable) (только для Microsoft Internet Explorer версии 8);
  • в разделе Загрузка (Downloads) для параметра Автоматические запросы на загрузку файлов (Automatic prompting for file downloads) установить значение Включить (Enable) (только для Microsoft Internet Explorer версии 8);
  • нажмите кнопку "OK".

четверг, 5 ноября 2015 г.

Использование маски на примере плана счетов

Одним из важнейших свойств объекта метаданных "План счетов" является  Маска. Данное свойство предназначено для ограничения вводимых пользователем символов в коде элемента (т.е. в счете), а так же для задания иерархической структуры плана счетов.
Рисунок 1. Ввод кода для предопределенного счета
Что бы ограничить ввод некоторых символов и задать формат для кода счета, необходимо составить маску из специальных символов:
  • ! - любой введенный символ преобразуется в верхний регистр; 
  • 9 - допустимо ввести произвольный символ цифры; 
  • # - допустимо ввести произвольный символ цифры или - (знак минус) или + (знак плюс) или пробел; 
  • N - допустимо ввести любые алфавитно-цифровые символы (буквы или цифры); 
  • U - допустимо ввести любые алфавитно-цифровые символы (буквы или цифры) и любой введенный символ преобразуется в верхний регистр; 
  • X (латинского алфавита) - допустимо ввести произвольный символ; 
  • ^ - недопустимо вводить этот символ интерактивно пользователем, он может устанавливаться только из языка; 
  • h - допустим ввод символов обозначения шестнадцатеричных цифр; 
  • @ – допустимо ввести любые алфавитно-цифровые символы (буквы или цифры) в верхнем регистре или пробел.

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

Передача двоичных данных с помощью веб-сервиса

Объект метаданных "Веб-сервис" предназначен для обмена данными посредством веб-технологий, а если быть точнее - по протоколу HTTP. Как же осуществляется передача двоичных данных в мире веб-разработки? Для этого используется кодирование двоичных данных под названием base64 (64 — это число символов в алфавите кодирования, из которого формируется конечный буквенно-цифровой текст на основе латинского алфавита).

Закодированные двоичные данные выглядят примерно так:
TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0

Платформа 1С в своем арсенале имеет имеет парочку функций, которые умеют кодировать двоичные данные в base64:
  • Base64Строка - имеет один входящий параметр типа ДвоичныеДанные, возвращает строку, закодированную по алгоритму base64.
  • XMLСтрока - так же имеет один входящий параметр, который может принимать значение типа ДвоичныеДанные и возвращать строку в формате base64, следует использовать для создания XML.
Допустим, имеется веб-сервис, который содержит метод GetFacsimile. Этот метод принимает номер заказа и возвращает счет факсимиле в виде PDF-файла.
Рисунок 1. Метод веб-сервиса GetFacsimile

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

Фиксируйся транзакция большая и маленькая!

Платформа 1С не поддерживает вложенные транзакции, но разработчик может использовать вложенность транзакций при написании кода. По факту будет существовать только один уровень транзакций. Такое поведение платформы накладывает ограничение: не существует возможности отменить действие транзакции некоторого уровня, не отменяя транзакции вышестоящего уровня.

В рамках уже выполняемой транзакции можно обращаться к методам:
  • НачатьТранзакцию();
  • ЗафиксироватьТранзакцию();
  • ОтменитьТранзакцию().
Вызов метода НачатьТранзакцию() при выполняемой транзакции не окажет никакого влияния на работу системы, просто произойдет увеличение значения счетчика транзакций на 1. Данный метод начинает новую транзакцию только в том случае, если значение счетчика транзакций равно 0.

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

Рекомендации по настройке и использованию веб-браузера корпорации добра (Google Chrome)

 Рекомендации по настройке и использованию веб-браузера Mozilla Firefox
Рекомендации по настройке и использованию веб-браузера Internet Explorer

Для использования веб-браузера необходимо выполнить настройку свойств обозревателя.
Для этого откройте меню Настройка и управление Google Chrome (Customize and control Google Chrome), выберите пункт Настройки (Settings). Либо наберите в адресной строке адрес chrome://settings/.
Рисунок 1. Настройки браузера
Далее нажмите ссылку Показать дополнительные настройки (Show advanced settings). В группе Личные данные нажмите кнопку Настройки контента или введите адрес chrome://settings/content.
Рисунок 2. Настройки контента
Выполните следующие настройки:

пятница, 9 октября 2015 г.

Передача таблицы значений с сервера на клиент

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

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

Вариант №1


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

&НаСервере
Функция ПолучитьТЗКакМассивСтруктур()

МояТаблицаЗначений = СоздатьТаблицуЗначений();

МассивСтруктур = Новый Массив;
Для Каждого СтрокаТЗ Из МояТаблицаЗначений Цикл
СтрокаСтруктура = Новый Структура;
Для Каждого КолонкаТЗ Из МояТаблицаЗначений.Колонки Цикл
СтрокаСтруктура.Вставить(КолонкаТЗ.Имя, СтрокаТЗ[КолонкаТЗ.Имя]);
КонецЦикла;
МассивСтруктур.Добавить(СтрокаСтруктура);
КонецЦикла;

Возврат МассивСтруктур;

КонецФункции // ПолучитьТЗКакМассивСтруктур()

&НаКлиенте
Процедура ПолучитьДанные()

ДанныеТаблицы = ПолучитьТЗКакМассивСтруктур();

КонецПроцедуры // ПолучитьДанные()


Минус данного решения - это отсутствие тех самых полезных методов таблицы значений.

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

Получение старого значения реквизита в момент записи объекта или OLD

Реляционные системы управления базами данных, такие как InterBase или FireBird, в своих триггерах поддерживают контекстные переменный NEW и OLD. Контекстная переменная NEW содержит новые значения записи, а вот переменная OLD содержит старые значения записи, следовательно, при обновлении записи (допустим BEFORE UPDATE) разработчик имеет доступ к записи до её обновления и после.

Стоит заметить что переменные OLD и NEW доступны не во всех типах триггера. Платформа 1С так же позволяет разработчику иметь доступ к старым значениям реквизита (до обновления) и одновременно к новым значениям реквизита (после обновления), но при одном условии, разработчик должен использовать события перед записью!

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

1. Выполнить явный запрос

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Договоры.ДатаПодписания КАК ДатаПодписанияСтароеЗначение
|ИЗ
| Справочник.Договоры КАК Договоры
|ГДЕ
| Договоры.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", ЭтотОбъект.Ссылка);

Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если ЭтотОбъект.ДатаПодписания = ВыборкаДетальныеЗаписи.ДатаПодписанияСтароеЗначение Тогда
// Вставить обработку
КонецЕсли;
КонецЦикла;

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

Рекомендации по настройке и использованию веб-браузера Mozilla Firefox

Рекомендации по настройке и использованию веб-браузера корпорации добра (Google Chrome)
Рекомендации по настройке и использованию веб-браузера Internet Explorer

Особенности использования


Все операции с файловой системой (получение файла с сервера, передача файла на сервер, удаление файла и т.п.) выполняются строго интерактивно. Если выполнение действия не требует взаимодействия с пользователем (напрмер выбора файла), то выдается диалог-предупреждение, требующий от пользователя подтверждения.

Настройки использования веб-браузера


Для подключения к информационным базам 1С:Предприятия 8 с помощью Mozilla Firefox нужно выполнить следующие настройки:

  • Откройте браузер, в меню Инструменты (Tools) выберите пункт Настройки (Options);
  • В открывшемся окне перейдите в раздел Содержимое (Content):
    - Снимите флажок Блокировать всплывающие окна (Block pop-up windows);
    - Установите флажок Использовать JavaScript (Enable JavaScript).
  • Перейдите в раздел Приватность (Privacy) установите следующие настройки:
    - Установите флажок Принимать cookies с сайтов (Assept cookies from sites);
    - Для детальной настройки приема или отклонения cookies щелкните кнопку Исключения (Exeptions) и следуйте пояснениям диалога настройки.

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

Выполнение POST-запроса по протоколу HTTPS на платформе 8.2 на примере Yandex.API

Выполнение POST-запроса на примере Yandex.API
Выполнение GET-запроса на примере Яндекс.API

Теперь сервис Яндекс.Геокодер работает по протоколу HTTPS (расширенная версия протокола HTTP, который поддерживает шифрование). Вызов принят, 1С вызываю тебя!

Танцы с бубном вокруг файла cacert.pem


Что бы с помощью платформы 1С выполнить HTTPS-запрос методом POST, необходимо в файл cacert.pem добавить информацию о корневом сертификате сервиса, на который выполняется запрос, иначе запрос будет завершаться ошибкой:
Peer certificate cannot be authenticated with known CA certificates

Если же платформа 1С содержит информацию о корневом сертификате, то ничего настраивать не нужно, все будет успешно выполняться.

Добавление информации о корневом сертификате


Важно! Все сертификаты из цепочки необходимо добавлять в файл cacert.pem

1. Скачать подходящий дистрибутив с сайта Win32OpenSSL, например, для 64 разрядной ОС Win64OpenSSL_light последней версии.

четверг, 30 июля 2015 г.

Выгрузка отчета в таблицу/дерево значений

Использование нескольких схем компоновки данных в одном отчете
СКД. Вывод информации табличной части в одну ячейку.

Недавно появилась задачка, необходимо создать отчет, который требуется выгружать в Excel. Написал запрос, создал схему компоновки данных и отчет готов, результат компоновки выводится в табличный документ. Приступил к реализации вывода отчетных данных в Excel и призадумался, а как же это лучше сделать?

Оказывается, результат компоновки данных можно выводить в таблицу значений или дерево значений для последующей программной обработки. Для этого предназначен объект языка программирования ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений. У этого объекта имеется метод УстановитьОбъект(), который является аналогом метода УстановитьДокумент() объекта ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент.

Привожу пример вывода результата компоновки в таблицу значений:

Функция СкомпоноватьРезультатВКоллекциюЗначений() Экспорт

тзКомпоновщикМакет = Новый КомпоновщикМакетаКомпоновкиДанных;
тзМакетКомпоновкиДанных = тзКомпоновщикМакет.Выполнить(
СхемаКомпоновкиДанных,
КомпоновщикНастроек.ПолучитьНастройки(),
,
,
Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

тзПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
тзПроцессорКомпоновкиДанных.Инициализировать(тзМакетКомпоновкиДанных);

тзРезультат = Новый ТаблицаЗначений;

четверг, 2 июля 2015 г.

Загадочное свойство БлокироватьДляИзменения

Что это за свойство?


Это свойство позволяет устанавливать режим, при котором в процессе записи набора будет установлена управляемая блокировка для всех комбинаций измерений в соответствии с записями набора записей.

Для чего используется?


Это свойство актуально для регистров, у которых разрешено разделение итогов (Разрешить разделение итогов равно Истина). поэтому данное свойство имеет смысл использовать, если проверка итогов регистра выполняется после записи и заблокировать нужно именно те комбинации, по которым записываются записи.

На что стоит обратить внимание?


Блокировка итогов регистра по набору значений измерений выполняется в момент записи набора записей.

Контроль итогов регистра можно выполнять без применений опции "ДЛЯ ИЗМЕНЕНИЙ" (в случае использования автоматического режима) или явной установки управляемой блокировки (в случае использования управляемого режима).

Если записать пустой набор данных, то блокировка итогов выполняется по "очищаемым" записям, и, соответственно, записи очищаются.
Движения.ОстаткиТоваров.Очистить();
Движения.ОстаткиТоваров.БлокироватьДляИзменения = Истина;
// Будут заблокированы записи, которые могли существовать
// у документа до его перепроведения.
Движения.ОстаткиТоваров.Записать();

четверг, 25 июня 2015 г.

Задание типа значения для реквизита с типом СписокЗначений в управляемых формах

В управляемых формах невозможно задать тип значения для реквизита, который имеет тип СписокЗначений, хотя в обычных формах такая возможность есть. Если реквизит с типом СписокЗначений является реквизитом формы, то здесь особых сложностей нету, достаточно в обработчике события формы ПриСозданииНаСервере написать код по установке типа для значения списка:

ТипыСписка = "Строка";
ДоступныеТипы = Новый ОписаниеТипов(ТипыСписка);
ЭтаФорма.РеквизитСписокЗначений.ТипЗначения = ДоступныеТипы;


Как видно из примера, тип значения устанавливается через свойство списка значений ТипЗначения, которое имеет тип ОписаниеТипов.

Другое дело, когда форма содержит таблицу значений, у которой имеется реквизит с типом СписокЗначений. В такой ситуации через обработчики событий формы к этому реквизиту не достучаться, поэтому нужно использовать обработчики событий элемента формы, связанного с данным реквизитом.
1. Реквизит ТЧ с типом СписокЗначений
Для этого напишем код по установке типа значения в обработчике события элемента формы НачалоВыбора:

среда, 24 июня 2015 г.

Использование нескольких схем компоновки данных в одном отчете

Выгрузка отчета в таблицу/дерево значений
СКД. Вывод информации табличной части в одну ячейку.

Отчеты используются для получения сводной информации на основании данных, введенных в информационной системе. Обычно отчет содержит:
  • алгоритмы, при помощи которых получается и обрабатывается информация;
  • формы, при помощи которых организуется интерфейс для ввода параметров алгоритмов и представления результатов их работы;
  • макеты, при помощи которых выводится результат выполнения алгоритма в табличный документ.
Примером применения отчетов может быть получение сводных данных о хозяйственной деятельности в необходимых для анализа разрезах.

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

Создадим внешний отчет. В отчете создадим две схемы компоновки данных, например: МакетНомерОдин и МакетНомерДва. Допустим, первая СКД в запросе содержит параметр НаОсновномСкладе:
1. Первая СКД

четверг, 18 июня 2015 г.

Убираем авторизацию пользователя у веб-сервиса

Механизм Web-сервисов позволяет использовать 1С:Предприятие 8 как набор сервисов в сложных распределенных и гетерогенных системах, а также позволяет интегрировать 1С:Предприятие 8 с другими промышленными системами использованием сервисно-ориентированной архитектуры.

Публикация веб-сервисов выполняется через конфигуратор, для этого нужно открыть окно Публикация на веб-сервере, нажав Администрирование -> Публикация на веб-сервере...
1. Опубликованный веб-клиент и веб-сервисы
Процесс публикации описывать не буду, для каждого случая он свой, но обычно достаточно выбрать веб-сервер, указать каталог публикации и нажать на кнопку Опубликовать.

Послу публикации в указанном каталоге создастся файл default.vrd. Его содержимое будет примерно таким:
<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/DemoSSL"
ib="File=&quot;C:\1с\БиблиотекаСтандартныхПодсистем\DemoSSL&quot;;">
<ws>
<point name="Exchange"
alias="exchange.1cws"
enable="true"/>

вторник, 16 июня 2015 г.

Отображение различных элементов формы в командной панели

Все-таки, программист - это не только техническая профессия, но и творческая, так как зачастую приходится самому создавать дизайн форм. Недавно мне захотелось поместить поле переключателя в командную панель управляемой формы, но не все так просто...

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

Для примера, создайте внешнюю обработку, у обработки создайте управляемую форму.
1. Управляемая форма обработки
Форма уже имеет стандартную командную панель, но в неё мы можем добавить только кнопки, вообще, командные панели могут содержать только элементы формы кнопки и подменю.

Поэтому, в свойствах стандартной панели нужно снять галочку у свойства Автозаполнение.
2. Свойства командной панели

четверг, 11 июня 2015 г.

Описание объекта конфигурации "Общий модуль"

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

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

Описание свойств


Если установлено свойство Клиент (обычное приложение) или Клиент (управляемое приложение), то все процедуры и функции общего модуля могут использоваться в клиентском приложении. В контексте неглобального общего модуля с установленным свойством Клиент (обычное приложение) доступны экспортируемые переменные, процедуры и функции модуля обычного приложения. В контексте неглобального общего модуля с установленным свойством Клиент (управляемое приложение) доступны экспортируемые переменные, процедуры и функции модуля управляемого приложения.

понедельник, 8 июня 2015 г.

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

Что может быть самым сложным для программиста? Правильно, придумать имя для переменной! Что бы конфигурация была удобочитаемой, приведу некоторые стандарты, которые описывают правила именования объектов конфигурации, переменных, процедур, функций, элементов управления и т. д.

Правила составления имен переменных


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

Пример правильного имени:
  • работа с каталогом – РаботаСКаталогом;
  • количество пачек в коробке – КоличествоПачекВКоробке.
Имена переменных не следует начинать с подчеркивания. Имена переменных ни в коем случае не должны состоять из одного символа, но использование коротких имен переменных допускается только для счетчиков циклов, например: счетчик - Сч.

воскресенье, 7 июня 2015 г.

Увеличиваем свободное место локального диска под ОС Windows

Загрузка установщика Windows 7 на материнской плате с поддержкой Skylake

Часто так бывает, что во время разработки, магическим образом заканчивается свободное место на локальном диске C. Факторов, которые съедают локальный диск, множество, зачастую неграмотно установленное программное обеспечение. Вот один из способов увеличения свободного места без расширения объема локального диска.

Перенос файла подкачки на другой локальный диск


Открыть свойства системы и на вкладке Дополнительно нажать на кнопку Параметры быстродействия системы.
1. Свойства системы
В параметрах быстродействия системы открыть вкладку Дополнительно и нажать на кнопку Изменить в разделе Виртуальная память.

суббота, 6 июня 2015 г.

Ошибка хитрого метода ПроверитьВывод() табличного документа

Столкнулся с такой ошибкой, при выводе информации на печатную форму, платформа выдает следующее сообщение:
Ошибка при вызове метода контекста (ПроверитьВывод)...

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

Проверил установленные принтеры, все исправно и работает. Эмпирическим путем выяснил, что данная ошибка возникает только у конкретной печатной формы и только под одним пользователем.

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

среда, 27 мая 2015 г.

Шифрование строковых данных с помощью CAPICOM.EncryptedData

Шифрование строковых данных. Менеджер криптографии.
Просмотр криптопровайдеров ОС Windows. Инициализация менеджера криптографии.
Шифрование строковых данных с помощью CAPICOM.EnvelopedData

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

EncryptedData - объект, который предоставляет разработчику свойства и методы для шифрования/дешифрования некой информации с использованием секретного ключа. Этот объект поддерживает следующие симметричные алгоритмы: RC2, RC4, DES, 3DES. Общая схема симметричного шифрования:
1. Симметричное шифрование
Методы объекта:
  • Decrypt - выполняет дешифрование данных, используя секретный ключ;
  • Encrypt - выполняет шифрование данных, с применением секретного ключа;
  • SetSecret - устанавливает секретный ключ.
Свойства объекта:
  • Algorithm - алгоритм. используемый для шифрования/дешифрования;
  • Content - содержит данные для шифрования либо дешифрованные данные.

понедельник, 25 мая 2015 г.

Что такое оперативное, а что такое неоперативное проведение документов.

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

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

пятница, 22 мая 2015 г.

Понятие момента времени. МоментВремени.

Для определения положения документа на временной оси используется реквизит документа Дата, он является стандартным реквизитом.
1. Стандартные реквизиты документа
Дата содержит время с точностью до секунды. Это позволяет контролировать последовательность внесения документов в базу данных.
2. Расположение документов на оси времени
Однако при большом объеме создаваемых документов может возникнуть ситуация, когда несколько документов будут иметь одинаковое значение даты (т. е. будут созданы в течение одной секунды). Возникает вопрос, как в этом случае определить в какой последовательности были созданы документы?

пятница, 15 мая 2015 г.

Шифрование строковых данных с помощью CAPICOM.EnvelopedData

Шифрование строковых данных. Менеджер криптографии.
Просмотр криптопровайдеров ОС Windows. Инициализация менеджера криптографии.
Шифрование строковых данных с помощью CAPICOM.EncryptedData

Создание тестового сертификата


Для получения необходимых утилит для работы с тестовыми сертификатами необходимо установить Visual Studio Express, ибо других способов получения этих утилит я не нашел. Перечень необходимых утилит:
  • makecert - средство создания сертификатов;
  • cert2spc - средство проверки сертификата издателя программного обеспечения;
  • pvk2pfx - средство создания файлов обмена личной информации.
Создадим самозаверяющий сертификат, который будет использоваться для шифрования, с указанием поддерживаемого криптопровайдера Microsoft Strong Cryptographic Provider с помощью утилиты makecert.exe:

makecert.exe -r -n "cn=1centerprise8.blogspot.com" -sp "Microsoft Strong Cryptographic Provider" -sky exchange -sv C:\test_cert\1centerprise.pvk C:\test_cert\1centerprise.cer

1. Создание самозаверяющего сертификата X.509
Во время создания сертификата утилита makecert.exe запросит ввод пароля на контейнер, который хранит закрытый ключ, в нашем случае, это файл с расширением pvk, вводим и запоминаем. На выходе получим два файла: 1centerprise.pvk и 1centerprise.cer.

воскресенье, 10 мая 2015 г.

Грабли метода ПрочитатьXML() объекта ФабрикаXDTO

Что таит в себе окно редактирования XDTO-пакета

Фабрика XDTO - это библиотека типов, которая описывает определенные структуры XML. В языке программирования платформы 1С имеется объект ФабрикаXDTO, который содержит все пакеты XDTO, имеющиеся в конфигурации, а также предопределенные пакеты (например, пакет типов XML схемы). У данного объекта метод ПрочитатьXML(), позволяет читать элементы данных XDTO указанного типа из объекта чтения XML:

ФайлXML = Новый ЧтениеXML;
ФайлXML.УстановитьСтроку(СтрокаXML);

Пока ФайлXML.Прочитать() Цикл

Если ФайлXML.ЛокальноеИмя = "Message" И ФайлXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ФайлXML);
КонецЕсли;

КонецЦикла;

ФайлXML.Закрыть();


Первый параметр метода является обязательным, в который передается объект чтения XML. Второй параметр метода необязательный, в который передается тип элемента данных XDTO. Если тип не указан, то будет сделана попытка определить тип данных по текущему состоянию объекта ЧтениеXML.

пятница, 8 мая 2015 г.

Маленькие хитрости больших запросов

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

Текст запроса – это инструкция, в соответствии с которой должен быть выполнен запрос. В тексте запроса описывается:
  • таблицы информационной базы, используемые в качестве источников данных запроса; 
  • поля таблиц, которые требуется обрабатывать в запросе; 
  • правила группировки; 
  • сортировки результатов; 
  • и т. д.  
Инструкция составляется на специальном языке – языке запросов и состоит из отдельных частей – секций, предложений, ключевых слов, функций, арифметических и логических операторов, комментариев, констант и параметров.

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

Рекомендации по написанию запросов к базе данных на языке запросов платформы 1С:

среда, 29 апреля 2015 г.

Что таит в себе окно редактирования XDTO-пакета

Грабли метода ПрочитатьXML() объекта ФабрикаXDTO

Термин XDTO (XML Data Transfer Objects) - это не какой-то всемирно принятый стандарт, поддерживаемый платформой 1С, а наоборот, стандарт рожденный в недрах фирмы 1С, хотя очень похож на XML Schema, на недоделанный XML Schema.

При добавлении пакета XDTO в дерево конфигурации окно редактирования пакета открывается автоматически.
1. Окно редактирования XDTO-пакета
Для того, чтобы открыть окно редактирования пакета XDTO, следует выбрать нужный пакет и выполнить команду "Открыть пакет".
2. Контекстное меню XDTO-пакета

Окно редактирования пакета XDTO содержит иерархическую структуру, которая отображается в виде дерева. В корневом элементе расположен идентификатор пакета XDTO, который содержит URI пространства имен данного пакета.

пятница, 24 апреля 2015 г.

Шифрование строковых данных. Менеджер криптографии.

Просмотр криптопровайдеров ОС Windows. Инициализация менеджера криптографии.
Шифрование строковых данных с помощью CAPICOM.EnvelopedData
Шифрование строковых данных с помощью CAPICOM.EncryptedData

Шифрование - обратимое преобразование некой информации с целью сокрытия от неавторизованных лиц и, в это же время, предоставление, авторизованным пользователям доступа к ней. Главная задача шифрования - это соблюдение конфиденциальности передаваемой информации.

Методы шифрования:
  • Симметричное шифрование - использует один и тот же ключ и для зашифрования, и для расшифрования;
  • Асимметричное шифрование - использует два разных ключа: один для зашифрования (который также называется открытым), другой для расшифрования (называется закрытым).
Объект МенеджерКриптографии платформы 1С позволяет шифровать данные, используя симметричное шифрование, так как криптопровайдеры ОС Windows используют данный вид шифрования (RC2, RC4).

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

Просмотр криптопровайдеров ОС Windows. Инициализация менеджера криптографии.

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

Перечень криптографических модулей содержится в реестре ОС Windows. Что бы просмотреть этот перечень, открываем командную строку и запускаем оснастку "Редактор реестра".
1. Запуск оснастки "Редактор реестра"

четверг, 16 апреля 2015 г.

Подготовка SOAP-сообщения перед созданием подписи XMLDSIG на примере СМЭВ

Проверка подписи органа власти с помощью сервиса СМЭВ
Проверка подписи XMLDSIG на примере СМЭВ

Для создания электронной подписи SOAP-сообщения используется WS-Security – это протокол передачи подписанных SOAP-сообщений. Основная его особенность заключается в том, что он работает на транспортном уровне. При разработке Web-сервисов и передаче их WSDL-документов сторонним разработчикам, в большинстве случаев описывается только тело входящего и исходящего SOAP-сообщения, в котором описана вся бизнес-структура передаваемых данных в формате XML. При применении стандарта WS-Security, электронная подпись передается в заголовке SOAP-сообщения, таким образом, в заголовок добавляется XML-структура, в которой содержится электронная подпись, подписывающая данные, находящиеся в теле SOAP-сообщения.
Структура электронной подписи SOAP-сообщения

четверг, 9 апреля 2015 г.

Вызов веб-сервиса выполнением POST-запроса

Выполнение POST-запроса на примере Yandex.API
Вызов Web-сервиса с помощью динамической ссылки

SOAP расширяет HTTP для возможности передачи XML-сообщений, используемых для удалённого взаимодействия и для передачи целых XML-документов. Поэтому, что бы вызвать Web-сервис, необязательно использовать специальные объекты встроенного языка для работы с SOAP, достаточно сгенерировать SOAP-сообщение и выполнить HTTP-запрос методом POST.

Формирование SOAP-сообщения


Структура SOAP-сообщения выглядит следующим образом:
1. Структура SOAP-сообщения
Заголовок <soap:Header> является необязательным и служит для передачи информации, такой как: аутентификация, информация о защите, информация о транзакция и т.д. Платформа 1С не поддерживает работу с заголовком средствами встроенного языка и так же веб-сервисы, реализованные на этой платформе.

вторник, 7 апреля 2015 г.

Вызов Web-сервиса с помощью динамической ссылки

Вызов веб-сервиса выполнением POST-запроса

Механизм Web-сервисов позволяет использовать систему, написанную на платформе 1С, как набор сервисов в сложных распределенных и гетерогенных системах, а также позволяет интегрировать ее с другими информационными системами с использованием сервис-ориентированной архитектуры (SOA).

Платформа 1С позволяет разработчику вызывать Web-сервисы, предоставляемые другими поставщиками, двумя способами:
  • с помощью статических ссылок, создаваемых в дереве объектов конфигурации;
  • с помощью динамических ссылок, создаваемых средствами встроенного языка.
При использовании статической ссылки платформа 1С получает описание Web-сервиса поставщика только один раз, при создании ссылки. За счет этого достигается большая скорость работы.
1. Объект конфигурации WS-ссылки для использования механизма статических ссылок
При использовании динамической ссылки, описание Web-сервиса получается каждый раз при вызове Web-сервиса. Скорость работы при этом уменьшается, но зато такой подход обеспечивает актуальность описания Web-сервиса поставщика, то есть используется последняя версия WSDL-документа. В случае же использования статических ссылок для получения актуального описания Web-сервиса требуется выполнить повторный импорт WSDL-документа средствами конфигуратора и затем сохранить измененную конфигурацию.

вторник, 31 марта 2015 г.

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

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

Задача: выполнять отбор в списке документов по контрагенту, используя виды отбора Равно, Не равно, В иерархии и В списке.

Добавил реквизит формы ПоКонтрагенту, задал для него составной тип (СправочникСсылка.Контрагент и СписокЗначений) что бы можно было указывать множество контрагентов для вида отбора В списке. Решил проверить работу выбора контрагентов и ужаснулся, при выборе типа реквизита Список значений, добавление каждого контрагента в список происходило через выбор типа значения списка!
1. Выбор типа значения списка

четверг, 26 марта 2015 г.

Выполнение нескольких запросов к БД одним объектом Запрос

Допустим, разработчику требуется  выполнить несколько запросов к базе данных. Для этого он создает несколько объектов Запрос, указывает текст запроса и выполняет запрос, все просто и банально, но можно обойтись одним объектом Запрос. В этом случае требуется объединить тексты запросов в один запрос, используя пакеты запросов, и выполнить его.

вторник, 24 марта 2015 г.

Выполнение POST-запроса на примере Yandex.API

Платформа 1С поддерживает выполнение HTTP-запросов методом POST. POST-запрос позволяет передать на веб-сервер большой объем данных, в отличии от GET-запроса, например, файл или строку большой длины. Передача значений параметров осуществляется их помещением в тело запроса. Обязательным заголовком для данного вида запроса является Content-Type, в котором указывается кодировка для веб-сервера, что бы он знал как обрабатывать (раскодировать) HTTP-запрос.

Рассмотрим выполнение HTTP-запроса методом POST на примере сервиса Яндекс.Геокодер. В запросе мы будем передавать через параметр geocode название географического объекта, в ответ нам будут приходить сведения об этом объекте (координаты, название, адрес . . .).

понедельник, 23 марта 2015 г.

Последовательность вызова событий при записи документа

Последовательность выполнения событий при записи в регистр сведений

У объекта Документ имеется свой набор событий, с помощью которых разработчик может вмешаться в процесс записи документа в базу данных используя обработчики этих событий. В зависимости от вида действия, которое выполнит пользователь, события документа вызываются в определенной последовательности.
Существуют следующие основные виды действий для документа:
  • Записать
  • Провести
  • Провести и закрыть
  • Отмена проведения
Рассмотрим последовательность выполнения событий при каждом действии.

вторник, 17 марта 2015 г.

Выполнение GET-запроса на примере Яндекс.API

Выполнение POST-запроса на примере Yandex.API
Выполнение POST-запроса по протоколу HTTPS на платформе 8.2 на примере Yandex.API

Платформа 1С позволяет разработчикам выполнять HTTP-запрос методом GET. С помощью GET-запроса веб-серверу передаются параметры (тело у такого запроса отсутствует), в ответ сервер возвращает некую информацию. Параметры GET-запроса имеют следующий формат ИмяПараметра=ЗначениеПараметра и разделяются вопросительным знаком. Пример GET-запроса: http://geocode-maps.yandex.ru/1.x/?geocode=Ивановка.

Рассмотрим выполнение HTTP-запроса методом GET на сервис Яндекс.Геокодер. В запросе мы будем передавать через параметр geocode название географического объекта, в ответ нам будут приходить сведения об этом объекте (координаты, название, адрес . . .).

понедельник, 16 марта 2015 г.

Конвертация строковых данных в строку формата base64. Способ N2.

Как конвертировать строковые данные в строку формата base64 с помощью стандартных средств платформы 1С описано в этом сообщении: Конвертация строковых данных в строку формата base64. Плюс данного решения - это использование стандартных средств, то есть ничего устанавливать дополнительно не надо. Минус - это наличие файловой операции, которая занимает определенное время выполнения.

Имеется второй вариант решения данной задачи - прибегнуть к использованию библиотеки CAPICOM. Как регистрировать библиотеку и почему её использование не рекомендуется описано в этой статье: Вычисление хэш-сумм MD, SHA при помощи CAPICOM.

воскресенье, 15 марта 2015 г.

Вычисление хэш-сумм MD, SHA при помощи CAPICOM

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

Установка CAPICOM


Компания Microsoft не советует использовать библиотеку CAPICOM, но без её COM-объектов обойтись трудно. Первым делом необходимо скачать Platform SDK CAPICOM. Этот пакет содержит свободно распространяемые файлы компоненты CAPICOM 2.1.0.1 и примеры её использования. CAPICOM можно использовать для электронной подписи данных и её проверки, хэширования данных, шифрования и расшифровки данных и т.д. После запуска скачанного пакета мастер установки произведет копирование файлов компоненты в указанную папку. В папке ...\Microsoft CAPICOM 2.1.0.2 SDK\Lib\X86 находится файл CAPICOM.dll который нужно зарегистрировать в системе, для этого запустите командную строку от имени администратор и выполните команду regsvr32 CAPICOM.dll:
Регистрация библиотеки CAPICOM
На этом установка закончена, можно приступать к использованию COM-объектов библиотеки CAPICOM в конфигурации :)

пятница, 13 марта 2015 г.

Последовательность выполнения событий при записи в регистр сведений

Последовательность вызова событий при записи документа

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

В случае записи новой записи (то есть запись с такими значениями измерений еще не существует в регистре сведений) из формы записи, последовательность вызова событий следующая:
Последовательность вызова событий при записи из формы новой записи

воскресенье, 8 марта 2015 г.

Получение внесенных изменений в конфигурацию

Часто так бывает, что требуется получить информацию о внесенных изменениях в конфигурацию. Рассмотрим три ситуации.

Первая ситуация - конфигурация полностью на поддержке


Здесь все просто, никаких изменений в конфигурацию не вносили.

Вторая ситуация - конфигурация на поддержке с возможностью изменений


После разрешения внесения изменений в конфигурацию с сохранением поддержки, платформа создает конфигурацию поставщика в структуре информационной базе. Что бы просмотреть какие были внесены изменения в конфигурацию, нужно перейти в настройку поддержки (Конфигурация -> Поддержка -> Настройка поддержки). В открывшемся окне нажать на кнопку Сравнить, Объединить.

пятница, 6 марта 2015 г.

Конвертация строковых данных в строку формата base64

Конвертация строковых данных в строку формата base64. Способ N2.

Любые данные (строка, картинка, видео и т.д.) конвертируются в строку формата base64. Рассмотрим пример на строковых данных. У платформы 1С имеется функция Base64Строка на вход которой подаются данные в двоичном виде. Что бы данные привести к двоичному виду, необходимо их записать в файл и создать объект ДвоичныеДанные на основе этого файла.

Алгоритм конвертации
  1. Записываем строку в текстовый файл с указанием кодировки UTF-8 без BOM (CESU-8);
  2. Считываем текстовый файл как двоичные данные;
  3. Передаем двоичные данные в функцию Base64Строка

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

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

Реализации вычисления хэш-суммы по алгоритму ГОСТ 34.11-94.


Что требуется


Так как алгоритм отечественного производства, необходимо установить программные продукты КриптоПро CSP и КриптоПро CADESCOM. После установки программных продуктов КриптоПро будет доступен COM-объект HasheData с ProgID - CAdESCOM.HashedData. Этот объект предоставляет свойства и методы для вычисления хэш-суммы данных.

четверг, 5 марта 2015 г.

Проверка подписи органа власти с помощью сервиса СМЭВ


Проверка подписи органа власти


Как проверять электронную подпись (ЭП-ОВ, ЭП-СМЭВ, ЭП-ПГУ) формата XMLDSIG у SOAP-сообщения с помощью КриптоПро CSP + КриптоПро CADESCOM рассказывается в этом сообщении.

Проверку только подписи органа власти (ОВ) можно выполнить с помощью сервиса СМЭВ: "Сервис проверки технологической электронной цифровой подписи ЭП-ОВ SignatureVerification".

вторник, 3 марта 2015 г.

Создание временного сертификата для использования во время разработки

Что такое MakeCert


MakeCert - инструмент для создания сертификатов X.509, которые предназначены исключительно для тестирования разрабатываемого приложения. Этот инструмент создает пару ключей(открытый и закрытый) для цифровой подписи и помещает её в файл сертификата!!!

MakeCert входит в состав пакета Windows SDK, который можно скачать с http://go.microsoft.com/fwlink/p/?linkid=84091. Если вам не хочется устанавливать целый пакет разработчика, то вот ссылка на сам файл.

суббота, 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) Проверка заполнения реквизита.

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