SMarket® Software :: Статьи
Главная страница   О компании  
Язык сайта :

Главная
Новости
Продукты
Партнеры
Статьи
Контакты
Фоторепортажи
Download
Вакансии
О компании
 Версия для печати
Модификация приложения SMarket® 4.0: САТелiт.
О необходимости модификации

Система товарного учета САТелiт является открытым программным продуктом. То есть потенциально любой владелец копии программного продукта может произвести самостоятельно или с помощью привлечения сторонних специалистов изменения в структуре и функциях системы.

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

В данной статье будут рассмотрены основные схемы возможных изменений в структуре системы. Но не с точки зрения полноценной разработки SMarket-приложений (для этого необходимо обратиться к справочной системе по платформе SMarket), а исходя из возможности модификации функциональности, заложенной в приложение САТелiт.

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

Модификация справочника

База данных приложения САТелiт включает большое количество справочников различного назначения. Некоторые из них используется для хранения системной информации и не предназначены для изменения пользователем (хотя и предоставляют такую возможность). Примером может служить справочник поставок. Но основная часть предназначена именно для ввода и корректирования информации пользователями.

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

  • Откроем окно базы данных в меню Сервис. В древовидном списке представлены типы объектов базы данных. Справочники находятся в разделе DirectoryTypes (Виды справочников).
  • Раскроем раздел DirectoryTypes и станем на запись о справочнике Currency (Валюты).
  • В меню правой кнопки мыши выберем Создать поле. Откроется окно добавления поля.
  • Укажем имя поля «Obj», заголовок «Подразделение», тип «Directory» и значение типа, на которое он указывает «Objects». Уберем флаг целостности за ненадобностью. Нажмем Создать.
  • Произведем подобные действия для второго поля. Укажем имя поля «Comment», заголовок «Комментарий», тип «Text». Нажмем Создать.
  • По окончании изменений нажмем Сохранить.

Мы рассматриваем только добавление полей. Для того чтобы создать новый справочник необходимо в окне базы данных стать на один из справочников и выбрать пункт Создать DirectoryType… в меню правой кнопки мыши. При создании нового справочника автоматически добавляются поля Code и Name, а если установлено свойство справочника HasGroup, то и поля Group и IsGroup. Соответственно добавляемые Вами поля не могут содержать подобные названия.

Закройте окно базы данных. Поскольку справочники отображаются с помощью автоформы, то произведенные изменения можно сразу наблюдать в окне справочника. Вызвать его можно из меню Сведения->Справочники->Валюты. Для редактирования записи данного справочника используется также автоформа.

Таким образом, произведенные изменения достаточны для желаемого результата.

Некоторые справочники с силу своей специфики, должны обладать большими функциональными возможностями, чем предоставляет автоформа редактирования. В таком случае создается отдельные формы. Их можно наблюдать в списке форм в окне приложения, вызвать которое можно в меню Сервис.

Названия этих форм начинаются с «Edit_», хотя это не принципиально. Принципиальным является значения, указанные в свойствах компонента, доступ к которым можно получить в списке форм из одноименного пункта в меню правой кнопки мыши. На второй закладке указан объект-источник для данной формы. Например, для формы «Edit_Addresses» это «Directory!Addresses», т. е. справочник адресов. На закладке Режимы указан режим открытия формы. В данном случае «Редактирование элемента».

Обратите внимание, что если для формы указан объект-источник справочник и режим открытия, то такая форма будет открыта вместо соответствующей автоформы справочника. Т.е. форма с режимом «Редактирование элемента» открывается вместо автоформы редактирования, а форма с режимами «Редактирование», «Просмотр» и «Выбор элемента» вместо основной автоформы справочника.

Итак, для того чтобы предоставить пользователю доступ к вновь созданным полям справочника, для которого используется иная форма редактирования необходимо сделать следующее.
  • Выбрать форму в списке и нажать Конструктор. Форма будет переведена в режим редактирования.
  • Добавить на форму элементы управления  с помощью щелчка на кнопке панели Элементы управления и последующего щелчка на форме.
  • В свойствах элемента (Shift+Ctrl+F4) установить имя элемента равное имени поля, но с префиксом, соответствующим типу элемента управления формы. Для простого поля ввода это «ed», для поля со списком - «cb», для поля объекта - «ob», для флажка - «ch».
  • Сохранить форму.

Все действия по вводу и выводу данных из созданного элемента управления произведет уже имеющийся в форме программный код.

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

Модификация ценника

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

Ценником в системе САТелiт считается форма, у которой название начинается с "RP_Tag". Список форм проекта содержится в окне приложения, вызвать которое можно в меню Сервис.

Название ценника указано в свойстве компонента Описание. Доступ к свойствам компонента можно получить в списке форм из одноименного пункта в меню правой кнопки мыши.

Для того чтобы произвести изменения ценника, его форму необходимо открыть в режиме редактирования с помощью кнопки Конструктор окна приложения. Пусть нашим предметом рассмотрения будет форма «RP_Tag_ShopВ». Откроем также окно свойств с помощью нажатия комбинации клавиш Shift+Ctrl+F4.



В режиме редактирования можно заметить, что форма ценника включает в себя несколько элементов управления типа Поле ввода, Подпись, Поле штрих-кода и Поле картинки.
  • Элементы типа Подпись применяются для отображения статичной информации, например подписи «Цена:». Для редактирования надписи в таком элементе управления необходимо выполнить на нем двойной щелчок левой кнопки мыши и ввести требуемый текст.
  • Поле ввода применяется для отображения информации, различной для каждого экземпляра ценника. Данные, которые будут отображены в поле, зависят от значения в свойстве Источник данных. Там может быть указано как имя поля, так и сложное строковое или арифметическое выражение, содержащее имена полей и вызовы функций.
    В источнике данных могут быть указаны следующие поля объектов базы данных:

    • GGoods. Товар.
    • Obj. Подразделение.
    • DlvCode и Delivery. Код поставки.
    • BarCode. Штрих-код.
    • GoodsCode. Код товара.
    • Units. Единицы измерения товара.
    • DlvDate. Дата поставки.
    • RealDate. Конечный термин реализации (срок хранения).
    • InPr. Закупочная цена.
    • RosPr. Цена реализации.
    • NDS. Входная НДС.
    • HasNDS. Товар с НДС.
    • Series. Серия поставки.
    • DocNumber. Номер документа (для печати по документам).
    • DocDate. Дата создания документа (для печати по документам).

    Примерами выражений могут служить:

    • «=Database.Variables("OurOrg").AsObject!Name». Имя нашей организации из переменной базы данных.
    • «="Товар: "&GGoods.AsString». Надпись «Товар:»+ название товара.
    • «=iif(CN(Database.Variables("DeliveryPrices").Value,0),DlvCode,GoodsCode)». Если установлена переменная базы данных, отвечающая за закрытие реализации по поставкам, то выводить код поставки. Иначе выводить код товара.
    • «=Format(DocDate,"d.mm.yy")». Вывести дату документа в формате сходном с «5.12.02».
    • «=Format(RosPr,"Currency")». Отобразить розничную цену в денежном формате операционной системы.
    • «=iif(CN(BarCode,0),BarCode, Null)». Если штрих-код указан – вывести штрих-код, если нет – не выводить ничего.
    • «=iif(NOT IsNull(RealDate),"Вжити до : "& FormatDateTime(RealDate,0),"")». Отобразить срок годности, если он указан.

    При вводе выражения в свойство Источник данных элемента управления ограничивающие кавычки не вводятся.
    Для получения информации о доступных функциях обратитесь к справочной системе по платформе SMarket.
  • Поле штрих-кода применяется для отображения комбинации цифр и букв в виде штрих-кода. Поле может отображать штрих-код в одном из форматов: EAN8_13, CODE39, CODE128 и пр.
  • Поле картинки содержит фоновое изображение. Изменить рисунок в элементе можно с помощью указания в свойстве Рисунок нового файла изображения. Если Ваш ценник не должен содержать фоновый рисунок, удалите с формы поле картинки с помощью клавиши Del.

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

Модификация документа

Возможна ситуация, что по причинам особенностей учета на предприятии стандартный документ системы САТелiт не позволяет выполнить какие-либо учетные действия. Одним из путей решения данной проблемы является модификация документа или создание совершенно нового документа.

Сразу же отметим, что документ системы САТелiт является сложным программным комплексом. Это в первую очередь определено широкими возможностями и многовариантностью работы с документами, заложенными в структуру системы. В силу значительных различий между работой отдельных типов документов, они используют различные формы отображения, созданные для каждого типа документа. Однако это не значит, что модификация документов представляет значительную трудность для программиста.

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



  • Откроем окно базы данных в меню Сервис. В древовидном списке представлены типы объектов базы данных. Документы находятся в разделе DocumentTypes (Виды документов).
  • Раскроем раздел DocumentTypes и станем на запись SaleCashless (Реализация по безналичному расчету). Поля входящие в состав этого пункта отвечают полям шапки документа.
  • Развернем пункт Recordset,отвечающий табличной части документа.
  • В меню правой кнопки мыши выберем Создать поле. Откроется окно добавления поля.
  • Укажем имя поля «Serial», заголовок «Серийные номера», тип «Text». Нажмем Создать. Поле должно быть добавлено в раздел Recordset документа.
  • По окончании изменений необходимо нажать кнопку Сохранить.

Мы рассматриваем только добавление полей. Для того чтобы создать новый документ необходимо в окне базы данных стать на один из документов и выбрать пункт Создать DocumentType… в меню правой кнопки мыши.

Закройте окно базы данных. Необходимые изменения уже внесены в базу данных системы. Теперь необходимо настроить экранные формы документа. Вызовите окно проекта из одноименного пункта меню Сервис.

Названия форм документов в списке форм проекта начинаются с «Doc», хотя это не принципиально. Принципиальным является значения, указанные в свойствах компонента, доступ к которым можно получить в списке форм из одноименного пункта в меню правой кнопки мыши. На второй закладке указан объект-источник для данной формы. Например, для формы «DocSaleCashless» это «Document!SaleCashless», т. е. рассматриваемый документ. На закладке Режимы указан режим открытия формы. В данном случае «Редактирование» и «Просмотр».

Объект-источник и режим открытия объекта служат для указания, какая из форм проекта должна быть открыта при визуализации объекта программным образом (вызов функции OpenForm с параметром RecordSource) или через элемент управления формы.

Итак, для того чтобы предоставить пользователю доступ к вновь созданным полям документа необходимо сделать следующее:

  1. Выберите форму «DocSaleCashless» в списке форм окна проекта и нажмите Конструктор. Форма переведется с режим редактирования.
  2. В области подформы дважды щелкните мышью для открытия формы «DocSaleCashRS», которая играет роль подформы в документах реализации.
  3. Создадим новую колонку и привяжем к ней два скопированных элемента формы.
  4. Нажмите правую кнопку мыши на последней колонке. Управляющие колонки располагаются над областями формы, непосредственно под горизонтальной линейкой. Выберите пункт Вставить справа.
  5. Выделите два последних элемента формы, которые располагаются в областях Заголовок данных и Область данных. Это должны быть элементы типа Подпись и Поле ввода. Сделать это можно с помощью выделения прямоугольной областью или выделения щелчком мыши при нажатой клавише Shift.
  6. Нажмите Ctrl+C (Копировать) и затем Ctrl+V(Вставить).
  7. Не снимая выделения, нажмите правой кнопкой мыши на колонке, созданной в пункте 4 и выберите Привязать.
  8. Снимите выделение элементов управления, щелкнув в произвольной области формы, и заново выделите скопированный элемент Подпись. Откройте окно свойств (Ctrl+Shift+F4)  и поменяйте значение свойства Надпись этого элемента на «Серийные номера».
  9. Выделите скопированный элемент Поле ввода и поменяйте значение свойства Источник данных этого элемента на «Serial» без кавычек. Очистите значение свойства Формат.
  10. Сохраните форму.

Новое поле в документе готово к использованию.



Очевидно, есть необходимость добавить также это поле в отчет по документу. Для этого следует открыть в режиме конструктора подформу отчета «RP_SaleCashRS» и произвести действия аналогичные рассмотренным в пунктах 3-10.

Модификация сводного отчета

Система САТелiт включает ряд отчетов по результатам хозяйственной деятельности на предприятии. Возможно, что они не содержат какой-либо необходимой Вам учетной информации. Но если данная информация присутствует в том или ином виде в базе данных системы САТелiт, то всегда существует возможность получить на ее основании отчет.

Рассмотрим пример изменения одного из стандартных сводных отчетов – «Наличие поставок товаров в подразделениях». Допустим, нам хотелось бы видеть в отчете серии товаров, имеющихся в наличии. Выполним для этого ряд последовательных шагов:

  1. Найдем процедуру отчета в исходном коде приложения. Откроем в Visual Basic (Alt+F11) модуль DefaultReports_Constants и найдем пару констант с префиксами «n_» и «c_»,  которые отвечают соответственно названию процедуры отчета и названию отчета. В нашем случае процедура отчета будет называться «Bulletin_ReserveDeliveries». Выполним поиск (Ctrl+F) процедуры по названию в пределах проекта. Процедура должна располагать в модуле DefaultReports_Balances.
  2. Найденная процедура выполняет программную подготовку отчета. Раздел процедуры, отмеченный как «Get Typed Parameters», соответствует получению данных из окна подготовки отчета. Раздел «Get Source Objects» соответствует получению непосредственных данных отчета. В разделе «From Default Scheme» определяются визуальные составляющие отчета.
  3. Вначале нам необходимо добавить требуемое поле. Перейдем в процедуру получения данных этого отчета. Установим курсор на названии процедуры «PrepareReserveDeliveries» и нажмем Shift+F2.
  4. В определение строковой константы AddOnOpen необходимо дописать присоединение необходимых полей. Для этого в конце константы напишите «+ _» без кавычек, перейдите на новую строку и вставьте строку «, Delivery.Series AS Series ».
  5. Нажмите Ctrl+Shift+F2 чтобы вернуться к процедуре получения отчета. В разделе «From Default Scheme» добавьте строку
    shm.AddBlock "Series", , 1.5
  6. Откомпилируйте и сохраните изменения в проекте.


В заключение

Хотелось бы еще раз подчеркнуть, что в концепцию SMarket 4.0: САТелiт заложены принципы, которые позволяют расширять или адаптировать его функциональность не только основными, но и сторонними разработчиками.

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

SMarket 4.0 как среда разработки позволяет решить еще одну давнюю проблему стороннего разработчика – возможность потери наработок при обновлении оригинальной версии. Постольку платформа позволяет загружать и исполнять несколько проектов одновременно, то логичным  действием будет вынесение всех наработок и дополнений в отдельный проект, который никак не может быть замещен файлами оригинальной версии при обновлении. В таком случае в оригинальном приложении необходимо будет только перенаправить вызовы требуемых функций и операций в проект-дополнение.
Автор : В. Вещунов, разработчик ПО, ООО «ТФПК Лтд»
Опубликовано : 11-06-2003, 17:31
Copyright (c) 1998-2017 ТФПК Лтд.