Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) DBF прямой запрос (Оборотно сальдовая) Бухгалтерия (число прочтений - 13845 )
Pilokarpios
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 25
Зарегистрирован: 21. Мая 2008
DBF прямой запрос (Оборотно сальдовая) Бухгалтерия
21. Мая 2008 :: 13:42
Печать  
Добрый день, пролистал терпимо все темы форума (ветка DBF),  вывод, дбф структура мало кого интересует, т.к. не гибкая... Ребята вопрос, ну как сделать прямой запрос к оборотам счета по ОДБЦ, да пофиг, я на эту тему много уже рыл, может поглупел за 10 лет, SQl запросы писал, действительно скорость радует... помогите, может ссылки у когото есть нормальные и т.п. Спасибо, надеюсь на ответ, 1С++ использую с 2005 года, блокировки и т.п, но не в разрезе DBF. Если суть в умении программировать в Fox (т.е. fox запросы по DBF таблицам), то это уже сложнее т.к. это погибающий вариант. тем не мение, очень надеюсь на достой ный ответ, даже если нецензурный...  Подмигивание
  
Наверх
 
IP записан
 
zenik
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 109
Зарегистрирован: 09. Октября 2007
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #1 - 22. Мая 2008 :: 09:09
Печать  
Хреново искал. На второй странице, всего навсего, есть вот такая тема: http://www.1cpp.ru/forum/YaBB.pl?num=1168603103
  
Наверх
 
IP записан
 
Pilokarpios
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 25
Зарегистрирован: 21. Мая 2008
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #2 - 24. Мая 2008 :: 16:50
Печать  
zenik писал(а) 22. Мая 2008 :: 09:09:
Хреново искал. На второй странице, всего навсего, есть вот такая тема: http://www.1cpp.ru/forum/YaBB.pl?num=1168603103


там ничего нет...

Люди, подскажите плиз, можно ли делать прямые запросы к DBF бух итоги??? Смущённый
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #3 - 24. Мая 2008 :: 16:59
Печать  
"дбф структура не гибкая"
+
"можно делать прямые запросы к DBF бух итоги"
  
Наверх
ICQ  
IP записан
 
Pilokarpios
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 25
Зарегистрирован: 21. Мая 2008
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #4 - 24. Мая 2008 :: 17:18
Печать  
spock писал(а) 24. Мая 2008 :: 16:59:
"дбф структура не гибкая"
+
"можно делать прямые запросы к DBF бух итоги"


а можно ссылку или пример увидеть, я уже кучу всего перерыл, както непонятно с скулем пересекается всё
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #5 - 24. Мая 2008 :: 17:32
Печать  
Структура схожа со скулем (логически), все остальное делается по подобию.
Ты задавай конкретные вопросы, вместо общих.
  
Наверх
ICQ  
IP записан
 
Pilokarpios
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 25
Зарегистрирован: 21. Мая 2008
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #6 - 24. Мая 2008 :: 17:58
Печать  
spock писал(а) 24. Мая 2008 :: 17:32:
Структура схожа со скулем (логически), все остальное делается по подобию.
Ты задавай конкретные вопросы, вместо общих.


можно ли ускорить прямым запросом?

    Ит = СоздатьОбъект("БухгалтерскиеИтоги");  
    Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения, Склад, 2);
    Если ПустоеЗначение(Отдел)=0 Тогда
       Ит.ИспользоватьСубконто(ВидыСубконто.Отделы, Отдел, 2);
    КонецЕсли;
    Ит.ИспользоватьСубконто(ВидыСубконто.Партия,Партия, 2);
    Ит.ВыполнитьЗапрос(ДатаОстатков,ДатаОстатков,"01.2",,, 1,, "К");
    Возврат Ит.СКД(3);
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #7 - 25. Мая 2008 :: 10:44
Печать  
Этот код можно ускорить и штатными средствами, скажем,  ИспользоватьРазделительУчета()..
В целом, получение отдельного итога существенно ускорить, скорее всего, не получится.
Если этот код вызывается в цикле, рассчитай все свои итоги одним бухзапросом с разворотом по местам хранения/отделам/партиям и получай их по мере обхода своих циклов.
А если и после этого производительность не устроит, тогда уже думай о прямых запросах.

Как-то это мало похоже на оборотно-сальдовую..
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #8 - 25. Мая 2008 :: 23:13
Печать  
berezdetsky писал(а) 25. Мая 2008 :: 10:44:
Как-то это мало похоже на оборотно-сальдовую..

ОФФ. А зачем такими маленькими печатать? Для разминки глаз учаснегам?   Подмигивание
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Pilokarpios
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 25
Зарегистрирован: 21. Мая 2008
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #9 - 26. Мая 2008 :: 10:53
Печать  
Народ, неужели тут нет человека, который может сказать наконец нормально, можно это или нельзя, ну сколько можно уже не по теме отвечать???  Злой
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #10 - 26. Мая 2008 :: 11:04
Печать  
Это можно. Я Это делать не буду, так как меня Это не интересует.
З.Ы. Попробуй сделать так (заметь, я пршу тебя что-то сделать, а не спросить)
1) Поставить локально скуль и 1С под СКЛ, либо запрос, сфоримрованный классом AccountRecordset Прогони через Метапарсер. Выведи его в окно сообщений, или в файл, куда-нибудь вобщем.
2) Проанализируй этот запрос, найди, чем отличается структура таблиц для MSSQL и DBF.
3) Спроектируй, как должен выглядеть этот запрос в ДБФ-ной базе.
4) Перепиши класс "AccountRecordset " чтобы он выдавал нужный тебе запрос.
5) Выложи его для общего доступа и получишь заслуженные почет и уважение.
  
Наверх
ICQ  
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #11 - 26. Мая 2008 :: 16:52
Печать  
Можно, но с ограничениями:
1 - OLEDB вместо ODBC,
2 - не будет групп по справочникам.
  
Наверх
IP записан
 
gjpbw
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 1
Зарегистрирован: 04. Апреля 2008
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #12 - 26. Мая 2008 :: 17:36
Печать  
думаю правильный ответ можно (тут не уверен) но НЕ НУЖНО (а вот тут практически уверен)
так что оптимизируйте код (выше вам уже писал)

PS у меня вообщето сложилось впечатление что человек пытается не найти способ ускорить работу, а факты в пользу того бухитоги плохо. Сорри если не так.
  
Наверх
 
IP записан
 
Pilokarpios
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 25
Зарегистрирован: 21. Мая 2008
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #13 - 27. Мая 2008 :: 09:41
Печать  
Salimbek писал(а) 26. Мая 2008 :: 11:04:
Это можно. Я Это делать не буду, так как меня Это не интересует.
З.Ы. Попробуй сделать так (заметь, я пршу тебя что-то сделать, а не спросить)
1) Поставить локально скуль и 1С под СКЛ, либо запрос, сфоримрованный классом AccountRecordset Прогони через Метапарсер. Выведи его в окно сообщений, или в файл, куда-нибудь вобщем.
2) Проанализируй этот запрос, найди, чем отличается структура таблиц для MSSQL и DBF.
3) Спроектируй, как должен выглядеть этот запрос в ДБФ-ной базе.
4) Перепиши класс "AccountRecordset " чтобы он выдавал нужный тебе запрос.
5) Выложи его для общего доступа и получишь заслуженные почет и уважение.


Блин... да перед тем как сделать и потратить на это кучу времени я хочу уточнить: "СТОИТ ЛИ ВООБЩЕ ЭТО ДЕЛАТЬ?". Запросы по регистрам, выборка справочников, поиск и тд по таблицам - ДА - ЭТО РАБОТАЕТ БЫСТРО.

Виноват... спрошу по новому Требуется ускорить подбор из таблицы в которой расчет остатков производится быстрым (прямой запрос) расчетом бухгалтерских итогов Ит.СКД(3) в разрезе трех субконто, на данный момент локально или в режиме терминалов все работает ОК, при использовании сетевого варианта платформы 1С7.7 стандартный метод компиляции запроса работает медленно.

У меня два варианта решения:

1- вариант (буферные остатки) расчет стандартным методом и исключение частых обращений к расчетам бух итогов для сетевых пользователей,
2-вариант это прямые запросы, о которых я уже много прочитал. т.е. запрос осуществляется примерно так:

Код
Выбрать все
DataBase = СоздатьОбъект("ODBCDatabase");
Рез = DataBase.DriverConnect("DRIVER=Microsoft Visual FoxPro ="+КаталогИБ());
Запрос =  СоздатьОбъект("ODBCRecordSet");  
Запрос.SetDatabase(DataBase);
  
ТабЗнач = СоздатьОбъект("ТаблицаЗначений");

ТекстЗапроса =  "SELECT
		|Schkod AS Счет, Schim as Имя, Active as Признак, Level as уровень ,
		| SD AS Вход, Obdt1 AS ОборотД1, Obkt1 AS ОборотК1,Obdt2 AS ОборотД2, Obkt2 AS ОборотК2,Obdt3 AS ОборотД3, Obkt3 AS ОборотК3,0.00 AS ОборотД4,0.00 AS ОборотК4,0.00 AS ОборотД5,0.00 AS ОборотК5  
		| 	FROM
		|	1Saccs as Счета
		|   ,
		|	1Sbkttl as Остатки
		|	where (Остатки.Date = " + ДатаОстатков + ") and (Остатки.Kind='1')
		|   and (Счета.Id = Остатки.Accid)
		| ";  
 



, но я так и не понял, поможет мне это или нет?!!

gjpbw писал(а) 26. Мая 2008 :: 17:36:
думаю правильный ответ можно (тут не уверен) но НЕ НУЖНО (а вот тут практически уверен)
так что оптимизируйте код (выше вам уже писал)

PS у меня вообщето сложилось впечатление что человек пытается не найти способ ускорить работу, а факты в пользу того бухитоги плохо. Сорри если не так.


Вот ответ, прости дружище, но я не уверен, ты пока один ! спасибо за ответ, я тоже начинаю склоняться к аналогичному мнению.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #14 - 27. Мая 2008 :: 10:07
Печать  
FAQ
http://www.1cpp.ru/forum/YaBB.pl?num=1148038411/25#25,
FoxPro  ODBC тормознут, снят с поддержки уже лет 10, не поддерживает индексы 1С(с фильтром).
Рекомендуется OLEDB.

Код
Выбрать все
Виноват... спрошу по новому Требуется ускорить подбор из таблицы в которой расчет остатков производится быстрым (прямой запрос) расчетом бухгалтерских итогов Ит.СКД(3) в разрезе трех субконто, на данный момент локально или в режиме терминалов все работает ОК, при использовании сетевого варианта платформы 1С7.7 стандартный метод компиляции запроса работает медленно. 


Если остатки показываются в вычисляемой колонке справочника :
Для полной оптимизации этого дела потребуется табличное поле на ДБФ (в разработке) + вникать
в индексы(+ еще время).

Если объем базы не очень большой, возможна частичная оптимизация путем одновременного
расчета ВСЕХ остатков номенклатуры в ПриОткрытии- т.е. подбор вести не в реальном времени.

Если объем номенклатуры до 5000 элементов - при открытии будет наблюдаться торможение(расчет остатков)
около 1-2 сек, в дальнейшем подбор будет практически мгновенным.

Если остатки показываются как в типовой - внизу в текстовой строке лучше ограничиться стандартными методами
(ну только функцию по одному тому же товару не вызывать по 10 раз)
  
Наверх
 
IP записан
 
Pilokarpios
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 25
Зарегистрирован: 21. Мая 2008
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #15 - 27. Мая 2008 :: 11:15
Печать  
kiruha писал(а) 27. Мая 2008 :: 10:07:
FAQ
http://www.1cpp.ru/forum/YaBB.pl?num=1148038411/25#25,
FoxPro  ODBC тормознут, снят с поддержки уже лет 10, не поддерживает индексы 1С(с фильтром).
Рекомендуется OLEDB.

Код
Выбрать все
Виноват... спрошу по новому Требуется ускорить подбор из таблицы в которой расчет остатков производится быстрым (прямой запрос) расчетом бухгалтерских итогов Ит.СКД(3) в разрезе трех субконто, на данный момент локально или в режиме терминалов все работает ОК, при использовании сетевого варианта платформы 1С7.7 стандартный метод компиляции запроса работает медленно. 


Если остатки показываются в вычисляемой колонке справочника :
Для полной оптимизации этого дела потребуется табличное поле на ДБФ (в разработке) + вникать
в индексы(+ еще время).

Если объем базы не очень большой, возможна частичная оптимизация путем одновременного
расчета ВСЕХ остатков номенклатуры в ПриОткрытии- т.е. подбор вести не в реальном времени.

Если объем номенклатуры до 5000 элементов - при открытии будет наблюдаться торможение(расчет остатков)
около 1-2 сек, в дальнейшем подбор будет практически мгновенным.

Если остатки показываются как в типовой - внизу в текстовой строке лучше ограничиться стандартными методами
(ну только функцию по одному тому же товару не вызывать по 10 раз)


Читал я FAQ, про регистры понятно, а про бух.итоги ? !!!
насчет Оле согласен, просто вывалил пример
  
Наверх
 
IP записан
 
nicolas
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 148
Зарегистрирован: 24. Мая 2006
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #16 - 27. Мая 2008 :: 11:34
Печать  
gjpbw писал(а) 26. Мая 2008 :: 17:36:
думаю правильный ответ можно (тут не уверен) но НЕ НУЖНО (а вот тут практически уверен)
так что оптимизируйте код (выше вам уже писал)


Не согласен в корне. Вот тут попала оказия( есть конфа по расчету ЖКХ, сделана на бух итогах. ) получение квитанции занимало время от 7 мин до 10 в зависимости  от нагрузки, т.е.  бух сидела и в окно глядела.  Переписал на прямые запросы. Результат 1 мин. но и это не предел. там есть еще над чем  покумекать. Особенно большое спасибо kiruha за его вклад по работе с индексами!!! Но и при этом встает проблема попадания в индекс в таблице 1SBKTTL. Если надо получить несколько счетов, при известном субконто. Может просто я не нашел решения....
При ручном добавлении индекса, где не учитывается счет, скорость взлетала......... менее 1сек для получения  ТЗ со всеми оборотами и остатками.
А предложения где звучат, долой dbf  просто..... А кто будет обслуживать SQL,  если   на dbf то  не кому.......
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #17 - 27. Мая 2008 :: 12:11
Печать  
nicolas писал(а) 27. Мая 2008 :: 11:34:
gjpbw писал(а) 26. Мая 2008 :: 17:36:
думаю правильный ответ можно (тут не уверен) но НЕ НУЖНО (а вот тут практически уверен)
так что оптимизируйте код (выше вам уже писал)


Не согласен в корне. Вот тут попала оказия( есть конфа по расчету ЖКХ, сделана на бух итогах. ) получение квитанции занимало время от 7 мин до 10 в зависимости  от нагрузки, т.е.  бух сидела и в окно глядела.  Переписал на прямые запросы. Результат 1 мин. но и это не предел. там есть еще над чем  покумекать. Особенно большое спасибо kiruha за его вклад по работе с индексами!!! Но и при этом встает проблема попадания в индекс в таблице 1SBKTTL. Если надо получить несколько счетов, при известном субконто. Может просто я не нашел решения....
При ручном добавлении индекса, где не учитывается счет, скорость взлетала......... менее 1сек для получения  ТЗ со всеми оборотами и остатками.
А предложения где звучат, долой dbf  просто..... А кто будет обслуживать SQL,  если   на dbf то  не кому.......


Вероятно тогда есть готовые образцы запросов для бухитогов ДБФ - Pilokarpios как раз хотел на них взглянуть ...
  
Наверх
 
IP записан
 
nicolas
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 148
Зарегистрирован: 24. Мая 2006
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #18 - 27. Мая 2008 :: 12:22
Печать  
Идет выборка по нескольким счетам и по одному субконто.
Вобще то каждый раз приходится писать свой запрос, но это окупает скростью работы.
Был в прошлом году случай когда заставили делть отчет с 2002 года. так вот у меня он работал минут - 10. по словам буха, у коллег больше 12 часов, при это тогда было не до оптимизации... разовый отчет...

     |SELECT
     |ЛицСчет.ID  as [ЛицевойСчет $Справочник.икЛицевыеСчета]
     |,ВидУсл.ID as [ВидУслуги $Справочник.икВидыУслуг]
     |,БИ.сч as [Счет $Счет.основной]
     | , Sum(БИ.СуммаВх) AS СН
     |  ,Sum(БИ.Дебет) AS ДО
     |  ,Sum(БИ.Кредит) AS КО
     |  ,Sum(БИ.СуммаВх+БИ.Дебет-БИ.Кредит ) AS СК
     |FROM
     |(
     |SELECT   
     |  Ост.SC0 as Клиент
     |, Ост.SC1 as усл 
     |, Ост.ACCID as сч
     |,  "+СтрокаНачСумма+"
     |,$0 as Дебет
     |,$0 As Кредит
     |FROM 
     |      1SBKTTL   as Ост   
     |
     |WHERE 
     |
     |    (DTOS(Ост.DATE)+Ост.KIND+Ост.ACCID+Ост.SC0+Ост.SC1+Ост.SC2 +Ост.currid= DTOS(:НачПериода~~)+'1') -- вот тут и несовсем использутеся индекс когда создать свой DTOS(Ост.DATE)+Ост.KIND+Ост.SC0+Ост.SC1+Ост.SC2  скорость .....
     |AND  %Ост.SC0 AND (Ост.ACCID in " + ВыбрСч + ")    
     |
     |GROUP BY
     |   1,
     |   2,
     |   3   
     |
     |UNION ALL
     |
     |-- Оборот Дебетовый
     |Select
     |  Деб.Клиент as Клиент
     |, Деб.усл as усл
     |, Деб.сч as сч
     |, Деб.СуммаВх as СуммаВх
     |, Деб.Дебет as Дебет
     |, Деб.Кредит as Кредит
     |FROM
     |(
     |SELECT
     |  Проводки.DTSC0    as  Клиент
     |, Проводки.DTSC1    as  усл
     |, Проводки.ACCDTID as сч
     |, $0 as СуммаВх
     |, Sum(Проводки.Sum) as  Дебет
     |, $0  as Кредит   
     | From 1SENTRY as Проводки,
     |(
     |SELECT DOCID+STR(NUMBER,5)   as ключД
     |      FROM  1SSBSEL  -- эта таблица по выбранным субконто, использование дает приличное, но счета.......
     |      WHERE  SBKINDID+VAL + DTOS(DATE)+ TIME+DOCID+STR(NUMBER,5)+STR(CORNO,5) Between
     |             :ТипСуб+:ЛицСчет+DTOS(:ДатаНачала~~)  +'      '+'    0'+'    0'
     | and :ТипСуб+:ЛицСчет+DTOS(:ДатаКонца~~)  +'ZZZZZZ'+'99999'+'99999'
     |)      as Выборка
     |Where Проводки.DOCID+STR(NUMBER,5)+STR(CORNO,5) =  Выборка.ключД  -- .DOCID+ STR(Выборка.NUMBER,5)
     |GROUP BY  1,2,3
     |) as Деб
     |Where  Деб.сч in  " + ВыбрСч + "
     |
     |
     |union all
     |
     |-- пОборот Кредитовый
     |Select
     |  Кред.Клиент as Клиент
     |, Кред.усл as усл
     |, Кред.сч as сч
     |, Кред.СуммаВх as СуммаВх
     |, Кред.Дебет as Дебет
     |, Кред.Кредит as Кредит
     |FROM
     |(
     |Select
     |       Проводки.KTSC0   as   Клиент
     |,       Проводки.KTSC1  as   усл
     |,      Проводки.ACCKTID as сч
     |,      $0 as СуммаВх
     |,      $0 as Дебет
     |,      Sum(Проводки.Sum) as Кредит
     | From 1SENTRY as Проводки,
     |(
     |SELECT DOCID+STR(NUMBER,5)   as ключД
     |      FROM  1SSBSEL
     |      WHERE  SBKINDID+VAL + DTOS(DATE)+ TIME+DOCID+STR(NUMBER,5)+STR(CORNO,5) Between
     |             :ТипСуб+:ЛицСчет+DTOS(:ДатаНачала~~) -- +'      '+'    0'+'    0'
     | and :ТипСуб+:ЛицСчет+DTOS(:ДатаКонца~~) -- +'ZZZZZZ'+'99999'+'99999'
     |)      as Выборка
     |Where    Проводки.DOCID+STR(NUMBER,5)+STR(CORNO,5) =  Выборка.ключД
     |GROUP BY   1,2,3 
     |) as Кред
     |WHERE Кред.сч in   " + ВыбрСч + "
     |) as БИ
     |
     |INNER JOIN 
     |      $Справочник.икЛицевыеСчета AS ЛицСчет
     |ON  ЛицСчет.ID = БИ.Клиент
     |
     |INNER JOIN 
     |      $Справочник.икВидыУслуг AS ВидУсл
     |ON  ВидУсл.ID = БИ.усл   
     |GROUP BY 1
     |,2
     |,3

очень надеюсь сам на критику этого запроса....
  
Наверх
 
IP записан
 
Pilokarpios
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 25
Зарегистрирован: 21. Мая 2008
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #19 - 27. Мая 2008 :: 12:28
Печать  
Большое человеческое спасибо!  Очень довольный

Может такая корректировка дат поможет?



Месяц = Цел(ДатаМесяц(НачДата)/3 + 0.8);  
     // месяц начала квартала, в котором находится период
ДатаОстатков="{"+Формат(Месяц,"Ч(0)2") + "/01/" + ДатаГод(НачДата) +"}";
ДатаНачала="{"+Формат(ДатаМесяц(НачДата),"Ч(0)2") + "/" + Формат(ДатаЧисло(НачДата),"Ч(0)2") + "/" + ДатаГод(НачДата) +"}";
ДатаКонца="{"+Формат(ДатаМесяц(КонДата),"Ч(0)2") + "/" + Формат(ДатаЧисло(КонДата),"Ч(0)2") + "/" + ДатаГод(КонДата) +"}";
ДатаНачалаМесяца="{"+Формат(ДатаМесяц(НачДата),"Ч(0)2") + "/01/" + ДатаГод(НачДата) +"}";


---------------текстзапроса
|      1Sbkttl as Сальдо
|      where (Сальдо.Date = " + ДатаОстатков + ") and (Сальдо.Kind='1')
---------------текстзапроса
далее поиск по оборотам Кр и Дб
т.е. насколько я понимаю, таблица 1Sbkttl расчитывает остатки (при применение метода Установить расчет по квартал (Операции->Управление бух. итогами) на начало квартала и на конец.

  
Наверх
 
IP записан
 
nicolas
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 148
Зарегистрирован: 24. Мая 2006
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #20 - 27. Мая 2008 :: 12:43
Печать  
Прошу прощения забыл строку
она формируется так
      СтрокаКонСумма ="";
      Если (ДатаМесяц(Начало)=1) ИЛИ (ДатаМесяц(Начало)=4) ИЛИ (ДатаМесяц(Начало)=7) ИЛИ (ДатаМесяц(Начало)=10)    Тогда
           СтрокаНачСумма = "SUM(IIF(Ост.KIND = '1',  CAST(Ост.SD as NUMERIC(15,3)), 00000000000000000000.00000)) as СуммаВх ";
      ИначеЕсли (ДатаМесяц(Начало)=2) ИЛИ (ДатаМесяц(Начало)=5) ИЛИ (ДатаМесяц(Начало)=8) ИЛИ (ДатаМесяц(Начало)=11)    Тогда      
           СтрокаНачСумма = "SUM(IIF(Ост.KIND = '1',  CAST(Ост.SD as NUMERIC(15,3))+CAST(Ост.OBDT1 as  NUMERIC(15,3)) - CAST(Ост.OBKT1 as NUMERIC(15,3)), 00000000000000000000.00000)) as СуммаВх ";
      ИначеЕсли (ДатаМесяц(Начало)=3) ИЛИ (ДатаМесяц(Начало)=6) ИЛИ (ДатаМесяц(Начало)=9) ИЛИ (ДатаМесяц(Начало)=12)    Тогда      
           СтрокаНачСумма = "SUM(IIF(Ост.KIND = '1',  CAST(Ост.SD as NUMERIC(15,3))+CAST(Ост.OBDT1 as  NUMERIC(15,3)) - CAST(Ост.OBKT1 as NUMERIC(15,3))+ CAST(Ост.OBDT2 as  NUMERIC(15,3)) - CAST(Ост.OBKT2 as NUMERIC(15,3)), 00000000000000000000.00000 )) as СуммаВх ";
      КонецЕсли;
  
Наверх
 
IP записан
 
nicolas
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 148
Зарегистрирован: 24. Мая 2006
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #21 - 27. Мая 2008 :: 12:48
Печать  
и еще это просто компиляция всего того что нашел и на этом форуме и на других.
Поэтому не могу назвать автора всего этого, единственное что сам ковырял это таблица по выборке субконто.
Точно помню что есть идеи trad!!!!
по индексам еще раз большое спасибо ( всетаки наверное) Кирилу!!!!
  
Наверх
 
IP записан
 
Pilokarpios
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 25
Зарегистрирован: 21. Мая 2008
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #22 - 27. Мая 2008 :: 14:55
Печать  
Помогите с запросом плиз

Диалог:
   Счет = Счета;
   Субконто1 = Справочник.МестаХранения

Запрос:
    |SELECT    
    |  Остатки.ACCID as [СчетИд $Счет.основной]
    |, Остатки.SC0 as [Суб1 $Справочник.МестаХранения]  
    |FROM  
    |  1SBKTTL as Остатки    
    |Where
    |  (SC0 = :Субконто1)";

Meta name parser error: не указан параметр ":Субконто1"

Подскажите пожалуйста, как преобразовать значение для сравнения внутри запроса, что я делаю не так?
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #23 - 27. Мая 2008 :: 15:08
Печать  
Pilokarpios писал(а) 27. Мая 2008 :: 14:55:
Meta name parser error: не указан параметр ":Субконто1"

cmd.УстановитьТекстовыйПараметр("Субконто1", Субконто1); <---???
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #24 - 27. Мая 2008 :: 15:10
Печать  
Кстати, если поле SC0 char(13), то :Субконто1~
  
Наверх
ICQ  
IP записан
 
Pilokarpios
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 25
Зарегистрирован: 21. Мая 2008
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #25 - 27. Мая 2008 :: 21:22
Печать  
Ну что! думаю, что тема запроса в DBF (OLE) в бух таблицу наконец-таки развернута в началах, спасибо откликнувшимся… Докладываю результаты первых решений:
1.      Как известно монопольный вариант расчета конечных остатков на требуемую дату всегда быстр и весел, но.., если подключается второй сетевой, и т.д. пользователи, расчет заметно падает, я даже скажу что пипец как падает… вывод. Данный вариант прямых расчетов действительно делает из заядлого 1Сника, более понимающего о СУБД, если порыть, подумать!
В общем: расчет ускорен на средней БД в разрезе 3-х субконто как минимум в 7 раз, далее по периодам дат  зависит от понимания таблиц, т.е можно тупо делать перерасчеты разом, а можно и периодически, т.е.  в это нужно вкурить…
http://metaprog.co.ua/secrprog/tran_sql.html
2.      Безусловно SQL и подобные структуры управления таблицами БД никак не сравниваются со структурой тупо полуфайлого варианта DBF, но…
3.      Стандартная компиляция запросов 1С7.7. построена через ##пу, но и за это спасибо в свое время…

Простенький БИ запрос, который я искал уева тучу времени (думаю пригодится):

     Попытка
           ЗагрузитьВнешнююКомпоненту("C:\Program Files\1Cv77\BIN\1cpp.dll");
     Исключение
           Сообщить("Не установлена компонента '1cpp.dll' ","!");
             Возврат;
     КонецПопытки;
       
     База = СоздатьОбъект("OLEDBData");
     
     Рез=База.Соединение("
     |Provider=VFPOLEDB.1;
     |Null = Yes;
     |Exclusive = No;
     |SourceType = DBF;
     |Data Source=" + КаталогИБ() + ";
     |Mode=ReadWrite;
     |Extended Properties="""";
     |User ID="""";
     |Password="""";
     |Mask Password=False;
     |Collating Sequence=MACHINE;
     |DSN=""""");
     
     Если Рез = 0 Тогда
           Сообщить(ОписаниеОшибки());
     КонецЕсли;
     
     Запрос = База.СоздатьКоманду();
     Запрос.Отладка(0);
     
     Запрос.УстановитьТекстовыйПараметр("Счет", Счет);
     Запрос.УстановитьТекстовыйПараметр("Субконто1", Субконто1);
     Запрос.УстановитьТекстовыйПараметр("Субконто2", Субконто2);
     Запрос.УстановитьТекстовыйПараметр("Субконто3", Субконто3);

     ТекстЗапроса = "
    |SELECT    
    |  Остатки.ACCID as [СчетИд $Счет.основной]
    |, Остатки.SC0 as [Суб1 $Справочник.МестаХранения]  
    |, Остатки.SC1 as [Суб2 $Справочник.Отделы]
    |, Остатки.SC2 as [Суб3 $Справочник.Номенклатура]
    |FROM  
    |  1SBKTTL as Остатки    
    |Where
      |  (Остатки.ACCID = :Счет) and (Остатки.SC0 = :Субконто1) and (Остатки.SC1 = :Субконто2)";
        // and (Остатки.SC2 = :Субконто3)
    ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);


Структура запроса схожа с 1C8.0… различия только в переводе англ/рус (хочу заметить, 1С это уже политически приоритетный язык программирования России, конечно же есть PHP,Flash,Java,HTML,C++,Delphi,FoxPro,*nix,Qt и т.п и т.д… но такие проекты, как ????? (знают кому надо) уже позволяют строить блоки модулей на основе алгоритмических схем)  т.е. мы новый блок схемы или новый алгоритм или новая идея… каждому своё…

Спасибо ещё раз всем ребятам, которые блин программеры по существу…





  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #26 - 28. Мая 2008 :: 07:53
Печать  
Pilokarpios писал(а) 27. Мая 2008 :: 21:22:
Простенький БИ запрос, который я искал уева тучу времени (думаю пригодится):

     
Код
Выбрать все
ТекстЗапроса = "
     |SELECT    
     |  Остатки.ACCID as [СчетИд $Счет.основной]
     |, Остатки.SC0 as [Суб1 $Справочник.МестаХранения]  
     |, Остатки.SC1 as [Суб2 $Справочник.Отделы]
     |, Остатки.SC2 as [Суб3 $Справочник.Номенклатура]
     |FROM  
     |  1SBKTTL as Остатки    
     |Where
	 |  (Остатки.ACCID = :Счет) and (Остатки.SC0 = :Субконто1) and (Остатки.SC1 = :Субконто2)";
   	 // and (Остатки.SC2 = :Субконто3) 


 


Долго смотрел, много думал ...Не осилил.
А чего этот запрос показывает то?
И какое отношение имеет к расчету остатков?
  
Наверх
 
IP записан
 
nicolas
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 148
Зарегистрирован: 24. Мая 2006
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #27 - 28. Мая 2008 :: 12:33
Печать  
Наверное OFF
Вопрос с Кирилу. 
1.Вы  не пробывали добавлять свои индексы к таблицам, если  да то каков результат?
2. C Fox cтарших версий не работал, поэтому может знаете, ЗАпрос где выполняться будет на клиенте или на сервере, если использовать dbc в каталоге базы и там ХП (или глупость сморозил..)
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #28 - 28. Мая 2008 :: 12:39
Печать  
nicolas писал(а) 28. Мая 2008 :: 12:33:
1.Вы  не пробывали добавлять свои индексы к таблицам, если  да то каков результат?

http://www.1cpp.ru/forum/YaBB.pl?num=1188387114/
в последнем посте - скрипт
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #29 - 28. Мая 2008 :: 13:45
Печать  
nicolas писал(а) 28. Мая 2008 :: 12:33:
Наверное OFF
Вопрос с Кирилу.  
1.Вы  не пробывали добавлять свои индексы к таблицам, если  да то каков результат?

Сейчас нет необходимости - есть возможность штатно
Видимо вопрос из за
Код
Выбрать все
|    (DTOS(Ост.DATE)+Ост.KIND+Ост.ACCID+Ост.SC0+Ост.SC1+Ост.SC2 +Ост.currid= DTOS(:НачПериода~~)+'1') -- вот тут и несовсем использутеся индекс когда создать свой DTOS(Ост.DATE)+Ост.KIND+Ост.SC0+Ост.SC1+Ост.SC2  скорость .....
     |AND  %Ост.SC0 AND (Ост.ACCID in " + ВыбрСч + ")       


не самое оптимальное использование индекса.
Если счетов немного - достаточно сделать несколько условий через OR,
если много(и более универсально) - уложить список счетов во временную таблицу или через подзапрос -
FROM к этой таблице и LEFT JOIN к остаткам(1SBKTTL ) по Цитата:
DTOS(Ост.DATE)+Ост.KIND+Ост.ACCID+Ост.SC0+Ост.SC1+Ост.SC2 +Ост.currid

будет на порядок быстрее чем использовать свой добавленный индекс
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #30 - 28. Мая 2008 :: 14:03
Печать  
Приблизительно так
Код
Выбрать все
|SELECT    
     |  Ост.SC0 as Клиент
     |, Ост.SC1 as усл  
     |, Ост.ACCID as сч
     |,  "+СтрокаНачСумма+"  
     |,$0 as Дебет
     |,$0 As Кредит
     |FROM  1SACCS as Счета
     |
     | LEFT JON     1SBKTTL   as Ост    
     |  
     |ON
     |
     |    (DTOS(Ост.DATE)+Ост.KIND+Ост.ACCID+Ост.SC0+Ост.SC1+Ост.SC2 +Ост.currid= DTOS(:НачПериода~~)+'1'+Счета.Id)
     |WHERE   Счета.Id IN   " + ВыбрСч + "
     |  
     |GROUP BY  
     |   1,  
     |   2,  
     |   3      

  
Наверх
 
IP записан
 
Pilokarpios
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 25
Зарегистрирован: 21. Мая 2008
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #31 - 28. Мая 2008 :: 17:02
Печать  
Подскажите пожалуйста, насколько я понимаю таблица тогов (1SBKTTL) содержит обобщенные итоги в разрезе счета и субконто, т.е. расчет оборотов на дату можно делать только с доп запросом в проводки (1SENTRY), а там уже вычислять обороты до необходимой даты?
  
Наверх
 
IP записан
 
nicolas
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 148
Зарегистрирован: 24. Мая 2006
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #32 - 29. Мая 2008 :: 05:41
Печать  
kiruha писал(а) 28. Мая 2008 :: 14:03:
Приблизительно так

Большое спасибо. На выходных попробую.
отпишусь на сколько станет так быстрее, по логике должно ускориться.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #33 - 29. Мая 2008 :: 07:09
Печать  
nicolas писал(а) 29. Мая 2008 :: 05:41:
kiruha писал(а) 28. Мая 2008 :: 14:03:
Приблизительно так

Большое спасибо. На выходных попробую.
отпишусь на сколько станет так быстрее, по логике должно ускориться.

Ну а если в соединение еще субконто добавишь  (Ост.SC0)Подмигивание
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #34 - 02. Июля 2008 :: 06:51
Печать  
Народ, подскажите, каким образом можно перевести на прямой запрос
обычный бух. запрос, например, получить ОСВ по 60/62 счету с разверткой по аналитике Контрагент или Контрагент/Договор ?

ЗЫ бух.итогами только начинаю заниматься Улыбка
Можно в терминах VFP OledDB или 1sqlite.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
GEORG
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 43
Зарегистрирован: 15. Мая 2008
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #35 - 02. Июля 2008 :: 08:53
Печать  
| SELECT
                                   |      Рег1.Фирма as [Фирма1 $Справочник.Фирмы],
                                   |      Рег1.Контрагент as [Контрагент1 $Справочник.Контрагенты],
                                   |      Рег1.ВидРасчетов as [ВидРасчетов1 $Перечисление.ВидыРасчетов],
                                   |      MAX(Рег1.ВидДокумента) as Док_вид1, 
                                   |      SUM(Рег1.СуммаНачальныйОстаток) as НачОстаток1 ,
                                   |      SUM(Рег1.СуммаПриход) as СуммаПриход1 ,
                                   |      SUM(Рег1.СуммаРасход) as СуммаРасход1 ,
                                   |      SUM(Рег1.СуммаКонечныйОстаток) as КонОстаток1 ,
                                   |dbo.sp_tohex(Рег1.ВидДокумента,4) + RIGHT(Рег1.ПозицияДокумента,9) As [Документ13 $Документ]  ,
                                   |      (LEFT(Рег1.ПозицияДокумента,14) ) as Позиция11
                                   |FROM
                                   |$РегистрОстаткиОбороты.ВзаимоРасчеты(:ВыбДата,:ВыбДата1~,Документ,,,
                                   |      Фирма  = :ВыбФирма AND Контрагент= :ВыбКлиент,
                                   |(Фирма,Контрагент,ВидРасчетов), Сумма) as Рег1
                                   |      GROUP BY тов 
                                   |      ORDER BY Рег1.ПозицияДокумента 
                                   |";
  
Наверх
 
IP записан
 
GEORG
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 43
Зарегистрирован: 15. Мая 2008
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #36 - 02. Июля 2008 :: 09:15
Печать  
прошу прощения, не то послал.Просьба модераторам убрать сообщение
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #37 - 02. Июля 2008 :: 09:22
Печать  
Ты сам можешь удалить свои же сообщения Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #38 - 02. Июля 2008 :: 11:55
Печать  
artbear писал(а) 02. Июля 2008 :: 06:51:
Народ, подскажите, каким образом можно перевести на прямой запрос
обычный бух. запрос, например, получить ОСВ по 60/62 счету с разверткой по аналитике Контрагент или Контрагент/Договор ?

ЗЫ бух.итогами только начинаю заниматься Улыбка
Можно в терминах VFP OledDB или 1sqlite.

Доктор, почему меня все игнорируют ?
ЗЫ неужели ни у кого не возникала подобная задача?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #39 - 02. Июля 2008 :: 13:55
Печать  
Цитата:
Доктор, почему меня все игнорируют ?

я постараюсь помочь - сесть и попробовать нарисовать сегодня. ОК?
  
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #40 - 02. Июля 2008 :: 14:41
Печать  
Замечательно, жду.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Alister
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 123
Зарегистрирован: 19. Мая 2006
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #41 - 10. Июля 2008 :: 14:11
Печать  
leshik писал(а) 02. Июля 2008 :: 13:55:
Цитата:
Доктор, почему меня все игнорируют ?

я постараюсь помочь - сесть и попробовать нарисовать сегодня. ОК?

Получилось что-нибудь ?
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #42 - 10. Июля 2008 :: 17:38
Печать  
Цитата:
Получилось что-нибудь ?

Работа ведется в этом направлении. Пока изучаю базовый принципы 1sqlite - тяжеловато переходить с обычных прямых запросов.
Артур сказал что ему не очень срочно - как сделаю обязательно выложу на форум.
  
Наверх
IP записан
 
Alister
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 123
Зарегистрирован: 19. Мая 2006
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалт
Ответ #43 - 10. Июля 2008 :: 18:07
Печать  
Ясно. Успехов и терпения Улыбка Будем ждать , а потом тестировать Улыбка
  
Наверх
 
IP записан
 
Pilokarpios
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 25
Зарегистрирован: 21. Мая 2008
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалтерия
Ответ #44 - 20. Октября 2008 :: 10:50
Печать  
ТекстЗапроса = "
|SELECT  
|      Проводки.DATE as [Дата $Дата]
|,     Проводки.ACCDTID as [СчетДб $Счет.Основной]
|,     Проводки.ACCKTID as [СчетКр $Счет.Основной]
|,     Проводки.SUM as [Сумма $Число]
|,     Проводки.AMOUNT as [Количество $Число]
|,     Проводки.DocID as [Док $Документ]
|,     Проводки.DTSC0 as [СкладДб $Cправочник.МестаХранения]
|,     Проводки.DTSC2 as [Партия $Справочник.Партии]
|,     Проводки.KTSC0 as [СкладКр $Справочник.МестаХранения]
|,     Проводки.KTSC2 as [ПартияКР $Справочник.Партии]
|,     Журнал.IDDOCDEF as Док_вид
|FROM  
|   1sentry as Проводки
|   Left JOIN 1SJourn as Журнал ON Журнал.IDDOC = Проводки.DocID
|
|WHERE
|  ((Проводки.ACCKTID = :Счет) or (Проводки.ACCDTID = :Счет))
|  and ((Проводки.DTSC0 = :Субконто1) and (Проводки.KTSC0 <> :Субконто1))
|  and (Проводки.DATE BETWEEN :НачДата~~ and :КонДата~~);";

Подскажите пожалуйста, как сделать отбор-условие типа:


|WHERE
|  (Проводки.KTSC0 IN (:спсСубконто1))

СпсСубконто1 = Список или Табл.значений

Пытался строить строку запроса, при больших фильтрах строки нехватает... err

 
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалтерия
Ответ #45 - 20. Октября 2008 :: 11:02
Печать  
Посмотри в учебнике порядок укладки объектов для dbf
http://www.1cpp.ru/forum/YaBB.pl?num=1148874473
  
Наверх
IP записан
 
Pilokarpios
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 25
Зарегистрирован: 21. Мая 2008
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалтерия
Ответ #46 - 20. Октября 2008 :: 11:09
Печать  
И ещё вопрос профам:

Если брать начальные итоги из 1SKTTL и хранить их в таблице первоначального запуска пользователя, делать запрос в проводки по отрезку периода и ровнять количество разницей и суммой нач итогов. нада уже закончить с этим неудобством бух таблиц
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалтерия
Ответ #47 - 20. Октября 2008 :: 11:10
Печать  
Pilokarpios писал(а) 20. Октября 2008 :: 10:50:
Пытался строить строку запроса, при больших фильтрах строки нехватает... err

 


Нужно разбавлять Текст условия  симв "РазделительСтрок" через каждые 10 запятых
  
Наверх
 
IP записан
 
Pilokarpios
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 25
Зарегистрирован: 21. Мая 2008
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалтерия
Ответ #48 - 20. Октября 2008 :: 11:13
Печать  
kiruha писал(а) 20. Октября 2008 :: 11:10:
Pilokarpios писал(а) 20. Октября 2008 :: 10:50:
Пытался строить строку запроса, при больших фильтрах строки нехватает... err

 


Нужно разбавлять Текст условия  симв "РазделительСтрок" через каждые 10 запятых


СИСТЕМНАЯ ошибка, строка запроса превышает максимальнодустимое значение, непомогут разделители и мой метод ламерский, думаю есть решение

Т.е. я строил строку запроса циклом списка значений добавляя в запрос параметр и строку, это для сложных фильтров НЕ ВАРИАНТ
  
Наверх
 
IP записан
 
Pilokarpios
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 25
Зарегистрирован: 21. Мая 2008
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалтерия
Ответ #49 - 20. Октября 2008 :: 11:25
Печать  
Этот метод работает отлично

Функция глПолучитьБИОстатокТовара(ДатаОстатков,Склад,Отдел,Номенклатура) Экспорт
     
     Если (глСтатусБИ = 1) и (ДатаОстатков=ТекущаяДата()) Тогда
           
           Запрос = глПодключениеБИ.СоздатьКоманду();
           
           Запрос.УстановитьТекстовыйПараметр("Счет", СчетПоКоду("01.1"));              
           Запрос.УстановитьТекстовыйПараметр("Субконто1", Склад);    
           
           Если ПустоеЗначение(Отдел)=0 Тогда
                 Запрос.УстановитьТекстовыйПараметр("Субконто2", Отдел);
                 ДопТекстЗапроса = "and (Остатки.SC1 = :Субконто2)";
           Иначе
                 ДопТекстЗапроса = "";
           КонецЕсли;  
           
           Запрос.УстановитьТекстовыйПараметр("Субконто3", Номенклатура);
           
           ТекстЗапроса = "
           |SELECT    
           |  Остатки.ACCID as [СчетИд $Счет.основной]
           |, Остатки.SC0 as [Суб1 $Справочник.МестаХранения]  
           |, Остатки.SC1 as [Суб2 $Справочник.Отделы]
           |, Остатки.SC2 as [Суб3 $Справочник.Номенклатура]
           |, Остатки.OBDT1 as [OBDT1 $Число]
           |, Остатки.OBKT1 as [OBKT1 $Число]
           |, Остатки.OBDT2 as [OBDT2 $Число]
           |, Остатки.OBKT2 as [OBKT2 $Число]
           |, Остатки.OBDT3 as [OBDT3 $Число]
           |, Остатки.OBKT3 as [OBKT3 $Число]
           |, Остатки.Date as [Date $Дата]
           |FROM  
           |  1SBKTTL as Остатки    
           |Where
           |  (Остатки.Kind='3') and (Остатки.ACCID = :Счет) and (Остатки.SC0 = :Субконто1) and (Остатки.SC2 = :Субконто3) #";
           
           ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"#",ДопТекстЗапроса);
           
           ТТЗ = СоздатьОбъект("ТаблицаЗначений");
           ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
           ТЗ.Выгрузить(ТТЗ);
           
           //ТТЗ.Свернуть("Суб1,Суб3","OBKT1,OBKT2,OBKT3,OBDT1,OBDT2,OBDT3");
           
           Возврат ("OBKT2")-ТТЗ.Итог("OBKT3");
           
     Иначе
           
           Ит = СоздатьОбъект("БухгалтерскиеИтоги");
           Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения, Склад, 2);
           Если ПустоеЗначение(Отдел)=0 Тогда
                 Ит.ИспользоватьСубконто(ВидыСубконто.Отделы, Отдел, 2);
           КонецЕсли;
           Ит.ИспользоватьСубконто(ВидыСубконто.Номенклатура,Номенклатура, 2);
           Ит.ВыполнитьЗапрос(ДатаОстатков,ДатаОстатков,"01.1",,, 1,, "К");
           Возврат Ит.СКД(3);  
           
     КонецЕсли;  
     
КонецФункции
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалтерия
Ответ #50 - 20. Октября 2008 :: 12:53
Печать  
Pilokarpios писал(а) 20. Октября 2008 :: 11:25:
Этот метод работает отлично
....


Что й то не вижу параметра Дата остатков Остатки.DATE в WHERE Озадачен

Для больших списков - уже написали - метод УложитьСписокОбъектов
  
Наверх
 
IP записан
 
Pilokarpios
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 25
Зарегистрирован: 21. Мая 2008
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалтерия
Ответ #51 - 20. Октября 2008 :: 12:58
Печать  
СпсОтбора = "";
ЗапросБИ.УложитьСписокОбъектов(СписЭМ,СпсОтбора);
ТекстСубконто1 = ТекстСубконто1+"
|  and (Проводки.KTSC0 IN (SELECT Val FROM "+СпсОтбора+"))";
````````````
```отладка:
WHERE
 ((Проводки.ACCDTID = '     3   ') or (Проводки.ACCKTID = '     3   '))
 and (Проводки.DATE BETWEEN {d '2008-09-03'} and {d '2008-09-05'})
 and (Проводки.KTSC0 IN (SELECT Val FROM 6d9ed04f-249d-4ed3-adcd-3579618bed58));

Проястните плиз на ДБФ варианте этот метод работает?

Выход запроса = ноль, движения есть
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалтерия
Ответ #52 - 20. Октября 2008 :: 13:17
Печать  
KTSC0 это какой тип/вид?
СписЭМ - какой тип/вид элементов?
  
Наверх
 
IP записан
 
Pilokarpios
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 25
Зарегистрирован: 21. Мая 2008
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалтерия
Ответ #53 - 20. Октября 2008 :: 13:24
Печать  
kiruha писал(а) 20. Октября 2008 :: 13:17:
KTSC0 это какой тип/вид?
СписЭМ - какой тип/вид элементов?


СписЭМ = СписокЗначений с значениями Субконто1(Справочник.МестаХранения);
KTSC0 = Справочник.МестаХранения;
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалтерия
Ответ #54 - 20. Октября 2008 :: 13:59
Печать  
Не-е, похоже
F=KTSC0     C   |13
т.е.
and (Left(Проводки.KTSC0,9) IN (SELECT Val FROM "+СпсОтбора+"))";
или Right
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: DBF прямой запрос (Оборотно сальдовая) Бухгалтерия
Ответ #55 - 27. Октября 2008 :: 05:13
Печать  
В прямом запросе (SQLite) не удается сделать фильтр по субконто.

Вот выдержка из запроса:
Код
Выбрать все
	|	(
	|	SELECT
	|		bkktl_vt.ACCID as ACCID
	|		,bkktl_vt.KIND as KIND
	|		,acc_vt.ACTIVE as ACTIVE
	|		,CASE WHEN (acc_vt.ACTIVE=1) OR (acc_vt.ACTIVE=3) AND (bkktl_vt.SD>=0) THEN bkktl_vt.SD ELSE 0 END AS СуммаОстатокДт
	|		,CASE WHEN (acc_vt.ACTIVE=2) OR (acc_vt.ACTIVE=3) AND (bkktl_vt.SD<0) THEN -bkktl_vt.SD ELSE 0 END AS СуммаОстатокКт
	|		,CASE WHEN bkktl_vt.VSC0 = :ВидСубконто.Контрагенты THEN bkktl_vt.SC0 ELSE
	|		CASE WHEN bkktl_vt.VSC1 = :ВидСубконто.Контрагенты THEN bkktl_vt.SC1 ELSE
	|		CASE WHEN bkktl_vt.VSC2 = :ВидСубконто.Контрагенты THEN bkktl_vt.SC2 ELSE
	|		CASE WHEN bkktl_vt.VSC3 = :ВидСубконто.Контрагенты THEN bkktl_vt.SC3 ELSE ''
	|		END END END END AS Субконто_Контрагенты
	|		,CASE WHEN bkktl_vt.VSC0 = :ВидСубконто.Контрагенты THEN bkktl_vt.VSC0 ELSE
	|		CASE WHEN bkktl_vt.VSC1 = :ВидСубконто.Контрагенты THEN bkktl_vt.VSC1 ELSE
	|		CASE WHEN bkktl_vt.VSC2 = :ВидСубконто.Контрагенты THEN bkktl_vt.VSC2 ELSE
	|		CASE WHEN bkktl_vt.VSC3 = :ВидСубконто.Контрагенты THEN bkktl_vt.VSC3 ELSE ''
	|		END END END END AS Субконто_Контрагенты_Вид
	|	FROM
	|		__1S_BKTTL as bkktl_vt
	|	INNER JOIN
	|		__1S_ACCS as acc_vt ON (bkktl_vt.ACCID = acc_vt.ID)
	|	WHERE (bkktl_vt.DATE = @Дата)
	|	AND (bkktl_vt.ACCID IN ACCID_vt)
	|	) as qr_vt 


попытка дописать

Код
Выбрать все
AND (Субконто_Контрагенты = @ВыбЗначСубконто) 



а потом установить значение из справочника контрагенты приводит к пустой таблице. Я вчера копался копался, понимаю что скорее всего поле SCx хранит значение не как справочник. Но как с помощью SQLite привести значение справочника к значению субконто я даже не в курсе.
Подскажите плиз. (без отбора в том виде как приведено выше все работает путем)
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать