Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 "мистика" с данными  [new]
koJIo6ok
Member

Откуда: РБ
Сообщений: 950
Microsoft SQL Server 2008 (SP1) - 10.0.2766.0 (Intel X86) 
Feb 25 2010 13:18:40 
Copyright (c) 1988-2008 Microsoft Corporation
Enterprise Edition on Windows NT 5.2 <X86> (Build 3790: Service Pack 2)
стоит, работает норм, настройки не менял, точнее ничего не трогал :) как поставил все по умолчанию и осталось, две базы мелкие на нем, пользователей примерно 20, ОЗУ 8 гб всего, дисп задач показывает занято примерно не более 1,5 всегда, на сервере почти ничего нет кроме SQL-servera, на сервере 3 Raid-массива
1 зеркало 2x500 гб - win server 2003 и MSsql-server 2008,
2 зеркало 2x500 гб
3 50-ый raid 6x320 гб тут файлы 2-х баз и их лог файлы, расположение tempDb (вроде так называется) не менял выходит на зеркале 1 находится
1 запрос выбирает данные из нескольких таблиц клиент показывает эт все на экране, меняю данные в одной из таблиц все норм сохраняется, еще раз 1 запрос все на экран а данные в нем старые остаются, ничего не делаю чз пару минут данные возвращаемые 1 запросом отражают изменения сделанные в таблице, как так? причем такое не всегда, но бывает не редко
из-за чего так и с кем бороться?
26 май 10, 18:29    [8840409]     Ответить | Цитировать Сообщить модератору
 Re: "мистика" с данными  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Текст запроса показывайте.
26 май 10, 18:33    [8840437]     Ответить | Цитировать Сообщить модератору
 Re: "мистика" с данными  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5503
Блог
Посмотреть для начала профайлером, отправляет ли приложение запрос на чтение данных на SQL Server повторно.
Может быть, данные где-то кэшируются.
26 май 10, 18:34    [8840455]     Ответить | Цитировать Сообщить модератору
 Re: "мистика" с данными  [new]
koJIo6ok
Member

Откуда: РБ
Сообщений: 950
текс запроса большой очень
приложение запрос на данные шлет точно и сервер возвращает набор данных эт точно - клиент мой :D
26 май 10, 18:44    [8840541]     Ответить | Цитировать Сообщить модератору
 Re: "мистика" с данными  [new]
koJIo6ok
Member

Откуда: РБ
Сообщений: 950
как по мне так я придумал что происходит так - размер бд не большой и серв держит данные в памяти, потом я их меняю изменения происходят в таблице на жестком диске а запрос выбирает с озу старые данные :) смешно да?
26 май 10, 18:49    [8840570]     Ответить | Цитировать Сообщить модератору
 Re: "мистика" с данными  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
koJIo6ok
как по мне так я придумал что происходит так - размер бд не большой и серв держит данные в памяти, потом я их меняю изменения происходят в таблице на жестком диске а запрос выбирает с озу старые данные :) смешно да?
Да вы просто Ганс Христиан Андерсен какой-то.
26 май 10, 18:50    [8840574]     Ответить | Цитировать Сообщить модератору
 Re: "мистика" с данными  [new]
koJIo6ok
Member

Откуда: РБ
Сообщений: 950
Гавриленко Сергей Алексеевич,
ну да - зовут меня Андрей :)
+
create proc [fil_look].[buh_debit_zad_zak_ob]
	@kod_fil		tinyint,	
	@id_org			int
as
begin
set nocount on
-- вычисляемые параметры
declare		@god_tek	smallint
declare		@mes_tek	tinyint
declare		@cur_date	smalldatetime	--тек дата
declare		@first_day_tm	smalldatetime	--первый день из @god_tek и @mes_tek
declare		@last_day_pm	smalldatetime	--последний день пред месяца
declare		@first_day_tg	smalldatetime	--первый день тек года
declare		@mes_pred	tinyint			--пред месяц
declare		@god_mes_pred	smallint		--год пред месяца
declare		@date_prosr	smalldatetime
-- зад знач парам
set @god_tek = year(getdate())
set @mes_tek = month(getdate())
set @cur_date = GETDATE()
set @first_day_tm = prog.DateSerial(@god_tek, @mes_tek, 1)
set @last_day_pm = prog.DateSerial(@god_tek, @mes_tek , 0)
set @first_day_tg = prog.DateSerial(@god_tek, 1 , 1)	
set @mes_pred = month(@last_day_pm)
set @god_mes_pred = year(@last_day_pm)
set @date_prosr = prog.DateSerial(@god_tek, @mes_tek - 1, day(getdate()))
------------------------ 
-- сальдо
declare @ob_saldo table
(id_ob		int				not null primary key clustered,
 ob_saldo	decimal(12)		null)

insert into @ob_saldo( id_ob, ob_saldo )
select id_ob, saldo
from pldo_fin.ob_saldo_ng
where god = 2009				
-- 
declare @ob_k_opl_pm table
(id_ob			int				not null primary key clustered,
 ob_k_opl_pm	decimal(12)		null)

insert into @ob_k_opl_pm(id_ob, ob_k_opl_pm)
select oo.id_ob, sum(vip.fakt_dc_okv - vip.vozvrat_vr)
from pldo_vip.object as ob
inner join pldo_vip.org_ob as oo
on ob.id_ob = oo.id_ob
inner join pldo_vip.plg_org as plg
on oo.id_org_ob = plg.id_org_ob and plg.god = @god_mes_pred		-- год зависит от месяца
inner join pldo_vip.vipoln as vip
on plg.id_plg = vip.id_plg and vip.kod_mes = @mes_pred			-- предыдущий месяц
--
where ob.kod_fil = @kod_fil
--
group by oo.id_ob
-- к оплате на нач месяца
declare @ob_k_opl_nm table
(id_ob			int				not null primary key clustered,
 ob_k_opl_nm	decimal(12)		null)

insert into @ob_k_opl_nm(id_ob, ob_k_opl_nm)
select oo.id_ob, sum(vip.fakt_dc_okv - vip.vozvrat_vr)
from pldo_vip.object as ob
inner join pldo_vip.org_ob as oo
on ob.id_ob = oo.id_ob
inner join pldo_vip.plg_org as plg
on oo.id_org_ob = plg.id_org_ob
inner join pldo_vip.vipoln as vip
on plg.id_plg = vip.id_plg
--
where ob.kod_fil = @kod_fil and god < @god_tek or (ob.kod_fil = @kod_fil and god = @god_tek and kod_mes < @mes_tek)
--
group by oo.id_ob
--  оплачено на начало месяца
declare @ob_opl_nm table
(id_ob		int				not null primary key clustered,
 ob_opl_nm	decimal(12)		null)

insert into @ob_opl_nm(id_ob, ob_opl_nm)
select id_ob, sum(summa)
from buh.ods_sum as ods_s
inner join buh.ods_title as ods_t
on ods_s.id_title = ods_t.id_title
where (kod_t = 1 and kod_tp = 1 and kod_np in (1,5) and data < @first_day_tm) or (kod_t = 2 and kod_tp = 1 and data < @first_day_tm) --оплачено за выполн работы
group by id_ob									-- с начала года по последний день пред месяца
--  зачтено авансов
declare @ob_az_nm table
(id_ob		int				not null primary key clustered,
 ob_az_nm	decimal(12)		null)

insert into @ob_az_nm(id_ob, ob_az_nm)
select id_ob, sum(tek_av_z + cel_av_z + indeks)
from pldo_fin.ob_avans_zachet
where god < @god_tek or (god = @god_tek and kod_mes < @mes_tek)
group by id_ob
--  зачтено материалов
declare @ob_mz_nm table
(id_ob		int				not null primary key clustered,
 ob_mz_nm	decimal(12)		null)

insert into @ob_mz_nm(id_ob, ob_mz_nm)
select id_ob, sum(mat_dor_z + mat_bel_z + mat_pr_z )
from pldo_fin.ob_mat_zachet
where god < @god_tek or (god = @god_tek and kod_mes < @mes_tek)
group by id_ob
-- оплачено за тек месяц
declare @ob_opl_tm table
(id_ob		int				not null primary key clustered,
 ob_opl_tm	decimal(12)		null)

insert into @ob_opl_tm(id_ob, ob_opl_tm)
select id_ob, sum(summa)
from buh.ods_sum as ods_s
inner join buh.ods_title as ods_t
on ods_s.id_title = ods_t.id_title
where (kod_t = 1 and kod_tp = 1 and kod_np in (1,5) and  data between @first_day_tm and @cur_date) or (kod_t = 2 and kod_tp = 1 and data between @first_day_tm and @cur_date) --оплачено за выполн работы
group by id_ob									--первый день тек месяца по посл день тек месяца
-- платежное поручение
declare @pp table
(id_ob	int				not null primary key clustered,
 pp		decimal(12)		null)

insert into @pp(id_ob, pp)
select id_ob, sum(summa)
from pldo_fin.ob_meri
where kod_doc = 1 and flagIsp = 0
group by id_ob
-- выставлено чз ИМНС
declare @imns table
(id_ob	int				not null primary key clustered,
 imns	decimal(12)		null)

insert into @imns(id_ob, imns)
select id_ob, sum(summa)
from pldo_fin.ob_meri
where kod_doc = 9 and flagIsp = 0
group by id_ob		
--------------- meri
declare @meri table
(id_ob	int			    not null primary key clustered,
 mer	varchar(max)	null)
 
insert into @meri
SELECT distinct ob.id_ob,
(
 SELECT
  CASE ISNULL(meri.summa,0)
   WHEN 0 THEN doc.nazv_sokr + ' от ' + CONVERT(VARCHAR(10), meri.data, 104) + ' №' + meri.nomer + case meri.id_org_ob when 1 then '; ' else ' для ' + ns.nazv_org + '; ' end
   ELSE 'на ' + CONVERT(VARCHAR(15), CEILING(round(meri.summa/1000000,1))) + ' млн.руб. ' + doc.nazv_sokr + ' от ' + CONVERT(VARCHAR(10), meri.data, 104) + ' №' + meri.nomer + case meri.id_org_ob when 1 then '; ' else ' для ' + ns.nazv_org + '; ' end
 END
 FROM pldo_fin.ob_meri  as meri
 inner join nw.nazv_document as doc
 on meri.kod_doc = doc.kod
 left join pldo_vip.org_ob as oo
 on meri.id_org_ob = oo.id_org_ob
 left join general.org as ns
 on oo.id_subp = ns.id_org
 WHERE meri.id_ob = ob.id_ob and meri.flagIsp = 0
 FOR XML PATH(''), TYPE
).value('.','VARCHAR(MAX)') meri
FROM pldo_vip.object ob
inner join pldo_fin.ob_meri as meri
on ob.id_ob = meri.id_ob
-------------------------------------------------------------- субподрядчики переплата
--  сальдо
declare @su_saldo table
(id_org_ob	int				not null primary key clustered,
 su_saldo	decimal(12)		null)

insert into @su_saldo( id_org_ob, su_saldo )
select id_org_ob, saldo
from pldo_fin.subp_saldo_ng
where god = 2009
--  к оплате нарастающим
declare @su_k_opl_nm table
(id_org_ob		int			not null primary key clustered,
 su_k_opl_nm	decimal(12)	null)

insert into @su_k_opl_nm(id_org_ob, su_k_opl_nm)
select oo.id_org_ob, sum(vip.fakt_dc_okv - vip.vozvrat_vr)
from pldo_vip.object as ob
inner join pldo_vip.org_ob as oo
on ob.id_ob = oo.id_ob and oo.id_subp <> 1
inner join pldo_vip.plg_org as plg
on oo.id_org_ob = plg.id_org_ob
inner join pldo_vip.vipoln as vip
on plg.id_plg = vip.id_plg
where oo.kod_fil = @kod_fil and god < @god_tek or (oo.kod_fil = @kod_fil and god = @god_tek and kod_mes < @mes_tek)
group by oo.id_org_ob
--  оплачено на начало месяца
declare @su_opl_nm table
(id_org_ob	int				not null primary key clustered,
 su_opl_nm	decimal(12)		null)

insert into @su_opl_nm(id_org_ob, su_opl_nm)
select id_org_ob, sum(summa)
from buh.ods_sum as ods_s
inner join buh.ods_title as ods_t
on ods_s.id_title = ods_t.id_title
where (kod_t = 0 and kod_tp = 1 and kod_np in (1,5) and data < @first_day_tm) or (kod_t = 2 and kod_tp = 1 and kod_np = 1 and data < @first_day_tm) --оплачено за выполн работы
group by id_org_ob
--  зачтено авансов на начало месяца
declare @su_az_nm table
(id_org_ob	int				not null primary key clustered,
 su_az_nm	decimal(12)		null)

insert into @su_az_nm(id_org_ob, su_az_nm)
select id_org_ob, sum(tek_av_z + cel_av_z + indeks)
from pldo_fin.subp_avans_zachet
where god < @god_tek or (god = @god_tek and kod_mes < @mes_tek)
group by id_org_ob
-- зачтено материалов на начало месяца
declare @su_mz_nm table
(id_org_ob	int			not null primary key clustered,
 su_mz_nm	decimal(12)	null)

insert into @su_mz_nm(id_org_ob, su_mz_nm)
select id_org_ob, sum(mat_z)
from pldo_fin.subp_mat_zachet
where god < @god_tek or (god = @god_tek and kod_mes < @mes_tek)
group by id_org_ob
-- оплачено за тек месяц
declare @su_opl_tm table
(id_org_ob	int				not null primary key clustered,
 su_opl_tm	decimal(12)		null)

insert into @su_opl_tm(id_org_ob, su_opl_tm)
select id_org_ob, sum(summa)
from buh.ods_sum as ods_s
inner join buh.ods_title as ods_t
on ods_s.id_title = ods_t.id_title
where (kod_t = 0 and kod_tp = 1 and kod_np in (1,5) and data between @first_day_tm and @cur_date) or (kod_t = 2 and kod_tp = 1 and kod_np = 1 and data between @first_day_tm and @cur_date) --оплачено за выполн работы
group by id_org_ob		-- первый день тек месяца по посл день тек месяца
--------------------------------------------------------------
-- к оплате на нач месяца
declare @us_k_opl_nm table
(id_org			int				not null, 
 kod_usl		int				not null,
 us_k_opl_nm	decimal(12)		null,
 primary key clustered(id_org, kod_usl))

insert into @us_k_opl_nm(id_org, kod_usl, us_k_opl_nm)
select id_org, kod_usl, SUM(summa)
from buh.sklad as skl
where kod_fil = @kod_fil and kod_tip_ods = 0 and data_doc < @first_day_tm
group by id_org, kod_usl
-- к оплате тм
declare @us_k_opl_tm table
(id_org			int				not null, 
 kod_usl		int				not null,
 us_k_opl_tm	decimal(12)		null,
 primary key clustered(id_org, kod_usl))

insert into @us_k_opl_tm(id_org, kod_usl, us_k_opl_tm)
select id_org, kod_usl, SUM(summa)
from buh.sklad as skl
where kod_fil = @kod_fil and kod_tip_ods = 0 and data_doc between @first_day_tm and @cur_date
group by id_org, kod_usl
-- к оплате просрочка
declare @us_k_opl_prosr table
(id_org			int				not null, 
 kod_usl		int				not null,
 us_k_opl_prosr	decimal(12)		null,
 primary key clustered(id_org, kod_usl))

insert into @us_k_opl_prosr(id_org, kod_usl, us_k_opl_prosr)
select id_org, kod_usl, SUM(summa)
from buh.sklad as skl
where kod_fil = @kod_fil and kod_tip_ods = 0 and data_doc < @date_prosr
group by id_org, kod_usl
-- оплачено на начало месяца
declare @us_opl_nm table
(id_org_usl		int				not null, 
 kod_usl		int				not null,
 us_opl_nm		decimal(12)		null,
 primary key clustered(id_org_usl, kod_usl))

insert into @us_opl_nm(id_org_usl, kod_usl, us_opl_nm)
select id_org_usl, kod_usl, SUM(summa)
from buh.ods_sum as ods_s
inner join buh.ods_title as ods_t
on ods_s.id_title = ods_t.id_title
where kod_t = 1 and kod_tp = 2 and ods_s.kod_fil = @kod_fil and ods_t.data < @first_day_tm
group by id_org_usl, kod_usl
-- оплачено за тек месяц
declare @us_opl_tm table
(id_org_usl		int				not null, 
 kod_usl		int				not null,
 us_opl_tm		decimal(12)		null,
 primary key clustered(id_org_usl, kod_usl))

insert into @us_opl_tm(id_org_usl, kod_usl, us_opl_tm)
select id_org_usl, kod_usl, SUM(summa)
from buh.ods_sum as ods_s
inner join buh.ods_title as ods_t
on ods_s.id_title = ods_t.id_title
where kod_t = 1 and kod_tp = 2 and ods_s.kod_fil = @kod_fil and ods_t.data between @first_day_tm and @cur_date
group by id_org_usl, kod_usl
-- usl av на начало месяца
declare @us_av_nm table
(id_org_usl		int				not null,
 kod_usl		int				not null,
 us_av_nm		decimal(12)		null,
 primary key clustered(id_org_usl, kod_usl))

insert into @us_av_nm(id_org_usl, kod_usl, us_av_nm)
select id_org_usl, kod_usl, SUM(summa)
from buh.ods_sum as ods_s
inner join buh.ods_title as ods_t
on ods_s.id_title = ods_t.id_title
where kod_t = 0 and kod_tp = 2 and ods_s.kod_fil = @kod_fil and data < @first_day_tm
group by id_org_usl, kod_usl

declare @us_av_tm table
(id_org_usl		int				not null,
 kod_usl		int				not null,
 us_av_tm		decimal(12)		null,
 primary key clustered(id_org_usl, kod_usl))

insert into @us_av_tm(id_org_usl, kod_usl, us_av_tm)
select id_org_usl, kod_usl, SUM(summa)
from buh.ods_sum as ods_s
inner join buh.ods_title as ods_t
on ods_s.id_title = ods_t.id_title
where kod_t = 0 and kod_tp = 2 and ods_s.kod_fil = @kod_fil and data between @first_day_tm and @cur_date
group by id_org_usl, kod_usl

declare @us_pol_nm table
(id_org			int				not null, 
 kod_usl		int				not null,
 us_pol_nm		decimal(12)		null,
 primary key clustered(id_org, kod_usl))

insert into @us_pol_nm(id_org, kod_usl, us_pol_nm)
select id_org, kod_usl, SUM(summa)
from buh.sklad as skl
where kod_tip_ods = 1 and kod_fil = @kod_fil and data_doc < @first_day_tm
group by id_org, kod_usl		

declare @us_pol_tm table
(id_org			int				not null, 
 kod_usl		int				not null,
 us_pol_tm		decimal(12)		null,
 primary key clustered(id_org, kod_usl))

insert into @us_pol_tm(id_org, kod_usl, us_pol_tm)
select id_org, kod_usl, SUM(summa)
from buh.sklad as skl
where kod_tip_ods = 1 and kod_fil = @kod_fil and data_doc between @first_day_tm and @cur_date
group by id_org, kod_usl
-- skl
declare @skl table
(id_org			int				not null, 
 kod_usl		int				not null, 
 primary key clustered(id_org, kod_usl))

insert into @skl(id_org, kod_usl)
select id_org, kod_usl
from buh.sklad as skl
where kod_tip_ods = 0 and kod_fil = @kod_fil and id > 2 and id_org = ISNULL(@id_org, id_org)
group by id_org, kod_usl
-- ods
declare @ods table
(id_org			int				not null, 
 kod_usl		int				not null, 
 primary key clustered(id_org, kod_usl))

insert into @ods(id_org, kod_usl)
select id_org_usl, kod_usl
from buh.ods_sum as ods_s
inner join buh.ods_title as ods_t
on ods_s.id_title = ods_t.id_title
where kod_t = 0 and kod_tp = 2 and ods_s.kod_fil = @kod_fil and ods_s.id_org_usl = ISNULL(@id_org, ods_s.id_org_usl)
group by id_org_usl, kod_usl
-------------------------------------------------------- select
select @kod_fil as kod_fil,
nz.id_org, nz.nazv_org,
'ob' as node_data, ob.id_ob, ob.nazv_ob as name_ob,
ids.nazv_ids,
prog.Date_obr_zad_ob(@god_tek, @mes_pred, ob.id_ob, (isnull(ob_saldo,0) + isnull(ob_k_opl_nm,0) - isnull(ob_opl_nm,0) - isnull(ob_az_nm,0) - isnull(ob_mz_nm,0) - isnull(ob_opl_tm,0))) as data_obr_zad,
isnull(meri.mer,'') +  isnull((pr.prim + ' (' + us.f + space(1) + CONVERT(char(8), pr.upd_date, 4) + ')'), '')  as prim,
case sign(isnull(ob_saldo,0) + isnull(ob_k_opl_nm,0) - isnull(ob_opl_nm,0) - isnull(ob_az_nm,0) - isnull(ob_mz_nm,0))
when 1 then nullif(isnull(ob_saldo,0) + isnull(ob_k_opl_nm,0) - isnull(ob_opl_nm,0) - isnull(ob_az_nm,0) - isnull(ob_mz_nm,0), 0)
else null
end as zad_na_nm,
null as k_opl_tm,
case SIGN(isnull(ob_saldo,0) + isnull(ob_k_opl_nm,0) - isnull(ob_opl_nm,0) - isnull(ob_az_nm,0) - isnull(ob_mz_nm,0) - isnull(ob_opl_tm,0))
when 1 then nullif(ob_opl_tm, 0)
else isnull(ob_saldo,0) + isnull(ob_k_opl_nm,0) - isnull(ob_opl_nm,0) - isnull(ob_az_nm,0) - isnull(ob_mz_nm,0)
end as opl_tm,
case SIGN(isnull(ob_saldo,0) + isnull(ob_k_opl_nm,0) - isnull(ob_opl_nm,0) - isnull(ob_az_nm,0) - isnull(ob_mz_nm,0) - isnull(ob_opl_tm,0))
when 1 then nullif(isnull(ob_saldo,0) + isnull(ob_k_opl_nm,0) - isnull(ob_opl_nm,0) - isnull(ob_az_nm,0) - isnull(ob_mz_nm,0) - isnull(ob_opl_tm,0), 0)
else null
end as zad_na_td,
nullif(nullif(sign(isnull(ob_saldo,0) + isnull(ob_k_opl_nm,0) - isnull(ob_opl_nm,0) - isnull(ob_az_nm,0) - isnull(ob_mz_nm,0) - isnull(ob_opl_tm,0) - isnull(nullif(SIGN(ob_k_opl_pm), -1) * ABS(ob_k_opl_pm),0)), -1)*
(isnull(ob_saldo,0) + isnull(ob_k_opl_nm,0) - isnull(ob_opl_nm,0) - isnull(ob_az_nm,0) - isnull(ob_mz_nm,0) - isnull(ob_opl_tm,0) - isnull(nullif(SIGN(ob_k_opl_pm), -1) * ABS(ob_k_opl_pm),0)), 0)
as pr_zad,
nullif(pp, 0) as pp,
nullif(imns, 0) as imns
from pldo_vip.object as ob
inner join nw.n_ids as ids -- ids
on ob.kod_ids = ids.kod_ids
inner join general.org as nz -- zak
on ob.id_zak = nz.id_org and nz.id_org > 1
-- деб
left join @ob_k_opl_pm as ob_k_opl_pm
on ob.id_ob = ob_k_opl_pm.id_ob
-- нар
left join @ob_saldo as ob_saldo
on ob.id_ob = ob_saldo.id_ob
left join @ob_k_opl_nm as ob_k_opl_nm
on ob.id_ob = ob_k_opl_nm.id_ob
left join @ob_opl_nm as ob_opl_nm
on ob.id_ob = ob_opl_nm.id_ob
-- av
left join @ob_az_nm as ob_az_nm
on ob.id_ob = ob_az_nm.id_ob
-- mat
left join @ob_mz_nm as ob_mz_nm
on ob.id_ob = ob_mz_nm.id_ob
-- tm
left join @ob_opl_tm as ob_opl_tm
on ob.id_ob = ob_opl_tm.id_ob
-- meri
left join @pp as pp
on ob.id_ob = pp.id_ob
left join @imns as imns
on ob.id_ob = imns.id_ob
left join @meri as meri
on ob.id_ob = meri.id_ob
-- prim
left join pldo_fin.prim_fin as pr
on ob.id_ob = pr.id_ob
left join prog.users as us
on pr.upd_user = us.kod_polz
-- where задолженность на начало мес не равна 0
where (ob.kod_fil = @kod_fil and nz.id_org = ISNULL(@id_org, nz.id_org) and ob.id_ob <> 1 and ob.kod_if <> 200 and (isnull(ob_saldo,0) + isnull(ob_k_opl_nm,0) - isnull(ob_opl_nm,0) - isnull(ob_az_nm,0) - isnull(ob_mz_nm,0)) > 0) or
(ob.kod_fil = @kod_fil and nz.id_org = ISNULL(@id_org, nz.id_org) and ob.id_ob <> 1 and ob.kod_if <> 200 and (isnull(ob_saldo,0) + isnull(ob_k_opl_nm,0) - isnull(ob_opl_nm,0) - isnull(ob_az_nm,0) - isnull(ob_mz_nm,0) - isnull(ob_opl_tm,0)) > 0)
--
union all
------------------------------------------------ subp
select @kod_fil as kod_fil,
nz.id_org, nz.nazv_org,
'ps' as node_data, oo.id_org_ob as id_ob, 'переплата на ' + ob.nazv_ob as name_ob,
null as nazv_ids,
null as data_obr_zad,
null as prim,
case sign(ISNULL(su_saldo,0) + ISNULL(su_k_opl_nm,0) - ISNULL(su_opl_nm,0) - ISNULL(su_az_nm,0) - ISNULL(su_mz_nm,0))
when -1 then ABS(ISNULL(su_saldo,0) + ISNULL(su_k_opl_nm,0) - ISNULL(su_opl_nm,0) - ISNULL(su_az_nm,0) - ISNULL(su_mz_nm,0))
else null
end as zad_na_nm,
null as k_opl_tm,
null as opl_tm,
case sign(ISNULL(su_saldo,0) + ISNULL(su_k_opl_nm,0) - ISNULL(su_opl_nm,0) - ISNULL(su_az_nm,0) - ISNULL(su_mz_nm,0) - ISNULL(su_opl_tm,0))
when -1 then ABS(ISNULL(su_saldo,0) + ISNULL(su_k_opl_nm,0) - ISNULL(su_opl_nm,0) - ISNULL(su_az_nm,0) - ISNULL(su_mz_nm,0) - ISNULL(su_opl_tm,0))
else null
end as zad_na_td,
null as pr_zad,
null as pp,
null as imns
from pldo_vip.object as ob
inner join pldo_vip.org_ob as oo
on ob.id_ob = oo.id_ob
inner join general.org as nz
on oo.id_subp = nz.id_org and oo.id_subp <> 1
inner join nw.n_fil as nf --фил 
on oo.kod_fil = nf.kod_fil
left join @su_saldo as su_saldo
on oo.id_org_ob = su_saldo.id_org_ob
-- нар
left join @su_k_opl_nm as su_k_opl_nm
on oo.id_org_ob = su_k_opl_nm.id_org_ob
left join @su_opl_nm as su_opl_nm
on oo.id_org_ob = su_opl_nm.id_org_ob
left join @su_az_nm as su_az_nm
on oo.id_org_ob = su_az_nm.id_org_ob
left join @su_mz_nm as su_mz_nm
on oo.id_org_ob = su_mz_nm.id_org_ob
-- tm
left join @su_opl_tm as su_opl_tm
on oo.id_org_ob = su_opl_tm.id_org_ob
--
where oo.kod_fil = @kod_fil and nz.id_org = ISNULL(@id_org, nz.id_org) and ISNULL(su_saldo,0) + ISNULL(su_k_opl_nm,0) - ISNULL(su_opl_nm,0) - ISNULL(su_az_nm,0) - ISNULL(su_mz_nm,0) - ISNULL(su_opl_tm,0) < 0
------------------------
union all
------------------------
select @kod_fil as kod_fil,
nz.id_org, nz.nazv_org,
'us' as node_data, n_usl.kod_usl as id_ob, gr_usl.nazv + ' - ' + n_usl.nazv as name_ob,
null as nazv_ids,
prog.Date_obr_zad_usl_fil(@kod_fil, skl.id_org, skl.kod_usl, ISNULL(us_k_opl_nm, 0) + ISNULL(us_k_opl_tm, 0) - ISNULL(us_opl_nm, 0) - ISNULL(us_opl_tm, 0)) as data_obr_zad,
prim.prim_usl + ' (' + us.f + space(1) + CONVERT(char(10), prim.upd_date, 4) + ')' as prim,
case sign(ISNULL(us_k_opl_nm, 0) - ISNULL(us_opl_nm, 0))
when 1 then ISNULL(us_k_opl_nm, 0) - ISNULL(us_opl_nm, 0)
else null
end as zad_na_nm,
us_k_opl_tm,
case sign(ISNULL(us_k_opl_nm, 0) + ISNULL(us_k_opl_tm, 0) - ISNULL(us_opl_nm, 0) - ISNULL(us_opl_tm, 0))
when -1 then case sign(ISNULL(us_k_opl_nm, 0) - ISNULL(us_opl_nm, 0) + ISNULL(us_k_opl_tm, 0))
			 when 1 then ISNULL(us_k_opl_nm, 0) - ISNULL(us_opl_nm, 0) + ISNULL(us_k_opl_tm, 0)
			 else null
			 end
else us_opl_tm
end as opl_tm,
case sign(ISNULL(us_k_opl_nm, 0) + ISNULL(us_k_opl_tm, 0) - ISNULL(us_opl_nm, 0) - ISNULL(us_opl_tm, 0))
when 1 then ISNULL(us_k_opl_nm, 0) + ISNULL(us_k_opl_tm, 0) - ISNULL(us_opl_nm, 0) - ISNULL(us_opl_tm, 0)
else null
end as zad_na_td,
case sign(ISNULL(us_k_opl_prosr, 0) - ISNULL(us_opl_nm, 0) - ISNULL(us_opl_tm, 0))
when 1 then ISNULL(us_k_opl_prosr, 0) - ISNULL(us_opl_nm, 0) - ISNULL(us_opl_tm, 0)
else null
end as pr_zad,
null as pp,
null as imns
from @skl as skl
inner join general.org as nz
on skl.id_org = nz.id_org
inner join nw.nazv_usl as n_usl
on skl.kod_usl = n_usl.kod_usl
inner join nw.nazv_group_usl as gr_usl
on n_usl.kod_gr = gr_usl.kod
-- k_opl
left join @us_k_opl_nm as us_k_opl_nm
on skl.id_org = us_k_opl_nm.id_org and skl.kod_usl = us_k_opl_nm.kod_usl
left join @us_k_opl_tm as us_k_opl_tm
on skl.id_org = us_k_opl_tm.id_org and skl.kod_usl = us_k_opl_tm.kod_usl
left join @us_k_opl_prosr as us_k_opl_prosr
on skl.id_org = us_k_opl_prosr.id_org and skl.kod_usl = us_k_opl_prosr.kod_usl
-- opl
left join @us_opl_nm as us_opl_nm
on skl.id_org = us_opl_nm.id_org_usl and skl.kod_usl = us_opl_nm.kod_usl
left join @us_opl_tm as us_opl_tm
on skl.id_org = us_opl_tm.id_org_usl and skl.kod_usl = us_opl_tm.kod_usl
--
left join buh.prim_usl as prim
on prim.kod_fil = @kod_fil and prim.id_org = skl.id_org and prim.kod_usl = skl.kod_usl
left join prog.users as us
on prim.upd_user = us.kod_polz
--
where ISNULL(us_k_opl_nm, 0) - ISNULL(us_opl_nm, 0) > 0 or
	  ISNULL(us_k_opl_nm, 0) + ISNULL(us_k_opl_tm, 0) - ISNULL(us_opl_nm, 0) - ISNULL(us_opl_tm, 0) > 0 or
	  us_k_opl_tm > 0
--
union all
------------------------------------- select two
select @kod_fil as kod_fil,
nz_av.id_org, nz_av.nazv_org,
'au' as node_data, n_usl_av.kod_usl + 1000000 as id_ob, 'аванс на ' + n_grusl_av.nazv + ' - ' + n_usl_av.nazv as name_ob, 
null as nazv_ids,
prog.Date_obr_av_usl_fil(@kod_fil,ods_s.id_org,ods_s.kod_usl, 0, ISNULL(us_av_nm, 0) + ISNULL(us_av_tm, 0) - ISNULL(us_pol_nm, 0) - ISNULL(us_pol_tm, 0)) as data_obr_zad,
null as prim,
case SIGN(ISNULL(us_av_nm, 0) - ISNULL(us_pol_nm, 0))
when 1 then ISNULL(us_av_nm, 0) - ISNULL(us_pol_nm, 0)
else null
end as zad_na_nm,
case sign(ISNULL(us_av_nm, 0) - ISNULL(us_pol_nm, 0))
when -1 then case sign(ISNULL(us_av_nm, 0) + ISNULL(us_av_tm, 0) - ISNULL(us_pol_nm, 0))
			 when 1 then ISNULL(us_av_nm, 0) + ISNULL(us_av_tm, 0) - ISNULL(us_pol_nm, 0)
			 else null
			 end
else us_av_tm
end as k_opl_tm,
case sign(ISNULL(us_av_nm, 0) + ISNULL(us_av_tm, 0) - ISNULL(us_pol_nm, 0))
when 1 then case SIGN(ISNULL(us_av_nm, 0) + ISNULL(us_av_tm, 0) - ISNULL(us_pol_nm, 0) - ISNULL(us_pol_tm, 0))
			when -1 then ISNULL(us_av_nm, 0) + ISNULL(us_av_tm, 0) - ISNULL(us_pol_nm, 0)
			when 1 then us_pol_tm
			else null
			end
else null
end as opl_tm,
case SIGN(ISNULL(us_av_nm, 0) + ISNULL(us_av_tm, 0) - ISNULL(us_pol_nm, 0) - ISNULL(us_pol_tm, 0))
when 1 then ISNULL(us_av_nm, 0) + ISNULL(us_av_tm, 0) - ISNULL(us_pol_nm, 0) - ISNULL(us_pol_tm, 0)
else null
end as zad_na_td, 
null as pr_zad,
null as pp,
null as imns
from @ods as ods_s
inner join general.org as nz_av
on ods_s.id_org = nz_av.id_org
inner join nw.nazv_usl as n_usl_av
on ods_s.kod_usl = n_usl_av.kod_usl
inner join nw.nazv_group_usl as n_grusl_av
on n_usl_av.kod_gr = n_grusl_av.kod
--
left join @us_av_nm as us_av_nm
on ods_s.id_org = us_av_nm.id_org_usl and ods_s.kod_usl = us_av_nm.kod_usl
left join @us_av_tm as us_av_tm
on ods_s.id_org = us_av_tm.id_org_usl and ods_s.kod_usl = us_av_tm.kod_usl
left join @us_pol_nm as us_pol_nm
on ods_s.id_org = us_pol_nm.id_org and ods_s.kod_usl = us_pol_nm.kod_usl
left join @us_pol_tm as us_pol_tm
on ods_s.id_org = us_pol_tm.id_org and ods_s.kod_usl = us_pol_tm.kod_usl
--
where ISNULL(us_av_nm, 0) + ISNULL(us_av_tm, 0) - ISNULL(us_pol_nm, 0) - ISNULL(us_pol_tm, 0) > 0 or
ISNULL(us_av_nm, 0) - ISNULL(us_pol_nm, 0) > 0
--
order by nazv_org, name_ob
--
end


Сообщение было отредактировано: 23 сен 11, 09:18
26 май 10, 18:57    [8840609]     Ответить | Цитировать Сообщить модератору
 Re: "мистика" с данными  [new]
koJIo6ok
Member

Откуда: РБ
Сообщений: 950
так выбираются данные, это "дебиторская" задолженность на тек дату она 10 руб по одной органицации например показывает, я вношу платежку на 5 руб или еще что меняю, обновляю данные - зад 10 руб и остается, пару раз обновить данные и приходит нужный набор с зад на 5 руб - ну как так?
26 май 10, 19:03    [8840650]     Ответить | Цитировать Сообщить модератору
 Re: "мистика" с данными  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
koJIo6ok
так выбираются данные, это "дебиторская" задолженность на тек дату она 10 руб по одной органицации например показывает, я вношу платежку на 5 руб или еще что меняю, обновляю данные - зад 10 руб и остается, пару раз обновить данные и приходит нужный набор с зад на 5 руб - ну как так?
Да как угодно, и сервер скорее всего ни при чемм. Может ваша платежка заносится с текущей датой + 5 минут.
26 май 10, 19:05    [8840657]     Ответить | Цитировать Сообщить модератору
 Re: "мистика" с данными  [new]
koJIo6ok
Member

Откуда: РБ
Сообщений: 950
да нет дата операции это дата без времени, отбор только по дате, заносятся они коректно, insert update delete без транзакций, мой вариант сказка?
26 май 10, 19:15    [8840691]     Ответить | Цитировать Сообщить модератору
 Re: "мистика" с данными  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8880
Гавриленко Сергей Алексеевич
koJIo6ok
так выбираются данные, это "дебиторская" задолженность на тек дату она 10 руб по одной органицации например показывает, я вношу платежку на 5 руб или еще что меняю, обновляю данные - зад 10 руб и остается, пару раз обновить данные и приходит нужный набор с зад на 5 руб - ну как так?
Да как угодно, и сервер скорее всего ни при чемм. Может ваша платежка заносится с текущей датой + 5 минут.

+1 за некорректный "between.... and @cur_date" ( которая @cur_date= GETDATE() )

Попробуйте занести платёжку и проселектить соответствующие таблицы.
ИМХО, "затык" в этом месте:
-- оплачено за тек месяц
declare @us_opl_tm table
(id_org_usl		int				not null, 
 kod_usl		int				not null,
 us_opl_tm		decimal(12)		null,
 primary key clustered(id_org_usl, kod_usl))

insert into @us_opl_tm(id_org_usl, kod_usl, us_opl_tm)
select id_org_usl, kod_usl, SUM(summa)
from buh.ods_sum as ods_s
inner join buh.ods_title as ods_t
on ods_s.id_title = ods_t.id_title
where kod_t = 1 and kod_tp = 2 and ods_s.kod_fil = @kod_fil and ods_t.data between @first_day_tm and @cur_date
group by id_org_usl, kod_usl
Если информация не будет селектиться, значит есть что-то (триггер, человек, job, внешний процесс), который, например, подтверждает платёж (например, проставляет kod_t = 1 или kod_tp = 2) с задержкой... Или что-то делается убийственно медленным триггером, например...
26 май 10, 23:00    [8841388]     Ответить | Цитировать Сообщить модератору
 Re: "мистика" с данными  [new]
koJIo6ok
Member

Откуда: РБ
Сообщений: 950
SIMPLicity_

+1 за некорректный "between.... and @cur_date" ( которая @cur_date= GETDATE() )

Попробуйте занести платёжку и проселектить соответствующие таблицы.
ИМХО, "затык" в этом месте:
Если информация не будет селектиться, значит есть что-то (триггер, человек, job, внешний процесс), который, например, подтверждает платёж (например, проставляет kod_t = 1 или kod_tp = 2) с задержкой... Или что-то делается убийственно медленным триггером, например...


в чем некоректность between-а? объясните плз
непонимаю, остальное, спасибо проверю, хотя тригеры я не вешал, джобы вообще не пользовал никогда, а вот вн процесс проверю, данные пишутся и смотрятся по VPN-соединению 128 кбит\с, и по лок сети 100 мбит\с, как добавился VPN так и назрела это "проблема" когда все было в рамках лок сети ничего подобного за 2 года замечено не было, а тут практически сразу, но я же обновляю данные только после отработки процедур на изм\доб данных и я вижу на форме вноса что платежка внеслась корректно, а в своде задолженности результат не тот
27 май 10, 10:46    [8842516]     Ответить | Цитировать Сообщить модератору
 Re: "мистика" с данными  [new]
iljy
Member

Откуда:
Сообщений: 8711
koJIo6ok,

профайлер что говорит?
27 май 10, 10:50    [8842564]     Ответить | Цитировать Сообщить модератору
 Re: "мистика" с данными  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
ИМХО, скорее всего процесс обновления данных занимает дольше, чем представляется ТС (собственно +1 к SIMPLicity_ ). Кнопку-то нажали, а сам процесс обновления данных идет 5-10 мин... После чего конечно же видно, что данные обновились, а до коммита - не видно.

Это единственное, что приходит в голову.
27 май 10, 11:14    [8842814]     Ответить | Цитировать Сообщить модератору
 Re: "мистика" с данными  [new]
koJIo6ok
Member

Откуда: РБ
Сообщений: 950
ну да в принципе, по другому вроде и быть не может, но я на форме вноса платежек вижу обновленные данные, перехожу на форму просмотра - там обновляю выдает без учета изм проходит время все норм, ладно буду смотреть спасибо
зы пока это не важно - скок раз себе говорил ничего не упдайтить через базу взял с дуру бахнул такой запрос
select *
from buh.sklad
where id_org = 76

update buh.sklad
set id_org = 684
я в шоке, забыл where дописать :) теперь с бакупом возись - боюсь я их, млин так это теперь все пользователи опять пропадут ахренеть вот это я обновил млин :(
27 май 10, 14:04    [8844747]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: "мистика" с данными  [new]
koJIo6ok
Member

Откуда: РБ
Сообщений: 950
опять та же 'беда' вернее она никуда и не уходила походу, а я ей так и не уделил должного внимания
ситуация та же в той же базе и приложении, только таблицы\запросы\формы другие (регистрация договоров) - гланая форма на ней показываю общий вид данных - читаю датаридер (запрос №1) и построчно добавляю строки в XpressQuantumTreeList, со второй формы добавляется новый договор (запрос №2) после закрытия 2 формы обновляются данные на первой - нового договора нет на экране, но он есть в базе тк при добавлении нового договора номер предыдущего учитывается через какой-то промежуток времени (то что я видел сам до 5-10 минут максимум было) отображаются все договора, как так?
видел сам пару раз - я с сервером в лок сети, но больше жалуется пользователи те что по VPN (256 кбит/сек) и тот ф-л где плохой канал, но это просто совпадение мб тк запрос же проходит сервер дает новые данные при этом ошибок не выдает.
помогите разобраться плз где я что не так делаю, попрубую все что скажите и отвечу на все наводящие/уточняющие вопросы
поидее вариатов тут не таж уж и много должно быть, инсерт в таблицу мб он отрабытывает долго и это и есть то время? кстати он обернут в транзакцию что там должно быть с блокировками в таких случаях?

select @@VERSION
Microsoft SQL Server 2008 (SP2) - 10.0.4321.0 (Intel X86)
Sep 2 2011 17:25:33
Copyright (c) 1988-2008 Microsoft Corporation
Enterprise Edition on Windows NT 5.2 <X86> (Build 3790: Service Pack 2)


процедура заполнения XpressQuantumTreeList гл формы
+

void RowsAddContract(int id)
        {
            try
            {
                using (SqlConnection cn = new SqlConnection(myClassConnect.create_bldr().ConnectionString))
                {
                    using (SqlCommand cmd = cn.CreateCommand())
                    {
                        cmd.CommandText = "contractual_work_look.report_contracts";
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.Parameters.AddWithValue("date_begin", _val.DateBegin);
                        cmd.Parameters.AddWithValue("date_end", _val.DateEnd);
                        if (_val.KodFil == 255) cmd.Parameters.AddWithValue("kod_fil", DBNull.Value);
                        else cmd.Parameters.AddWithValue("kod_fil", _val.KodFil);

                        if (_val.ContractNumber == 0)
                        {
                            cmd.Parameters.AddWithValue("contract_number", DBNull.Value);
                            //
                            if (_val.IsEntering == 255) { cmd.Parameters.AddWithValue("is_entering", DBNull.Value); }
                            else { cmd.Parameters.AddWithValue("is_entering", _val.IsEntering); }
                            if (_val.ContractType == 255) { cmd.Parameters.AddWithValue("contract_type", DBNull.Value); }
                            else { cmd.Parameters.AddWithValue("contract_type", _val.ContractType); }
                            if (_val.WePayers == 255) { cmd.Parameters.AddWithValue("we_payers", DBNull.Value); }
                            else { cmd.Parameters.AddWithValue("we_payers", _val.WePayers); }
                            if (_val.KodIds == 255) { cmd.Parameters.AddWithValue("kod_ids", DBNull.Value); }
                            else { cmd.Parameters.AddWithValue("kod_ids", _val.KodIds); }                            
                            if (_val.IsError == 255) { cmd.Parameters.AddWithValue("is_error", DBNull.Value); }
                            else { cmd.Parameters.AddWithValue("is_error", _val.IsError); }
                            if (_val.ResponsibleReturnContract == 255) { cmd.Parameters.AddWithValue("responsible_return", DBNull.Value); }
                            else { cmd.Parameters.AddWithValue("responsible_return", _val.ResponsibleReturnContract); }
                            if (_val.IsReturned == 255) { cmd.Parameters.AddWithValue("is_returned", DBNull.Value); }
                            else { cmd.Parameters.AddWithValue("is_returned", _val.IsReturned); }
                            if (_val.IsTerminated == 255) { cmd.Parameters.AddWithValue("is_terminated", DBNull.Value); }
                            else { cmd.Parameters.AddWithValue("is_terminated", _val.IsTerminated); }
                            if (_val.ContractStatus == 255) { cmd.Parameters.AddWithValue("contract_status", DBNull.Value); }
                            else { cmd.Parameters.AddWithValue("contract_status", _val.ContractStatus); }
                            if (_val.IdResponsible == 1) { cmd.Parameters.AddWithValue("responsible", DBNull.Value); }
                            else { cmd.Parameters.AddWithValue("responsible", _val.IdResponsible); }
                            if (_val.IdOrg == 1) { cmd.Parameters.AddWithValue("id_org", DBNull.Value); }
                            else { cmd.Parameters.AddWithValue("id_org", _val.IdOrg); }
                            if (_val.IdObject == 1) { cmd.Parameters.AddWithValue("id_ob", DBNull.Value); }
                            else { cmd.Parameters.AddWithValue("id_ob", _val.IdObject); }
                            if (_val.DepartmentNumber == 0) { cmd.Parameters.AddWithValue("department_number", DBNull.Value); }
                            else { cmd.Parameters.AddWithValue("department_number", _val.DepartmentNumber); }
                        }
                        else
                        {
                            cmd.Parameters.AddWithValue("contract_number", _val.ContractNumber);
                            //
                            cmd.Parameters.AddWithValue("is_entering", DBNull.Value);
                            cmd.Parameters.AddWithValue("contract_type", DBNull.Value);
                            cmd.Parameters.AddWithValue("we_payers", DBNull.Value);
                            cmd.Parameters.AddWithValue("kod_ids", DBNull.Value);                           
                            cmd.Parameters.AddWithValue("responsible_return", DBNull.Value);
                            cmd.Parameters.AddWithValue("is_error", DBNull.Value);
                            cmd.Parameters.AddWithValue("is_terminated", DBNull.Value);
                            cmd.Parameters.AddWithValue("is_returned", DBNull.Value);
                            cmd.Parameters.AddWithValue("contract_status", DBNull.Value);
                            cmd.Parameters.AddWithValue("responsible", DBNull.Value);
                            cmd.Parameters.AddWithValue("id_org", DBNull.Value);
                            cmd.Parameters.AddWithValue("id_ob", DBNull.Value);
                            cmd.Parameters.AddWithValue("department_number", DBNull.Value);
                        }                        
                        cn.Open();
                        using (SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                        {
                            dxtl.M.BeginUpdate();
                            ColumnsAddContract();
                            if (rdr.HasRows == true)
                            {                                
                                dxTreeNode dxnode = null;
                                while (rdr.Read())
                                {
                                    dxnode = dxtl.M.Add();
                                    for (byte i = 3; i <= 21; i++)
                                    {
                                        dxnode.set_Strings(i - 3, rdr.GetString(i));
                                    }                                    
                                    dxnode.set_Values(19, rdr.GetInt16(1)); //bin_data
                                    if (!rdr.IsDBNull(2)) dxnode.set_Values(20, rdr.GetInt32(2)); //count_ds
                                    dxnode.set_Values(21, rdr.GetInt32(0)); //id

                                    if (!rdr.IsDBNull(2)) RowsAddContractGetDs(rdr.GetInt32(0), dxnode);
                                }
                                dxnode = dxtl.M.Add();                                
                            }
                            else
                            {
                                dxtl.M.Add();
                            }
                            dxtl.M.EndUpdate();
                        }
                    }
                }
            }
            catch (SqlException ex)
            {
                MessageBox.Show(ex.Message, myClassConnect.userIO, MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }


запрос 1, обычная 'форматирующая' выборка из нескольких таблиц
+

create proc [contractual_work_look].[report_contracts]
	@date_begin			date,
	@date_end			date,
	@is_entering		bit,
	@contract_type		tinyint,
	@we_payers			bit,
	@kod_ids			tinyint,	
	@responsible_return	bit,
	@is_error			bit,
	@is_returned		bit,
	@is_terminated		bit,
	@contract_status	tinyint,
	@id_org				int,
	@id_ob				int,
	@responsible		int,
	@contract_number	int,
	@department_number	tinyint,
	@kod_fil			tinyint
as
begin
set nocount on
--
declare @ds table
(
	id_contract int not null primary key clustered,
	count_ds	int not null
)
insert into @ds(id_contract, count_ds)
select ds.id_contract, COUNT(*) as count_ds
from contractual_work.contracts_ds as ds
group by ds.id_contract
--
select c.id, us.kod_polz as bin_data, ds.count_ds,
cast(ROW_NUMBER() over(order by c.reg_date desc, c.contract_number desc) as varchar) as row_count,
CAST(nf.nazv_fil_sokr as varchar) + '-' + CAST(c.department_number as varchar) + '/' + CAST(c.contract_number as varchar) as reg_number,
convert(char(10), c.reg_date, 104) as reg_date,
case org.counterpart_type
	when 1 then org.nazv_org + case org.add_city_to_name
									when 1 then case when org.country is null then ''
													 else case when org.settlement is null then ', ' + cntr.r_name
															   else ', ' + cntr.r_name + ', ' + stt_type.r_name + ' ' + stt.name
														  end
												end
									else ''
							   end + case when org.unp is null then ''
							              else ' УНП ' + cast(org.unp as varchar)
							         end
	when 2 then org.f + ' ' + org.i + ' ' + org.o
end as nazv_org,
ids.nazv_ids,
case c.contract_type
	when 1 then ctype.name + ', объект - ' + ob.nazv_ob + ', ' + nvr.nazv_vr + case when c.contract_subject is null then ''
																				  else + ', ' + c.contract_subject
																			   end
	when 2 then ctype.name + ', объект - ' + ob.nazv_ob + case when c.contract_subject is null then ''
															 else + ', ' + c.contract_subject
														  end
	else case when c.contract_subject is null then ctype.name
			else ctype.name + ', ' + c.contract_subject
		 end
end as contract_subject,
case c.we_payers
	when 0 then ''
	when 1 then 'пл.'
end as we_payers,
case when c.quantity is null then 'сумма - ' + prog.numberGroup(c.summa) + ' руб.'
	else c.quantity + ', сумма - ' + prog.numberGroup(c.summa) + ' руб.'
end as quantity,
case when c.period_of_validity is null then 'с ' + convert(char(10), c.date_begin, 104) + ' по ' + convert(char(10), c.date_end, 104) + ' г.'
	else c.period_of_validity + ', с ' + convert(char(10), c.date_begin, 104) + ' по ' + convert(char(10), c.date_end, 104) + ' г.'
end as period_of_validity,
case c.is_entering
	when 0 then 'исх.'
	when 1 then 'вх. ' + case when c.ent_number is null
							  then case when c.ent_date is null
							            then 'б/н и б/д'
										else 'б/н от ' + convert(char(10), c.ent_date, 104) + ' г.'
								   end
							  else case when c.ent_date is null
								     then '№' + c.ent_number + ' от б/д'
									 else '№' + c.ent_number + ' от ' + convert(char(10), c.ent_date, 104) + ' г.'
								   end
						 end 	
end as is_entering,
convert(char(10), c.date_rs, 104) as date_rs,
cstatus.name as cstatus,
case c.is_returned
	when 0 then 'нет'
	when 1 then 'да'
end as is_returned,
case c.remark
	when 0 then 'нет'
	when 1 then 'да'
end as remark,
case c.is_terminated
	when 0 then 'нет'
	when 1 then 'да'
end as is_terminated,
case c.is_error
	when 0 then 'нет'
	when 1 then 'да'
end as is_error,
people.f + ' ' + LEFT(people.i, 1) + '.' + LEFT(people.o, 1) + '.' as responsible,
case when c.prim is null then
		case c.responsible_return
			when 0 then ''
			when 1 then 'отв. вернул договор'
		end
	 else case c.responsible_return
			when 0 then c.prim
			when 1 then 'отв. вернул договор, ' + c.prim
		  end
end as prim,
us.f + SPACE(1) + LEFT(us.i,1) + '.' + LEFT(us.o,1) + '. (' + usf.nazv_fil_sokr + ') ' + convert(char(10), c.upd_date, 104) + ' ' + convert(char(5), c.upd_date, 114) as isp
from contractual_work.contracts as c
inner join contractual_work_nw.contract_type as ctype
on c.contract_type = ctype.id
inner join contractual_work_nw.contract_status as cstatus
on c.contract_status = cstatus.id
-- org
inner join general.org as org
on c.id_org = org.id_org
left join general.settlement as stt
on org.settlement = stt.id
left join general_nw.settlement_type as stt_type
on stt.s_type = stt_type.id
left join general.country as cntr
on org.country = cntr.id
--
inner join pldo_vip.object as ob
on c.id_ob = ob.id_ob
inner join nw.n_vr as nvr
on ob.kod_vr = nvr.kod_vr
inner join general.org as people
on c.responsible = people.id_org
inner join nw.n_ids as ids
on c.kod_ids = ids.kod_ids
inner join nw.n_fil as nf
on c.kod_fil = nf.kod_fil
-- ds
left join @ds as ds
on c.id = ds.id_contract
-- us
left join prog.users as us
on c.upd_user = us.kod_polz
left join nw.n_fil as usf
on us.kod_fil = usf.kod_fil
--
where c.reg_date between @date_begin and @date_end and c.kod_fil = isnull(@kod_fil, c.kod_fil)
and c.is_entering = ISNULL(@is_entering, c.is_entering) and c.contract_type = ISNULL(@contract_type, c.contract_type)
and c.we_payers = ISNULL(@we_payers, c.we_payers)
and c.kod_ids = ISNULL(@kod_ids, c.kod_ids)
and c.responsible_return = ISNULL(@responsible_return, c.responsible_return)
and c.is_error = ISNULL(@is_error, c.is_error) and c.is_returned = ISNULL(@is_returned, c.is_returned)
and c.is_terminated = ISNULL(@is_terminated, c.is_terminated) and c.contract_status = ISNULL(@contract_status, c.contract_status)
and c.id_org = ISNULL(@id_org, c.id_org) and c.responsible = ISNULL(@responsible, c.responsible)
and c.id_ob = ISNULL(@id_ob, c.id_ob)
and c.contract_number = ISNULL(@contract_number, c.contract_number) and c.department_number = ISNULL(@department_number, c.department_number)
--
order by c.reg_date desc, c.contract_number desc
--
end;


запрос 2 на вставку данных
+

create proc [contractual_work].[contract_ins]	
	-- object	
	@kod_if				tinyint,
	@kod_vr				tinyint,	
	@nazv_ob			varchar(250),
	@kod_fil_gp			tinyint,	
	@flag_subp			bit,			
	-- contracts
	@kod_ids			tinyint,
	@contract_type		tinyint,
	@we_payers			bit,
	@id_ob				int,	
	@id_org				int,
	@contract_subject	varchar(300),
	@quantity			varchar(300),
	@summa				decimal(12,0),
	@period_of_validity	varchar(150),
	@date_begin			date,
	@date_end			date,
	@date_rs			date,
	@ent_number			varchar(30),
	@ent_date			date,
	@remark				bit,
	@is_returned		bit,
	@date_return		date,
	@is_entering		bit,
	@contract_status	tinyint,
	@department_number  tinyint,
	@responsible		int,	
	@responsible_return bit,
	@is_error			bit,
	@is_terminated		bit,
	@prim				varchar(300),
	@kod_fil			tinyint,	
	@upd_user			smallint
as
begin
set nocount on
--
begin try
	begin transaction
		-- if @kod_fil = 200 and @upd_user != 30000 return		
		-- dec
		declare @id_org_ob	int,		
		@contract_number	int,
		@date_cur			date,
		@date_start			date
		-- set
		set @id_org_ob = 1
	    -- contract_type
	    -- 1 - СМР, подряда
	    -- 2 - СМР, субподряда	    
		------------ insert object
		if @contract_type = 1
		begin
			insert into [pldo_vip].[object]
			(kod_ids, kod_if, kod_vr, id_zak, nazv_ob, kod_fil, god_nr, mes_nr, god_sd, mes_sd, flag_subp, upd_user)
			values (@kod_ids, @kod_if, @kod_vr, @id_org, @nazv_ob, @kod_fil_gp, YEAR(@date_begin), MONTH(@date_begin),
			YEAR(@date_end), MONTH(@date_end), @flag_subp, @upd_user)
			--
			set @id_ob = (select cast(scope_identity() as int))
			-- ins fil
			insert into [pldo_vip].[org_ob] 
			(id_ob, kod_fil, id_subp, upd_user)
			values(@id_ob, @kod_fil_gp, 1, @upd_user)
		end
		------------ insert org_ob
		else if @contract_type = 2
		begin
			declare
			@count_subp		int,
			@count_fil		int
			set @count_fil = (select COUNT(*) from pldo_vip.org_ob where id_ob = @id_ob and id_subp = 1 and kod_fil = @kod_fil_gp)
			--set @count_subp = (select COUNT(*) from pldo_vip.org_ob where id_ob = @id_ob and id_subp = @id_org and kod_fil = @kod_fil_gp)
			if @count_fil = 0
				begin			
					-- ins fil
					insert into [pldo_vip].[org_ob]
					(id_ob, kod_fil, id_subp, upd_user)
					values(@id_ob, @kod_fil_gp, 1, @upd_user)										
				end
			--if @count_subp = 0
			--	begin
					-- ins subp
					insert into pldo_vip.org_ob
					(id_ob, kod_fil, id_subp, upd_user)
					values(@id_ob, @kod_fil_gp, @id_org, @upd_user)
					--
					set @id_org_ob = (select cast(scope_identity() as int))
			--	end
			--else if @count_subp > 0
				--begin
					--set @id_org_ob = (select id_org_ob from pldo_vip.org_ob where id_ob = @id_ob and id_subp = @id_org and kod_fil = @kod_fil_gp)
				--end
		end		
		------------ insert contracts		
		-- set
		set @date_cur = GETDATE()
		set @date_start = prog.DateSerial(YEAR(@date_cur), 1, 1)		
		set @contract_number =
		(
			select ISNULL(MAX(contract_number),0) + 1
			from contractual_work.contracts
			where kod_fil = @kod_fil and reg_date between @date_start and @date_cur
		)
		--select @contract_number, @date_begin, @date_cur
		--
		insert into contractual_work.contracts(contract_number, contract_type, we_payers, kod_ids, id_ob, id_org_ob, id_org, contract_subject,
		quantity, summa, period_of_validity, date_begin, date_end, date_rs, ent_number, ent_date, remark, is_returned,
		date_return, is_entering, contract_status, department_number, responsible, responsible_return, is_error, is_terminated, prim, kod_fil, upd_user)
		values(@contract_number, @contract_type, @we_payers, @kod_ids, @id_ob, @id_org_ob, @id_org, @contract_subject, @quantity, @summa,
		@period_of_validity, @date_begin, @date_end, @date_rs, @ent_number, @ent_date, @remark, @is_returned, @date_return,
		@is_entering, @contract_status, @department_number, @responsible, @responsible_return, @is_error, @is_terminated, @prim, @kod_fil, @upd_user)		
	commit transaction
end try
begin catch
	rollback transaction
end catch
--
end;
22 сен 11, 17:27    [11321023]     Ответить | Цитировать Сообщить модератору
 Re: "мистика" с данными  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
koJIo6ok, кеширование на гриде не врублено случаем?
22 сен 11, 19:22    [11321811]     Ответить | Цитировать Сообщить модератору
 Re: "мистика" с данными  [new]
koJIo6ok
Member

Откуда: РБ
Сообщений: 950
да нет, в нем и нет его вроде
каждое заполнение XpressQuantumTreeList - удаление строк => удаление столбцов => добавление столбцов => добавление строк
23 сен 11, 00:10    [11322674]     Ответить | Цитировать Сообщить модератору
 Re: "мистика" с данными  [new]
aleks2
Guest
Научитесь чтоль закрывать транзакцию в форме, где вносите данные.
Или выключите SET TRANSACTION ISOLATION LEVEL SNAPSHOT.

Эффекты этих действ будут немного разными, но ваша проблема удалится...
23 сен 11, 05:25    [11323042]     Ответить | Цитировать Сообщить модератору
 Re: "мистика" с данными  [new]
koJIo6ok
Member

Откуда: РБ
Сообщений: 950
aleks2,
у меня же в хп есть commit transaction и rollback transaction
24 сен 11, 16:12    [11331672]     Ответить | Цитировать Сообщить модератору
 Re: "мистика" с данными  [new]
aleks2
Guest
koJIo6ok
aleks2,
у меня же в хп есть commit transaction и rollback transaction

Наивняк. Он даже не знает про @@trancount и свято верует, что commit transaction спасет.
24 сен 11, 19:59    [11332145]     Ответить | Цитировать Сообщить модератору
 Re: "мистика" с данными  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
koJIo6ok
aleks2,
у меня же в хп есть commit transaction и rollback transaction

ужасный код.
24 сен 11, 20:28    [11332206]     Ответить | Цитировать Сообщить модератору
 Re: "мистика" с данными  [new]
koJIo6ok
Member

Откуда: РБ
Сообщений: 950
Ken@t,
что не так? если не лень
26 сен 11, 00:48    [11334386]     Ответить | Цитировать Сообщить модератору
 Re: "мистика" с данными  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
koJIo6ok,

Не так
1. Нет проверок на ошибки
2. Нет проверки на нефиксируемые транзакции
3. Нет проверки выполнения ХП в контексте транзакции/циё
4. "Погашение исключения" в блоке перехвата.
5. ХП не возвращает результат

6. set @id_org_ob = (select cast(scope_identity() as int))

7. Общий код который недопроцедурный и недодекларативный
8. Вызвать вашу хп с любыми невалидными параметрами

вот дальше уже лень
26 сен 11, 06:53    [11334535]     Ответить | Цитировать Сообщить модератору
 Re: "мистика" с данными  [new]
koJIo6ok
Member

Откуда: РБ
Сообщений: 950
Ken@t,
спасибо, я только так и не разобрал что плохого в 6. set @id_org_ob = (select cast(scope_identity() as int))
и что значит 3. Нет проверки выполнения ХП в контексте транзакции/циё - это как?
объяснити плз
1 фев 12, 13:05    [12010672]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить