Имя: Пароль:
1C
1C 7.7
v7: как запросом выбрать папки с определенным наименованием (находящиеся в иерархии указаной п
0 midguard7
 
05.09.17
09:31
Всем доброго!
С 7.7 почти не знаком. Если кто знает - подскажите, пожалуйста.

Сама задача такая: есть справочник "Программы". в нем есть несколько групп первого уровня. в группе с именем "Дистрибутив" надо найти все папки с именем (передаем имя как параметр) и в каждой их этих папок создать элемент с определенным наименованием (которое, тоже передается как параметр).
1 catena
 
05.09.17
09:36
"Подскажите" - читать, как "напишите"? Проблемы на каком этапе? Перебор справочника? Поиск по наименованию? Создание элемента?
2 Ёпрст
 
05.09.17
09:43
(1) проблема на этом этапе: "С 7.7 почти не знаком". Т.е ничего не знает.
3 Ёпрст
 
05.09.17
09:43
4 midguard7
 
05.09.17
09:51
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =     "ТекущийЭлемент       = Справочник.Программы.ТекущийЭлемент;
|Наименование         = Справочник.Программы.Наименование;
|Группировка ТекущийЭлемент;    //|Условие (Наименование = ""Онлайн версия"");    |";
5 midguard7
 
05.09.17
09:51
При попытке такого запроса, если передать наименование элементов (не групп), то в выборку попадают нужные. Если передать наименование групп, то выборка пустая.
6 Ёпрст
 
05.09.17
09:54
(4)
запрос в 7.7 работает только с элементами справочника, группы потом обрабатывает. Можно, конечно, в запрос добавить поле .Родитель, только вот если в такой группе не будет элементов -  тут тоже облом с запросом - такие группы не найдёт.

Самое простое, это выборка и ВключатьПодчиненные(0) - будет бегать только по папкам, без вложенности. И быстро.
7 midguard7
 
05.09.17
09:56
(6) спасибо! Можете эти пару строк написать? а то, у меня на это часа 3, чувствуется, уйдет. А надо, как всегда вчера)
8 Ёпрст
 
05.09.17
09:56
Ну и, если надо скорости, то писать тупо select id [Элем $Справочник.НужныйВид] from $Справочник.НужныйВид where isfolder = 2 and deskr like '%Вася%'
9 Ёпрст
 
05.09.17
09:57
(7) база какая SQL/DBF?
10 midguard7
 
05.09.17
09:58
sql
11 catena
 
05.09.17
09:59
(2) Для данной задачи это решается чтением одной ветки документации: "Справочники".
А по факту надо было так честно и писать. Как в (7).
12 Ёпрст
 
05.09.17
10:17
(10)
Процедура Сформировать()
    
    Парам = "Онлайн версия";
    Попытка
        Запрос = СоздатьОбъект("ODBCRecordSet");
    Исключение
        Если ЗагрузитьВнешнююКомпоненту("1cpp.dll")=0 Тогда
            Предупреждение("поместите 1cpp.dll в каталог с базой или в \BIN");
            Возврат;
        КонецЕсли;
        Запрос = СоздатьОбъект("ODBCRecordSet");
    КонецПопытки;
    
    ТекстЗапроса = "
    |select id [элем $Справочник.Программы]
    |from $Справочник.Программы
    |where descr like '%:Парам%' and isfolder=2
    |";
    Запрос.УстановитьТекстовыйПараметр("Парам",Парам);
    ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
    
    Спр = СоздатьОбъект("Справочник.Программы");
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку()=1 Цикл
        Спр.ИспользоватьРодителя(ТЗ.Элем);
        Спр.Новый();
        Спр.Наименование = "Вася";
        Спр.Записать();
    КонецЦикла;    
    

КонецПроцедуры
13 midguard7
 
05.09.17
11:14
(12) спасибо большое! Помогли