Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 1C: Предприятие, SAP, ERP и учётные системы > Выборка товара из Справочник.Номенклатура ...


Автор: sergey_85 27.2.2009, 09:26
Привет! 

Как можно выбрать все товары по коду группы из справочника Номенклатура (1Cv77)
*нужен пример кода
 
Всем спасибо!


Автор: AkelaSQL 27.2.2009, 09:46
Код

Вариант №1

Перем ВыбГруппа, Запрос, ТекстЗапроса, ТЗ;

СпрНом = СоздатьОбъект("Справочник.Номенклатура");

Если СпрНом.НайтиПоКоду("000001258",0) = 0 Тогда
    Возврат;
КонецЕсли;

ВыбГруппа = СпрНом.ТекущийЭлемент();

Если ВыбГруппа.ЭтоГруппа() = 0 Тогда
    Возврат;
КонецЕсли;

ТекстЗапроса = "
|Обрабатывать Все;
|Номенклатура = Справочник.Номенклатура.ТекущийЭлемент;
|Условие (Номенклатура В ВыбГруппа);
|";

Запрос = СоздатьОбъект("Запрос");

Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
КонецЕсли;

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


Добавлено через 5 минут и 52 секунды
Код

Вариант №2

Перем ВыбГруппа, СЗ;

СпрНом = СоздатьОбъект("Справочник.Номенклатура");

Если СпрНом.НайтиПоКоду("000001258",0) = 0 Тогда
    Возврат;
КонецЕсли;

ВыбГруппа = СпрНом.ТекущийЭлемент();

Если ВыбГруппа.ЭтоГруппа() = 0 Тогда
    Возврат;
КонецЕсли;

СЗ = СоздатьОбъект("СписокЗначений");

СпрНом.ИспользоватьРодителя(ВыбГруппа);
СпрНом.ВыбратьЭлементы();
Пока СпрНом.ПолучитьЭлемент() = 1 Цикл
    СЗ.ДобавитьЗначение(СпрНом.ТекущийЭлемент());
КонецЦикла;

ВыбГруппа = "";


Автор: sergey_85 27.2.2009, 09:53
ок, большое спасибо!
этот код буду использовать через OLE в проге по синхронизации бд 1с и бд моей проги, а код нужен потому как в 1с не шарю.

Автор: AkelaSQL 27.2.2009, 10:08
1 вариант будет работать быстрее...

Добавлено через 1 минуту и 34 секунды
Только в случае с оле тебе нужны не списки объектов справочника, а списки кодов...


|НоменклатураКод = Справочник.Номенклатура.Код;

Автор: sergey_85 27.2.2009, 10:17
Код

Процедура Сформировать()
    
    Перем грпВыб, СпрНом;   
    
    СпрНом = СоздатьОбъект("Справочник.Номенклатура");
    
    Если СпрНом.НайтиПоКоду("0000000002",0) = 1 Тогда
        
        грпВыб = СпрНом.ТекущийЭлемент(); 
        Если грпВыб.ЭтоГруппа() = 1 Тогда
            СпрНом.ИспользоватьРодителя(грпВыб);
            СпрНом.ВыбратьЭлементы(); 
            
            Пока СпрНом.ПолучитьЭлемент(0)=1 Цикл
                Сообщить(СпрНом.Наименование); 
            КонецЦикла; 
            
        КонецЕсли;
        
    КонецЕсли;    
    
КонецПроцедуры


выбирает в группе все товары и !!! ДРУГИЕ ПОДГРУППЫ !!!, но мне они не нужны...

Добавлено @ 10:24
ну все подправил, теперь только обычные элементы дает

Код

//*******************************************
Процедура Сформировать()
    
    Перем грпВыб, СпрНом;
    
    ОчиститьОкноСообщений();
    
    СпрНом = СоздатьОбъект("Справочник.Номенклатура");
    
    Если СпрНом.НайтиПоКоду("0000000002",0) = 1 Тогда
        
        грпВыб = СпрНом.ТекущийЭлемент(); 
        Если грпВыб.ЭтоГруппа() = 1 Тогда
            СпрНом.ИспользоватьРодителя(грпВыб);
            СпрНом.ВыбратьЭлементы(); 
            
            Пока СпрНом.ПолучитьЭлемент(0)=1 Цикл
                Если СпрНом.ТекущийЭлемент().ЭтоГруппа() = 0 Тогда
                    Сообщить(СпрНом.Наименование); 
                КонецЕсли;
                
                
            КонецЦикла; 
            
        КонецЕсли;
        
    КонецЕсли;    
    
КонецПроцедуры


... теперь дело за малым  smile перенести все это в с++ builder  через ole

Автор: AkelaSQL 27.2.2009, 10:55
Я тебе рекомендую всё это написать в отдельной функции в глобальном модуле конфигурации 1С. А в С++ тебе останется лишь зацепиться в 1С по ОЛЕ и "дёрнуть" эту функцию, которая вернёт тебе результат.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)