[ТЕМА ЗАКРЫТА]
21.02.2011 10:36
vitamin
 
народ, всем дорого локал тайма) есть задача внедрить накопительный дисконт, но без центрума, чисто на ритейле. звонил в кристал, сказали что реально. Если у кого есть опыт поделитесь, или там все по документалову, только вместо центрума ритейл?
27.02.2011 01:20
TANGOR
 
да реально, джобы из центрума по пересчёту кинуть на ритейл, плюс пара тройка таблиц, с десяток процедурок, настройка схемы расчёта, и всё :)
жаль только что щас этого нет :) но вполне реально.
01.03.2011 07:57
gorbach
 
да, реально это сделать. Сам делал, на двух объектах работает. Задание брал с центрума чуток подправил чтобы на ритейле работал и автоматом карты выгружал.
Но есть один косяк, возможно в более поздних версиях исправили, стандартная процедура пересчета процента карты учитывает только продажи из оперативной базы. Так же и история по карте -- только из оперативной базы. Пришлось исправлять.
01.03.2011 09:42
szlh0
 
Оффтоп ... но как сделать, чтобы ритейл автоматом выгружал дк на кассы ?
01.03.2011 10:18
vitamin
 
to gorbach можно поподробней что, где и куда?
01.03.2011 10:46
gorbach
 
Я особо не заморачивался, сделал все по простому и в лоб. Делалось все для SET Retail 5.2.75 (хотя работает и на более ранних версиях).
1. Где-то взял процедуру z_DiscountCardAutoCalc (насколько я помню я ее из Centrum взял) и вставил ее в Retail;
2. Как-то ее изменил. Не помню что менял. Добавил выгрузку в кассы, а может она была;
3. Завел Job в Retail;
4. Все. Работает

Со временем выяснилось, что данные о продажах для расчета процента берутся только из оперативной базы (так работает стандартная процедура DiscountCardsSetPercent). Пришлось ее менять, чтобы учитывались данные из архивной базы.

Далее клиент захотел видеть сумму накопления на карте за весь период. Поменяли соответствующую вьюшку.

Сейчас не могу поробно рассказать, потому что в 80-й версии Centrum'а нет такой процедуры.
Есть только готовые процедуры для Retail.
02.03.2011 09:45
gorbach
 
в архиве три файла:
z_DiscountCardAutoCalc.sql -- процедура, которая пересчитывает процент карты и выгружает карты на кассы (выгрузка в кассы через COM);
DiscountCardsSetPercent.sql -- исправленная процедура DiscountCardsSetPercent для пересчета карт с учетом продаж из архивной базы (архивная база должна называться SES_ARCHIVE);
v_ChequeDisc.sql -- прогоняется на архивной базе, добавляет в архивную базу view v_ChequeDisc.
После прогона этих скриптов можно создать Job, который бы вызывал процедуру z_DiscountCardAutoCalc с требуемой переодичностью.
Пересчет карт через модуль визуализации тоже будет учитывать продажи из архивной базы. Но в истории по карте будут отображаться только данные из оперативной базы.
Работоспособность проверена на SET Retail 5.2.76.
02.03.2011 11:45
vitamin
 
а job сделать как в мануале?
03.03.2011 10:54
gorbach
 
-- Script generated on 03.03.2011 17:53
-- By: SERVER\admin
-- Server: (local)

BEGIN TRANSACTION
DECLARE @JobID BINARY(16)
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF (SELECT COUNT(*) FROM msdb.dbo.syscategories WHERE name = N'SES Maintenance') < 1
EXECUTE msdb.dbo.sp_add_category @name = N'SES Maintenance'

-- Delete the job with the same name (if it exists)
SELECT @JobID = job_id
FROM msdb.dbo.sysjobs
WHERE (name = N'ОБД - Пересчет и выгрузка ДК')
IF (@JobID IS NOT NULL)
BEGIN
-- Check if the job is a multi-server job
IF (EXISTS (SELECT *
FROM msdb.dbo.sysjobservers
WHERE (job_id = @JobID) AND (server_id <> 0)))
BEGIN
-- There is, so abort the script
RAISERROR (N'Unable to import job ''ОБД - Пересчет и выгрузка ДК'' since there is already a multi-server job with this name.', 16, 1)
GOTO QuitWithRollback
END
ELSE
-- Delete the [local] job
EXECUTE msdb.dbo.sp_delete_job @job_name = N'ОБД - Пересчет и выгрузка ДК'
SELECT @JobID = NULL
END

BEGIN

-- Add the job
EXECUTE @ReturnCode = msdb.dbo.sp_add_job @job_id = @JobID OUTPUT , @job_name = N'ОБД - Пересчет и выгрузка ДК', @owner_login_name = N'SERVER\admin', @description = N'No description available.', @category_name = N'SES Maintenance', @enabled = 1, @notify_level_email = 0, @notify_level_page = 0, @notify_level_netsend = 0, @notify_level_eventlog = 2, @delete_level= 0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

-- Add the job steps
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID, @step_id = 1, @step_name = N'Пересчет и выгрузка ДК', @command = N'exec z_DiscountCardAutoCalc', @database_name = N'SES', @server = N'', @database_user_name = N'', @subsystem = N'TSQL', @cmdexec_success_code = 0, @flags = 0, @retry_attempts = 0, @retry_interval = 1, @output_file_name = N'', @on_success_step_id = 0, @on_success_action = 1, @on_fail_step_id = 0, @on_fail_action = 2
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = msdb.dbo.sp_update_job @job_id = @JobID, @start_step_id = 1

IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

-- Add the job schedules
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id = @JobID, @name = N'Делай раз', @enabled = 1, @freq_type = 4, @active_start_date = 20090427, @active_start_time = 220000, @freq_interval = 1, @freq_subday_type = 1, @freq_subday_interval = 0, @freq_relative_interval = 0, @freq_recurrence_factor = 0, @active_end_date = 99991231, @active_end_time = 235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

-- Add the Target Servers
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @JobID, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

END
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
13.05.2011 11:58
SanLi
 
Как бы реализовать тоже самое но для 80 версии...
Кстати, в этом пересчете есть ошибка, связанная в том, что процент пересчитывается именно по картам, а не по владельцам карт. И если у владельца их несколько или одна утеряна, выдана другая, то расчет идет отдельно по каждой его карте.
01.03.2012 22:14
Telefonkin
 
Добрый день! Помогите пожалуйста все это дело внедрить, для меня если честно это неожиданность - накопительный дисконт только в Центруме...
Я понял, что нужно сделать с процедурами и прочее... А в самом Сете как все завести??

Заране благодарен, Никита
02.03.2012 02:23
gorbach
 
Почему только в Центруме? Нет, и в SET:Retail он есть, просто он не автоматизирован. В SET:Retail есть ручной пересчет процента карты через модуль визуализации. А раз можно делать вручную, то можно и автоматизировать этот процесс.
Собственно набор процедур, который я приводил как раз и предназначен для автоматизации этого процесса. Правда возможно эти процедурки устарели и с новой версией не актуальны.
Для SET:Retail версии 5.2.76 эти процедуры подходят и работают вполне удовлетворительно. Конечно, как подметил SanLi в предложенном мной решении идет пересчет процента в разрезе карт, а не в разрезе владельца карты, если честно у меня не было задачи пересчитывать в разрезе клиентов.
Если не понятно, как настроить скидки в самом SET:Retail, то делается это примерно так. В SET:Retail заводятся схемы расчета, где указываются правила изменения процента. Далее заводим владельца карты, указываем ему схему расчета, затем карту для этого владельца, в принципе все. Пойдут продажи по карте. Для ручного пересчета необходимо в модуле визуализации найти карту и нажать кнопку пересчет (в панели инструментов, либо в контекстном меню). После пересчета будет необходимо выгрузить карту в кассы.
Спрашивайте, если что не понятно. Я при помощи указанных процедур автоматизировал пересчет накопительных карт в двух торговых сетях. Работает уже несколько лет и ни разу проблем не возникало.
02.03.2012 11:29
Telefonkin
 
Добрый день! Спасибо что ответили так быстро, но у меня затык появился именно на создании схемы расчета!!!!!!!! Там например нет как в центруме вкладки ВАРИАНТ СХЕМЫ, и негде указать что это расчет по сумме, что тип изменения - проценты..... Или это не нужно делать и все и так изменятеся этими измененными тремя процедурами????

Спасибо за ответ.

Спасибо)))))))
05.03.2012 04:03
gorbach
 
Я могу сказать, что пока сам не попробуешь не узнаешь. Заведи схему, заведи владельца и карту, пробей по карте несколько чеков и посмотри как будет меняться процент скидки.
Возможно кто-нибудь подскажет, чем отличаются схемы расчета в центруме и ритейле, я не знаю. Не приходилось мне накопительный дисконт через центрум делать. А вот через SET:Retail приходилось и не один раз. И того что предлагает SET:Retail было достаточно для пересчета процента скидки по карте в зависимости от суммы продаж по этой карте. Единственное чего не хватало, так это автоматического пересчета. Я его сделал сам, это не сложно. Весь набор необходимых процедур я уже приводил.
08.03.2012 14:49
Telefonkin
 
Огромное спасибо, на 76-й версии все работает как часы))) Но остался еще один вопросик - я поставил Сет на SQL 2008 R2, и как запускать джоб на нем?? Вы пробовали поставить из 79_й версии службу по обработке базы данных???? Она Джавовская...
10.03.2012 06:26
Kirik
 
Цитата:
Telefonkin Огромное спасибо, на 76-й версии все работает как часы))) Но остался еще один вопросик - я поставил Сет на SQL 2008 R2, и как запускать джоб на нем?? Вы пробовали поставить из 79_й версии службу по обработке базы данных???? Она Джавовская...
Служба SES DBService вам врятли поможет в данном вопросе. А что касается джоба, то на SQL 2008 R2 вы точно так же можете создавать задания как и на предидущих версиях. Я сильно подозреваю, что скрипт по созданию джоба приведенный выше может не сработать на SQL 2008 R2. Но вы можете создать его вручную. Просто добавите в нем рассписание и заведете необходимые шаги.
Опции темы


Часовой пояс GMT +3, время: 19:32.

 

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