Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Цикл по элементам справочника (число прочтений - 3246 )
Ольсон
YaBB Newbies
*
Отсутствует


учусь SQL

Сообщений: 9
Зарегистрирован: 07. Октября 2010
Цикл по элементам справочника
07. Октября 2010 :: 07:34
Печать  
Всем доброго дня!
Помогите, пожалуйста, новичку.
Есть такой вот цикл в 1С:
ТЗКон = СоздатьОбъект("ТаблицаЗначений");
ТЗКон.НоваяКолонка("Контр");
ТЗКон.НоваяКолонка("Наим");
ТЗКон.НоваяКолонка("ПолнНаим");
ТЗКон.НоваяКолонка("ИНН");   
ТЗКон.НоваяКолонка("ДР","Дата");   

Контрагенты = Создатьобъект("Справочник.Контрагенты");
Контрагенты.ВыбратьЭлементы();
Пока Контрагенты.ПолучитьЭлемент()=1 Цикл
     Если Контрагенты.Этогруппа()=0 Тогда
           ТЗКон.Новаястрока();                  
           ТЗКон.Наим=Сокрлп(Контрагенты);   
           ТЗКон.Контр=Контрагенты.Текущийэлемент();                   
           попытка   
                 ТЗКон.ПолнНаим=Сокрлп(Контрагенты.ЮрФизЛицо.ПолнНаименование); 
                 ТЗКон.ИНН=ИНН(Сокрлп(Контрагенты.ЮрФизЛицо.ИНН)); 
                 ТЗКон.ДР=Контрагенты.ЮрФизЛицо.ДатаРождения;      
           исключение
           конецпопытки; 
     КонецЕсли;
КонецЦикла;   

он выполняется супер долго. Хочу его переписать на sql. Вот на что я была способна:

ТекстЗапроса = "
|SELECT
|     Спр   .ID                  [Контр $Справочник.контрагенты],
|     Спр   .Descr            as Наим,
|     СпрФЛ .ПолнНаименование as ПолнНаим,
|     СпрЮрЛ.ПолнНаименование as ПолнНаим,|
|     СпрЮрЛ.ИНН              as ИНН,
|     СпрФЛ .ДатаРождения     as [ДР $Дата],
|
|
|FROM
|      $справочник.контрагенты as Спр (nolock)       
|
|LEFT JOIN $Справочник.ФизЛица СпрФЛ (nolock) ON СпрФЛ.ID=$Спр.ЮрФизЛицо
|
|LEFT JOIN $Справочник.ЮрЛица СпрФЛ (nolock) ON СпрЮрЛ.ID=$Спр.ЮрФизЛицо
|
|WHERE
|      Спр.ISFOLDER<>1
|";

ТЗЗ = глRS.ВыполнитьИнструкцию(ТекстЗапроса);


У меня две загвоздки:
1. как указать в запросе что контрагент может быть либо по юр лицу либо по физ лицу? то есть выбор данных может быть либо по юр лицу либо по физ лицу?

2. строка полноеНаименование неограниченная, как правильно ее нужно обрабатывать в SQL запросе?

Заранее всем спасибочки Улыбка
  
Наверх
ICQ  
IP записан
 
Ольсон
YaBB Newbies
*
Отсутствует


учусь SQL

Сообщений: 9
Зарегистрирован: 07. Октября 2010
Re: Цикл по элементам справочника
Ответ #1 - 07. Октября 2010 :: 07:46
Печать  
никто не поможет? Печаль
  
Наверх
ICQ  
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Цикл по элементам справочника
Ответ #2 - 07. Октября 2010 :: 07:54
Печать  
Ольсон писал(а) 07. Октября 2010 :: 07:46:
никто не поможет? Печаль

Поможем конечно - сейчас попробуем нарисовать Подмигивание
  
Наверх
IP записан
 
Ольсон
YaBB Newbies
*
Отсутствует


учусь SQL

Сообщений: 9
Зарегистрирован: 07. Октября 2010
Re: Цикл по элементам справочника
Ответ #3 - 07. Октября 2010 :: 07:55
Печать  
leshik, вот спасибо  Поцелуй
  
Наверх
ICQ  
IP записан
 
Ольсон
YaBB Newbies
*
Отсутствует


учусь SQL

Сообщений: 9
Зарегистрирован: 07. Октября 2010
Re: Цикл по элементам справочника
Ответ #4 - 07. Октября 2010 :: 08:13
Печать  
и тиштна  Плачущий
  
Наверх
ICQ  
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Цикл по элементам справочника
Ответ #5 - 07. Октября 2010 :: 08:24
Печать  
Ольсон писал(а) 07. Октября 2010 :: 08:13:
и тиштна  Плачущий

Что за не терпеливость....
Код
Выбрать все
	ТекстЗапроса = "
	|SELECT
	|     Спр   .ID			[Контр $Справочник.Контрагенты],
	|     Спр   .Descr		as Наим,
	|     Coalesce($СпрФЛ .ПолнНаименование,$СпрЮрл.ПолнНаименование) as ПолнНаим,
	|     ISNULL(СпрЮрЛ.ИНН,'')   as ИНН,
	|     ISNULL(СпрФЛ .ДатаРождения,$ПустаяДата)     as [ДР $Дата],
	|FROM
	|	$Справочник.Контрагенты as Спр (nolock)	  
	|
	|LEFT JOIN $Справочник.ФизЛица СпрФЛ (nolock) ON $Спр.ЮрФизЛицо = $ВидСправочника36.ФизЛица + СпрФЛ.ID
	|
	|LEFT JOIN $Справочник.ЮрЛица СпрЮрЛ (nolock) ON $Спр.ЮрФизЛицо = $ВидСправочника36.ЮрЛица + СпрЮрЛ.ID
	|
	|WHERE
	|	Спр.ISFOLDER<>1
	|";
 


Не проверял правда.
..
чуть исправил
  
Наверх
IP записан
 
Ольсон
YaBB Newbies
*
Отсутствует


учусь SQL

Сообщений: 9
Зарегистрирован: 07. Октября 2010
Re: Цикл по элементам справочника
Ответ #6 - 07. Октября 2010 :: 08:27
Печать  
Спасибо Улыбка

а можете еще плиз объяснить:

1. что делает  Coalesce?
2.      |LEFT JOIN $Справочник.ФизЛица СпрФЛ (nolock) ON $Спр.ЮрФизЛицо = $ВидСправочника36.ФизЛица + СпрФЛ.ID

что это за штука $ВидСправочника36.ФизЛица и зачем к ней +СпрФЛ.ID  ?
  
Наверх
ICQ  
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Цикл по элементам справочника
Ответ #7 - 07. Октября 2010 :: 08:29
Печать  
1. http://msdn.microsoft.com/ru-ru/library/ms190349.aspx
2. В справочник Контрагенты поле ЮрФизЛицо имеет тип Справочник то есть Char(13) = Вид справочника (4) + ИдСПравочника (9)
$ВидСправочника36.ИмяВида+ID и есть значение поля ЮрФизЛицо из справочника Контрагенты.
  
Наверх
IP записан
 
Ольсон
YaBB Newbies
*
Отсутствует


учусь SQL

Сообщений: 9
Зарегистрирован: 07. Октября 2010
Re: Цикл по элементам справочника
Ответ #8 - 07. Октября 2010 :: 08:35
Печать  
ага, вроде понятно.. за ссылку большое спасибо..

мне 1С вот такую ошку сейчас выдает: Meta name parser error: незавершённое метаимя "$СпрФЛ"      
  
Наверх
ICQ  
IP записан
 
Alex_Bob
Full Member
***
Отсутствует



Сообщений: 136
Местоположение: Липецк
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Цикл по элементам справочника
Ответ #9 - 07. Октября 2010 :: 09:04
Печать  
Код
Выбрать все
|     Coalesce($СпрФЛ .ПолнНаименование,$СпрЮрл.ПолнНаименование) as ПолнНаим, 


Пробел в середине лишний
  

Необходимо время, чтобы восстановить хаос. (с) Дж. Буш (младший)
Наверх
 
IP записан
 
Ольсон
YaBB Newbies
*
Отсутствует


учусь SQL

Сообщений: 9
Зарегистрирован: 07. Октября 2010
Re: Цикл по элементам справочника
Ответ #10 - 07. Октября 2010 :: 09:22
Печать  
ага, Alex_Bob, вы правы) спсасибо) но ошибки еще есть.. попробую сама разобраться! всем спасибочки)))
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать