11 дек. 2013 г.

Прощай, облако.


Вечером вчерашнего дня на хотмайловскую почту свалилось письмо следующего содержания:

Уважаемый пользователь! 

Для подписки, указанной ниже, был достигнут месячный лимит бесплатного использования Windows Azure, и она была отключена.
Название подписки: Бесплатное пробное использование
Для получения дополнительных сведений о лимите использования учетной записи перейдите по этой ссылке:https://account.windowsazure.com
Если срок действия подписки не заканчивается в текущем месяце, возможность использования службы Windows Azure будет возобновлена для подписки в следующем месяце.
Если необходимо снова активировать службу для этой подписки сейчас, можно обновить свою подписку до платной, войдя в систему по адресу http://account.windowsazure.com с использованием своего Windows Live ID mickey1cx@hotmail.com. Выбрав свою подписку, перейдите по ссылке, чтобы обновить подписку до платной. В случае обновления подписки до платной к ней будут применяться стандартные тарифы, после того как будет превышен месячный лимит бесплатного использования служб, предусмотренный вашим предложением.
Если в текущем месяце срок действия подписки заканчивается и вы не желаете обновлять свою подписку до платной, все данные будут удалены через 90 дней. Не забудьте извлечь все необходимые данные.
Спасибо за использование веб-служб Microsoft Online Services.
Windows Azure
Как скажете. Надо бы тогда зайти и посмотреть, как это выглядит в картинках.

29 нояб. 2013 г.

Программирование в 1С - за 21 день!

На днях Евгений Гилев и Насипов Фарит анонсировали запуск нового бесплатного курса "Программирование в 1С - за 21 день!" по платформе 1С: Предприятие 8.3. После подписки на курс в течении этого периода ежедневно будут приходить ссылки на обучающие видеоматериалы (теория, задание по теме и вариант решения). Прохождение тренинга займет 40-60 минут ежедневно. В процессе изучения рассматриваются все основные объекты конфигурации, бизнес-процессы и задачи, отчеты и фишки нового интерфейса "Такси". В результате получаем прокачку компетенций и CRM-систему.

Azure'ние QlikView

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


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

22 нояб. 2013 г.

Уходим в облака, разворачиваем 1С в Windows Azure

Попалась на днях статейка "1С в Azure". Конечно же, захотелось пощупать существующее "облако" самостоятельно, пока не началось. Сразу скажу, что в целом реализация понравилась. Навскидку плюсы:
- нет необходимости сразу платить суммы отстатыщ за нормальное серверное железо;
- отпадает головная боль по поводу подбора серверного железа, просто выбирай, сколько ядер/гигов надо сейчас, при необходимости всегда можно убрать/добавить;
- дистрибутивы серверного ПО так же присутствуют в "облаке", как Windows, так и Linux-подобные;
- наличие обширной документации (в основном, английский) позволяет разобраться с настройками;
- наверняка еще есть плюсы, до которых еще не добрался.
В общем развернуться есть где, осталось только научиться этим всем в полной мере пользоваться :) Для ознакомления с продуктом Microsoft предлагает бесплатный тестовый месяц. Для получения доступа идем на http://www.windowsazure.com/ru-ru/pricing/free-trial/ и начинаем регистрацию.

4 окт. 2013 г.

Разработка своего коннектора 1С для QlikView на C#

На сайте QlikCommunity можно найти материалы по SDK (v.11, v.10) для разработки своего коннектора. Нужные файлы находятся в разделе QVX SDK Libraries and Examples (QvxSDK_2.0.zip). В архиве находятся примеры, необходимые файлы для разработки, и документация. Для разработки нам потребуется Visual Studio. Знание C# необязательно, документации, примеров и умения пользоваться поиском оказалось вполне достаточно для создания примитивного коннектора.
На видео можно посмотреть, что у меня получилось, работа с QlikView начинается c 04:35.


9 авг. 2013 г.

Загрузка XML во Flash-диаграмму

Описанный в предыдущем посте метод передачи данных через flashvars имеет ограничение на объем передаваемых данных. Поскольку в данном примере будет рассматриваться формирование диаграммы, то стоит предполагать что входные данные могут значительно превышать это ограничение, а так же отличаться от текстового формата (например, картинки или аудиофайлы). Поэтому имеет смысл формировать массив данных в отдельном файле, а через flashvars передавать только путь к этому файлу. Данные из 1С будем выгружать в XML, поскольку в ActionScript3 есть встроенные методы чтения таких файлов. Так же следует учесть следующие особенности взаимодействия Flash'а с внешними данными: кэширование данных и работу с локальными файлами.

7 авг. 2013 г.

Передача данных во Flash через flashvars


Сегодня решил попробовать совместить навыки разработки в 1С и Flash. Простой вывод swf-файла в поле HTML документа 1С не так интересен. Гораздо интереснее было бы реализовать передачу данных из 1С во Flash. Для этого будем использовать параметр flashvars, который можно определить в коде html-страницы.
Для написания кода для Flash проектов я использую IDE FlashDevelop. Если вы решите повторить создание swf-файла с помощью FD, то при установке необходимо будет позволить установщику скачать актуальный FlexSDK. После запуска IDE создаете новый проект "AS3 Project" и заменяете код в созданном файле Main.as на нижеприведенный, после чего можно компилировать проект. Готовый файл будет находиться в подкаталоге /bin проекта. В результате у нас получится swf-файл, содержащий текстовый контейнер, который можно перетаскивать мышкой. При этом он при перетаскивании немного увеличивается в размерах и отбрасывает тень.

30 июл. 2013 г.

Эксперименты с отбором в подборе в список значений


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

Реализуем простую конфигурацию с двумя простыми справочниками:
-"Подразделения";
- "Склады", с реквизитом "Подразделение", тип "Справочник.Подразделения".

18 июл. 2013 г.

Excel Fast Massive Load


Какие бы ни были большие по объему импортируемые данные, всегда хочется, чтобы они грузились как можно быстрее. Иначе зачем нам тогда эти хх-ядерные компьютеры с уу-гигабайтами оперативы. Для Excel в качестве альтернативы классическому медленному последовательному обходу по ячейкам листа можно использовать считывание данных в память с последующей обработкой.
Сначала мы так же подключаемся через COM-соединение к необходимому файлу и получаем нужный лист с данными. Далее, обращаемся к свойству листа .UsedRange.Value. Это свойство содержит значение типа COMSafeArray, с котором 1С умеет работать и в котором как раз и находятся все необходимые нам данные. Через метод Выгрузить() получаем наши данные и обрабатываем их. В качестве примера приведу обработку и замеры по быстродействию.

4 июл. 2013 г.

Блокировка сайта

Некоторое время на сайте провисит скрипт протестной блокировки сайта в связи с принятием закона 292521-6  «О внесении изменений в законодательные акты Российской Федерации по вопросам защиты интеллектуальных прав в информационно-телекоммуникационных сетях». 1 августа Закон вступит в силу. До этого момента еще есть возможность подписать онлайн-петицию об отмене принятия этого закона.


После нажатия кнопки «Продолжить» страница блокировки больше не появится. Подробности можно посмотреть здесь.

upd: Второй этап, петиция теперь на сайте РОИ.

28 июн. 2013 г.

Выгрузка данных в XML с использованием XDTO

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

Доработаем базу из прошлого примера, добавим пакет XDTO и внесем изменения в общий модуль ВыгрузкаПрайса.

20 июн. 2013 г.

Работа с менеджером временных таблиц


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

18 июн. 2013 г.

Отдаем PDF через Web-сервис

В инфраструктурах, активно использующих возможности web-сервисов 1С, нередко возникает потребность получения не только массивов данных из базы, но и различных файлов. Сам файл через веб-сервис так просто не передашь, но на его основе можно создать объект ДвоичныеДанные, который, в свою очередь, уже сериализуется в base64Binary. После такой операции наш веб-сервис без проблем передает данные и получателю остается только выполнить на своей стороне обратное преобразование и сохранить файл.
В качестве примера такого механизма я буду создавать в 1С счет на оплату на основании переданных через сервис ИНН контрагента и суммы, и возвращать PDF печатной формы. На этот раз, кроме примеров кода, дополнительно был записан скринкаст разработки.

9 июн. 2013 г.

Over 9999

Пока я тусил под Самарой на фестивале "Рок над Волгой", статистика просмотров перевалила за 10000. Ура :)


А так же разбивка по странам, браузерам и операционкам.

7 июн. 2013 г.

Механизм анализа данных и прогнозирования, вводная.

Помимо традиционных инструментов представления данных (отчеты, диаграммы, сводные таблицы) в 1С есть механизм анализа данных и прогнозирования. Этот механизм позволяет выявлять неявные закономерности в базе, используя различные методы обработки данных.

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

21 мая 2013 г.

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

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

&НаКлиенте
Процедура ДобавитьВалюту(Команда)
    
    ТС = Объект.ТЧ.Добавить();
    ТС.Имя = "Валюта";
    ТС.Значение = ПредопределенноеЗначение("Справочник.Валюты.ПустаяСсылка");
    Элементы.ТЧ.ПодчиненныеЭлементы.ТЧЗначение.ВыбиратьТип = Ложь;
    
КонецПроцедуры
 
После решил добавить решению универсальности и реализовать программное формирование контекстного меню для табличной части справочника с составным реквизитом с заранее неизвестным перечнем типов.

17 мая 2013 г.

Ответы на поисковые запросы


Как программно получить открытую форму в обычном приложении

У обычных и управляемых форм есть свойство "КлючУникальности". Например, если я сначала исполню в обычном приложении такой код:

Форма = ПолучитьФорму("Справочник.Контрагенты.Форма.ФормаСписка");
Форма.КлючУникальности = "МойКлюч";
Форма.Заголовок = "Тест ключа уникальности";
Форма.Открыть(); 

14 мая 2013 г.

Способы программной установки отборов в управляемых формах

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

1 мая 2013 г.

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

Тестовая конфигурация будет содержать следующие объекты:
  • Справочники данных Контрагенты, КонтактныеЛица, служебный справочник ХранимыеРеквизиты;
  • Документ ОплатаПокупателя;
  • Периодический регистр сведений ИсторияРеквизитов.
Обращаться к  процедуре сохранения истории реквизитов будем через подписку на события ЗаписьИстории, чтобы не прописывать код вызова в модуль каждого объекта.

8 апр. 2013 г.

Запись во внешний источник данных 1С

Начиная с платформы 8.2.14 в 1С появилась коллекция "Внешние источники данных". Использование объектов этой коллекции позволяет работать с внешними данными через ODBC. Стандартные механизмы платформы позволяют просматривать данные и использовать их в запросах. Тем не менее, на примере взаимодействия с SQL покажу возможность работы с внешними источниками на прямое добавление/изменение данных SQL из 1С.

2 апр. 2013 г.

Особенности получения последних документов

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

Разберем на примере демо-базы УТ11, найдем последние документы прихода номенклатуры по регистру "ТоварыНаСкладе". Под последним документом в контексте данной задачи может пониматься как документ с наибольшей датой документа, так и последний документ, введенный пользователем.

29 мар. 2013 г.

Простой способ сохранения таблицы значений в файл

Для использования данных таблицы значений в сторонних программах необходимо выгружать их в текстовый файл, dbf, XML, Excel, либо другие. Но если данные таблицы планируется использовать только в 1С, то можно использовать такие методы, как XMLСтрока/XMLЗначение, либо ЗначениеВФайл/ЗначениеИзФайла. Мне, например, это пригодилось, когда пришлось формировать большой объем различных по виду документов с последующей правкой процедур проведения. Поэтому, чтобы можно было быстро восстановить перечень обрабатываемых документов после применения исправлений, я как раз и использовал эти способы.

21 мар. 2013 г.

СКД: делаем свой вывод списка в форме II

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

20 мар. 2013 г.

СКД: делаем свой вывод списка в форме

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

1 мар. 2013 г.

Получение коллекции областей макета табличного документа

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

25 февр. 2013 г.

Вывод изображений в СКД


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

22 февр. 2013 г.

Выгрузка картинок базы в XML

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

22 янв. 2013 г.

Кэширование изображений

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

Рассмотрим на примере простой конфигурации, которая содержит справочник "Контрагенты" и подчиненный ему справочник "Файлы контрагентов". Справочник "Файлы контрагентов" содержит реквизит ХранилищеИзображения, тип ХранилищеЗначения. Эти данные мы и будем кэшировать при обращении.

17 янв. 2013 г.

Загрузка курсов валют через web-сервисы cbr.ru

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

Нам понадобится создать:
- периодический регистр сведений КурсыВалют, периодичность - день;
- константу, в которой мы будем хранить список валют, курс которых нас интересует;
- общий модуль УправлениеВалютами, в который поместим все необходимые процедуры и функции.

Для загрузки будем использовать web-сервис DailyInfo, метод GetCursOnDate. Входным параметром для этого метода служит дата, на которую мы хотим получить данные.

10 янв. 2013 г.

Получение данных из таблицы QlikView

Продолжая изучать API QlikView, меня заинтересовала возможность получения данных из таблиц (объект TableBox) напрямую, по COM-соединению. Раз когда-то понадобилось получение данных из Excel, то и подобный вариант может кого-то заинтересовать. Покопавшись в документации, нашел два способа получения данных из этих объектов. Пример для управляемого приложения.