Сообщения

Показаны сообщения с ярлыком ""

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

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

Часть 2. Тестирование и отладка HTTP-сервиса с помощью SoapUI

Изображение
Часть 1. Создание HTTP-сервиса Самый простой способ тестирования http-сервиса, это воспользоваться готовым бесплатным программным продуктом, который создан именно для таких целей. Я предпочитаю пользоваться программой SoapUI. Запускаем SoapUI, создаем новый REST проект File -> New REST Project. В открывшемся окне вводим URI http-ресурса (см. рисунок 1), который собран по шаблону: http://<доменное имя>/<имя публикации>/hs/<шаблон URL>?<параметры> . Рисунок 1. Создание нового REST проекта

Влияние свойства "Изменяет данные" на поведение команды объекта

Изображение
Многие начинающие разработчики игнорируют свойство команды объекта "Изменяет данные"то ли не замечают его, то ли не хотят разбираться с ним. Давайте выясним, каким образом данное свойство влияет на поведение команды и почему не стоит его игнорировать. Создадим для справочника две команды, одна с установленным свойством "Изменяет данные", другая без (см. рисунок 1). Рисунок 1. Команды объекта

Часть 1. Создание HTTP-сервиса

Изображение
Часть 2. Тестирование и отладка HTTP-сервиса с помощью SoapUI Разработаем HTTP-сервис, который по уникальному идентификатору номенклатуры будет возвращать остаток этой номенклатуры на складе. HTTP-сервис должен отвечать следующим требованиям: Формат запроса и ответа - JSON; Запрос принимается методом POST; В заголовках запроса должна присутствовать информация о клиенте (клиент - другая информационная система); Сервис должен быть версионируемым (что бы клиенты не страдали от изменений в сервисе, а по возможности переходили на следующую версию). Первым делом, создаем HTTP-сервис HTTPСервисОстатки , в корневом URL указываем значение balance . Рисунок 1. Основные свойства http-сервиса

Описание виртуальных таблиц регистра сведений

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

Работа с двоичными данными на примере генерации UUID версии 1

Изображение
Наконец-то платформа 1С с версии 8.3.9 позволяет разработчику работать с двоичными данными в полном объеме при помощи встроенных функций, не прибегая к COM-объектам и внешним компонентам. Рассмотрим упрощенный алгоритм генерации уникального идентификатора версии 1, то есть по алгоритму основанному на времени. Конструкция Новый УникальныйИдентификатор() генерирует уникальный идентификатор версии 4, то есть по алгоритму основанному на случайном числе. Выяснить версию уникального идентификатора очень легко, так как уникальный идентификатор хранит в себе версию, поэтому можно либо самому декодировать UUID и вычислить версию, либо прибегнуть к помощи сайтам, которые умеют декодировать UUID (см. рисунок 1). Рисунок 1. Результат декодирования UUID версии 4 на сайте https://realityripple.com/Tools/UnUUID/

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

Изображение
Как-то на собеседовании мне прилетело тестовое задание, в котором одним из пунктов было получение остатков и оборотов по каждому товару на каждый день одним запросом. Делюсь своим вариантом решения в надежде что кто-то в комментариях поделится своим вариантом решения.  Вся соль задачи состоит в том, что обращения к виртуальной таблице остатков и оборотов в запросе не достаточно, так как эта виртуальная таблица содержит периоды, по которым были движения, если так можно выразиться (см. рисунок 1). Иными словами, если Товар №1 поступил в магазин в начале недели (в понедельник) в количестве 5ти штук и за неделю не было ни одной продажи, то виртуальная таблица по этому товару за эту неделю выдаст лишь одну запись за понедельник, которая будет отражать остатки на начало и конец дня, приход (+5), расход (0) и оборот (0).

Открытие формы выбора с отбором. Варианты установки отбора.

Изображение
Рассмотрим различные варианты установки отбора при выборе объекта на документе ДокументОтборПриемаТовара . У документа имеются следующие реквизиты (см. рисунок 1): ПоставщикОтбор (тип СправочникСсылка.Поставщики); ТоварОтбор (тип СправочникСсылка.Товары); ОтветственныйОтбор (тип СправочникСсылка.Ответственный); ПриемТовара (тип ДокументСсылка.ПриемТовара). Рисунок 1. Структура документа ДокументОтборПриемаТовара Выбирать будем документ ПриемТовара , а отбор в форме выбора будет устанавливаться по реквизитам с постфиксом Отбор. Документ ПриемТовара имеет реквизиты (см. рисунок 2): Поставщик (тип СправочникСсылка.Поставщики); Ответственный (тип СправочникСсылка.Ответственный); Комментарий (Тип Строка). А так же табличную часть Товары, состоящую из реквизитов Товар (тип СправочникСсылка.Товары) и Количество (тип Число). Рисунок 2. Структура документа ПриемТовара

Запуск агента сервера 1С:Предприятие от имени доменного пользователя

Изображение
1. Создаем доменную учетную запись. Тут ничего подробно расписывать не буду, да и не занимаюсь я администрированием сети, пусть лучше этим займется мастер своего дела - системный администратор. 2. Блокируем начало сеансов Запускаем консоль администрирования серверов 1С:Предприятие, открываем свойства информационной базы и устанавливаем галочку для свойства Блокировка начала сеансов включена . Учтите, что как только вы примените данное свойства, начало любых сеансов будет блокироваться, поэтому для выполнения следующего пункта конфигуратор должен быть запущен до применения свойства. 3. Делаем резервную копию Тут уж как вам душа велит. Как по мне, самый простой и надежный способ создания резервной копии - это выгрузка информационной базы через конфигуратор.

Открываем доступ пользователю к хранилищу сертификатов локального компьютера

Изображение
В данной статье рассматривается решение проблемы доступа к хранилищу сертификатов на операционных системах семейства Windows! В библиотеке стандартных подсистем (БСП), начиная с версии 2.3, реализован мощный программный интерфейс для работы с криптографическими операциями. Выполнение криптографических операций требует обращение к хранилищу сертификатов, где хранится информация о сертификатах, установленных на компьютере. В момент программного обращения к хранилищу сертификатов, с целью получения информации о сертификате, может возникнуть ошибка доступа. Данная ошибка возникает по причине отсутствия необходимых прав у пользователя ОС к хранилищу сертификатов. ОС Windows сертификаты хранит в двух основных хранилищах, которые подразделяются на вложенные хранилища. Основные хранилища: Хранилище локального компьютера - содержит сертификаты, доступ к которым осуществляется выполняющимися на компьютере процессами; Хранилище текущего пользователя - интерактивные приложения обычно пом...

Работа с base64 при разработке веб-сервиса

Изображение
Допустим, у вас имеется веб-портал, который генерирует печатную форму в формате doc/docx. Генерация печатной формы происходит на стороне сервера - вызывается веб-сервис, который возвращает строку base64. Для отладки такого веб-сервиса потребуется: Google Chrome Notepad++ Откройте страницу веб-портала с данным функционалом в браузере Google Chrome и вызовите панель отладки, нажав на F12. Выполните команду формирования печатной формы (т.е. команду, которая отвечает за вызов веб-сервиса), после этого действия в окне отладки отразится пункт с информацией по выполнению команды (информация о выполнении POST-запроса) (см. рисунок 1). Рисунок 1. Панель отладки Google Chrome

Валидация сертификата при проверке подписи XMLDSIG

В статье Проверка подписи XMLDSIG на примере СМЭВ рассказывается про проверку электронной подписи (ЭП) формата XMLDSIG. Как показала практика, метод Verify() объекта SignedXML не выполняет валидацию (действительность) сертификата ЭП. Проверить действительность сертификата каждой электронной подписи, которой подписан XML документ, можно с помощью свойства Signers того же объекта SignedXML. Коллекция Signers заполняется в порядке следования элементов, найденных XPath-запросом. По умолчанию используется следующий запрос: "//*[local-name()='Signature' and namespace-uri()='http://www.w3.org/2000/09/xmldsig\#']" . Важно, свойство Signers доступно только после проверки подписи. Данное свойство содержит коллекцию подписей, для которых доступен ограниченный набор свойств: можно узнать статус подписи при помощи свойства Signer.SignatureStatus; получить информацию о сертификате ключа подписи при помощи свойства Signer.Certificate. Свойство Signer.Certifica...

Ошибка получения объекта com: отказано в доступе.

Изображение
Данная ошибка возникла при использовании библиотеки, например HASP, которая была зарегистрирована с помощью COM+. Такая регистрация помогает использовать 32 разрядные библиотеки на 64 разрядных серверах. Подробное описание действий по регистрации библиотек легко найти на просторах интернета . После регистрации не всегда проходит все гладко по созданию COM объекта. Может возникнуть ошибка доступа к COM объекту, которая звучит примерно так: Ошибка получения объекта COM: отказано в доступе. Что бы избавиться от ошибки, откройте оснастку "Службы компонентов". Раскройте дерево служб и в ветке COM+ найди нужную службу, откройте её свойства (см. рисунок 1). Рисунок 1. Свойства приложения COM+

СКД. Оформление ресурса для итогов

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

СКД. Программное чтение/запись СКД в/из XML.

Сериализация объектов в XML Объект типа СхемаКомпоновкиДанных не имеет в своем арсенале метода записи/чтения себя в/из XML. Но все исправимо благодаря возможности сериализации схемы компоновки данных в объект XDTO. // Запись СКД в XML-файл. ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.ОткрытьФайл(ИмяФайлаСКД); СериализаторXDTO.ЗаписатьXML(ЗаписьXML, СхемаКомпоновкиДанных); ЗаписьXML.Закрыть(); Сериализация объектов 1С выполняется с помощью объекта глобального контекста СериализацияXDTO - это сериализатор XDTO, соответствующий глобальной фабрики XDTO.

Сериализация объектов в XML

СКД. Программное чтение/запись СКД в/из XML. Наверняка, каждый начинающий программист сталкивался с заданием выгрузки объектов в XML, но из-за плохого знания механизмов платформы 1С, выполнял задание в лоб. Алгоритм выгрузки заключался в написании кода по записи значения каждого реквизита в XML-файл. Наиболее простой способ выгрузки объектов в XML - воспользоваться глобальным методом ЗаписатьXML() , который предназначен для сериализации объектов/значений в формат XML. Функция ПолучитьXML(Значение) ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(); ЗаписатьXML(ЗаписьXML, Значение); Возврат ЗаписьXML.Закрыть(); КонецФункции Важно! Значения не всех типов могут быть записаны в формате XML данным методом. В XML могут быть записаны значения следующих типов: Неопределено, Null, Булево, Число, Строка, Дата, Тип, УникальныйИдентификатор, ДвоичныеДанные, ХранилищеЗначения, ОписаниеТипов, а также ссылки объектов данных и сами объекты данных, наборы записей регистров, менед...

Особенность работы конструкции дополнения дат в запросе

В случае если поле, по которому рассчитываем итоги, является полем типа Дата, то возможно дополнение результатов датами в заданном периоде. Делается это при помощи ключевого слова ПЕРИОДАМИ, после которого в скобках указывается вид периода (одно из СЕКУНДА, МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД, ДЕКАДА, ПОЛУГОДИЕ), начальная и конечные даты интересуемого периода. В случае если начальные и конечные даты не указаны, будут использованы первая и последняя даты, участвующие в результате. Допустим, мы написали запрос с дополнением дат: ВЫБРАТЬ НАЧАЛОПЕРИОДА(_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.Период, МЕСЯЦ) КАК Период, _ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.Номенклатура КАК Номенклатура, СУММА(_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.КоличествоПриход) КАК КоличествоПриход, СУММА(_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.КоличествоРасход) КАК КоличествоРасход, СУММА(_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.КоличествоОб...

Примеры применения функции СКД - ВычислитьВыражение

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

Программное открытие внешней обработки. Безопасный режим.

Изображение
Программное открытие внешней обработки осуществляется с помощью объекта глобального контекста ВнешниеОбработки, который имеет тип ВнешниеОбработкиМенеджер . Для каждого режима работы платформы 1С (режим обычного приложения и режим управляемого приложения) используются различные методы объекта для работы с внешними обработками. Запуск внешней обработки в режиме обычного приложения В обычном приложении необходимо использовать метод Создать() объекта ВнешниеОбработки, в который передается полное имя файла внешней обработки. Метод возвращает объект типа ВнешняяОбработка , этот объект и есть открываемая внешняя обработка. Если требуется открыть форму внешней обработки, то у полученного объекта вызываем метод ПолучитьФорму(), который вернет основную форму, а затем вызываем метод Открыть() для её открытия.

Создание ЭП-ОВ для взаимодействия со СМЭВ

Изображение
Проверка подписи XMLDSIG (WS-Security) с помощью сервиса СПЭП СМЭВ Проверка подписи XMLDSIG на примере СМЭВ Для взаимодействия со СМЭВ, все исходящие сообщения информационной системы, подключенной к СМЭВ, должны быть подписаны с целью удостоверения данных. Требования к алгоритмам создания электронной подписи информационной системы следующие: алгоритмы для расчета хеш-сумм -  ГОСТ Р 34.11-94 ; формирования подписи -  ГОСТ Р 34.10-2001 . Сообщение СМЭВ представляет собой XML документ, который подписывается ЭП по формату XMLDSIG (спецификация WS-Security). Подробное описание алгоритма создания ЭП находится в методических рекомендациях СМЭВ. Алгоритм можно реализовать самостоятельно, но в данной статье создание ЭП будем выполнять с помощью программных продуктов компании КриптоПро. Первым делом выполняем установку продуктов КриптоПро CSP и КриптоПро CADESCOM . К сожалению они являются платными, но использовать триальную версию можно 90 дней. Если подпись будет создавать...