воскресенье, 29 марта 2009 г.

GWT, интернационализация

Начал разбираться с GWT. И сразу же наткнулся на то, что "Привет, мир" можно только как "Hello? world". Однако чтение документации позволило вывести родное "Привет, мир".
Здесь напишу некоторые основные моменты
Итак интернационализация в GWT может быть как статической так и динамической. Здесь расскажу о статической.

Статическая.
Для реализации создаем интерфейс, наследуемый от i18.Constants

public interface Constants extends com.google.gwt.i18n.client.Constants
{
public String const1();
public String const2();
}

каждый метод этого интерфейса будет является константой. Сами константы хранятся в фалах с раcшрением .properties и именем интерфейса, для нашего случая это будут Constants.properties и родной :) Constants_ru.properties. Файл Constants_ru.properties должен быть в кодировке UTF-8. Если у Вас Eclipse тогда File-Properties
Примерно такого содержания.
const1=root
const2=Clic me

и
const1=Администратор
const2=Нажми меня

Теперь прописываем в <..>.gwt.xml наши локали.

<inherits name="com.google.gwt.i18n.I18N"/>
<extend-property name="locale" values="ru"/>

<extend-property name="locale" values="en"/>



На этом все подготовительные действия закончены.
Для использования дополнительно импортируем:
com.google.gwt.core.client.GWT, и созданный интерфейс.

constants = (Constants) GWT.create(Constants.class);//Создаем экземпляр интерфейса
Button button = new Button(constants.const2()); //создаем кнопочку с надписью "Нажми меня"

Все....
По умолчанию будет использоваться американская локализация, русскую можно получить передав в HTTP запрос значение переменной locale
http://www.example.org/myapp.html?locale=ru

или отредактировав начальный HTML

<html>
<head>
<meta name="gwt:property" content="locale=ru">
</head>
<body>
<script src="demo.app.nocache.js " />
</body>
</html>

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

Молодежь?

Наткнулся тут на "сильный" ролик.



Может во все времена такое отношение к молодежи. Но я думаю лет через 10 будет страшно ходить в больницы, потому что там будут мои ровесники - "потребители".

суббота, 7 марта 2009 г.

Если гора не идет к Магомеду....

Есть такой замечательный сайт Инфостарт. собираются на нем хорошие люди и пишут всякие вещи, программки и все такое в тематике 1С. Однако с RSS лентами там совсем беда. Они были вначале только на программы и статьи, обновлялись наверно раз в месяц. Доржи (автор проекта) не раз обещал что RSS будут, сайт с того времени притерпел многие изменения как в дизайне так и в функциональности. а RSS все нет :(
Прошло достаточно много времени и в один случайный день наткнулся я на замечательный сервис производства Yahoo, Pipes (не думал что у Yahoo могут быть столь перспективные вещи!!, все как то по Гуглу).
В двух словах можно почитать здесь.
Вообщем можно:
-объединять RSS;
-преобразовывать HTML в RSS;
-использовать RegExp;
И все это в графическом!!! интерфейсе. (Чем то напоминает групповую обработку в Ei).
Вообщем вещь чумовая. Особо разобраться не успел. Однако сразу вспомнился Инфострат с его RSS :)

В общем задался преобразовать новости инфостарт в RSS. И.... за 1 час лента готова. Правда не в чистом Pipes, но все равно ноги растут от туда :).

Есть несколько сайтов, которые преобразуют HTML в RSS (на основе pipes):
- http://feed43.com/ (Чемпион)
- http://www.feedity.com/
- http://www.feedyes.com/

Лента конечно имеет ряд недостатков:
1. Обновляется раз в 6 часов (мне хватает)
2. Мало информации, не хватает категорий (1cv8, 1c77 и т.д)

Думаю все таки окончательно разобраться с Pipes, и провести генерацию без посредников.


P.S. Пример ленты можно увидеть и в этом блоге, в правом фрейме, в самом низу.

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

ЕдиницаХранениеОстаков перенос в КД


Очередная заметка по КД. Относится к разряду частых проблем. При переносе данных из УПП например в УПП очень редко удается обойтись без перегрузки номенклатуры. Так вот если справочник номенклатура выгружать только по ссылкам (из переносимых документов) тогда поля:
  • ЕдиницаХраненияОстатков;
  • ЕдиницаДляОтчетов;
остаются незаполненными. У данных полей владельцем является сам элемент в котором они присутствуют. Причем эти объекты будут присутствовать в файле обмена однако загрузить их не удастся.
Есть два решения этой проблемы:
  1. В ПКО "Номенклатура" поставить свойство "Не запоминать выгруженные объекты". Это самый простой способ однако в этом случае при большом количестве документов (в котором есть повторяющаяся номенклатура) обмен значительно замедлится, и число данных для загрузки может многократно увеличится.
  2. Скопировать ПКО "ЕдиницаИзмерения" назовем его ПКО "ЕдиницаИзмерения_Владелец" и в данным ПКО для ПКС "Владелец" укажем получать из входящих данных. После чего в ПКО номенклатура для данных реквизитов явно укажем правило конвертации "ЕдиницаИзмерения_Владелец" и в обработчике ПКС ПередВыгрузкой объекта передадим явно владельца
ИсходящиеДанные = Новый Структура(); ИсходящиеДанные.Вставить("Владелец",Источник);

Какой вариант использовать, решать Вам.
Удачи.

четверг, 1 января 2009 г.

ИМЕЮЩИЕ / HAVING

Обнаружил еще одно отличие синтаксиса запросов 1С от синтаксиса SQL, в в редко используемой конструкции ИМЕЮЩИЕ.

Предложение ИМЕЮЩИЕ позволяет накладывать условия на значения агрегатных функций. В других конструкциях языка запросов, например, в предложении ГДЕ, использовать агрегатные функции в условиях нельзя. В условии отбора ИМЕЮЩИЕ можно использовать только агрегатные функции и поля, по которым осуществляется группировка.

В синтаксисе запросов 1С нельзя указывать псевдоним поля, в этой конструкции.

ВЫБРАТЬ
РеализацияТоваровуслугТовары.Номенклатура,
СУММА(РеализацияТоваровуслугТовары.Количество) КАК Продано
ИЗ
Документ.РеализацияТоваровУслуг.Товары
КАК РеализацияТоваровуслугТовары
СГРУППИРОВАТЬ ПО
РеализацияТоваровуслугТовары.Номенклатура
ИМЕЮЩИЕ
СУММА(РеализацияТоваровуслугТовары.Количество) >= 70

Ну а соответственно в SQL можно, что очень удобно, поскольку у агрегатного поля всегда есть псевдоним.

Вот пример запроса на SQL.

SELECT
Fld16131,
Fld16132,
SUM(Fld16134) AS Fld16134Turnover
FROM AccumReg16128
WHERE Active
GROUP BY Fld16131, Fld16132
HAVING Fld16134Turnover <> 0


вторник, 30 декабря 2008 г.

Восстановление внешних обработок

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

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

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

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

Все данные конфигурации или любые другие конструкции, которые определяют логику работы конфигурации обработки, оказываться во временном каталоге пользователя TMP.
Данные(файлы) платформы в каталоге пользователя имеют следующую маску v8_*.tmp
Рассмотрим, что же происходит при запуске внешней обработки на выполнение.
Вся обработка копируется в каталог временных фалов(чтобы не тянуть распакованные данные черт знает откуда). После чего уже распаковывается результатом распаковки будет появление еще как минимум n+m+1 фалов (где:
  • m-количество форм;
  • n-количество макетов).
Почти аналогичные действия выполняет v8Unpack. После выполнения следующего батника.
V8Unpack -unpack %1 %1.und FOR %%1 IN (%1.und\*.data) DO ..\bin\V8Unpack.exe -undeflate %%1 %%1.und

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

В общем считаем что эти фалы у Вас есть.
  1. Копируйте их в другую папку(отличную от TMP).
  2. Запустите платформу
  3. Сортируйте по возрастанию размера и начиная с самого большого фала:
  • переименовывайте фалы с загадочных имен v8_*.tmp в v8_*.epf
  • пробуйте открыть их с использованием 1С (в 90% случаев вы найдете свою обработку я обычно :) ориентируюсь по размеру предыдущего бекапа).
Если все таки вы попали в эти несчастные 10% вы должны примерно знать что написано в тех модулях которые вы пытаетесь восстановить.
Открываем опять же все эти файлы и ищем наши тексты.
Если вы их нашли и у Вас есть какая-нибудь старая копия своей обработки. Тогда:
  1. Распакуйте обработку (как было написано выше).
  2. Замените необходимые формы, модули;
  3. Запакуйте обработку использую следующий текст батника (FOR %%I IN (%1\*.und_n) DO ..\bin\V8Unpack.exe -deflate %%I %1\%%~nI
    ..\bin\V8Unpack.exe -pack %1.und %1_n.epf)


В общем в любом случае от этих проблем Вас смогут избавить UPS и Backup. А знания о том как и что работает, на разных уровнях абстракции, платформы 1С, помогут сохранить хорошее настроение в работе при любых неприятностях.

четверг, 11 декабря 2008 г.

Выпуск версии 1.09

Где то в октябре 8 года было объявлено о выходе новой версии Ei. C последнего обновления(05.08) прошло достаточно много времени. Через 2 дня должна быть выпущена новая версия. Но выпускать, не до конца готовый продукт не очень хочется. Поэтому выпуск откладывается как минимум на 30 дней.
Для того что бы не разочаровывать небольшой анонс будущего содержания

Как то хочется немного пофилософствовать, что такое были релизы Ei до версии 1.
Ну во-первых, это был инструмент которым пользовался я и мои коллеги, причем для меня это был и единственный инструмент, за 3 года не было написано не одной вспомогательной обработки, которых у каждого программиста приличный чЁмодан.
Это была кладовка моего опыта, соответствующим образом оформленная. В эту кладовку складывались только уникальные вещи, которыми мне когда либо приходилось пользоваться. Постепенно вырисовывался образ того инструмента на, котором можно реализовать ВСЕ:
  • на котором можно оперировать с огромными массивами данных так же словно вы работает с одним объектом;
  • на котором можно редактировать конфигурацию, словно текстовые файлы;
  • использовать самый низкий (закрытый) уровень абстракции 1С;
Не утруждая себя постоянно писать громоздкие конструкции кода, хотя без кода здесь в любом случае не обойтись.


Почему так много времени ушло на выпуск этого релиза?
Ei была фактически переписана полностью.
Функционал был урезан и оставлено все самое необходимо. Вот список тех объектов (разделов), которые мы потеряли:
  • Пакетное создание представлений;
  • Заполнение расширенных свойств MSSQL 2005;
  • Трассировка запросов с использование трассировки MSSQL;
Эти разделы как самостоятельные либо не оправдали себя(со временем появились более совершенные алгоритмы или средства), либо их реализация стала возможна использованием настроек Конструктора.

Повысили производительность, теперь упреки о том что "Ei экскаватор, а другие маленькие лопатки" в прошлом.
Теперь более конкретно из хитов.
  1. Создана ВК на основе v8unpack и GameWithFire. Работа формы "объекты конфигуратора" полностью переписана под нее.
  2. Работа возможна на всех СУБД поддерживаемых 1С. Главное правильно прописать строку подключения.
  3. Трассировка запросов в формате 1С. Результатом будет набор запросов с параметрами и ссылками на встроенный язык инициировавший выполнение запроса.
  4. Объекты базы данных теперь получают полную информацию о реквизитах метаданных. Выводится информация о вспомогательных таблицах.
  5. Разбор текста запроса с точностью до поля, уникальное разбитие сложного запроса на составные.
  6. Реализована возможность получения формы из двоичных данных - то есть на основе двоичных данных любой конфигурации можно получить объект данных Форма, и открыть его (увидеть).
  7. Формирование на основе групповой обработки текста модуля, по средствам выполнения которого можно получить аналогичные действия.
  8. Уникальная функция преобразования любого значения(набора значений) в выражение на встроенном языке (явно проявляется в параметрах конструктора)
  9. Упростили конструкции на встроенном языке, теперь результат можно вернуть в переменную результат - во всех конструкциях где используется встроенный язык.
  10. Возможность использовать подключение по ADO к любому источнику, а не только к текущей базе данных (пример подключения к DBF).
И огромное множество других вещей. Рассказывать о которых буду либы в выходящих инструкция, роликах либо объявлю при выпуске релиза.

Так же более менее приведен код в порядок, к каждой процедуре добалено опсание по ГОСТУ(1С) :) , конечно не на всех объектах но:
  • Объекты базы данных;
  • Объекты конфигурации;
  • Трассировка;
могут приятно удивить.

Поскольку все переписано, открываю код предыдущих релизов (последнего).