20 нояб. 2013 г.

Формируем ПИ из существующих проектов

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

Разберем формирование пространств имен на примере условного проекта Санаторий:

  1. Проанализируем проект и выделим в нем подсистемы. Пусть, в нашем случае такими будут: Номерной фонд (НФ), Санаторное питание (СП), Медицинские услуги (МУ). Подсистем может и не быть, если проект небольшой и цельный.
  2. Определимся с названиями файлов ПИ. Мы рекомендуем использовать префикс для идентификации разработчика (GS), имя проекта и подсистемы. Например, GS.Санаторий.НФ.Справочник номеров.yml.
  3. Определимся с общими для всех подсистем метаданными (домены, исключения) и разместим их в ПИ GS.Санаторий.Метаданные.yml Аналогично создадим ПИ для общих скрипт-объектов: скрипт-функций, VB-классов, констант.
  4. Для каждого бизнес-объекта или группы строго логически связанных между собой бизнес-объектов создаем отдельное ПИ, куда включаем в такой последовательности: метаданые (по порядку: домены, исключения, таблицы, индексы, представления, процедуры, триггеры), константы, ВБ-классы, скрипт-функции, методы, формы (DFM), события, макросы, отчеты.
  5. Для макросов, форм, отчетов, которые не являются неотъемлемой частью реализации БО, создаем отдельные ПИ. Объекты по ПИ распределяем в соответствии с логической группировкой. Например, в один файл удобно поместить форму, ее события, макрос, который ее вызывает.
  6. Общие отчеты, которые строятся по совокупности данных разных объектов, выносим в отдельное ПИ.
  7. В отдельное ПИ выносим визуальные настройки гридов.
  8. Создаем пакет Санаторий (пакет -- это ПИ со снятым флагом Внутреннее). Расставляем зависимости.
  9. Сохраняем на диске и закидываем в gedemin-apps.

Проверяем:

  1. Грузим пакет на чистую БД.
  2. С помощью утилиты IBExpert сравниваем структуры старой и новой БД. Выясняем, все ли метаданные мы включили. Если нет, то включаем, сохраняем, возвращаемся к шагу 1.
  3. С помощью утилиты FDBExtract сравниваем данные в таблицах платформы. Выясняем, все ли скрипт-функции, макросы, отчеты, формы мы включили.
  4. Вручную тестируем проект. Если все работает -- идем за пивом и\или шампанским.
В любом случае исходную базу данных архивируем и сохраняем в надежном месте.

15 нояб. 2013 г.

Git не восстанавливает исходное время изменения файла

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

PS: теперь будем при сравнении в окне синхронизации использовать номер билда, взятый из номера версии.

PPS: Руки так и чешутся перейти на Mercurial, пока не поздно.

PPPS: Вот еще цветочки:

File list not yet available

After you push to a Git repository, Project Hosting's servers need to do some work in the background to determine the files changed by each commit. Sometimes it can take a little while for this work to finish. You can try refreshing the page in a few minutes.

This operation is time-consuming because Git does not track renames between files.

Серверам гугла потребовалось 14 минут, чтобы выяснить список из трех измененных файлов.
Marco Cantu (главный по Делфи на Embarcadero) спрашивает у пользователей старых и очень старых версий, что мешает им обновиться.

13 нояб. 2013 г.

Обработка результата Пролог вычислений

Результат выполнения Пролога нужен разработчику для дальнейшей обработки.

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

Почему таблица?

  • Можно использовать в запросах.
  • Можно подключать все существующие контролы.
Временные таблицы уровня транзакции -- идеальные кандидаты на эту роль. Если мы придем к единой структуре для хранения результата на все случаи жизни, то можно ввести набор таких таблиц в эталонную бд.

Загрузка на базу с дубликатами стандартных объектов

На текущий момент в проект gedemin-apps загружены не только файлы пакета Комплексная автоматизация, но и некоторые другие ПИ из базы etalon_complete. Совместимость их между собой при одновременной загрузке не тестировалась и не гарантирована. В частности, точно известно о проблеме с типовым документов Хозяйственная операция в файле Услуги_входящие_2012.yml.

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

  1. Открыть окно Синхронизации ПИ.
  2. Указать папку с файлами и нажать кнопку Сравнить с файлами.
  3. Вызвать команду Снять отметку со всех записей.
  4. Найти в списке Комплексная автоматизация и применить к нему команду Пометить для загрузки текущее ПИ и все зависимые. Совет: поставьте галку Пакеты на панели инструментов и в списке останутся только пакеты.
  5. Запустите загрузку.
Проверка: в пакет Комплексная автоматизация входит 101 файл.

Перед установкой убедитесь, что вы скачали новейшую версию экзешника и обновили файлы проекта gedemin-apps.

Теперь о проблеме, которая была решена вчера. Как известно, объекты с ИД менее 147000000 считаются неотъемлемой частью платформы и должны иметь РУИД вида ИД_17, который не может быть переопределен. Большинство таких объектов, как реликтовое излучение вселенной, возникли в первые дни-месяцы создания платформы. Оставшиеся -- добавлялись позже, по мере развития Гедымина. Причем, "позже" могло быть на столько поздним, что на клиентских базах к этому моменту уже были созданы свои такие же объекты с произвольными пользовательскими РУИДами. Самая распространенная жертва подобного дублирования -- бухгалтерские счета.

Например, в файле из пакета Комплексной автоматизации присутствует субсчет 76.06 со стандартным ИД=367606. Дублирующиеся наименования счетов не допускаются соответствующим триггером. Если при загрузке будет обнаружен субсчет 76.06 с пользовательским ИД, то система откроет диалоговое окно для редактирования и предложит исправить его наименование так, чтобы не возникало конфликта. Проще всего добавить к наименованию звездочку и сохранить объект.

После окончания загрузки следует вернуться к плану счетов и решить что делать с дубликатами. Правильнее всего будет удалить созданные пользователем объекты и оставить системные. Только делать это надо с осторожностью, так как РУИДы счетов могут использоваться в макросах, отчетах, ТХО и ТП. Удаление или правка системных счетов -- сизифов труд, -- до следующей загрузки пакета.

Совет: сохранить лог загрузки в файл, открыть его в редакторе и поискать строки, включающие слово Предупреждение.

7 нояб. 2013 г.

gedemin-apps

В ближайшие дни все основные приложения для платформы Гедымин будут загружены в проект gedemin-apps на сайте github.com. Пакет Комплексная автоматизация и некоторые другие мелкие настройки уже там.
Для работы с исходниками под Windows удобнее всего установить TortoiseGit:
  1. Скачиваем инстолятор в соответствии с разрядностью ОС.
  2. Устанавливаем.
  3. Скачиваем новейшую установку Git для Windows.
  4. Устанавливаем:
    • В списке устанавливаемых компонент снимаем галку Windows Explorer integration (все равно мы будем обращаться к Git через оболочку TortoiseGit).
    • Для обработки символов конца строки устанавливаем галку Checkout Windows style, commit Unix style. Эта опция выбрана по умолчанию в инстоляторе.
  5. Если будет предложено, перезагружаем компьютер.
  6. Создаем папку для размещения исходников. Например, c:\golden.
  7. Жмем правой кнопкой на нее и из меню выбираем Git Clone...
  8. Прописываем в поле URL:
    https://github.com/gsbelarus/gedemin-apps
  9. В поле Directory: проверяем, чтобы был указан нужный нам каталог.
  10. Жмем Ок. При необходимости вводим свою учетную запись на github и пароль. Ждем.
Git распределенная система контроля версий. На каждой машине хранится полная история всех изменений проекта, с которой можно работать автономно, даже при отсутствии подключения к сети. Передавать изменения между разработчиками можно как напрямую, так и через централизованный сервер. В сети присутствует огромное количество документации по Git. Для быстрого старта понадобятся всего несколько команд, которые вызываются из контекстного меню TortoiseGit в исследователе Windows (кликаем правой кнопкой мыши на папке с исходниками):
  1. Получить последнюю версию файлов с сервера -- Pull...
  2. Записать сделанные изменения -- Git Commit... (по правой кнопке мыши на файле в диалоговом окне можно посмотреть что было изменено).
  3. Переслать изменения на сервер -- Push... (система потребует ввести логин, как правило имя вашего почтового ящика gmail, и пароль, который можно получить залогинившись в проект и перейдя по этой ссылке).
  4. Посмотреть историю изменения файла -- Show log... (по правой кнопке мыши можно сравнить любые две ревизии между собой).
Все действия можно сделать из одного окна, вызываемого командой Git sync...

5 нояб. 2013 г.

Задача на Прологе для платформы Гедымин

Поскольку это первый пример в книге Ивана Братко (классиков нужно чтить!) задача будет такой:
  1. В стандартный справочник людей (GD_PEOPLE) добавить два поля -- отец и мать. Необязательные для заполнения ссылки на этот же справочник.
  2. Реализовать на Прологе правила: предок, потомок, сын, дочь, внук, внучка, дедушка, бабушка, родственник, близкий родственник, член семьи, брат, сестра, сводный брат, сводная сестра.
  3. Реализовать диалоговое окно в котором можно:
    1. Выбрать человека, степень родства и получить список удовлетворяющих лиц.
    2. Выбрать двух людей и получить список степеней родства между ними.
    3. Выбрать двух людей, степень родства и получить ответ Да или Нет.
PS: Завтра постараемся добавить нужные Прологу файлы, чтобы заодно и инстолятор протестировать.