11.07.2012 10:12
Tema
 
допустим есть некая простенькая пользовательская функция добавленная самостоятельно в базу (делал не я, функция возвращает определенное значение в зависимости от того какая карточка выбрана, для ценников писалась). Нашел ее через report builder (с ценниками возился), и нужно добавить в ней еще одно условие. Могу я это просто через репорт билдер сделать и там же сохранить? или нужно как то еще писать?
11.07.2012 11:24
OlegON
 
неплохо бы писать чуть подробнее... но в целом рекомендация перетаскивать все дополнительные функции, особенно самописные, в свою схему. как создавать функции можно узнать, взглянув на DDL любой уже существующей функции или заглянув в . После создания не забудь дать права на нее кому надо.
11.07.2012 12:11
Tema
 
ок, если поподробнее - есть самописный прайсчекер на линуксе, который обрабатывает поступающие данные - артикул или штрихкод и в зависимости от них печатает ценники. Сам код описан замечательно, но есть несколько функций которые были созданы автором в базе. Одна из них возвращает определенное значение в зависимости от группы которой принадлежит товар. Грубо говоря если товар из определенной группы, то печатается цена одного МХ, если из остальных, то другого МХ. И вот нужно будет добавить еще одну группу. Само условие понятно как написать. Непонятно как сохранить его в базе. Просто в момент когда с этим разбирался еще был открыт ценник в репорт билдере, и там заметил эту функцию. В принципе билдер вроде как позволяет ее изменить и сохранить. В крайнем случае думаю можно будет сделать через Create or replace function. Вопрос в последствиях.

сама функция:
Цитата:
FUNCTION DeltaStoreLoc (
s_article IN SMCard.article%TYPE
) RETURN SMStoreLocations.id%TYPE
IS
cardclass SACardClass.tree%TYPE;
BEGIN
SELECT SACardClass.tree INTO cardclass FROM SMCard, SACardClass WHERE SMCard.idclass = SACardClass.id AND SMCard.article = s_article;
IF SUBSTR(cardclass, 0, 2) = '1.' THEN
return 4;
ELSE
return 2;
END IF;
END;
строку
Цитата:
IF SUBSTR(cardclass, 0, 2) = '1.' THEN
надо заменить на
Цитата:
IF (SUBSTR(cardclass, 0, 2) = '1.') or (SUBSTR(cardclass, 0, 3) = '36.') THEN
11.07.2012 12:15
Mtirt
 
Можешь изменить функцию в в репорт билдере.
Тогда при обращении к этому отчету (ценнику) результат будет выдаваться с изменениями, а при других обращениях - нет.
Можешь поменять в базе (Create or replace function). Тогда поведение функции изменится для всех возможных к ней обращений.
А что именно лучше делать - решать тебе.
03.10.2012 11:34
Tasya
 
Всем доброго времени суток! *30
Я человек новый, поэтому вопросы могут быть некорректными.Так что не судите строго.

Задача в следующем. Мне нужно вытащить из Супермага вот что. Разделы → Классификаторы → Товары, все товары из определенного подраздела. Например, 5. Молочная продукция → 5.2. Местная → 5.2.9. Молоко разливное. Нужно вытащить в Excel все, что есть в разделе 5.2.9. Надо это сделать с помощью программки на C#. То есть осуществить сортировку не по артикулу как в предыдущей программе на C#, а по, скорее всего, IDCLASS - идентификатору узла классификатора товаров, к которому приписан данный артикул. IDCLASS находится в таблице 5.25. SMCard - карточки.

Программа "вытаскивания по артикулам" выглядит так

Цитата:
sqlstr = "select to_date(cc.printtime, 'dd.mm.yy'), ci.article, cn.shortname, count(ci.quantity), sl.name";
sqlstr = sqlstr + " from supermag.svcashchecks cc,supermag.svcashcheckitems ci,supermag.svcardname cn,supermag.smstorelocations sl";
sqlstr = sqlstr + " where cc.locid = ci.locid and cc.znum = ci.znum and cc.desknum = ci.desknum and cc.checknum = ci.checknum and ci.article = cn.article and";
sqlstr = sqlstr + " to_date(cc.printtime, 'dd.mm.yy') >='" + ParamForm.FirstDate + "' and to_date(cc.printtime, 'dd.mm.yy') <='" + ParamForm.LastDate + "' and";
sqlstr = sqlstr + " (ci.article = '087' or ci.article = '329' or ci.article = '330' or ci.article = '332') and sl.id = cc.locid";
sqlstr = sqlstr + " group by to_date(cc.printtime, 'dd.mm.yy'), ci.article, cn.shortname, sl.name order by ci.article";
Если мое предположение неправильно, прошу предупредить и разъяснить. Спасибо заранее.
03.10.2012 11:45
OlegON
 
Tasya, предупреждаю, предположение вообще не от этой задачи, а от анализа чеков с датами и т.п.. С таким началом лучше бросить эту затею и двигаться в сторону использования штатных средств.
03.10.2012 16:43
Tasya
 
Чтож, возможно неправильно выражаюсь. Мне нужно вытащить продажи за каждый день из этого раздела 5.2.9. Программка на C# вытаскивает то, что нужно, но по артикулам. Так скажем, у меня есть консультант, который посоветовал поменять в этой программе отбор, поэтому задаю такие "неправильные" вопросы.

На всякий случай загрузила всю программу.

Спасибо за совет..
Вложения
Тип файла: doc using System.doc (34.0 Кб, 398 просмотров)
04.10.2012 09:28
OlegON
 
Tasya, это форум. Сюда не приходят с постановкой "у меня задача - сделайте", для этого есть Доска Объявлений, где можно обозначить задачу и согласовать ценник. Если что-то не получается - пишите, посоветуем. Вы же за задачу совсем не брались, я вот даже не понимаю, чем помогать, а перепроверять весь код программы и править ее... Ну как-то не вижу смысла для себя, как, думаю, многие другие. Скажите, что посоветовать - посоветуем, поправим.
Часовой пояс GMT +3, время: 07:32.

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