вторник, 26 мая 2009 г.

Соответсвие объектов обмена


Довольно часто при обмене данными нужно прописать соответствие одного объекту другому, не учитывая возможные реквизиты поиска и прочие очевидные вещие.
Просто А=В и все.

Примерно для этих целей в конфигурации УПП 1.2. существует регистр сведений Соответствие объектов для обмена.

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

Этот регистр мы и будем использовать для указания соответствия.
Заполним его необходимым соответствием.
  1. УзелОбмена - не заполняем, чтобы не путаться под ногами у реальных фоновых обменов.
  2. СсылкаВДругойИБ - уникальный идентификатор(источник БД 8 ) или другая уникальная конкатенация полей объекта.
  3. СобственнаяСсылка - ссылка назначение в текущей БД.
  4. ИмяТипаПриемника - строковое представление типа ссылки объекта в источнике
Теперь нужно всем этим соответствием воспользоваться в Конвертации данных
в ПКО "Поля поиска" прописываем вызов алгоритма

Если НомерВариантаПоиска = 1 тогда

Выполнить(Алгоритмы.ПолучитьСоотвествиеОбъектов);

КонецЕсли;

и создаем сам аглоритм "ПолучитьСоотвествиеОбъектв" с установленным флагом "Использовать при загрузке"

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ

| СоответствиеОбъектовДляОбмена.СобственнаяСсылка КАК Ссылка

|ИЗ

| РегистрСведений.СоответствиеОбъектовДляОбмена КАК СоответствиеОбъектовДляОбмена

|ГДЕ

| СоответствиеОбъектовДляОбмена.УзелОбмена = &УзелОбмена

| И СоответствиеОбъектовДляОбмена.СсылкаВДругойИБ = &СсылкаВДругойИБ

| И СоответствиеОбъектовДляОбмена.ИмяТипаПриемника = &ИмяТипаПриемника";

Запрос.УстановитьПараметр("УзелОбмена", Неопределено);

Запрос.УстановитьПараметр("СсылкаВДругойИБ",

СвойстваПоиска.Получить("{УникальныйИдентификатор}"));

Запрос.УстановитьПараметр("ИмяТипаПриемника", СтруктураСвойств.ТипСсылкиСтрокой);

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

Если Выборка.Следующий() Тогда

СсылкаНаОбъект=Выборка.Ссылка;

ОбъектНайден=Истина;

КонецЕсли;

Теперь более подробно о алгоритме.

Алгоритм реализует передачу переменной СсылкаНаОбъект определенного значения.

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

Теперь о том чего в документации не написано:

  1. Если установить данную ссылку (не пустую) , обработчик загрузки не поймет, что объект найден, и изменит его несмотря на установку свойства НеЗамещать. Поэтому присвоим значение переменной ОбъектНайден=Истина;
  2. Получить уникальный идентификатор можно из структуры поиска, если установлена синхронизация по уникальному идентификатору СвойстваПоиска.Получить("{УникальныйИдентификатор}")
  3. Строковое представление типа можно вытянуть еще из одной недокументированной структуры - СтруктураСвойств вот образец значений, которые она может содержать



среда, 13 мая 2009 г.

Bug tracker для Ei

Наконец то запустил баг треккер для Ei,  действительно его нехватало.  Часто натыкаешься на ошибку, даешь себе частное слово ее исправить и иногда исправляешь, а  иногда и нет.  Даже в том случа е если ошибку исправил, все остальные пользователи Ei,  какие либо изменения увидят с выходом только очередного релиза.
Теперь в данном трекере вы сможете увидеть отловленные баги или планируемые изменения в функцонале.  Я сам туда буду достаточно часто писать, ну и призываю Вас.  Создать issue - это едиственный способ добится исправление ошибки или изменения функционала.

вторник, 5 мая 2009 г.

Yahoo Pipes - потрошитель интернета


Такое агресивное название. :)
Да, и действительно инстумент ОЧЕНЬ серьезный.
В марте я столкнулся с необходимостью создать RSS ленту для сайта у которого ее попросту нет "Если гора не идет к Магомеду" .
Спустя 2 месяца почти весь "мой интернет" у меня теперь в Google Reader, и виновник тому разумеется Pipes.
Не скажу, что теперь я "гуру" труб, но на многие грабли уже успел наступить и подметил для себя ряд интересных вещей.
Итак:
  1. При использованни модуля Fetch Page(загружает в трубу HTML страницу), флаг начала(from) в большинстве случаев простого парсинга, должен быть равен флагу разделителя(delimiter)

  2. Регулярные выражения, придающие трубам неограниченные возможности, используют синтаксис Perl, для отладки удобно ипользовать RegexBuddy. Поскольку в модуле RegEx используется метод Replase, то для выдергивания какого либо значения, нужно шаблон регулярных выражений, возвращающих значение, помещать между .* (тоесть поглащать весь исходный текст). Так же полезно прочитать про жадный и не жадные алгоритмы.
  3. Если регулярное выражение, будет возвращать многострочную часть и первая строка в этой многострочной части будет пустая, труба все остальные строки проигнорирует, и в результате вы получите - пустое значение.
  4. Если вы хотите снабдить свою ленту какими либо скриптами, то тут Pipes немного разочарует... Он автоматически вырезает все теги link и script, не только с исходной HTML страницы, но и при непосредственной вставке внутри трубы. Видимо в целях безопасности все это.
  5. Время обновления трубы 7 часов :(, ну да, труб то много
  6. Линк полчившейся трубы будет всегда ссылaтся на yahoo pipes, что при парсинге html будет не всегда корректно. Ну это все наверно в целях пиара. :)
На всякий случай закидываю удочку, для тех кому с трубами разбираться неохото(или нет времени), а канал для сайта хочется поиметь.

Делаю каналы от 500р. для url.

Канал будет содержать 3 обязательных элемента:
  • Link
  • Title
  • Description
Элемент "Description" будет содержать полный текст новости(статьи). Я создаю пайп, вы копируете себе его в свой профиль на Yahoo Pipes и наслаждаетесь каналом в любое время и в любом месте.

P.S. Прочие навороты канала обсуждаются индивидуально.

понедельник, 4 мая 2009 г.

Подсветка синтаксиса

Блог как и любая статья, в которой присутствует код намного легче читается если код правильно отформатирован и снабжен подсветкой синтаксиса.

Именно для этих целей создано множество обработок генерящих нужный HTML,
приведу несколько из них:
  1. Типовая обработка с диска ИТС "Раскараска кода";
  2. Разукрашка;
  3. Утилита расскраски текста в стиле 1С;
  4. highlight.js
Однако есть одно решение позволяющее сделать это с большей достовреностью и отсутвием всяческих обработок с предопредленными словами. 

Что нужно для этого "чудо способа"? :)
Делаем скрин нашего кода либо из конфигуратора либо из пердприятия с тестового документа. 
 
Вся соль данного метода в словах "Делаем скрин" у HyperSnap есть одна змечательная особенность о способен 
распознавать текст при снятии скриншота. Данная функция называется  «TextSnap».

 








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

P.S. 
Единственной неприятной особеннсотью при копирование из rtf в HTML является увеличение в 2 раза межстрочного интервала, поэтому перед копированием уменьшите его вдвое. 

Данный способ как понято можно использовать для подсветки любого языка.