|
Доброе время суток, Я долго не мог решать, браться за 1С программирование или нет, тормозила меня специфика моей работы – SysAdmin (All in One), когда времени никогда не хватает на серьезных дел. Но вот и возникла та ситуация когда отложить больше нельзя. В компании где я работаю, трудились до меня несколько поколении SysAdmin’ов… был изначально в штатах и программист 1С …который совместно с Admin’ом создали цельную систему. Ну это было давно …и естественно, как и любые уважающий себя программисты, в сторону документирования системы не работали. Я 4 поколении… на словах до меня дошло мало. Ну в челом вот такая картина, MS SQL – 1Cv7; MS SQL – Sharepoint&(asp); MS - SQL – Access. DB Access и сайт компании, имеют созданные запросы в Transact-SQL и получают необходимые данные из таблицах 1С(SQL версия), для дальнейшей работы с ними. Моё слабое место 1C, мне очень тяжело с этими запросами разобраться, пока для меня они даже логически кажутся неправильны, помогите!
Данный запрос формирует таблицу клиентов и получает сальдо по расчёту с дебиторами и кредиторами, эту таблицу я дальше обрабатываю в asp, и каждый клиент заходя в свою приватную зону получает состояния счета . В моем случи, Дебит – «Долг=» а Кредит – «Фин.Г». К сожалению, рабочий код мне не достался, а только то что сумел получить после крушения SQL сервера. После восстановления старого сервера был найден этот код:
CREATE VIEW dbo.VIEW AS SELECT cast(SC5116.CODE AS int) AS код, SC5116.DESCR AS Наименование, Пояснение = CASE _1SBKTTL.ACCID WHEN 'Z1426F' THEN 'Фин.Г.' + str(0 - _1SBKTTL.SD) WHEN 'Z142DL' THEN 'Долг = ' + str(_1SBKTTL.SD, 10, 2) ELSE 'Kto ego znaet!' END, КодБлокировки = CASE _1SBKTTL.ACCID WHEN 'Z1426F' THEN 301 WHEN 'Z142DL' THEN 302 END FROM SC5116 INNER JOIN _1SBKTTL ON SC5116.ID = _1SBKTTL.SC0 WHERE (((_1SBKTTL.ACCID = 'Z1426F') AND (_1SBKTTL.KIND = '2') AND (SC5116.SP5867 = '1') AND (_1SBKTTL.SD <> 0)) OR ((_1SBKTTL.ACCID = 'Z142DL') AND (_1SBKTTL.SD > 10) )) AND (_1SBKTTL.DATE > getdate())) AND /* (cast(SC5116.parentid AS int) BETWEEN 1 AND 3)*/ ( (Ltrim(SC5116.parentid) = '1') or (ltrim(SC5116.parentid) ='3') or (ltrim(SC5116.parentid) ='2'))
Я его попробовал восстановить методом «тыка» и правильному синтаксу Transact’a, вот что получилось:
CREATE VIEW dbo.TIR_VIEW AS SELECT _1SBKTTL.DATE AS Data, cast(SC5116.CODE AS int) AS код, SC5116.DESCR AS Наименование, Пояснение = CASE _1SBKTTL.ACCID WHEN 'Z1426F' THEN 'Фин.Г.'+ str(0 - _1SBKTTL.SD) WHEN 'Z142DL' THEN 'Долг = ' + str(_1SBKTTL.SD, 10, 2) ELSE 'Kto ego znaet!' END, КодБлокировки = CASE _1SBKTTL.ACCID WHEN 'Z1426F' THEN 301 WHEN 'Z142DL' THEN 302 END FROM SC5116 INNER JOIN _1SBKTTL ON SC5116.ID = _1SBKTTL.SC0 WHERE ( ( (_1SBKTTL.ACCID = 'Z1426F') AND (_1SBKTTL.KIND = '2') AND (SC5116.SP5867 = '1') AND (_1SBKTTL.SD <> 0) ) or ( (_1SBKTTL.ACCID = 'Z142DL') /*and (_1SBKTTL.SD > 10)*/ ) ) and ( (_1SBKTTL.DATE > getdate()) – Для меня это нелогично!!! ) and ( (Ltrim(SC5116.parentid) = '1') or (ltrim(SC5116.parentid) ='3') or (ltrim(SC5116.parentid) ='2') )
В таком виде он поработал пару месяцев, а сейчас перестал… перед тем как здесь писать, «тыкал» долго – без результатов. Сейчас должен быстро устранить эту проблему, буду очень признателен за вашу активность и терпения к «новичку».
|