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


1C++ rocks!

Сообщений: 4
Зарегистрирован: 22. Апреля 2010
ВЫбор элементов справочника одной группы
23. Апреля 2010 :: 10:28
Печать  
Добрый день!
Начинаю разбираться с 1с++.
вот такой пример
Код
Выбрать все
	СпрНом = СоздатьОбъект("Справочник.Номенклатура");
	Если СпрНом.НайтиПоКоду("000")=1 Тогда
		ОснПрайс = СпрНом.ТекущийЭлемент();//группа
	Иначе
		сообщить("не нашли Основной прайс");
	КонецЕсли;	                          
	ИмяТаблицы="#Группа";
	Запрос.УложитьСписокОбъектов(ОснПрайс,ИмяТаблицы);
	Запрос. УстановитьТекстовыйПараметр ("Группа", ИмяТаблицы);

	ТекстЗапроса = "
	|SELECT
	|  Спр.ID as ИД,
	|  Спр.Descr as Наименование,
	|  Спр.ParentID as ИдРодителя,
	|  СпрОснЕд.sp78 as КолУпак,
	|  СпрОКЕИ.Descr as Единица
	|FROM
	|  $Справочник.Номенклатура as Спр  
	|LEFT OUTER JOIN $Справочник.Единицы as СпрОснЕд ON Спр.sp94 = СпрОснЕд.ID  
	|LEFT OUTER JOIN $Справочник.Единицы as СпрБазЕд ON Спр.sp86 = СпрБазЕд.ID
	|LEFT OUTER JOIN $Справочник.ОКЕИ as СпрОКЕИ ON СпрБазЕд.sp79 = СпрОКЕИ.ID
	|WHERE
            |  ???? in (SELECT val FROM :Группа)
	|AND
	|  Спр.IsFolder = 2
	|AND
	|  Спр.IsMark =''";

   	Запрос.Отладка(1);
	ТЗ = СоздатьОбъект("ТаблицаЗначений");
	ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
	ТЗ.ВыбратьСтроку();

 



Без выделенной строки все работает
Хочу добавить условие - выборку только по определенной группе
не знаю что написать вместо ????
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: ВЫбор элементов справочника одной группы
Ответ #1 - 23. Апреля 2010 :: 10:36
Печать  
Спр.ID
  
Наверх
 
IP записан
 
Полный чайник
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 22. Апреля 2010
Re: ВЫбор элементов справочника одной группы
Ответ #2 - 23. Апреля 2010 :: 10:40
Печать  
писала так - получила пустую таблицу
  
Наверх
 
IP записан
 
Anatol
Senior Member
****
Отсутствует


тыц, пыц, тыц!!!

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: ВЫбор элементов справочника одной группы
Ответ #3 - 23. Апреля 2010 :: 10:50
Печать  
Полный чайник писал(а) 23. Апреля 2010 :: 10:40:
писала так - получила пустую таблицу



УложитьСписокОбъектов / PutObjectList

Синтаксис: УложитьСписокОбъектов(Список, ИмяТаблицы, [ВидЭлементов])
Список - тип: СписокЗначений, Справочник, Счет. Объект, содержание которого будет отправляться на сервер. Если передан список значений, во врем. таблицу попадает содержимое списка. Допустимо также передавать группу справочника, элемент справочника, группу счетов, счет - в этом случае во временную таблицу поступает переданное значение, однако если указан ВидЭлементов (вид справочника, или план счетов), то будет попытка включить в таблицу все подчененные элементы.
.......
Параметры:
ВидЭлементов - тип: Строка. Вид справочника для иерархического включения элементов или вид плана счетов для иерархического включения счетов. Если параметр не указан, иерархического включения не происходит.
  
Наверх
wwwICQ  
IP записан
 
Полный чайник
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 22. Апреля 2010
Re: ВЫбор элементов справочника одной группы
Ответ #4 - 23. Апреля 2010 :: 10:59
Печать  
как в (3) посоветовали
написала
Код
Выбрать все
Запрос.УложитьСписокОбъектов(ОснПрайс,ИмяТаблицы,"Справочник.Номенклатура");
 



при выполнении выдало ошибку

Недопустимое значение третьего пераметра метода!

может какая-то заморочка в том что у меня dbf
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: ВЫбор элементов справочника одной группы
Ответ #5 - 23. Апреля 2010 :: 11:02
Печать  
Полный чайник писал(а) 23. Апреля 2010 :: 10:59:
как в (3) посоветовали
написала
Код
Выбрать все
Запрос.УложитьСписокОбъектов(ОснПрайс,ИмяТаблицы,"Справочник.Номенклатура");
 



при выполнении выдало ошибку

Недопустимое значение третьего пераметра метода!

может какая-то заморочка в том что у меня dbf

надо так ( без Справочник )
Код
Выбрать все
Запрос.УложитьСписокОбъектов(ОснПрайс,ИмяТаблицы,"Номенклатура"); 



  
Наверх
 
IP записан
 
Полный чайник
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 22. Апреля 2010
Re: ВЫбор элементов справочника одной группы
Ответ #6 - 23. Апреля 2010 :: 11:02
Печать  
(4)
разобралась
надо так
Код
Выбрать все
Запрос.УложитьСписокОбъектов(ОснПрайс,ИмяТаблицы,"Номенклатура");
 




всем спасибо!!!!
  
Наверх
 
IP записан
 
programm.ist
Junior Member
**
Отсутствует


1C 7.7

Сообщений: 18
Зарегистрирован: 09. Января 2017
Re: ВЫбор элементов справочника одной группы
Ответ #7 - 09. Января 2017 :: 13:28
Печать  
Господа/Дамы!
Не буду плодить темы - проблема "один-в-один": запрос не отбирает элементы справочника заданной группы.
База - dbf.
При выполнении кода
Код (C++)
Выбрать все
СпрКлиенты	= СоздатьОбъект("Справочник.Клиенты");
	Если СпрКлиенты.НайтиПоНаименованию("Покупатели") = 1 Тогда
		ВыбГруппа	= СпрКлиенты.ТекущийЭлемент();
	Иначе
		Сообщить("Неверно задан параметр поиска");
		Возврат;
	КонецЕсли;
	//СпрКлиенты.НайтиПоКоду("38469");
	ИмяТаблицы	= "";
	запросOLEDBData.УложитьСписокОбъектов(ВыбГруппа, ИмяТаблицы, "Клиенты"); 



где
Код (C++)
Выбрать все
			Соединение		= "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ() + ";Mode=ReadWrite;Collating Sequence=MACHINE";
			ОлеДБ			= СоздатьОбъект("OLEDBData");
			Рез				= ОлеДБ.Соединение(Соединение);
			запросOLEDBData	= ОлеДБ.СоздатьКоманду();
			запросOLEDBData.Выполнить("EXECSCRIPT('SET ANSI OFF')");
			запросOLEDBData.Выполнить("EXECSCRIPT('SET REPROCESS TO 60 SECONDS')");
			запросOLEDBData.Выполнить("EXECSCRIPT('SET REFRESH TO 0,-1')");
			запросOLEDBData.Выполнить("Exec('SET TABLEVALIDATE TO 0')");
 



Формируется dbf таблица со списком всех элементов, а не только принадлежащих группе "Покупатели". При указании элемента справочника в ВыбГруппа - все работает.
И что я делаю не так?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: ВЫбор элементов справочника одной группы
Ответ #8 - 12. Января 2017 :: 15:21
Печать  
Код
Выбрать все
    |    WHERE $reg.Номенклатура IN (SELECT VAL FROM :ВыбНоменклатура)


    врСписок = "";
    Запрос.УложитьСписокОбъектов(ВыбНоменклатура, врСписок, "Номенклатура");//ВыбНоменклатура - элемент/группа или список
    Запрос.УстановитьТекстовыйПараметр("ВыбНоменклатура", врСписок); 

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


1C 7.7

Сообщений: 18
Зарегистрирован: 09. Января 2017
Re: ВЫбор элементов справочника одной группы
Ответ #9 - 17. Января 2017 :: 13:49
Печать  
Уважаемый Ёпрст, не могу дотумкать - на что в моем случае заменяется "$reg.Номенклатура"...

Код (C++)
Выбрать все
Процедура Выполнить()
	СпрКлиенты = СоздатьОбъект("Справочник.Клиенты");
	Если СпрКлиенты.НайтиПоНаименованию("Покупатели") = 1 Тогда
		ВыбГруппа = СпрКлиенты.ТекущийЭлемент();
	Иначе
		Сообщить("Неверно задан параметр поиска");
		Возврат;
	КонецЕсли;
	ИмяТаблицы = "";
	Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ() + ";Mode=ReadWrite;Collating Sequence=MACHINE";
	ДБФ = СоздатьОбъект("OLEDBData");
	Рез = ДБФ.Соединение(Соединение);
	л_обНабор = ДБФ.СоздатьКоманду();
	л_обНабор.УложитьСписокОбъектов(ВыбГруппа, ИмяТаблицы, "Клиенты");
        л_обНабор.УстановитьТекстовыйПараметр("ВыбГруппа", ИмяТаблицы);
	ТекстЗапроса= "
	|SELECT
	|	Спр_Клиенты.id as [ТекЭлемент $Справочник.Клиенты]
	|FROM
	|	$Справочник.Клиенты as Спр_Клиенты
	|WHERE
	|	Спр_Клиенты.ismark=''
	|AND
	|	Спр_Клиенты.IsFolder=2
	|AND
	|	Спр_Клиенты.id IN (SELECT VAL FROM :ВыбГруппа)
	|GROUP BY
	|	Спр_Клиенты.id
	|";
	л_обНабор.Отладка(1);
	ТЗЗапроса		= л_обНабор.ВыполнитьИнструкцию(ТекстЗапроса);
КонецПроцедуры 



Отладка:
Код (C++)
Выбрать все
SELECT
	Спр_Клиенты.id as [ТекЭлемент_1c_type_Справочник_1c_dot_Клиенты]
FROM
	sc46 as Спр_Клиенты
WHERE
	Спр_Клиенты.ismark=''
AND
	Спр_Клиенты.IsFolder=2
AND
	Спр_Клиенты.id IN (SELECT VAL FROM '94482257-488d-4f61-a46e-c4e495500810')
GROUP BY
	Спр_Клиенты.id 



В результате выполнения во временную таблицу выгружается весь справочник Клиенты.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: ВЫбор элементов справочника одной группы
Ответ #10 - 18. Января 2017 :: 06:22
Печать  
И ? у тя всё правильно. Запрос отберёт все элементы, которые входят в группу Покупатели (если конечно, это группа). На всех вложенных уровнях.
ЗЫ: group by там в запросе не нужен

Ну и в данном случае, можно вообще запрос переписать так, например

select val from :ВыбГруппа

тут только нет условий на элементы и на пометку удаления.
Хоть поймешь, как метод уложитьсписокОбъектов работает
  
Наверх
 
IP записан
 
programm.ist
Junior Member
**
Отсутствует


1C 7.7

Сообщений: 18
Зарегистрирован: 09. Января 2017
Re: ВЫбор элементов справочника одной группы
Ответ #11 - 21. Января 2017 :: 11:38
Печать  
Eprst писал(а) 18. Января 2017 :: 06:22:
И ? у тя всё правильно. Запрос отберёт все элементы, которые входят в группу Покупатели (если конечно, это группа). На всех вложенных уровнях.
ЗЫ: group by там в запросе не нужен

Ну и в данном случае, можно вообще запрос переписать так, например

select val from :ВыбГруппа

тут только нет условий на элементы и на пометку удаления.
Хоть поймешь, как метод уложитьсписокОбъектов работает

Благодарю - все работает на других группах, а в "Покупателях" какая-то "засада" - но это уже мне разбираться.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать