Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Работа с справочником (число прочтений - 3347 )
Ivanych
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 50
Зарегистрирован: 21. Февраля 2012
Работа с справочником
14. Марта 2012 :: 03:53
Печать  
Здравствуйте. Пытаюсь получить данные из справочника номенклатура при помощи прямого запроса:
           RS2 = СоздатьОбъект("ODBCRecordset");
           RS2.УстБД1С();
           ТекстЗапроса = "
           |SELECT
           |    Спр.ID as [ТМЦ $Справочник.Номенклатура]
           |FROM
           |    $Справочник.Номенклатура as Спр
           |WHERE
           |    Спр.IsFolder = 1 AND
           |    Спр.IsMark = 0
           |    " + ?( ВыбТМЦ.Выбран()=1, "AND Спр.ID = :ВыбТМЦ1", "") + "";
           RS2.УстановитьТекстовыйПараметр("ВыбТМЦ1", ВыбТМЦ);
           ТЗ = RS2.ВыполнитьИнструкцию(ТекстЗапроса);
           ТЗ.ВыбратьСтроки();
           Пока ТЗ.ПолучитьСтроку() = 1 Цикл
                 ТМЦ = ТЗ.ТМЦ;
                 ПризнакГруппы = ТМЦ.ЭтоГруппа();
                 Если ПризнакГруппы = 1 Тогда
                       Если ТМЦ.Уровень() = 1 Тогда      
                             Таб.ВывестиСекцию("ТМЦГруппа1");
                       ИначеЕсли ТМЦ.Уровень() = 2 Тогда
                             Таб.ВывестиСекцию("ТМЦГруппа2");
                       ИначеЕсли ТМЦ.Уровень() = 3 Тогда
                             Таб.ВывестиСекцию("ТМЦГруппа3");
                       КонецЕсли;
                 КонецЕсли;
           КонецЦикла;
аналогично этому из 1С:
           ЗапросТМЦ = СоздатьОбъект("Запрос");
           
           ТекстЗапроса =
           "//{{ЗАПРОС(Сформировать)
           |ТМЦ = Справочник.Номенклатура.ТекущийЭлемент;
           |Условие(ТМЦ в СписокТМЦ);
           |Группировка ТМЦ упорядочить по ТМЦ.Наименование;
           |"//}}ЗАПРОС
           ;
           // Если ошибка в запросе, то выход из процедуры
           Если ЗапросТМЦ.Выполнить(ТекстЗапроса) = 0 Тогда
                 Возврат;
           КонецЕсли;
           
           Пока ЗапросТМЦ.Группировка(1) = 1 Цикл
                 ТМЦ = ЗапросТМЦ.ТМЦ;
                 ПризнакГруппы = ТМЦ.ЭтоГруппа();
                 Если ПризнакГруппы = 1 Тогда
                       Если ТМЦ.Уровень() = 1 Тогда      
                             Таб.ВывестиСекцию("ТМЦГруппа1");
                       ИначеЕсли ТМЦ.Уровень() = 2 Тогда
                             Таб.ВывестиСекцию("ТМЦГруппа2");
                       ИначеЕсли ТМЦ.Уровень() = 3 Тогда
                             Таб.ВывестиСекцию("ТМЦГруппа3");
                       КонецЕсли;
                 КонецЕсли;
           КонецЦикла;      

Получается что попала, во первых выдает данные совершенно в другом порядке, не по иерархии как в 1С, а во вторых как реализовать Условие(ТМЦ в СписокТМЦ(папки)); я пробовал IN (SELECT Val FROM #СписокТМЦ), но не получается выдает только элементы. Если возможно подскажите как. Заранее спасибо
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Работа с справочником
Ответ #1 - 14. Марта 2012 :: 04:09
Печать  
Про список не подскажу. Отвык уже от фокса, а в 1sqlite это реализовано просто через УложитьОбъекты.
Уровни можно получить джойнами:
Код
Выбрать все
SELECT
    Спр.ID as [ТМЦ $Справочник.Номенклатура]
    , CASE WHEN Спр3.id IS NOT NULL THEN 4
	ELSE WHEN Спр2.id IS NOT NULL THEN 3
	ELSE WHEN Спр1.id IS NOT NULL THEN 2
	ELSE 1 END AS Уровень
FROM
    $Справочник.Номенклатура as Спр
LEFT JOIN $Справочник.Номенклатура as Спр1 ON Спр1.id = спр.parentExt
LEFT JOIN $Справочник.Номенклатура as Спр2 ON Спр2.id = спр1.parentExt
LEFT JOIN $Справочник.Номенклатура as Спр3 ON Спр3.id = спр2.parentExt
WHERE
    Спр.IsFolder = 1 AND Спр.IsMark = 0
ORDER BY 2, Спр.descr 

Смысл понятен? - если нет родителя, то уровень 1, если у родителя нет родителя, то уровень 2 и т.д. Ну и сортировка идет сначала по уровню, а только потом по имени.

Примечание: Не уверен в синтаксисе CASE, а именно его ELSE, возможно, придется переделать на несколько вложенных CASE'ов.
  
Наверх
 
IP записан
 
Ivanych
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 50
Зарегистрирован: 21. Февраля 2012
Re: Работа с справочником
Ответ #2 - 14. Марта 2012 :: 04:27
Печать  
Dmitry The Wing писал(а) 14. Марта 2012 :: 04:09:
Про список не подскажу. Отвык уже от фокса, а в 1sqlite это реализовано просто через УложитьОбъекты.
Уровни можно получить джойнами:
Код
Выбрать все
SELECT
    Спр.ID as [ТМЦ $Справочник.Номенклатура]
    , CASE WHEN Спр3.id IS NOT NULL THEN 4
	ELSE WHEN Спр2.id IS NOT NULL THEN 3
	ELSE WHEN Спр1.id IS NOT NULL THEN 2
	ELSE 1 END AS Уровень
FROM
    $Справочник.Номенклатура as Спр
LEFT JOIN $Справочник.Номенклатура as Спр1 ON Спр1.id = спр.parentExt
LEFT JOIN $Справочник.Номенклатура as Спр2 ON Спр2.id = спр1.parentExt
LEFT JOIN $Справочник.Номенклатура as Спр3 ON Спр3.id = спр2.parentExt
WHERE
    Спр.IsFolder = 1 AND Спр.IsMark = 0
ORDER BY 2, Спр.descr 

Смысл понятен? - если нет родителя, то уровень 1, если у родителя нет родителя, то уровень 2 и т.д. Ну и сортировка идет сначала по уровню, а только потом по имени.

Примечание: Не уверен в синтаксисе CASE, а именно его ELSE, возможно, придется переделать на несколько вложенных CASE'ов.

State 42000, native 156, message [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'WHEN'
  
Наверх
 
IP записан
 
Ivanych
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 50
Зарегистрирован: 21. Февраля 2012
Re: Работа с справочником
Ответ #3 - 14. Марта 2012 :: 05:16
Печать  
Dmitry The Wing писал(а) 14. Марта 2012 :: 04:09:
Про список не подскажу. Отвык уже от фокса, а в 1sqlite это реализовано просто через УложитьОбъекты.
Уровни можно получить джойнами:
Код
Выбрать все
SELECT
    Спр.ID as [ТМЦ $Справочник.Номенклатура]
    , CASE WHEN Спр3.id IS NOT NULL THEN 4
	ELSE WHEN Спр2.id IS NOT NULL THEN 3
	ELSE WHEN Спр1.id IS NOT NULL THEN 2
	ELSE 1 END AS Уровень
FROM
    $Справочник.Номенклатура as Спр
LEFT JOIN $Справочник.Номенклатура as Спр1 ON Спр1.id = спр.parentExt
LEFT JOIN $Справочник.Номенклатура as Спр2 ON Спр2.id = спр1.parentExt
LEFT JOIN $Справочник.Номенклатура as Спр3 ON Спр3.id = спр2.parentExt
WHERE
    Спр.IsFolder = 1 AND Спр.IsMark = 0
ORDER BY 2, Спр.descr 

Смысл понятен? - если нет родителя, то уровень 1, если у родителя нет родителя, то уровень 2 и т.д. Ну и сортировка идет сначала по уровню, а только потом по имени.

Примечание: Не уверен в синтаксисе CASE, а именно его ELSE, возможно, придется переделать на несколько вложенных CASE'ов.

Покажите как (возможно, придется переделать на несколько вложенных CASE'ов) я новичок пока разбераюсь
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Работа с справочником
Ответ #4 - 14. Марта 2012 :: 05:55
Печать  
Ivanych писал(а) 14. Марта 2012 :: 05:16:
Покажите как (возможно, придется переделать на несколько вложенных CASE'ов) я новичок пока разбераюсь
Код
Выбрать все
CASE WHEN Спр3.id IS NOT NULL THEN 4 ELSE
	CASE WHEN Спр2.id IS NOT NULL THEN 3 ELSE
		CASE WHEN Спр1.id IS NOT NULL THEN 2 ELSE 1 END
	END
END AS Уровень 

Однако, может оказаться, что придется использовать функции типа IIF, IFNULL или соседние...
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Работа с справочником
Ответ #5 - 14. Марта 2012 :: 06:18
Печать  
Dmitry The Wing писал(а) 14. Марта 2012 :: 05:55:
Ivanych писал(а) 14. Марта 2012 :: 05:16:
Покажите как (возможно, придется переделать на несколько вложенных CASE'ов) я новичок пока разбераюсь
Код
Выбрать все
CASE WHEN Спр3.id IS NOT NULL THEN 4 ELSE
	CASE WHEN Спр2.id IS NOT NULL THEN 3 ELSE
		CASE WHEN Спр1.id IS NOT NULL THEN 2 ELSE 1 END
	END
END AS Уровень 

Однако, может оказаться, что придется использовать функции типа IIF, IFNULL или соседние...

смотри пост 2
у автора  ms sql
  
Наверх
 
IP записан
 
antoneus
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 54
Зарегистрирован: 16. Марта 2009
Пол: Мужской
Re: Работа с справочником
Ответ #6 - 14. Марта 2012 :: 06:41
Печать  
CASE WHEN Спр3.id IS NOT NULL THEN 4
     WHEN Спр2.id IS NOT NULL THEN 3
     WHEN Спр1.id IS NOT NULL THEN 2
     ELSE 1 END AS Уровень

Вообще, где-то валялась sql функция, возвращающая уровень, цеплять кучу таблиц неоптимально как-то.

А, нашёл:

CREATE FUNCTION ufn_getLevelSpr (@IDSpr Char(9))
RETURNS  Int
BEGIN
DECLARE @R Char(9)
DECLARE @Lev Int
SET @Lev = 0
SET @R = @IDSpr
WHILE (@R <> $ПустойИД) AND (@R IS NOT NULL)
BEGIN
    SELECT
    @R = PARENTID, @Lev = @Lev + 1
    FROM $Справочник.Номенклатура
    WHERE
    (ID = @R)
END
RETURN @Lev
end      
GO
set nocount on

© не моё
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Работа с справочником
Ответ #7 - 14. Марта 2012 :: 06:45
Печать  
Проще иметь табличку групп справочника и повесить тригер на её изменение..
Потом в отчетах легко достается вся иерархия.
Тут на форуме есть решение от A'Dirks
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Работа с справочником
Ответ #8 - 14. Марта 2012 :: 07:35
Печать  
Я бы порекомендовал несколько другой подход.
Накидал простенький пример:
Код
Выбрать все
Процедура ВыводСтроки(ИТЗ)
	ИТЗ.Сортировать("-__ЭтоГруппа__,Имя");
	ИТЗ.ВыбратьСтроки();
	Пока ИТЗ.ПолучитьСтроку() = 1 Цикл
		Если ИТЗ.__ЭтоГруппа__=1 Тогда
			//Выводим строку группы
			Сообщить("Группа: "+ИТЗ.Товар+" Элементов: "+ИТЗ.Количество);
			//Обходим дерево дальше
			_тз = ИТЗ.ТЗПотомки;
			ВыводСтроки(_тз);
		Иначе
			Прервать;
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры

//*******************************************
Процедура Сформировать()
	ИТЗ = СоздатьОбъект("ИндексированнаяТаблица");
	ТекстЗапроса="
	|SELECT СпрНом.ID [Товар $Справочник.Номенклатура]
	|	,СпрНом.ParentID [Товар_Родитель $Справочник.Номенклатура]
	|	,СпрНом.Descr Имя
	|	,1 Количество
	|FROM
	|	$Справочник.Номенклатура СпрНом
	|WHERE IsFolder=2
	|";
	Таб = СоздатьОбъект("Таблица");
	ИТЗ = глРС_Аддон.ВыполнитьИнструкцию(ТекстЗапроса, ИТЗ, 1);
	ИТЗ.Группировать("индТовар: &*Товар","Количество");
	ВыводСтроки(ИТЗ);
КонецПроцедуры
 

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


1C++ rocks!

Сообщений: 50
Зарегистрирован: 21. Февраля 2012
Re: Работа с справочником
Ответ #9 - 14. Марта 2012 :: 08:54
Печать  
Eprst писал(а) 14. Марта 2012 :: 06:45:
Проще иметь табличку групп справочника и повесить тригер на её изменение..
Потом в отчетах легко достается вся иерархия.
Тут на форуме есть решение от A'Dirks

решение от A'Dirks не могу найти, а ссылка есть у вас?
  
Наверх
 
IP записан
 
Ivanych
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 50
Зарегистрирован: 21. Февраля 2012
Re: Работа с справочником
Ответ #10 - 14. Марта 2012 :: 09:17
Печать  
Salimbek писал(а) 14. Марта 2012 :: 07:35:
Я бы порекомендовал несколько другой подход.
Накидал простенький пример:
Код
Выбрать все
Процедура ВыводСтроки(ИТЗ)
	ИТЗ.Сортировать("-__ЭтоГруппа__,Имя");
	ИТЗ.ВыбратьСтроки();
	Пока ИТЗ.ПолучитьСтроку() = 1 Цикл
		Если ИТЗ.__ЭтоГруппа__=1 Тогда
			//Выводим строку группы
			Сообщить("Группа: "+ИТЗ.Товар+" Элементов: "+ИТЗ.Количество);
			//Обходим дерево дальше
			_тз = ИТЗ.ТЗПотомки;
			ВыводСтроки(_тз);
		Иначе
			Прервать;
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры

//*******************************************
Процедура Сформировать()
	ИТЗ = СоздатьОбъект("ИндексированнаяТаблица");
	ТекстЗапроса="
	|SELECT СпрНом.ID [Товар $Справочник.Номенклатура]
	|	,СпрНом.ParentID [Товар_Родитель $Справочник.Номенклатура]
	|	,СпрНом.Descr Имя
	|	,1 Количество
	|FROM
	|	$Справочник.Номенклатура СпрНом
	|WHERE IsFolder=2
	|";
	Таб = СоздатьОбъект("Таблица");
	ИТЗ = глРС_Аддон.ВыполнитьИнструкцию(ТекстЗапроса, ИТЗ, 1);
	ИТЗ.Группировать("индТовар: &*Товар","Количество");
	ВыводСтроки(ИТЗ);
КонецПроцедуры
 


А вы не могли бы показать на моем примере более подробно. А то я чето не очень пойму
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Работа с справочником
Ответ #11 - 14. Марта 2012 :: 11:31
Печать  
Если задача такая:
Цитата:
аналогично этому из 1С:
          ЗапросТМЦ = СоздатьОбъект("Запрос");
         
          ТекстЗапроса =
          "//{{ЗАПРОС(Сформировать)
          |ТМЦ = Справочник.Номенклатура.ТекущийЭлемент;
          |Условие(ТМЦ в СписокТМЦ);
          |Группировка ТМЦ упорядочить по ТМЦ.Наименование;
          |"//}}ЗАПРОС
          ;
          // Если ошибка в запросе, то выход из процедуры
          Если ЗапросТМЦ.Выполнить(ТекстЗапроса) = 0 Тогда
                Возврат;
          КонецЕсли;
         
          Пока ЗапросТМЦ.Группировка(1) = 1 Цикл
                ТМЦ = ЗапросТМЦ.ТМЦ;
                ПризнакГруппы = ТМЦ.ЭтоГруппа();
                Если ПризнакГруппы = 1 Тогда
                      Если ТМЦ.Уровень() = 1 Тогда      
                            Таб.ВывестиСекцию("ТМЦГруппа1");
                      ИначеЕсли ТМЦ.Уровень() = 2 Тогда
                            Таб.ВывестиСекцию("ТМЦГруппа2");
                      ИначеЕсли ТМЦ.Уровень() = 3 Тогда
                            Таб.ВывестиСекцию("ТМЦГруппа3");
                      КонецЕсли;
                КонецЕсли;
          КонецЦикла;    

То решение:
Код
Выбрать все
Процедура ВыводСтроки(ИТЗ)
	ИТЗ.Сортировать("-__ЭтоГруппа__,Имя");
	ИТЗ.ВыбратьСтроки();
	Пока ИТЗ.ПолучитьСтроку() = 1 Цикл
		Если ИТЗ.__ЭтоГруппа__=1 Тогда
			//Выводим строку группы
			Уровень = ИТЗ.__Уровень__;
			Если Уровень = 1 Тогда      
				Таб.ВывестиСекцию("ТМЦГруппа1");
			ИначеЕсли Уровень = 2 Тогда
				Таб.ВывестиСекцию("ТМЦГруппа2");
			ИначеЕсли Уровень = 3 Тогда
				Таб.ВывестиСекцию("ТМЦГруппа3");
			КонецЕсли;
			//Обходим дерево дальше
			_тз = ИТЗ.ТЗПотомки;
			ВыводСтроки(_тз);
		Иначе
			Прервать;
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры

//*******************************************
Процедура Сформировать()
	RS2 = СоздатьОбъект("ODBCRecordset");
	RS2.УложитьСписокОбъектов(СписокТМЦ,"#tmpTovar","Номенклатура");
	ИТЗ = СоздатьОбъект("ИндексированнаяТаблица");
	ТекстЗапроса="
	|SELECT СпрНом.ID [ТМЦ$Справочник.Номенклатура]
	|	,СпрНом.ParentID [ТМЦ_Родитель $Справочник.Номенклатура]
	|	,СпрНом.Descr Имя
	|FROM
	|	$Справочник.Номенклатура СпрНом
	|WHERE IsFolder=2 AND СпрНом.ID in (SELECT Val FROM #tmpTovar)
	|";
	ИТЗ = RS2 .ВыполнитьИнструкцию(ТекстЗапроса, ИТЗ, 1);
	ИТЗ.Группировать("индТовар: &*ТМЦ","");
	ВыводСтроки(ИТЗ);
КонецПроцедуры 

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


1C++ rocks!

Сообщений: 50
Зарегистрирован: 21. Февраля 2012
Re: Работа с справочником
Ответ #12 - 15. Марта 2012 :: 06:22
Печать  
Salimbek писал(а) 14. Марта 2012 :: 11:31:
Если задача такая:
Цитата:
аналогично этому из 1С:
          ЗапросТМЦ = СоздатьОбъект("Запрос");
         
          ТекстЗапроса =
          "//{{ЗАПРОС(Сформировать)
          |ТМЦ = Справочник.Номенклатура.ТекущийЭлемент;
          |Условие(ТМЦ в СписокТМЦ);
          |Группировка ТМЦ упорядочить по ТМЦ.Наименование;
          |"//}}ЗАПРОС
          ;
          // Если ошибка в запросе, то выход из процедуры
          Если ЗапросТМЦ.Выполнить(ТекстЗапроса) = 0 Тогда
                Возврат;
          КонецЕсли;
         
          Пока ЗапросТМЦ.Группировка(1) = 1 Цикл
                ТМЦ = ЗапросТМЦ.ТМЦ;
                ПризнакГруппы = ТМЦ.ЭтоГруппа();
                Если ПризнакГруппы = 1 Тогда
                      Если ТМЦ.Уровень() = 1 Тогда      
                            Таб.ВывестиСекцию("ТМЦГруппа1");
                      ИначеЕсли ТМЦ.Уровень() = 2 Тогда
                            Таб.ВывестиСекцию("ТМЦГруппа2");
                      ИначеЕсли ТМЦ.Уровень() = 3 Тогда
                            Таб.ВывестиСекцию("ТМЦГруппа3");
                      КонецЕсли;
                КонецЕсли;
          КонецЦикла;    

То решение:
Код
Выбрать все
Процедура ВыводСтроки(ИТЗ)
	ИТЗ.Сортировать("-__ЭтоГруппа__,Имя");
	ИТЗ.ВыбратьСтроки();
	Пока ИТЗ.ПолучитьСтроку() = 1 Цикл
		Если ИТЗ.__ЭтоГруппа__=1 Тогда
			//Выводим строку группы
			Уровень = ИТЗ.__Уровень__;
			Если Уровень = 1 Тогда      
				Таб.ВывестиСекцию("ТМЦГруппа1");
			ИначеЕсли Уровень = 2 Тогда
				Таб.ВывестиСекцию("ТМЦГруппа2");
			ИначеЕсли Уровень = 3 Тогда
				Таб.ВывестиСекцию("ТМЦГруппа3");
			КонецЕсли;
			//Обходим дерево дальше
			_тз = ИТЗ.ТЗПотомки;
			ВыводСтроки(_тз);
		Иначе
			Прервать;
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры

//*******************************************
Процедура Сформировать()
	RS2 = СоздатьОбъект("ODBCRecordset");
	RS2.УложитьСписокОбъектов(СписокТМЦ,"#tmpTovar","Номенклатура");
	ИТЗ = СоздатьОбъект("ИндексированнаяТаблица");
	ТекстЗапроса="
	|SELECT СпрНом.ID [ТМЦ$Справочник.Номенклатура]
	|	,СпрНом.ParentID [ТМЦ_Родитель $Справочник.Номенклатура]
	|	,СпрНом.Descr Имя
	|FROM
	|	$Справочник.Номенклатура СпрНом
	|WHERE IsFolder=2 AND СпрНом.ID in (SELECT Val FROM #tmpTovar)
	|";
	ИТЗ = RS2 .ВыполнитьИнструкцию(ТекстЗапроса, ИТЗ, 1);
	ИТЗ.Группировать("индТовар: &*ТМЦ","");
	ВыводСтроки(ИТЗ);
КонецПроцедуры 


Классно, все работает. Спасибо Salimbek
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Работа с справочником
Ответ #13 - 15. Марта 2012 :: 07:50
Печать  
Ivanych писал(а) 14. Марта 2012 :: 08:54:
Eprst писал(а) 14. Марта 2012 :: 06:45:
Проще иметь табличку групп справочника и повесить тригер на её изменение..
Потом в отчетах легко достается вся иерархия.
Тут на форуме есть решение от A'Dirks

решение от A'Dirks не могу найти, а ссылка есть у вас?


http://www.1cpp.ru/forum/YaBB.pl?num=1153469047/0
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать