Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Проводки и запрос к БД (число прочтений - 4358 )
cyberandr
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 13
Зарегистрирован: 24. Ноября 2009
Проводки и запрос к БД
05. Марта 2012 :: 13:03
Печать  
Всем привет! У меня такая проблема надо оптимизировать код под прямые запросы к БД для 1с+ms sql 2005. имеем код
Код
Выбрать все
Опер = СоздатьОбъект("Операция");
	Опер.ВыбратьОперацииСПроводками(,,"20",,3);
	Пока Опер.ПолучитьОперацию() = 1 Цикл
		Для Н = 1 По Опер.КоличествоПроводок() Цикл
			Опер.ПолучитьПроводкуПоНомеру(Н);
			Если Н = Опер.НомерПроводки() Тогда
				Если (Опер.Дебет.Счет = СчетПоКоду("20")) Тогда
					ДобавитьСтроку(Опер,1,Опер.Дебет.Счет.Код);
				КонецЕсли;//
				Если (Опер.Кредит.Счет = СчетПоКоду("20")) Тогда
					ДобавитьСтроку(Опер,2,Опер.Кредит.Счет.Код);
				КонецЕсли;//
			КонецЕсли;
		КонецЦикла;
	КонецЦикла; 


Для операции понятно выбираем Документ Операция. А вот как быть с проводками? какое их типизирующее имя?
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Проводки и запрос к БД
Ответ #1 - 05. Марта 2012 :: 13:26
Печать  
Надо использовать ВТ $БиОбороты либо класса AccountsRecordset либо ПрямойЗапрос
  
Наверх
IP записан
 
cyberandr
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 13
Зарегистрирован: 24. Ноября 2009
Re: Проводки и запрос к БД
Ответ #2 - 05. Марта 2012 :: 13:38
Печать  
не подскажите в какой таблице хранятся проводки? Я думаю связь с Операциями там точно есть - а это наверное и есть решение.
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Проводки и запрос к БД
Ответ #3 - 05. Марта 2012 :: 13:42
Печать  
Давай так - ты показываешь итоговый результат (что должно получиться в результате отработки твоего кода)
а с меня готовый запрос это реализующий.
  
Наверх
IP записан
 
cyberandr
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 13
Зарегистрирован: 24. Ноября 2009
Re: Проводки и запрос к БД
Ответ #4 - 05. Марта 2012 :: 14:02
Печать  
Так он перед тобой. Это обработка для записи проводок в dbf от нашего франчайзи. Она у меня уже 3 день выполняетсяПечаль Там где Процедура ДобавитьСтроку(Опер,1,Опер.Дебет.Счет.Код); - это просто запись во внешнее dbf.
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Проводки и запрос к БД
Ответ #5 - 05. Марта 2012 :: 16:27
Печать  
Покажи что в DBF добавляется?
А вообще-то твой код тормозит из-за вычисления в цикле КоличествоПроводок()
  
Наверх
IP записан
 
cyberandr
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 13
Зарегистрирован: 24. Ноября 2009
Re: Проводки и запрос к БД
Ответ #6 - 06. Марта 2012 :: 06:34
Печать  
Процедура ДобавитьСтроку(Опер,Тип,Счет)
     Если Тип = 1 Тогда
           ВидыСуб = Опер.Дебет;
     Иначе
           ВидыСуб = Опер.Кредит;
     КонецЕсли;//
     ДБВ.Добавить();
     ДБВ.Data = Опер.ДатаОперации;
     ДБВ.Doc = ПолучитьВнутрКодОбъекта(Опер.Документ.ТекущийДокумент());
     ДБВ.Vid = Опер.Документ.Вид();
     ДБВ.Tip = Тип;
     ДБВ.NomProv = Опер.НомерПроводки();
     ДБВ.Schet = Счет;
     ДБВ.VidSub1 = ВидыСуб.Субконто(1).Вид();
     ДБВ.Sub1 = ПолучитьВнутрКодОбъекта(ВидыСуб.Субконто(1).ТекущийЭлемент());
     ДБВ.VidSub2 = ВидыСуб.Субконто(2).Вид();
     ДБВ.Sub2 = ПолучитьВнутрКодОбъекта(ВидыСуб.Субконто(2).ТекущийЭлемент());
     ДБВ.VidSub3 = ВидыСуб.Субконто(3).Вид();
     ДБВ.Sub3 = ПолучитьВнутрКодОбъекта(ВидыСуб.Субконто(3).ТекущийЭлемент());
     ДБВ.Записать();
КонецПроцедуры // ДобавитьСтроку
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Проводки и запрос к БД
Ответ #7 - 06. Марта 2012 :: 09:55
Печать  
Покажи
ПолучитьВнутрКодОбъекта()
  
Наверх
IP записан
 
cyberandr
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 13
Зарегистрирован: 24. Ноября 2009
Re: Проводки и запрос к БД
Ответ #8 - 06. Марта 2012 :: 10:32
Печать  

Функция ПолучитьВнутрКодОбъекта(Ссылка)
     
     ВнутрКод = Лев(Прав(ЗначениеВСтрокуВнутр(Ссылка),15),13);
     Возврат ВнутрКод;
     
КонецФункции
  
Наверх
 
IP записан
 
cyberandr
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 13
Зарегистрирован: 24. Ноября 2009
Re: Проводки и запрос к БД
Ответ #9 - 06. Марта 2012 :: 10:33
Печать  
     ТекстЗ= "Select Жур.IDDOC as [Объект $Документ],
     |CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок,
     |Жур.IDDocDef as Док_вид,
     |CASE Проводки.ACCDTID
     |WHEN :Сч20 THEN 1
     |ELSE 2
     |END as type,
     |Проводки.DTSC1 as [Субк1 $Справочник],Проводки.DTSC2 as [Субк2 $Справочник],Проводки.DTSC3 as [Субк3 $Справочник],
     |Проводки.NUMBER as НомерПроводки
     |from _1SJourn как Жур INNER JOIN  _1SOPER as Операция  On  Жур.IDDoc = Операция.DOCID
     |INNER JOIN _1SENTRY as Проводки On Жур.IDDoc = Проводки.DOCID
     |Where (Проводки.ACCDTID :=Сч20 OR Проводки.ACCKTID :=Сч20) AND Жур.Closed & 1 = 1
     |";
     
  
Наверх
 
IP записан
 
cyberandr
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 13
Зарегистрирован: 24. Ноября 2009
Re: Проводки и запрос к БД
Ответ #10 - 06. Марта 2012 :: 10:34
Печать  
ругается на Жур не подскажешь что может быть не так?
  
Наверх
 
IP записан
 
cyberandr
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 13
Зарегистрирован: 24. Ноября 2009
Re: Проводки и запрос к БД
Ответ #11 - 06. Марта 2012 :: 10:42
Печать  
сорри все нормально - тороплюсь и ошибки делаю детские делаю Печаль
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Проводки и запрос к БД
Ответ #12 - 06. Марта 2012 :: 10:59
Печать  
INNER JOIN  _1SOPER as Операция  On  Жур.IDDoc = Операция.DOCID

это лишнее в твоём коде
  
Наверх
 
IP записан
 
cyberandr
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 13
Зарегистрирован: 24. Ноября 2009
Re: Проводки и запрос к БД
Ответ #13 - 06. Марта 2012 :: 11:08
Печать  
вот такой запрос получается
           ТекстЗ= "Select Жур.IDDOC as [Док $Документ],
     |CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок,
     |Жур.IDDocDef as Док_вид,
     |CASE Проводки.ACCDTID
     |WHEN :Сч20 THEN 1
     |ELSE 2
     |END as type,
     |Проводки.DTSC0 as [Субк1 $Справочник], Проводки.DTSC1 as [Субк2 $Справочник], Проводки.DTSC2 as [Субк3 $Справочник],
     |Проводки.NUMBER as НомерПроводки
     |from _1SJourn as Жур INNER JOIN  _1SOPER as Операция  On  Жур.IDDoc = Операция.DOCID
     |INNER JOIN _1SENTRY as Проводки On Жур.IDDoc = Проводки.DOCID
     |Where (Проводки.ACCDTID = :Сч20 OR Проводки.ACCKTID = :Сч20) AND Жур.Closed & 1 = 1
     |";
     
     ЗапросSQL.УстановитьТекстовыйПараметр("Сч20","    24   ");
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Проводки и запрос к БД
Ответ #14 - 06. Марта 2012 :: 14:38
Печать  
Вот тут несколько раздражает:
Код
Выбрать все
   ЗапросSQL.УстановитьТекстовыйПараметр("Сч20","    24   ");  


надежнее все таки как-то так:
Код
Выбрать все
   ЗапросSQL.УстановитьТекстовыйПараметр("Сч20",СчетПоКоду(ХХХ));  

  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать