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

среда, 28 декабря 2016 г.

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

Допустим, у вас имеется веб-портал, который генерирует печатную форму в формате doc/docx. Генерация печатной формы происходит на стороне сервера - вызывается веб-сервис, который возвращает строку base64.

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

воскресенье, 25 декабря 2016 г.

Валидация сертификата при проверке подписи 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.Certificate содержит объект Certificate. У данного объекта есть метод IsValid(), который выполняет проверку действительности сертификата и возвращает объект CertificateStatus, содержащий результат проверки.

четверг, 22 декабря 2016 г.

Master/Kuro Coil своими руками!

Для создания собственного инструмента по изготовлению коилов потребуется:
  1. прямоугольный деревянный брусочек размером примерно 2 см * 1 см * 15 см (Ш*В*Д);
  2. набор сверл по дереву от 1.5 мм до 5мм;
  3. дрель;
  4. саморезы;
  5. пила по дереву;
  6. наждачная бумага;
  7. прямые руки;
Первым делом разрезаем по длине деревянную заготовку, что бы вышли два брусочка длинною в 8-10 см и 5-6 см. В более длинном брусочке просверливаем аккуратно 5 отверстий диаметрами 1.5, 2.0, 2.5, 3.0, 3.5 мм с шагом в 1 см (см. рисунок 1). В моем наборе сверл было сверло еще и на 3.2 мм, им я тоже воспользовался.
Рисунок 1. Отверстия для вставки сверла под намотку

вторник, 20 декабря 2016 г.

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

Данная ошибка возникла при использовании библиотеки, например HASP, которая была зарегистрирована с помощью COM+. Такая регистрация помогает использовать 32 разрядные библиотеки на 64 разрядных серверах. Подробное описание действий по регистрации библиотек легко найти на просторах интернета.

После регистрации не всегда проходит все гладко по созданию COM объекта. Может возникнуть ошибка доступа к COM объекту, которая звучит примерно так:

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

Что бы избавиться от ошибки, откройте оснастку "Службы компонентов". Раскройте дерево служб и в ветке COM+ найди нужную службу, откройте её свойства (см. рисунок 1).
Рисунок 1. Свойства приложения COM+

воскресенье, 11 декабря 2016 г.

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

Задача


Отчет выводит информацию о оборотах номенклатуры . Требуется в отчете выводить итоговое поле оборота в формате: представление 0 как ноль, разделитель групп - пробел, группировка по три знака, в конце числа добавить приставку "шт.".

Реализация


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

понедельник, 21 ноября 2016 г.

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

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

Объект типа СхемаКомпоновкиДанных не имеет в своем арсенале метода записи/чтения себя в/из XML. Но все исправимо благодаря возможности сериализации схемы компоновки данных в объект XDTO.

// Запись СКД в XML-файл.
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ИмяФайлаСКД);
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, СхемаКомпоновкиДанных);
ЗаписьXML.Закрыть();


Сериализация объектов 1С выполняется с помощью объекта глобального контекста СериализацияXDTO - это сериализатор XDTO, соответствующий глобальной фабрики XDTO.

суббота, 19 ноября 2016 г.

Установка RBA в бакомайзер Joyetech Delta 2 (18+)

Контент предназначен для лиц старше 18 лет!

Почему электронная сигарета в АйТиБложике? Да потому что, для меня это гиковская игрушка по намотке спиралей и извлечению вкусных и больших облаков пара. Моды поддерживают обновление прошивок, а для некоторых плат, к примеру DNA 75, можно собирать собственные прошивки. Ну вы поняли!

Выбор был долгим и мучительным, и в итоге победил бакомайзер Delta 2 от фирмы Joyetech. Почему он:
  1. Стекло защищено от ударов;
  2. Доступ к испарителю при заправленном баке;
  3. Обслуживаемая база на одну спираль (понравилась своей конструкцией);
  4. Негреющийся дриптип (делриновый коннектор);
  5. Возможность использования как под сигаретную, так и под кальянную затяжку;
  6. Минимум деталей.
В этой статье я опишу создание своей "дзеновой" намотки для кальянной затяжки, которая мне больше всего понравилась по вкусу и навалу.

Берем проволоку фирмы Kanthal типа A1 около 30 сантиметров диаметром 0.4 миллиметра (см. рисунок 1).
Рисунок 1. Kanthal A1 0.4mm (AWG 26).
Если проволока не ровная, имеет изгибы и закручивается, то берем дрель, вставляем один конец в патрон, а второй слегка закусываем плоскогубцами, и начинаем не спеша работать дрелью на низких оборотах. После данных действия проволока станет такой же ровной как на рисунке.

суббота, 5 ноября 2016 г.

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

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

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

Наиболее простой способ выгрузки объектов в XML - воспользоваться глобальным методом ЗаписатьXML(), который предназначен для сериализации объектов/значений в формат XML.

Функция ПолучитьXML(Значение)
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ЗаписатьXML(ЗаписьXML, Значение);
Возврат ЗаписьXML.Закрыть();
КонецФункции


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

суббота, 29 октября 2016 г.

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

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

Допустим, мы написали запрос с дополнением дат:

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

СГРУППИРОВАТЬ ПО
_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.Номенклатура,
НАЧАЛОПЕРИОДА(_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.Период, МЕСЯЦ)

УПОРЯДОЧИТЬ ПО
Период,
Номенклатура
ИТОГИ
СУММА(КоличествоПриход),
СУММА(КоличествоРасход),
СУММА(КоличествоОборот),
СУММА(КоличествоНачальныйОстаток),
СУММА(КоличествоКонечныйОстаток)
ПО
Период ПЕРИОДАМИ(МЕСЯЦ, &НачалоПериода, &КонецПериода)

четверг, 27 октября 2016 г.

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

ВычислитьВыражение - довольно сложная функция СКД для понимания, а примеры применения в справочной информации довольно скудны. В данной статье рассмотрены примеры, которые наверняка пригодятся каждому разработчику:
  1. нарастающий итог в группировке;
  2. нарастающий итог в кросс-таблице;
  3. получение предыдущего значения;
  4. вывод ТЧ в одной строке.

1. Получение показателя нарастающим итогом


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

воскресенье, 9 октября 2016 г.

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

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

Запуск внешней обработки в режиме обычного приложения


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

суббота, 27 августа 2016 г.

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

Проверка подписи XMLDSIG (WS-Security) с помощью сервиса СПЭП СМЭВ
Проверка подписи XMLDSIG на примере СМЭВ

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

Первым делом выполняем установку продуктов КриптоПро CSP и КриптоПро CADESCOM. К сожалению они являются платными, но использовать триальную версию можно 90 дней. Если подпись будет создаваться на клиенте (&НаКлиенте), то устанавливаем на клиентскую машину КриптоПро. Если же создание подписи будет происходит на сервере (&НаСервере), то соответственно устанавливаем КриптоПро на тот компьютер, где установлен сервер 1С:Предприятие.

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

воскресенье, 14 августа 2016 г.

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

При открытии формы объекта, задействованы не только обработчики событий формы, но и модуль менеджера и модуль объекта. Перед рассмотрением последовательности вызова событий, хочу заметить, что количество обработчиков событий для модуля объекта и модуля формы равно не количеству отображаемых процедур в подсказке (см. рисунок 1), а на единицу больше.
Рисунок 1. Обработчики событий модуля объекта Документ
У этих модулей дополнительно имеется обработчик, связанный с активацией модуля, т.е. тело модуля это и есть обработчик активации модуля, который не отображается в подсказке.

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

среда, 10 августа 2016 г.

Загрузка данных табличного документа в таблицу значений

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

Способ основывается на использовании объекта ПостроительОтчета - это объект, позволяющий на основе заданного текста запроса или источника данных, а так же настроек, получить результат и вывести его в табличный документ или диаграмму.

Описание способа

1. Получаем область ячеек табличного документа, которую требуется поместить в таблицу значений. Получение области нужно задавать таким образом, что бы в неё входила строка заголовков колонок (см. рисунок 1), особенность работы объекта ПостроительОтчета.

ОбластьЯчеек = ТабДокумент.Область(1, 1, ПоследняяСтрока, ПоследняяКолонка);

Рисунок 1. Область ячеек табличного документа

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

Агрегатные функции системы компоновки данных

Важно! Если параметр функции имеет тип Строка и в нем указывается имя поля, которое содержит пробелы, то такое имя поля должно быть заключено в квадратные скобки.
Например: "[Количество Оборот]".

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

Пример:
Сумма(Продажи.СуммаОборот)

2. Количество (Count) - рассчитывает количество значений отличных от значения NULL. В качестве параметра можно передавать Массив. В этом случае функция будет применена к содержимому массива.

Синтаксис:
Количество([Различные] Параметр)

В указания получения различных значений следует перед параметром метода Количество указать Различные (Distinct).

Пример:
Количество(Продажи.Контрагент)
Количество(Различные Продажи.Контрагент)

пятница, 5 августа 2016 г.

Проверка подписи XMLDSIG (WS-Security) с помощью сервиса СПЭП СМЭВ

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

В методических рекомендациях по работе с единой системой межведомственного электронного взаимодействия для проверки электронной подписи информационных систем (ЭП-СМЭВ, ЭП-ОВ, ЭП-ПГУ)* и электронной подписи физических лиц (ЭП-П, ЭП-СП)* указывает специализированный сервис проверки - СПЭП (сервис проверки электронной подписи). Данный сервис обеспечивает проверку электронных подписей и сертификатов и включает методы, обеспечивающие:
  • проверку электронной подписи в формате XML digital signature;
  • проверку электронной подписи в формате WS-Security;
  • проверку электронной подписи в формате PKCS#7;
  • проверку статуса сертификата ключа подписи.
  • проверку электронной подписи в формате CAdES
  • проверку электронной подписи в формате XAdES
  • проверку электронной подписи в формате PAdES
  • проверку штампов времени
  • проверку электронной подписи, формируемой от лица пользователя ЕПГУ
Более подробное описание сервиса смотрите на технологическом портале СМЭВ. Рассмотрим пример использования сервиса для проверки электронной подписи в формате WS-Security.

четверг, 14 июля 2016 г.

Миграция на новую версию сервера 1С:Предприятия

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

При работе в клиент-серверном варианте используется трехуровневая архитектура с использованием кластер серверов 1С:Предприятия, через который выполняется общение клиентской части 1С:Предприятия и СУБД.

После создания резервной копии, удаляем информационную базу в кластере серверов 1С:Предприятия старой версии (допустим, версии 8.2), связанную с базой данных СУБД, которая хранит данные информационной базы. Перед удалением запоминаем имя базы данных в СУБД.

У сервера 1С:Предприятие нет собственного пользовательского интерфейса (GUI), для управления им используется консоль администрирования кластера серверов, ее можно установить при установке платформы 1С.

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

четверг, 7 июля 2016 г.

Элементарный способ разложения строки на подстроки

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

Недавно открыл для себя элементарный, просто до ужаса простой способ разложения/разделения строки на подстроки по разделителю. В качестве разделителя может выступать произвольный набор символов, но чаще всего это "," либо "|".

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

вторник, 5 июля 2016 г.

Супер-пупер быстрая конкатенация(сложение) строк

Определение пересечения периодов (числовых множеств)
Разность дат, а как быстрее?

И снова сложно о простом. Что бы присоединить одну строку к другой, в платформу 1С заложена операция конкатенации ("+").

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

Выполним операцию конкатенации 100000 раз по алгоритму:
ИтоговаяСтрока = "";
Для Счетчик = 1 По Объект.КоличествоИтераций Цикл
ИтоговаяСтрока = ИтоговаяСтрока + Объект.РеквизитСтрока;
КонецЦикла;


Переменные содержат следующие значения:
  • Объект.КоличествоИтераций = 100000;
  • Объект.РеквизитСтрока = "ПроизвольнаяСтрока".
Произведем замер длительности выполнения алгоритма (см. рисунок 1).

воскресенье, 3 июля 2016 г.

Определение пересечения периодов (числовых множеств)

Супер-пупер быстрая конкатенация(сложение) строк
Разность дат, а как быстрее?

На первый взгляд, довольно простая задачка для программиста, но как только приступаешь к её решению, начинается составление длинного логического выражения. Так как в алгебре логики имеется ряд законов, позволяющих производить равносильные преобразования логических выражений, то существует как минимум два логических выражения по определению пересечения периодов.

Допустим, имеется два периода:
1) НачалоПериода1 - КонецПериода1;
2) НачалоПериода2 - КонецПериода2.


Можно пойти от противного и составить логическое выражение по определению непересекаемости периодов с отрицанием:
Пересекаются = Не ((НачалоПериода2 > КонецПериода1) Или (КонецПериода2 < НачалоПериода1))

Другой тождественный вариант по определению пересекаемости периодов:
Пересекаются = (НачалоПериода2 < КонецПериода1) И (КонецПериода2 > НачалоПериода1);

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

суббота, 25 июня 2016 г.

Простая реализация формирования отчета в фоновом режиме

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

четверг, 23 июня 2016 г.

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

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

Современные материнские платы, разработанные под процессоры Intel микроархитектуры Skylake, рассчитаны большей частью на операционные системы семейства Windows версии 8.0 и более. Установка Windows 7 на такие материнские платы происходит с некоторыми сложностями, например, во время загрузки установщика происходит зависание компьютера.

В моем распоряжении имеется материнская плата фирмы MSI на базе чипсета B150. Приступив к установке Windows 7, первые Nцать попыток завершились зависанием системы во время загрузки установщика. Виной этому были настройки, установленные производителем по умолчанию.

Прошу извинить меня за отвратительные скриншоты. Хоть материнская плата и имеет современный BIOS UEFI, который позволяет по F12 сохранять скриншот на флэш-накопитель, но к сожалению флэшка должна работать на файловой системе FAT32.

Итак, загружаем BIOS, усиленно нажимаю на Del при старте компьютера и переходим в расширенный режим настроек. В настройках нужно найти пункты, связанные с настройкой USB контроллера и настройкой функционирования ОС Windows (см. рисунок 1), в MSI они находятся в дополнительных настройках.
Рисунок 1. Дополнительные настройки

четверг, 16 июня 2016 г.

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

В MS SQL существует три вида резервных копий:
  • полная резервная копия (Full backup);
  • разностная (дифференциальная) резервная копия (Differential backup);
  • резервная копия журнала транзакций.
Полная резервная копия выполняется как правило один раз в несколько дней, а разностная резервная копия выполняется один раз в день. Следовательно, при выполнении таких резервных копий период потери данных, в случае сбоя, составляет минимум один день.
Для сокращения периода потери данных существует возможность создавать копию журнала транзакций, как говорят в народе, бэкап лога.

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

среда, 8 июня 2016 г.

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

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

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

четверг, 2 июня 2016 г.

Функции языка выражений системы компоновки данных

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

Синтаксис:
Вычислить(Выражение, Группировка, ТипРасчета)

Параметры:
  • Выражение (Строка). Cодержит вычисляемое выражение; 
  • Группировка (Строка). Содержит имя группировки, в контексте которой необходимо вычислить выражение. В случае если в качестве имени группировки используется пустая строка, вычисление будет выполнено в контексте текущей группировки. В случае если в качестве имени группировки будет использована строка ОбщийИтог, вычисление будет выполнено в контексте общего итога. В остальных случаях вычисление будет выполняться в контексте родительской группировки с таким именем.
    Например:
    Сумма(Продажи.СуммаОборот) / Вычислить("Сумма(Продажи.СуммаОборот)", "ОбщийИтог").
    В данном примере в результате получится отношение суммы по полю "Продажи.СуммаОборот" записи группировки к сумме того же поля во всей компоновке.
  • ТипРасчета (Строка). В случае если данный параметр имеет значение "ОбщийИтог", выражение будет вычисляться для всех записей группировки. В случае если значение параметра "Группировка", значения будут вычисляться для текущей групповой записи группировки.

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

Обновление прошивки WD My Cloud экстренным способом

Использование старого роутера как Wi-Fi модуль для стационарного ПК на примере DIR320NRU

Случилась как-то беда, файловое хранилище WD My Cloud на 2 терабайта отказывалось обновляться как онлайн, так и в ручном режиме. В онлайн режиме вываливалась ошибка про недоступность сервера с обновлениями (возможно проблемы у провайдера были), а в ручном режиме ошибка с нехваткой места (на устройстве недостаточно свободного пространства для обновления) (см. рисунок 1).
Рисунок 1. Ошибка обновления WD My Cloud
Погуглив как следует, решение проблемы нашлось на одном из технических форумов, описание действие было очень скудное и не сразу было понятно что делать. Руки дрожали, а обновиться хотелось. Приступим к обновлению прошивки в ручном режиме кустарным методом...
ВСЕ ДЕЙСТВИЯ ВЫ ВЫПОЛНЯЕТЕ НА СВОЙ СТРАХ И РИСК

среда, 18 мая 2016 г.

Разность дат, а как быстрее?

Определение пересечения периодов (числовых множеств)
Супер-пупер быстрая конкатенация(сложение) строк

Я думаю, каждый разработчик сталкивался с вычислением разности дат в днях, минутах или секундах. На платформе 1С существует два способа вычисления разности дат:
  • С помощью языка запросов;
  • С помощью арифметических операций.
Разберем первый способ. Для вычисления разности дат используется стандартная функция языка запросов РАЗНОСТЬДАТ, она имеет три параметра: первый параметр - вычитаемая дата; второй параметр - исходная дата; третий параметр - тип разности, одно из: СЕКУНДА, МИНУТА, ЧАС, ДЕНЬ, МЕСЯЦ, КВАРТАЛ, ГОД. Но помним, что функция рассчитывает календарную разницу между двумя датами, поэтому ее нельзя использовать в местах, где необходимо рассчитать количество банковских или рабочих дней между двумя датами.

Напишем функцию:
Функция ПолучитьРазностьДатВДняхЗапрос(НачалоПериода, КонецПериода)

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РАЗНОСТЬДАТ(&ДатаНачалаПериода, &ДатаОкончанияПериода, ДЕНЬ) КАК Результат";

Запрос.УстановитьПараметр("ДатаНачалаПериода", НачалоДня(НачалоПериода));
Запрос.УстановитьПараметр("ДатаОкончанияПериода", НачалоДня(КонецПериода));

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

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

КоличествоДней = 0;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
КоличествоДней = ВыборкаДетальныеЗаписи.Результат;
КонецЦикла;

Возврат КоличествоДней;

КонецФункции


вторник, 26 апреля 2016 г.

Инициализация реквизитов при создании нового объекта

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

// Если ссылка у объекта пустая, значит он еще не записан,
// а следовательно он является новым объектом.
ЭтоНовыйОбъект = Объект.Ссылка.Пустая();

// Если объект новый, то выполняем заполнение реквизитов.
Если ЭтоНовыйОбъект Тогда
Объект.Ответственный = Пользователи.ТекущийПользователь();
Объект.Комментарий = "Документ создан " + Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
КонецЕсли;

КонецПроцедуры

воскресенье, 10 апреля 2016 г.

СКД. Добавление собственного пункта расшифровки.

Потребовалось как-то создать отчет, который выводит информацию об оплате товара: не оплачен (сумма оплаты = 0), частично оплачен (сумма оплаты < суммы товара), оплачен (сумма оплаты = сумма товара). Сумма оплаты формируется по неким условиям, и требуется предоставлять пользователю информацию о том, каким образом была сформирована сумма, выражаясь терминами СКД: расшифровать сумму оплаты товара.

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

вторник, 8 марта 2016 г.

Настройка шапки отчета в СКД

Создадим внешний отчет, который будет выводить отчетную информацию об остатках номенклатуры и её обороте. Требуемая информация запрашивается запросом с помощью набор данных типа "Запрос", который содержит текст запроса:
ВЫБРАТЬ
_ДемоНоменклатура.Ссылка КАК Номенклатура
ПОМЕСТИТЬ АктуальнаяНоменклатура
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
ГДЕ
НЕ _ДемоНоменклатура.ПометкаУдаления
И НЕ _ДемоНоменклатура.ЭтоГруппа
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
АктуальнаяНоменклатура.Номенклатура,
_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.МестоХранения,
_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.КоличествоНачальныйОстаток,
_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.КоличествоКонечныйОстаток,
_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.КоличествоПриход,
_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.КоличествоРасход,
_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.КоличествоОборот
ИЗ
АктуальнаяНоменклатура КАК АктуальнаяНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления._ДемоОстаткиТоваровВМестахХранения.ОстаткиИОбороты КАК _ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты
ПО АктуальнаяНоменклатура.Номенклатура = _ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.Номенклатура


В итоге отчет содержит следующие поля (см. рисунок 1):
Рисунок 1. Поля отчета

пятница, 12 февраля 2016 г.

Использование старого роутера как Wi-Fi модуль для стационарного ПК на примере DIR320NRU

Обновление прошивки WD My Cloud экстренным способом

Предисловие


Шел 2016 год, нефть в цене падала, доллар крепчал, рубль плакал, следовательно, цены на компьютерные комплектующие выросли и стали кусаться. Продолжать работать за ноутбуком не было сил, так как старичок Acer Aspire 5930G еле справлялся с поставленными задачами, было решено покупать новый системный блок. Достав копилочку, стало понятно, что системник будет состоять из комплектующих, без которых работа не возможна: процессор, материнская плата, блок питания, винчестер и сам корпус.

Покупке был очень рад, установил операционную систему, предварительно создав загрузочную флешку, и принялся устанавливать ПО, но не тут-то было, совсем забыл за интернет соединение. За раздачу интернета отвечает роутер Asus RT-N53, который находится в прихожей, но новый системный блок не имеет Wi-Fi модуля, да и кабель не особо хотелось тянуть. Почесав затылок, заглянув в копилку и ударившись три раза лбом о стол, вспомнился роутер DLink DIR-320NRU, который был заменен Asus'ом и отправился повыше на антресольку.

Внимание, все ниже описанное справедливо для конкретной модели роутера, поэтому данный материал предназначен для ознакомления с  такой замечательной функцией, как Wi-Fi клиент!!!

Настройка роутера в качестве Wi-Fi клиента


Первым делом был подключен роутер DLink к системному блоку по схеме LAN-порт системника <--> LAN-порт роутера. В расширенных настройках роутера включил Wi-Fi (см. рисунок 1).
Рисунок 1. Включение Wi-Fi в роутере Dlink DIR-320NRU