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 версии...
Кстати, в этом пересчете есть ошибка, связанная в том, что процент пересчитывается именно по картам, а не по владельцам карт. И если у владельца их несколько или одна утеряна, выдана другая, то расчет идет отдельно по каждой его карте.
Часовой пояс GMT +3, время: 05:43.

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