четверг, 9 апреля 2009 г.

Изменения свойства предопределённости

На 1с-ei.ru опубликована статья как обычный элемент(справочника), превратить в пердопределнный элемент метаданных
Для всех остальных типов метаданных практически все тоже самое.
Идей функционала "произрастают" отсюда
Статья была напсана примерно год назад и была доступна только участникам группы Ei. Теперь делаем ее всеобщим "достоянием" :)


вторник, 7 апреля 2009 г.

4ФСС, заполнение из внешних данных.

Формы регламентированных отчетов могут заполнятся на основе внешних данных.
Однако внешними данными для УПП могут является только файлы xml выгруженные их ЗуП и как говорится пользователям ЗиК просьба не беспокоить.

Следующая кнопка позволяет быстро заполнить регламентированный отчет, данными импортируемыми из ЗиК

//Осуществляет ипорт данных из файлов 7.7 prb
//
Процедура КоманднаяПанельФормыИмпорт77(Кнопка)
   Длг = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
   Длг.Заголовок = "Выберите файлы данных регламентированной отчетности";
   Длг.Фильтр = "Файлы данных 7.7 (*.prb)|*.prb|Все файлы (*.*)|*.*";
   Длг.Расширение = ".prb";
   Длг.МножественныйВыбор=Истина;
   Если Длг.Выбрать() Тогда
     Текст="";
     Для каждого ИмяФайла из Длг.ВыбранныеФайлы Цикл
        ТекстДок=Новый ТекстовыйДокумент;
        ТекстДок.Прочитать(ИмяФайла);
        Текст=Текст+ТекстДок.ПолучитьТекст();
     КонецЦикла;
     //теперь формируем таблицу с значениями
     RegExp = Новый COMОбъект("VBScript.RegExp");
     RegExp.IgnoreCase = Истина;
     RegExp.MultiLine = Истина;
     RegExp.Global = Истина;
     RegExp.Pattern = "{""(N|S)"",""0"",""0"",""0"",""0"",""0"",""((?:.|\s)*?)""},""(П\d*)""}"; //ШАБЛОН РЕГУЛЯНОГО ВЫРАЖЕНИЯ
     Вхождения = RegExp.Execute(Текст);
     Результат=Неопределено;
     Для Каждого Вхождение из Вхождения Цикл
         Если Результат=Неопределено Тогда
             Результат=Новый ТаблицаЗначений;
             Для Колонка=1 по Вхождение.SubMatches.Count Цикл
               Результат.Колонки.Добавить("Колонка"+(Колонка-1),Новый ОписаниеТипов("Строка"));
             КонецЦикла;
         КонецЕсли;
         НоваяСтрока=Результат.Добавить();
         Для каждого Колонка из Результат.Колонки Цикл
         НоваяСтрока[Результат.Колонки.Индекс(Колонка)]=Вхождение.SubMatches(Результат.Колонки.Индекс(Колонка));
         КонецЦикла;
         Состояние(Результат.Количество());
         Попытка
            НоваяСтрока.Колонка1=Число(СокрЛП(НоваяСтрока.Колонка1));
         Исключение
         КонецПопытки;
    КонецЦикла;
    //заполняем печ формы
    Если Не Результат=Неопределено Тогда
        Для Каждого СтрокаОписанияТД из мСвойстваРазделовДекларации.Строки Цикл
            ТабПоле=ЭлементыФормы["ПолеТабличногоДокумента"+СтрокаОписанияТД.ИмяСтраницы];
            Для каждого Строка из Результат Цикл
                Попытка
               ТабПоле.Области[Строка.Колонка2].Значение=Строка.Колонка1;
                    Состояние(Строка.Колонка2+" - "+Строка.Колонка1);
                Исключение
                Конецпопытки;
            КонецЦикла;
            Расчет(СтрокаОписанияТД.ИмяСтраницы);
        КонецЦикла;
    КонецЕсли;
    КонецЕсли;
КонецПроцедуры

воскресенье, 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