ОАО «Калинковичский мясокомбинат» начинает продвижение своего нового товарного знака «Великое княжество» для деликатесной группы продукции. Как сообщили Продукт.ВY на предприятии, это широкий ассортимент ароматных копченостей и разнообразных колбас, а также пельменей и консервов. Продукция покоряет и завоевывает любовь и признание покупателей с первого кусочка. Поэтому и слоган «Покоряя вкусом», подчеркивающий достоинства мясных деликатесов, несет смысл «покорять» не властью и силой, а добрым и хорошим качеством продуктов.Надо срочно исправлять ситуацию!
11 нояб. 2012 г.
Какое же Великое Княжество без Гедымина?
Labels:
цікава
9 нояб. 2012 г.
Все, что нажито непосильным трудом
На прикладные решения мы затратили в разы больше времени и средств, чем на платформу. Код настроек лежит в непрозрачных двоичных .gsf файлах. Проследить, вычленить, откатить изменения от версии к версии невозможно. Методика апгрейда существующих баз, переноса изменений от одного клиента другому, доработки и разработки хаотична и трудоемка. Юнит тестирование отсутствует как таковое.
Пришло время разгрести эти авгиевы конюшни.
Надо:
-
Легковесный текстовый формат с минимумом разметки. Из стандартов -- YAML 1.1 вне конкуренции. Отчеты FR4 включать в файл как отформатированный, удобочитаемый XML с отступами.
Никаких промежуточных состояний типа "настройка загружена в базу, но не активирована".
Никаких "затягиваний" объектов по зависимостям при формировании настройки. Только то, что программист включил непосредственно, должно идти в файл.
Один объект должен входить только в один файл. Использование одного объекта в разных прикладных системах через выделение его в отдельный модуль.
Никакой самотужной терминологии. Хватит с нас пакетов и настроек. Даешь модули, приложения, компоненты, пространства имен и т.п.
Сравнение и синхронизация текущего состояние базы с содержимым файлов на диске. Отдельный механизм загрузки/выгрузки не основанный на существующем коде сохранения в поток.
Использование РУИД-ов и уникальных наименование объектов для обозначения связей. Раскрытие полного пути при сохранении элемента древовидной иерархии.
Git или Subversion в качестве основной системы хранения и распространения настроек. Никаких больше "я переслал тебе настройку в имэйле, не забудь загрузить и активировать ее". Ветви в хранилище исходного кода для специфических решений, сделанных под конкретного клиента.
Минимум служебной информации. Контроль версий, история и логирование средствами VCS.
Списки обработчиков события и перекрытых методов для безболезненного совмещения нескольких прикладных решений на одной базе.
Labels:
идеи
7 нояб. 2012 г.
Firebird 2.5.2
Вышел официальный релиз Firebird 2.5.2. Мелкие улучшения и пару десятков исправленных ошибок. Всем клиентам рекомендуется обновиться.
Labels:
Firebird
On-line учебник по подсистеме Отдел Кадров и Расчет Заработной платы
Налетай! На сайте ГИВЦ Минсельхозпрода доступна он-лайн версия справочного пособия по подсистеме Отдел Кадров и Расчет Заработной платы.
Labels:
ГИВЦ,
документация,
интернет,
нива,
справочная система
НИВА переходит на Firebird 2.5
Технология перевода уже отработана, за последние полгода мы перевели более двух десятков наших клиентов, поэтому вопросов не возникает. Наши клиенты получают дополнительные преимущества, - увеличивается надежность, скорость обработки больших массивов информации, кроссплатформенность, обеспечивается стабильность и гарантированное развитие продукта (СУБД)С 1-го января 2013 г. Наконец-то! Не прошло и 10 лет ;-)
Labels:
ГИВЦ,
нива,
fdbconvert,
Firebird,
yaffil
Ручное изменение поля типа ссылка
Поменять поле типа ссылка, чтобы оно вместо одной таблицы ссылалось на другую, средствами Гедымина процесс длительный и непростой. Надо создать временное поле. Скопировать в него данные. Удалить исходное поле. Удалить домен. Создать новый домен. Создать новое поле. Перегнать в него исходные данные. Если к тому же поле участвует в триггере или процедуре, то придется предварительно перекомпилировать их с закоментированным текстом и восстановить в исходное состояние, после создания нового поля.
К счастью, для тех, кто знаком с устройством реляционной базы данных и не боится воспользоваться скальпелем и гвоздодёром, существует короткий обходной путь. Предположим, в некоторой таблице TABLE_A находится поле USR$FIELD_A типа USR$DFIELD_A, которое ссылается на таблицу TABLE_B. Изменим его так, чтобы оно ссылалось на таблицу TABLE_C. Поле USR$NAME из TABLE_C используется для отображения наименований объектов в выпадающих списках.
-
Идем Исследователь-Сервис-Атрибуты-Таблицы. Находим в списке нашу таблицу и открываем в диалоговом окне. Переходим на вкладку Скрипт.
Ищем строку вида: ALTER TABLE TABLE_A ADD CONSTRAINT USR$FKTABLE_ANN FOREIGN KEY (USR$FIELD_A) REFERENCES TABLE_B (ID) ON UPDATE CASCADE;
Из найденой строки узнаем имя ограничения. В нашем случае это USR$FKTABLE_ANN, где вместо NN будут какие-нибудь цифры.
Идем в окно SQL редактора и выполняем команду: ALTER TABLE TABLE_A DROP CONSTRAINT USR$FKTABLE_ANN
Там же набираем и выполняем команду: ALTER TABLE TABLE_A ADD CONSTRAINT USR$FKTABLE_ANN FOREIGN KEY (USR$FIELD_A) REFERENCES TABLE_C (ID) ON UPDATE CASCADE ON DELETE CASCADE Обратите внимание, что правила ON UPDATE и ON DELETE вы должны указать в соответствии с логикой вашей задачи.
Как вы поняли, первая команда удалила старую ссылку, а вторая создала новую. Остается сообщить об изменившейся ссылке Гедымину. Для начала следует в разделе Исследователь-Сервис-Атрибуты-Таблицы узнать идентификаторы таблицы TABLE_C и ее поля USR$NAME.
Узнать ИД проще простого: выделяем запись в гриде, правая кнопка мыши, команда Свойства...
Не выходя из формы просмотра с таблицами ищем TABLE_A и в ней поле USR$FIELD_A. Затем, правая кнопка мыши, комадна Свойства..., вкладка Данные:
-
DELETERULE -- прописываем правило для удаления записи, которое мы указали в команде создания FOREIGN KEY. Например, CASCADE, RESTRICT и т.д.
-
REFTABLE -- Прописываем имя TABLE_C.
REFLISTFIELD -- Имя поля из таблицы TABLE_C, которое будет использоваться для отображения в выпадающих списках.
REFTABLEKEY -- ИД таблицы TABLE_C. Его мы определили выше.
REFLISTFIELDKEY -- ИД поля из таблицы TABLE_C, которое будет использоваться для отображения в выпадающих списка.
REFLNAME -- локализованное наименование таблицы справочника.
REFLISTLNAME -- локализованное наименование поля для отображения в выпадающих списках.
24 окт. 2012 г.
408
Ohloh.net считает, что для создания такого проекта как наш Гедымин требуется ни много ни мало 408 человеко-лет.
Labels:
цікава
21 окт. 2012 г.
1 окт. 2012 г.
Первая XML Schema
Первая, собственноручно написанная и от первого до последнего символа набранная в текстовом редакторе XML схема для обмена данными о файлах Гедымина:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://gsbelarus.com/gedemin_files"
xmlns="http://gsbelarus.com/gedemin_files"
elementFormDefault="qualified">
<xs:element name="GEDEMIN_FILES">
<xs:complexType>
<xs:sequence>
<xs:element name="DIRECTORY" minOccurs="0"
maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="NAME" minOccurs="1"
maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="255"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="PATH" minOccurs="0"
maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="255"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="EXISTS" type="xs:boolean"
minOccurs="0" maxOccurs="1"/>
<xs:element name="FLAGS" type="xs:string"
minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="FILE" minOccurs="0"
maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="NAME" minOccurs="1"
maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="255"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="PATH" minOccurs="0"
maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="255"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="EXISTS" type="xs:boolean"
minOccurs="0" maxOccurs="1"/>
<xs:element name="FLAGS" type="xs:string"
minOccurs="0" maxOccurs="1"/>
<xs:element name="SIZE" type="xs:positiveInteger"
minOccurs="0" maxOccurs="1"/>
<xs:element name="DATE" type="xs:dateTime"
minOccurs="0" maxOccurs="1"/>
<xs:element name="VERSION"
minOccurs="0" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="([0-9]+\.?)+"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="VERSION" type="xs:decimal"/>
</xs:complexType>
</xs:element>
</xs:schema>
28 сент. 2012 г.
Compare file version strings
На всякий случай код функции сравнения строк с номерами версий файлов. А то в интернете находятся только какие-то монстры.
function CompareVersionStrings(const V1,
V2: String): Integer;
function ExtractInt(const V: String;
var B: Integer): Integer;
var
E: Integer;
begin
E := B + 1;
while (B <= Length(V)) and (E <= Length(V))
and (V[E] <> '.') do Inc(E);
Result := StrToIntDef(Copy(V, B, E - B), 0);
B := E + 1;
end;
var
B1, B2: Integer;
begin
B1 := 1; B2 := 1;
repeat
Result := ExtractInt(V1, B1) - ExtractInt(V2, B2);
until (Result <> 0) or
((B1 > Length(V1)) and (B2 > Length(V2)));
end;
Labels:
исходный код,
полезное,
программирование,
Delphi
23 сент. 2012 г.
Чтобы git кирилические имена файлов отображал
Следует в git\etc\gitconfig прописать:
...
[i18n]
commitencoding = cp1251
logoutputencoding = cp866
Вместе с другими полезными установками будет:
[core]
symlinks = false
autocrlf = true
quotepath = false
ignorecase = true
[color]
diff = auto
status = auto
branch = auto
interactive = true
[pack]
packSizeLimit = 2g
[help]
format = html
[http]
sslCAinfo = /bin/curl-ca-bundle.crt
[sendemail]
smtpserver = /bin/msmtp.exe
[diff "astextplain"]
textconv = astextplain
[rebase]
autosquash = true
[i18n]
commitencoding = cp1251
logoutputencoding = cp866
Labels:
полезное
Подписаться на:
Сообщения (Atom)

