|
v7: Прямой запрос к базе SQL вместо БухгалтерскиеИтоги | ☑ | ||
---|---|---|---|---|
0
Роспатнюк Сергей Сер
27.09.19
✎
17:19
|
добрые люди помогите сделать прямой запрос, целый день сижу курю 1cv7.dds, ковыряю регистры с документами, читаю про типы данных в sql, но так и не допер как мне получить МОЛа и основные средства которые на нем числятся, задача заменить в отчёте все БИ = СоздатьОбъект("БухгалтерскиеИтоги") И БИ.ИсПользоватьСубконто(ВидыСубконто.ОсновныеСредства) на прямые запросы, пока настряпал только вот что задал параметры создал таблицу с МОЛом
Конфигурация 1С:Подрядчик строительства 2.3 (7.70.2317) Запрос = " |set nocount on; |set dateformat ymd; | |declare @mol_id as char(9); |declare @date_end as datetime, @date_begin as datetime; |set @date_begin = '" + гсДатаSQL(НачДата) + "'; |set @date_end = '" + гсДатаSQL(КонДата) + "'; |set @mol_id = " + _МОЛ + "; |------------------------------------------------------------------------------------------------------- |if object_id('tempdb..#mol_list', 'U') is not null drop table #mol_list; |if object_id('tempdb..#mol_group', 'U') is not null drop table #mol_group; |-------------------------------------------------------------------------------------------------------- |declare @isfolder as int, @parentid as char(9), @level as int; |--------------------------- МОЛ ------------------------------------------------------------------- |create table #mol_list | |( id char(9), | parentid char(9), | levelid int |) | |select * into #mol_group from sc208 as mol(nolock) |where mol.isfolder = 1; | |if (@mol_id is not null) |begin | set @isfolder = (select top 1 mol.isfolder from SC208 as mol(nolock) where mol.id = @mol_id); | set @parentid = (select top 1 parentid from SC208 as mol(nolock) where id = @mol_id); | | if @isfolder = 1 | begin | set @level = 1; | insert into #mol_list( [id], parentid, levelid) | values(@mol_id, @parentid, @level); | | while @@rowcount > 0 and @level <= 6 | begin | set @level = @level + 1; | insert into #mol_list( [id], parentid, [levelid]) | select mol.[id], mol.parentid, @level from #mol_group as mol | inner join #mol_list as li on li.id = mol.parentid and li.levelid= @level - 1; | end | end; |end |-------------------------------------------------------------------------------------------------------- |SELECT | mo.id, mo.descr, |FROM | #mol_list as mo | LEFT JOIN ( SELECT oc.* | FROM --// Справочник - ОсновныеСредства | sc11450 AS oc |
|||
1
palpetrovich
27.09.19
✎
17:34
|
как-то сложно ты #mol_list создаешь ...надо получить список молов с иерархией?
|
|||
2
Роспатнюк Сергей Сер
27.09.19
✎
17:39
|
(1) нет не нужно, я не разу не писал такие запросы так что просто скопировал создание листа, вырезать не захотел опасаясь что перестанет работать.
|
|||
3
Роспатнюк Сергей Сер
27.09.19
✎
17:43
|
(2) я подумал что цикл while @@rowcount > 0 and @level <= 6 просто достанет МОЛа даже если он будет спрятан в папке с глубино до 6
|
|||
4
palpetrovich
27.09.19
✎
17:49
|
так проще:
if object_id(N'tempdb..#mol_list', N'U') is not null drop table #mol_list; select mol.id into #mol_list from sc208 as mol (nolock) where mol.isfolder = 2 and mol.ismark = 0 |
|||
5
Роспатнюк Сергей Сер
27.09.19
✎
17:56
|
(4) так хорошо у нас есть мол, а откуда взять левое соединение с ОС из справочника ? но там нет субконто по которому будет связь таблиц из документов ПреремещениеОС или Ввод в эксплуатацию ОС ? там вроде бы есть
|
|||
6
rsv
27.09.19
✎
20:24
|
(0) судя по бухгалтерские итоги в подрядчике
Строительства есть план счетов и стало быть .. Табличка 1s entry ? |
|||
7
rsv
27.09.19
✎
20:29
|
Если так то счёт найти где живут осы и мол как субконто .. может забалансовый или балансовый ... как там в подрядчике
|
|||
8
DrZombi
гуру
27.09.19
✎
21:55
|
(0) используй 1С++, куда приятней :)
Либо предопределили представление, на SQL.... и далее твои запросы примут человеческий вид :) + вот v7: Как можно получить бухгалтерские итоги через прямой запрос 1С++ база DBF |
|||
9
DrZombi
гуру
27.09.19
✎
21:56
|
||||
10
Попытка1С
28.09.19
✎
08:44
|
Используй класс "ПрямойЗапрос"
|
|||
11
Роспатнюк Сергей Сер
30.09.19
✎
16:20
|
up, спасибо за ссылки все прочитал немного прояснилось :)
_1sentry есть вот что в ней Столбцы по порядку ROW_ID DOCID NUMBER CORNO DATE_TIME_DOCID ACCDTID ACCKTID SUM_ CURRID CURSUM AMOUNT PROVKIND ACTIVE DTFLAGS KTFLAGS DOCLINENO SP547 SP548 SP27565 DTSC0 VDTSC0 ODTSC0 DTSC1 VDTSC1 ODTSC1 DTSC2 VDTSC2 ODTSC2 KTSC0 VKTSC0 OKTSC0 KTSC1 VKTSC1 OKTSC1 KTSC2 VKTSC2 OKTSC2 Значения по порядку 17242999 A4C1 0 0 2009123199TQW0 A4C1 53 1 7196.34 0 .00 .000 "" "" 0 0 0 Остаток по счету: 71.1 СИ " " 1R6 11595 0 "" 0 0 0 0 0 0 0 0 0 0 счета где живут осы "01.1,01.2,02.1,02.2,03.1,03.2,03.3,03.4,010" так как это всё объединить в запрос ? |
|||
12
Ёпрст
30.09.19
✎
16:57
|
||||
13
Роспатнюк Сергей Сер
30.09.19
✎
16:59
|
(12) спасибо буду вникать )
|
|||
14
victuan1
01.10.19
✎
20:12
|
Закладка.
|
|||
15
Роспатнюк Сергей Сер
07.10.19
✎
11:19
|
Снова вернемся к теме, после не большого перерыва для запиливания бухам очередного отчета) немного почитал ссылки и вот что получилось, да конечно я знаю есть куча ошибок таких как, не все счета присутствуют то есть не учтено перемещение с 01.1 на 01.1 ну и наверное ещё те о которых я не подозреваю если вы мне укажете на них буду благодарен, и возник еще один вопрос как посмотреть какой sql запрос строит 1с при написании БИ.Субконто().МОЛ.Получить(НачДата) ?
|set nocount on; |set dateformat ymd; | |declare @mol_id as char(9), @Schet as char(9); |declare @date_end as datetime, @date_begin as datetime; |set @Schet = '" + Schet01_1 + "'; |set @date_begin = '" + гсДатаSQL(НачДата) + "'; |set @date_end = '" + гсДатаSQL(КонДата) + "'; |set @mol_id = " + _МОЛ + "; |-------------------------------------------------------------------------------------------------------- |if object_id('tempdb..#Str_Doc', 'U') is not null drop table #List_Group; |-------------------------------------------------------------------------------------------------------- |SELECT |СпрОС.DESCR AS Наименование, |БИ._Дата AS _Дата, |SUM(CASE WHEN БИ.Счет = ' 01. 1. ' THEN 1 WHEN БИ.Счет = ' 01. 2. ' THEN -1 END) AS Счет, |БИ.Ид AS НомИд, |SUM(БИ.СНК) AS СНК, |SUM(БИ.СНД) AS СНД, |SUM(БИ.ДО) AS ДО, |SUM(БИ.КО) AS КО, |SUM(БИ.СКК) AS СКК, |SUM(БИ.СКД) AS СКД] |into #mol_list |FROM |DH14046 AS _Doc (NOLOCK) |LEFT JOIN _1SENTRY AS _Provodki ON (_Doc.IDDOC = _Provodki.DOCID) |LEFT JOIN SC11450 AS СпрОС (NOLOCK) ON (_Provodki.DTSC0 = СпрОС.ID) |LEFT JOIN (SELECT |TabIt.DATE AS _Дата, |TabSch.SCHKOD As Счет, |ОснСр.DESCR AS НаименованиеСубконто1, |ОснСр.ID AS Ид, |SUM(CASE WHEN (TabSch.ACTIVE = 1) OR ((TabSch.ACTIVE = 3) AND (TabIt.SD >=0)) THEN TabIt.SD ELSE 0 END) AS СНД, |SUM(CASE WHEN (TabSch.ACTIVE = 2) OR ((TabSch.ACTIVE = 3) AND (TabIt.SD <0)) THEN -TabIt.SD ELSE 0 END) AS СНК, |SUM(TabIt.OBDT1) AS ДО, |SUM(TabIt.OBKT1) AS КО, |SUM(CASE WHEN (TabSch.ACTIVE = 1) OR ((TabSch.ACTIVE = 3) AND (TabIt.SD + TabIt.OBDT1 - TabIt.OBKT1 >=0)) THEN TabIt.SD + TabIt.OBDT1-TabIt.OBKT1 ELSE 0 END) AS СКД, |SUM(CASE WHEN (TabSch.ACTIVE = 2) OR ((TabSch.ACTIVE = 3) AND (TabIt.SD + TabIt.OBDT1 - TabIt.OBKT1 <0)) THEN -(TabIt.SD + TabIt.OBDT1 - TabIt.OBKT1) ELSE 0 END) AS СКК |FROM _1SBKTTL AS TabIt (NOLOCK) |INNER JOIN _1SACCS AS TabSch (NOLOCK) ON (TabIt.ACCID = TabSch.ID) |LEFT JOIN SC11450 AS ОснСр (NOLOCK) ON (TabIt.SC0 = ОснСр.ID) |WHERE (TabIt.DATE = '20191001') AND (TabIt.KIND = 1) AND (TabIt.VSC0 = 11591) |GROUP BY |TabIt.KIND, TabIt.DATE, TabSch.SCHKOD, ОснСр.ID, Осн.Ср.DESCR) AS БИ |ON (СпрОС.DESCR = БИ.НаименованиеСубконто1) |WHERE |_Doc.SP14044 = ' CVG ' AND _Provodki.DATE_TIME_DOCID IS NOT NULL |GROUP BY |СпрОС.DESCR, БИ._Дата, БИ.Ид |UNION ALL |SELECT |СпрОС.DESCR AS Наименование, |БИ._Дата AS _Дата, |Sum(CASE WHEN БИ.Счет = ' 01. 1. ' THEN 1 WHEN БИ.Счет = ' 01. 2. ' THEN -1 END) AS Счет, ||БИ.Ид AS НомИд, |SUM(БИ.СНК) AS СНК, |SUM(БИ.СНД) AS СНД, |SUM(БИ.ДО) AS ДО, |SUM(БИ.КО) AS КО, |SUM(БИ.СКК) AS СКК, |SUM(БИ.СКД) AS СКД |FROM |DH14087 AS _Doc (NOLOCK) |LEFT JOIN _1SENTRY AS _Provodki ON (_Doc.IDDOC = _Provodki.DOCID) |LEFT JOIN SC11450 AS СпрОС (NOLOCK) ON (_Provodki.DTSC0 = СпрОС.ID) |LEFT JOIN (SELECT |TabIt.DATE AS _Дата, |TabSch.SCHKOD As Счет, |ОснСр.DESCR AS НаименованиеСубконто1, |ОснСр.ID AS Ид, |SUM(CASE WHEN (TabSch.ACTIVE = 1) OR ((TabSch.ACTIVE = 3) AND (TabIt.SD >=0)) THEN TabIt.SD ELSE 0 END) AS СНД, |SUM(CASE WHEN (TabSch.ACTIVE = 2) OR ((TabSch.ACTIVE = 3) AND (TabIt.SD <0)) THEN -TabIt.SD ELSE 0 END) AS СНК, |SUM(TabIt.OBDT1) AS ДО, |SUM(TabIt.OBKT1) AS КО, |SUM(CASE WHEN (TabSch.ACTIVE = 1) OR ((TabSch.ACTIVE = 3) AND (TabIt.SD + TabIt.OBDT1 - TabIt.OBKT1 >=0)) THEN TabIt.SD + TabIt.OBDT1-TabIt.OBKT1 ELSE 0 END) AS СКД, |SUM(CASE WHEN (TabSch.ACTIVE = 2) OR ((TabSch.ACTIVE = 3) AND (TabIt.SD + TabIt.OBDT1 - TabIt.OBKT1 <0)) THEN -(TabIt.SD + TabIt.OBDT1 - TabIt.OBKT1) ELSE 0 END) AS СКК |FROM |_1SBKTTL AS TabIt (NOLOCK) |INNER JOIN _1SACCS AS TabSch (NOLOCK) ON (TabIt.ACCID = TabSch.ID) |LEFT JOIN SC11450 AS ОснСр (NOLOCK) ON (TabIt.SC0 = ОснСр.ID) |WHERE (TabIt.DATE = '20191001') AND (TabIt.KIND = 1) AND (TabIt.VSC0 = 11591) GROUP BY |TabIt.KIND, TabIt.DATE, ОснСр.ID, TabSch.SCHKOD, Осн.Ср.DESCR) AS БИ ON (СпрОС.DESCR = БИ.НаименованиеСубконто1) |WHERE _Doc.SP14083 = ' CVG ' AND _Provodki.DATE_TIME_DOCID IS NOT NULL |GROUP BY |СпрОС.DESCR, БИ._Дата, БИ.Ид |UNION ALL |SELECT |СпрОС.DESCR AS Наименование, |БИ._Дата AS _Дата, |SUM(CASE WHEN БИ.Счет = ' 01. 1. ' THEN 1 WHEN БИ.Счет = ' 01. 2. ' THEN -1 END) AS Счет, |БИ.Ид AS НомИд, |SUM(БИ.СНК) AS СНК, |SUM(БИ.СНД) AS СНД, |SUM(БИ.ДО) AS ДО, |SUM(БИ.КО) AS КО, |SUM(БИ.СКК) AS СКК, |SUM(БИ.СКД) AS СКД |FROM |DH48461 AS _Doc (NOLOCK) |LEFT JOIN _1SENTRY AS _Provodki ON (_Doc.IDDOC = _Provodki.DOCID) |LEFT JOIN SC11450 AS СпрОС (NOLOCK) ON (_Provodki.DTSC0 = СпрОС.ID) |LEFT JOIN (SELECT |TabIt.DATE AS _Дата, |TabSch.SCHKOD As Счет, |ОснСр.DESCR AS НаименованиеСубконто1, |ОснСр.ID AS Ид, |SUM(CASE WHEN (TabSch.ACTIVE = 1) OR ((TabSch.ACTIVE = 3) AND (TabIt.SD >=0)) THEN TabIt.SD ELSE 0 END) AS СНД, |SUM(CASE WHEN (TabSch.ACTIVE = 2) OR ((TabSch.ACTIVE = 3) AND (TabIt.SD <0)) THEN -TabIt.SD ELSE 0 END) AS СНК, |SUM(TabIt.OBDT1) AS ДО, |SUM(TabIt.OBKT1) AS КО, |SUM(CASE WHEN (TabSch.ACTIVE = 1) OR ((TabSch.ACTIVE = 3) AND (TabIt.SD + TabIt.OBDT1 - TabIt.OBKT1 >=0)) THEN TabIt.SD + TabIt.OBDT1-TabIt.OBKT1 ELSE 0 END) AS СКД, |SUM(CASE WHEN (TabSch.ACTIVE = 2) OR ((TabSch.ACTIVE = 3) AND (TabIt.SD + TabIt.OBDT1 - TabIt.OBKT1 <0)) THEN -(TabIt.SD + TabIt.OBDT1 - TabIt.OBKT1) ELSE 0 END) AS СКК |FROM _1SBKTTL AS TabIt (NOLOCK) |INNER JOIN _1SACCS AS TabSch (NOLOCK) ON (TabIt.ACCID = TabSch.ID) |LEFT JOIN SC11450 AS ОснСр (NOLOCK) ON (TabIt.SC0 = ОснСр.ID) |WHERE(TabIt.DATE = '20191001') AND (TabIt.KIND = 1) AND (TabIt.VSC0 = 11591) |GROUP BY |TabIt.KIND, |TabIt.DATE, |ОснСр.ID, |TabSch.SCHKOD, |Осн.Ср.DESCR) AS БИ ON (СпрОС.DESCR = БИ.НаименованиеСубконто1) |WHERE _Doc.SP48444 = ' CVG ' AND _Provodki.DATE_TIME_DOCID IS NOT NULL |GROUP BY |СпрОС.DESCR, |БИ._Дата, |БИ.Ид |-------------------------------------------------------------------------------------------------------- |SELECT LG.Наименование, LG._Дата, LG.Счет, LG.НомИд, LG.СНК, LG.СНД, LG.ДО, LG.КО, LG.СКК, СКД |FROM #List_Group AS LG |WHERE LG.Счет > 0 |
|||
16
Chum
07.10.19
✎
11:35
|
(15) А ты настырный. Может имеет смысл обойтись штатным запросом, используя объект "БухгалтерскиеИтоги"? При грамотной настройке параметров запроса, фильтров и т.д. скорость выполнения вполне приемлемая. да и обрабатывать результаты можно не просто циклом, а позиционированием на конкретных значениях субконто.
|
|||
17
Роспатнюк Сергей Сер
07.10.19
✎
11:44
|
(16) ха если бы было все так просто то так бы и сделал но есть такая штука начальник называется ну так вот то что так можно сделать он знает и то что я так могу написать тоже знает, и еще есть вторая штука такая как приказ, для чего это все нужно я догадываюсь, но высказывать свои догадки не буду, кароче начальник сказал сделать так и ни как иначе.
|
|||
18
Роспатнюк Сергей Сер
07.10.19
✎
11:46
|
(16) и да про то как можно сделать по другому вопроса не было. Не хочу показаться грубым но если не знаете ответ на заданные вопросы то зачем вообще писать что то ?
|
|||
19
Bigbro
07.10.19
✎
12:16
|
(16) похоже кто-то готовится к потенциальному рассмотрению варианта внедрения новой учетной системы и отказа от текущей (возможно и вместе с людьми ее поддерживающими).
|
|||
20
Chum
07.10.19
✎
12:27
|
(18) грубить действительно не стоит, а вот умению отсеивать идиотские задачи с грамотным обоснованием, скорее всего, стоит научиться. Ты обмолвился о цели этой задачи. Мне почему-то представилась картинка о грядущем увольнении, но это не точно.
Обращение к БИ прямым запросом - тема давнишняя, и вариантов ее реализации в свое я не встретил, а потом и необходимость отпала. Заморачиваться ради того, чтобы что-то кому-то доказать? - а ты уверен, что работодатель поддержит инициативу оплаты этих потуг? 27 сентября ты открыл тему, подозреваю, что и задачу тебе поставили в этот же день, если не ранее. Сегодня 07 октября. Прошло 7 рабочих дней, а задача не выполнена. На месте начальника я бы тебе уже задал вопрос о результатах. |
|||
21
Ёпрст
07.10.19
✎
12:29
|
(15)
перебирать шапки документов за все время работы..моветон какой-то |
|||
22
Роспатнюк Сергей Сер
07.10.19
✎
13:03
|
(20) задача не к спеху это раз, два сказали делать другой отчёт а это отложить, про увольнение это точно вы ошиблись так как то что я вообще могу её выполнить это еще большой вопрос думаю её мне и дали с целью саморазвития в области sql запросов, три задачи мне ставит ведущий программист 1с с прямого запроса директора ИТ, про работу надеюсь всё объяснил не переживайте за меня, отсеивать уметь надо тут я согласен, но черт возьми я не могу ни чего отсеить вообще если скажу что это бред делать не буду тогда реально встанет вопрос про увольнение. (21) согласен, но учитывая что параметр МОЛ всегда 1 и всегда заполнен не думаю что для sql это будет проблемой перебрать хоть 1к строк, а как можно по другому если знаете подскажите, подходящих _1SТаблиц не нашел и регистров тоже ((
|
|||
23
Дык ё
07.10.19
✎
13:30
|
(20) так вот же: http://catalog.mista.ru/public/14925/
|
|||
24
Arbuz
07.10.19
✎
14:13
|
+(23) здесь http://www.1cpp.ru/forum/YaBB.pl?num=1181817217/all более подробно
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |