Глава 7. ГЕНЕРАЦИЯ ДОКУМЕНТОВ
Решаем проблему хранения справочных цен
Вопрос о способе хранения текущих цен на товары является одним
из существенных вопросов, которые приходится решать разработчику конфигурации.
Имеется всего три возможности для хранения цен а Allegro:
- В справочнике товаров
- В таблицах настроек
- В документах
Хранение цен в справочнике товаров является наиболее простым, но
не всегда верным решением. Недостатки такого способа хранения:
цены всегда доступны для редактирования, невозможно создать какие-
то особые прайсы для «эксклюзивных» покупателей, отсутствует
возможность хранить историю цен. Преимущество хранения цен в справочнике
– это простота решения для программиста и для пользователя.
Хранение цен в таблицах настроек позволяет иметь единые прайс-
листы, переходящие из периода в период. Преимущество в
том, что доступом к редактированию цен при таком способе
хранения можно управлять.
Хранение цен в документах – наиболее корректный и гибкий способ
решения этой задачи, особенно если заказчик конфигурации имеет развитую
систему ценообразования в своей компании. Например, возможно создать
тип документа «Прайс-лист», в шапке которого
имеется название группы товаров и пять полей количеств товара,
при которых действуют пять разных цен. В подчиненной таблице
завести колонку товара и пять колонок цен. Затем можно
создать несколько таких документов и весь имеющиеся наименования товаров распределить
между этими документами, в зависимости от того, в
какую ценовую группу они попадают. Далее с помощью SQL
-запросов легко можно определить цену любого товара, зависящую
от отгружаемого количества. Хранение цен в документах-прайсах
позволяет гибче разделять товары на группы, создать, при
необходимости, историю цен, легче решаются вопросы валюты,
в которой хранятся цены.
Обсуждая с нашим гипотетическим заказчиком (компанией TechnoTrade) проблему
цен, мы пришли к решению, что в данном
случае вполне возможно использовать простейший способ хранения цен – в
справочнике товаров. Менеджеры, занимающиеся товаром, достаточно компетентны
в номенклатуре, каждый отвечает за определенную группу товаров,
и менеджеру удобно при создании нового товара в справочнике одновременно
вводить его текущую цену. Открытый доступ к текущим ценам
в данной задаче создает скорее дополнительные удобства, чем проблемы
. Заказчик полагает, что система постоянных скидок, закрепленных
за покупателями в справочнике контрагентов, достаточна для решения большинства
вопросов, связанных с ценами. Заказчик желает иметь две
цены с НДС в долларах США для каждого товара:
оптовую и розничную. Заказчик также хочет иметь интерфейс (
или отчет), в котором можно было бы сравнивать прайсовые
цены товаров с их текущей себестоимостью, если эти товары
имеются на складе и видеть «процент наценки».
Вызовем окно «Метаданные» и добавим в справочник «
Товар» два поля:
Нам вполне достаточно 8 десятичных знаков в поле, так
как не предполагается наличие товаров с ценой свыше миллиона долларов
. Поле оптовой цены мы назвали PRICE_W,
а розничной – PRICE_R.
Откроем закладку «Справочник» и отрегулируем ширину колонок так
, чтобы все поля хорошо помещались в сетке. Сохраним
настройку сетки (Ctrl+S):
Как мы смогли убедиться, добавление новых полей в справочник
не составляет проблемы. Даже если этот справочник уже используется
. В данном случае товары, имеющиеся в справочнике,
используются документами поступлений и продаж. Заполним цены имеющихся товаров
произвольными значениями от $100 до $300, используя
значение поля ID, которое в справочнике товаров имеет диапазон
значений около 100..2000. Розничные цены назначим в
1.2 раза выше оптовых. Для этого вызовем
окно интерактивного SQL и выполним команду:
update goods
set price_w = (1000 + id)/10,
price_r = 1.2*(1000 + id)/10
where id <> 0
Подтвердим транзакцию.
Примечание: условие ID <> 0 необходимо всегда использовать в
командах update, которые изменяют значения каких-либо полей
всего справочника, иначе они не выполнятся, так как
элемент любого справочника с ID=0 защищен от модификации
системой. При попытке модификации элемента с ID=0
возникает исключение (exception) с сообщением: exception3 cannot
change default (empty) value.
Окно редактирования элемента справочника выглядит теперь так:
|