23.10.2021 17:56
23.10.2021
Андриан Нельсон, разработчик из Великобритании, выложил для кларионовского комьюнити сырцы своей библиотеки image2pdf для использования без ограничений. Эта библиотека, написанная на с++, позволяет в числе прочего, конвертировать wmf страницы кларионовских печатных форм в формат pdf.
Работает быстро, в получаемом pdf можно делать поиск по строкам содержания, копировать и т.п. К проекту достаточно подложить одну dll. Качество вывода высокое. Не нужно вызывать офисные пакеты, устанавливать pdf принтеры для получения pdf файлов.
Я интегрировал вызов этой библиотеки в предпросмотр печатных форм. Можно также создавать pdf файлы с печатными формами молча. Достаточно удобный инструмент для некоторых задач.
02.12.2021 18:42
02.12.2021
Много лет обходились без этого, а тут один коллега поднял тему и пошло. Речь про контроль версий dll библиотек на стороне клиента. На практике редко когда кто-то подсунет программе библиотеку от старой версии, но полностью такая вероятность не исключена. И в некоторых случаях последствия могут быть трудно диагностируемыми. Идея подписывать свои библиотеки сама по себе хорошая. Это та информация, которую мы видим в Windows в свойствах файла на закладке "Подробно". С помощью специального шаблона была налажена автоматическая подпись всех dll Купца при сборке. Мажорная версия изменяется в ресурсном файле сразу для всех библиотек (и exe), а в качестве минорной версии файлов библиотек решено автоматически сохранять дату сборки библиотеки.
Кроме этого в win api есть функции, которые позволяют получить информацию о библиотеке. Они были задействованы для вывода списка используемых библиотек в окне Помощь - О программе - Компоненты. При запуске программы происходит автоматическая сверка мажорной версии всех библиотек, а также мажорной версии основных системных библиотек среды разработки. Если расхождение, то выдается сообщение и выводится окно со списком используемых библиотек с отметкой отклонений. Запуск программы блокируется.
На первом скриншоте окно со списком библиотек и развернутая информация по ним, на втором содержание закладки "Подробно" в свойствах файла библиотеки.
Миниатюры
Нажмите на изображение для увеличения
Название: ver1.jpg
Просмотров: 37
Размер:	445.6 Кб
ID:	11638   Нажмите на изображение для увеличения
Название: ver2.jpg
Просмотров: 30
Размер:	58.7 Кб
ID:	11639  
16.01.2022 17:26
16.01.2022
Сегодня важное событие. Сделана сборка проекта ФинСофт:КупецЪ в новой среде Clarion11.

Все проекты подготовлены для переноса в новую среду. При этом компилятор и рантайм библиотеки останутся прежними (Clarion 6), у пользователей ничего не меняется, принципиально улучшается технология разработки. Возможно также использование компилятора и библиотек Clarion11, но пока решено это отложить. В новом рантайме только улучшения в плане оформления приложений (поддержка корректной работы свежих экранных шрифтов типа segoe ui, улучшенная поддержка манифеста, стилизация закладок). Это прикольно, но не особо важно. Важнее то, что переход на новый рантайм затронет уже работу приложений у пользователей, новые возможности всегда сопровождаются какими-то недоработками, поэтому требуется очень тщательное тестирование на разных версиях Windows.

Лицензия на актуальную версию Clarion11 была приобретена два года назад, но целесообразность использования в связке с имеющимся рантаймом в основном проекте стала очевидно относительно недавно, после тестирования работы среды на больших приложениях. Основной плюс от перехода это скорость кодогенерации, которая выросла по сравнению со средой Clarion6 в 6 (!) раз. Линковка аналогично, хотя это менее принципиально. Среда Clarion6 16 битная, среда Clarion11 32 битная. Это позволяет работать с последней на современных мощных компьютерах в 64 битных ОС. Кроме этого, большие приложения могут быть разделены на несколько солюшенов и собираться параллельно. Это то, что я пытался безуспешно реализовать в среде Clarion6. На моем нынешнем компьютере при параллельной сборке двух больших модулей я получил 20% прироста производительности. При наличии многоядерных процессоров и большего количества оперативной памяти этот показатель должен увеличиться. Таким образом, переход на среду Clarion11 полностью закрывает вопрос скорости сборки приложений.

Другие плюсы.
Меньшая модальности среды. Можно параллельно работать с несколькими app модулями одного приложения или несколькими разными приложениями в отдельных запущенных копиях среды, меньше операций по открытию и закрытию окон.
Современный редактор кода с поддержкой всех основных фишек современных редакторов. Code completion, всплывающие подсказки по функциям и переменным, подсветка синтаксиса, свертывание блоков кодов языковых и пользовательских конструкций, snippets, task, definition view. В среде clarion6 есть только подсветка синтаксиса.
Подсветка синтаксиса, свертывание языковых конструкций, переключения на ошибки при кодогенерации для языка темплейтов.
Возможность сборки приложений с разными версиями компилятора и рантайм библиотек клариона.
Прочие менее принципиальные фишки. Ну и сама среда выглядит современно, на уровне других продвинутых сред разработки.

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

Для комфортной работы со средой требуется монитор не менее 27 дюймов (у меня сейчас подключено два, 27 и 19). И чем мощнее компьютер, тем стабильнее работает среда.

Прикреплю скриншоты.
1. Дерево процедур в app.
2. Оконный дизайнер.
3. Редактор кода.
Миниатюры
Нажмите на изображение для увеличения
Название: c11_1.jpg
Просмотров: 50
Размер:	409.7 Кб
ID:	11694   Нажмите на изображение для увеличения
Название: c11_2.jpg
Просмотров: 51
Размер:	308.0 Кб
ID:	11695   Нажмите на изображение для увеличения
Название: c11_3.jpg
Просмотров: 43
Размер:	393.7 Кб
ID:	11696  
31.01.2022 14:28
31.01.2022
На днях опробовал пошаговую отладку на удаленном компьютере. Такое иногда может потребоваться, если у клиента большая база данных и тащить ее к себе накладно, а смодулировать ситуацию на тестовой базе данных проблематично.
В целом, для отладки достаточно подменить исходную dll на версию, собранную с вызовами пошагового отладчика. Исходную dll можно просто переименовать, тогда и прерывать работу пользователей не надо. Нюанс заключался в том, что при инициализации класса отладчика, ему передаются имена двух файлов с исходным кодом отлаживаемой процедуры (с модификацией для отладчика и без нее). При обычной разработке эти файлы располагаются в каталогах проекта. На удаленном компьютере другая структура дисков и каталогов. Чтобы решить этот вопрос, в каталоге приложения был определен подкаталог debug. Класс отладчика автоматически проверяет наличие файлов с сырцами в нем, если находит, то цепляет их вместо поиска в каталогах проекта. На скриншоте показана работа пошагового отладчика на удаленном компьютере.

Недавний переход на новую среду разработки позволил в повседневной работе активно использовать пошаговый отладчик. Дело в том, что старая среда периодически лишний раз перегенерила сырцы и подключить отладчик получалось не с первого раза. Плюс достаточно медленная кодогенерация. Поэтому в старой среде пошаговый отладчик использовался в сложных случаях. В новой среде лишней кодогенерации не происходит, а скорость сборки dll выросла в разы. Я обнаружил, что пользоваться пошаговым отладчиком стало более комфортным, чем другими средствами отладки. В частности, вывод отладочных сообщений (debugView) остался только для отладки мест, связанных с событиями, а также для отладки кода темплейтов (языка создания метаданных).
Миниатюры
Нажмите на изображение для увеличения
Название: debug_remote.png
Просмотров: 40
Размер:	729.1 Кб
ID:	11712  
08.02.2022 12:57
08.02.2022
В последнем релизе Купца появилась индикация наличия сообщений на тулбоксе с датой и временем.
Раньше при получении сообщений от других пользователей или каких-либо напоминалок, соответствующие окна активизировались сразу. Это не всем удобно, так как заставляет сразу переключать внимание. Поэтому в настройке параметров пользователя добавлена установка использования индикации сообщений на тулбоксе. По смысловой нагрузке был выбран тулбокс "Дата и время". При наличии сообщений, на нем появляются соответствующие кнопки (сообщения от других пользователей, напоминания, запланированные контакты). Если хотя бы один вид сообщений присутствует, то перед соответствующими кнопками появляется мигающий индикатор (красный кружок) для привлечения внимания. Окно с сообщениями открывается или получает фокус при нажатии на соответствующую кнопку на тулбоксе. Если такое окно уже имеет фокус, то информация сразу отображается в нем, кнопка на тулбоксе не появляется. После прочтения информации кнопки на тулбоксе скрываются до получения следующей.
Миниатюры
Нажмите на изображение для увеличения
Название: remind.jpg
Просмотров: 40
Размер:	150.5 Кб
ID:	11716  
05.03.2022 10:31
05.03.2022

Перешли в продакшене на новую версию ip сервера из комплекта Clarion11. Ip сервер используется у нас для прямого взаимодействия приложений через интернет. Работает стабильно, по ощущениям несколько быстрее старой версии.
Миниатюры
Нажмите на изображение для увеличения
Название: ipsrv.png
Просмотров: 34
Размер:	51.5 Кб
ID:	11734  
24.03.2022 08:14
24.03.2022
Бывает, что пользователи задают вопрос, можно ли в программе посмотреть, кто и что делал с каким-нибудь товаром. В последнем релизе Купца появился, наконец, такой отчет, работу которого опишу.

Вначале немного теории. Документы в базе данных могут относиться к закрытому или открытому периоду. Закрытие периода происходит путем создания документа "Остатки" последним его днем. В закрытом периоде документы редактировать программа запрещает, в открытом регламентирует правами доступа. Например, для отдельных ролей пользователей можно задать количество последних дней, доступных для редактирования, или запретить редактировать чужие документы, запретить физически удалять документы из базы данных и т.п. То есть, чисто технически, определенные пользователи в открытом периоде могут свободно изменять документы. Поэтому отследить все операции, относящиеся к определенному товару, задача не совсем простая и требует анализа транзакционного лога.
Транзакционный лог в Купце оптимизирован на минимальное количество информации, так как растет быстрее основной базы данных. Для каждой операции сохраняются стандартные реквизиты дата, время, вид операции (добавить/изменить/удалить), пользователь, идентификатор таблицы базы данных, идентификатор записи, идентификатор заглавной записи (обычно для строк документов с многострочной частью) и список установленных полей в виде форматированной строки переменной длины. Если запись добавляется, то сохраняются только значения полей, которые были установлены, если изменяется, то новые значения полей, которые были изменены, если удаляется, то только идентификаторы таблицы и записи.

Построение отчета по операциям с товаром выполняется в 2 фазы. Вначале просматриваем все записи лога по строкам товарных документов. Если операция Добавить, то проверяем наличие установленного поля товара и значения, равного нашему товару. Если находим, то включаем в отчет. Аналогичная проверка выполняется и для операции Изменить. Но она дает только те операции, которые изменяли предыдущее значение товара на наш, а может быть и обратная ситуация. Поэтому, если наш товар не найден, проверяем, было ли установлено поле товара с другим значением. Если да, то смотрим предыдущие записи в логе по этой строке и определяем ближайшую операцию с установкой товара. Если находим и это наш товар, то включаем в отчет. Операция Удалить имеет подобный алгоритм, мы ищем ближайшую предшествующую операцию в логе, в которой было установлено поле товара, если это был наш товар, то включаем в отчет.
На втором этапе проверяем операции с заголовками товарных документов. Всегда проверяется операция удаления, так как документ мог быть полностью удален из базы данных. Если в параметрах отчета задан признак отслеживания изменения статуса товарных документов (см. первый скриншот), то проверяются также операции изменения, в которых присутствует поле статуса. Составляем список таких операций, затем проходим по нему и вызываем функцию получения строк документов на момент ее совершения. Это функция из бизнес логики, которая на основании лога формирует в таблице в оперативной памяти копии строк товарных документов, как они были на заданный момент времени. Пробегаемся по этой таблице и ищем, был ли там наш товар. Если был, то включаем операцию в отчет.

Как видно, алгоритм ресурсоемкий. Поэтому сейчас анализ ограничен периодом в 10 дней. Как правило, этого достаточно. Если нужно больше, то можно построить такой же отчет за другой период. На первом скриншоте параметры отчета, на втором результат построения. В результирующей таблицы можно использовать стандартный функционал поиска, фильтрации по колонкам, печати, экспорта в электронную таблицу. Если щелкнуть по строке отчета, то откроется связанный документ, и можно его проанализировать в разных аспектах. Если, конечно, этот документ не был совсем удален из базы данных.
Миниатюры
Нажмите на изображение для увеличения
Название: log_tov1.png
Просмотров: 38
Размер:	45.9 Кб
ID:	11740   Нажмите на изображение для увеличения
Название: log_tov2.png
Просмотров: 36
Размер:	50.2 Кб
ID:	11741  
06.06.2022 10:57
06.06.2022
Время от времени у меня спрашивают функционал для работы розничных магазинов без использования отдельной кассовой программы, чтобы не было операций выгрузки и загрузки. Решил реанимировать режим "Окно кассира", который использовался до появления онлайн касс. В отличии от обычного порядка работы с документами создал - заполнил - сохранил - напечатал (отправил на ккм), в окне кассира используется порядок работы pos системы - вначале вводятся (сканируются) товары, потом создаются документы и отправляются задания на ккм. В окне кассира подтянут функционал вывода на поддерживаемые онлайн кассы (атол, штрих, пирит, сп) и прием оплаты через терминал Сбербанка (подключенный к компьютеру терминал или автономный). Работать все это может на отдельном компьютере или в многопользовательском режиме в локальной сети (ккм/терминал доступны с нескольких рабочих мест или несколько разных девайсов в локальной сети). Это дает базовый минимум для одиночных магазинов непродовольственных товаров. Я знаю, что есть форматы продуктовых магазинов, в которых тоже целесообразно использовать работу без выделенной кассовой программы. В принципе, подключить дополнительные устройства типа дисплея покупателя или весов всегда можно, но смысл имеет только при появлении конкретных запросов.
В прикрепленных скриншотах два варианта оформления окна кассира. На первом с использованием штрих-кодирования, на втором без.
Миниатюры
Нажмите на изображение для увеличения
Название: kassaw1.jpg
Просмотров: 30
Размер:	144.0 Кб
ID:	11806   Нажмите на изображение для увеличения
Название: kassaw2.jpg
Просмотров: 35
Размер:	243.4 Кб
ID:	11807  
11.07.2022 13:19
11.07.2022
Наконец пересел на новый компьютер.
Новый i7 2.9 ГГц 8 ядер, 16 ГБ ОЗУ DDR4, SSD 512 ГБ под систему, 2 HD по 1Т, Windows 10 64 бит.
Старый i3 3.1 ГГц 2 ядра, 4 ГБ ОЗУ DDR3, 2 HD по 512 ГБ, Windows 7 32 бита.
Прирост производительности полной сборки большого app в актуальной среде разработки С11 составил примерно 2 раза. На новом 48 сек, на старом 103 сек. Получается также открывать несколько app на разных закладках в среде и компилировать. На старом компьютере стабильно вываливались ошибки, видимо, из-за недостаточности оперативной памяти. Да и в целом все работает заметно быстрее, что не может не радовать.

Помимо заметного увеличения скорости работы, произошёл апгрейд на windows 10. Это позволяет при желании возобновить тестирование рантайма С11. Применительно к Купцу это не планируется, там будет использоваться старый рантайм по соображения обратной совместимости. Небольшие же утилиты можно собирать как со старым, так и с новым рантаймом. Работы по адаптации фремворка уже были проведены ранее. Новый рантайм позволяет улучшить внешний вид приложений, сделав его приближенным к рекомендованному в Windows 10. Это поддержка актуальных шрифтов для приложений (например, segoe ui, 10), достаточно хорошая поддержка манифеста (отрисовки и поведения экранных контролов) для Windows 10 (хотя, приглядевшись, небольшие отличия все же можно заметить), стилизация закладок (например, стиль со скосами, пиктограммки и т.п.), встроенная в рантайме панель переключения окон, встроенная возможность использовать наряду с иконками png картинок.
19.07.2022 21:52
Новая утилита ФинСофт:Блокировщик. При запуске она вешается в трей и открывает все файлы базы данных в расшаренном режиме. Предназначена для защиты базы данных от вирусов шифровальщиков. Генерится автоматически для каждого приложения отдельно на основании словаря с описанием структуры базы данных, например, ФинСофт:КупецЪ, ФинСофт:Продмаг и т.д.
Утилиты конвертации структуры базы данных при обновлении версий приложения, автоматически отключают Блокировщик, а после конвертации запускают его заново.
Часовой пояс GMT +3, время: 15:20.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.