Показаны сообщения с ярлыком технология. Показать все сообщения
Показаны сообщения с ярлыком технология. Показать все сообщения

24 апр. 2026 г.

p2p видео звонки

Видео звонок на базе WebRTC -- meet.gdmn.app. Сделать надежное видео соединение в сетях с низкой пропускной способностью или ограниченных интернет фильтрами -- задача не тривиальная. В статье описываются основные технические проблемы и примененные варианты их решения. Внутри ссылка на репозиторий с полным исходным кодом.

15 мар. 2014 г.

В Беларуси разрешено использовать электронные товарно-транспортные накладные

Скоро в Гедымине:

В Беларуси разрешено использовать электронные товарно-транспортные накладные. Это предусмотрено постановлением Совета Министров Беларуси №202 от 7 марта 2014 года "О создании товарно-транспортных и товарных накладных в виде электронных документов", который опубликован на Национальном правовом интернет-портале Беларуси, сообщает БЕЛТА.

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

В постановлении отмечено, что передача и получение электронных накладных осуществляются EDI-провайдерами, резидентами Беларуси, получившими в установленном законодательством порядке аттестат оператора электронного документооборота. Информация об EDI-провайдерах, получивших в установленном законодательством порядке аттестат оператора электронного документооборота, размещается в глобальной компьютерной сети Интернет на официальном сайте научно-инженерного республиканского унитарного предприятия "Межотраслевой научно-практический центр систем идентификации и электронных деловых операций" НАН Беларуси, указано в документе.

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

9 июл. 2013 г.

А воз и ныне там

Цитата из одного компьютерного текста 1985 года:
It is virtually a cliche to say there is a software crisis. (...) The symptoms appear in the form of software that is nonresponsive to user needs, unreliable, excessively expensive, untimely, inflexible, difficult to maintain, and not reusable There are many ways to improve things a little and they are being tried. But to achieve a fundamental jump in our programming capacity, we need to rethink what we are doing from the beginning.
Тридцать лет прошло, а все сказанное, слово в слово, применимо к любой современной ERP системе.

Интересно, что примеры запросов к БД в указанной работе написаны на языке Quel:

range of E,M is employee
range of D is dept
retrieve (E.name)
where E. salary > M. salary
and E. manager = M.name
and E.dept = D.dept
and D. floor = 1
and E.age > 40
Очевидно SQL в 1985 г. еще не стал всеобщим стандартом.

24 июл. 2012 г.

Сохранение состояния бизнес-объекта

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

Проблема в том, что у нас не предусмотрена передача состояния между исходным и созданным бизнес-объектами. Пример из жизни: идет удаление нескольких выделенных записей. В процессе, для каждой создается отдельный экземпляр БО. На одной из записей возникает ошибка. Мы хотим спросить пользователя: прервать весь процесс или продолжить, пропуская проблемные записи. Вопрос в том, как и где сохранить ответ пользователя, чтобы использовать его при отработке следующих по списку записей.

Найденное на скорую руку решение — добавить флаги в поле BaseState и копировать их после создания и перед удалением созданного бизнес-объекта — выглядит поверхностным. По-хорошему, следует ввести понятие порожденного бизнес-объекта и внутри него обрабатывать перенос состояния до и после выполнения операции.

5 авг. 2011 г.

Логирование и отображение исключений

Начиная с версии 2.5.12 необработанные исключения отображаются вместе с наименованием модуля, номером строки исходного кода и стеком вызова:


Для этого в gedemin.exe должна быть залинкована отладочная информация. Ежедневно собираются и выкладываются на сайт два архива -- Гедымин с отладочной информацией и без.

Вместе с выводом на экран информация об исключениях заносится в таблицу GD_JOURNAL и может быть просмотрена в окне Просмотр событий (раздел Исследователь - Сервис - Администратор). Отфильтровать нужные записи можно по полю source, которое будет содержать слова Exception или Macros Exception.

Код Exceptional Magic, отвечающий за обработку исключений, включается в проект через символ условной компиляции EXCMAGIC_GEDEMIN. К сожалению, данный продукт не является open source. Поэтому вы не найдете его в публичных исходниках Гедымина. При необходимости, Вы можете самостоятельно купить исходный код Exceptional Magic. Выложить файлы в папку Gedemin\Log, определить вышеуказанный символ и перекомпилировать весь проект.

21 нояб. 2010 г.

А ларчик просто открывался!

Оказалось, избавиться от регистрации midas.dll — простейшая вещь. Берем утилиту regsvr42 и запускаем:

regsvr42 -client:gedemin.exe midas.dll

На выходе получаем два манифеста, для выполняемого файла и COM сервера.

gedemin.exe.manifest:



  
          
              
          
  

midas.sxs.manifest:







    

    

    

    



Собственно и все. Осталось избавиться от обращений к системному реестру и переносимый Гедымин будет готов.

Подробнее, про регистрацию COM серверов side-by-side можно прочитать здесь.

9 нояб. 2010 г.

Шажок к MVC

С выходом версии 2.5.7 с форм стандартных бухгалтерских отчетов и складской карточки исчезли компоненты xdeStart и xdeFinish. Их заменил компонент ввода периода gsDatePeriod. Но, не спешите с заменами по тексту скрипт-функций. Модель MVC запрещает обращение к визуальным контролам из кода прикладной логики. В интерфейсы классов Tgdv_frmG, Tgdc_frmInvCard добавлены свойства DateBegin, DateEnd. Их (и только их!) следует использовать для считывания и установки периода построения отчета.

Код, который обращался напрямую к удаленным компонентам работать не будет. В процессе апгрейда БД, Гедымин ищет в исходных текстах обращение к xdeStart, xdeFinish и меняет на работу со свойствами. Естественно, что трудно создать абсолютно универсальный алгоритм. Поэтому, после апгрейда следует открыть редактор скрипт-объектов и поискать в текстах функций строки "xdeStart", "xdeFinish". Если что найдется — исправлять вручную.

В эталоне присутствует код, который проверяет наличие компонента xdeStart или gsDatePeriod и обращается или к одному, или ко второму.
if Assigned(OwnerForm.FindComponent("xdeStart")) then
  ...
elseif Assigned(_
  OwnerForm.FindComponent("gsPeriodEdit")) then
  ...
end if
Я думаю, стоит пройтись по исходникам и заменить на обращение к свойствам формы без всяких проверок.
Other.FieldByName("Period").AsString = _
  "за период с " & OwnerForm.DateBegin & _
  " по " & OwnerForm.DateEnd
На эталоне одна пользовательская форма содержит компоненты xdeStart, xdeFinish. Это Книга покупок. Найти ее можно в Глобальном хранилище, по вхождению строки xdeStart в значения параметров. Форма книги покупок наследуется от Tgdv_frmG поэтому с нее компоненты надо удалить вручную. Для этого открываем в окне Хранилища просмотр текста DFM формы и удаляем из него описание объектов xdeStart, xdeFinish, а заодно и метки к ним: Label1, Label2.

Клиентам, которые работают с Книгой покупок, после установки версии 2.5.7 следует или проделать операции ручного удаления компонентов из DFM или загрузить новые версии настроек.

17 дек. 2009 г.

Следующая версия будет 2.5

На сегодняшний день имеем такую ситуацию:
  • StarTeam — текущая версия Гедымина с более-менее проверенными изменениями. Именно из исходников из StarTeam ежедневно компилируется и выкладывается на сайт новейший gedemin.exe.
  • Trunk в SubVersion является урезанной копией исходников их StarTeam. Отсутствует FastReport 4, по причине авторских прав, архив Obsolete, рабочие версии документации, вспомогательные каталоги Test, Utility и т.п.
  • Периодически состояние Trunk фиксируется тэгами. Из коментария к тэгу должно быть понятно для чего он создавался. Судя по тэгам, номер текущей версии — 1.5.2.
  • Ветвь branches/gedemin-1.x содержит исходники Гедымина, без использования особенностей сервера Firebird 2.5. Я вручную перекидываю сюда некоторые правки из StarTeam.
  • Ветвь branches/gedemin-2.5 — экспериментальная разработка. Скомпилированный отсюда экзешник не будет работать с сервером версии меньше 2.5 (а временами, и вообще не будет работать :). В ближайшем будущем, после тестирования и доводки, ветвь будет объединена с Trunk.
Следующая версия Гедымина будет иметь номер 2.5 и будет работать только с сервером Firebird 2.5 или выше.

После 2.5 будет принято решение по целесообразности дальнейшего использования StarTeam. Скорее всего, откажемся от него в пользу SubVersion.

11 дек. 2009 г.

DUnit testing framework

Outlook of gedemin.exe compiled with DUNIT_TEST conditional symbol defined.

They are only first steps and only few tests exist, but more are coming.

9 дек. 2009 г.

Gedemin 64 bit

TgsStream64 из модуля gsMMFStream позволяет работать с огромными объемами данных.
    ...
    function Seek(Offset: Int64; Origin: Word): Int64;

    property Position: Int64 read GetPosition
      write SetPosition;
    property Size: Int64 read FStreamSize;
    ...


В качестве нижележащего механизма хранения используется Memory Mapped File. В настоящий момент TgsStream64 используется в окне с логом операций, которое видит пользователь при загрузке настройки или данных из потока.