Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите с Выборкой
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
EritikWoW
ЗаписьXML =    ВыгрузкаХМЛ;    
    ЗаписьXML.ЗаписатьНачалоЭлемента("Валюты");    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    Банки.Ссылка КАК Банк,
                   |    БанковскиеСчета.Ссылка КАК БанковскийСчет,
                   |    БиологическиеАктивы.Ссылка КАК БиологическийАктив,
                   |    Валюты.Ссылка КАК Валюта,
                   |    ВидыВзаиморасчетов.Ссылка КАК ВидВзаиморасчетов,
                   |    ВидыВыплат.Ссылка КАК ВидВыплат,
                   |    ВидыДоходовНДФЛ.Ссылка КАК ВидДоходовНДФЛ,
                   |    ВидыКонтактнойИнформации.Ссылка КАК ВидКонтактнойИнформации,
                   |    ВидыЛьготРаботниковОрганизаций.Ссылка КАК ВидЛьготРаботниковОрганизаций,
                   |    ВидыНалоговойДеятельности.Ссылка КАК ВидНалоговойДеятельности,
                   |    ВидыОплатОрганизаций.Ссылка КАК ВидОплатОрганизаций,
                   |    Номенклатура.Ссылка КАК Номенклатура
                   |ИЗ
                   |    Справочник.БанковскиеСчета КАК БанковскиеСчета,
                   |    Справочник.БиологическиеАктивы КАК БиологическиеАктивы,
                   |    Справочник.ВидыВзаиморасчетов КАК ВидыВзаиморасчетов,
                   |    Справочник.ВидыВыплат КАК ВидыВыплат,
                   |    Справочник.ВидыДоходовНДФЛ КАК ВидыДоходовНДФЛ,
                   |    Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации,
                   |    Справочник.ВидыНалоговойДеятельности КАК ВидыНалоговойДеятельности,
                   |    Справочник.ВидыОплатОрганизаций КАК ВидыОплатОрганизаций,
                   |    Справочник.Номенклатура КАК Номенклатура,
                   |    Справочник.Банки КАК Банки,
                   |    Справочник.Валюты КАК Валюты,
                   |    Справочник.ВидыЛьготРаботниковОрганизаций КАК ВидыЛьготРаботниковОрганизаций";
    
    //Запрос = Новый Запрос;
    //Запрос.Текст = "ВЫБРАТЬ
    //|    Валюты.Ссылка КАК Валюта
    //|ИЗ
    //|    Справочник.Валюты КАК Валюты";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
        
    Пока Выборка.Следующий() Цикл
        ТекущийСправочникВалюты = Выборка.Валюта.ПолучитьОбъект();
        ЗаписатьXML(ЗаписьXML,ТекущийСправочникВалюты);
    КонецЦикла;
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    Возврат


Сори малость лохонулся =) Мисснул по кнопке ! =))


В общем мне нужно из данной выборки обратиться имменно к Валюте что бы можно было записать в ХМЛ ! Кто может помочь а то голова уже пухнет ! =)
sava1
А что не получается? (Запрос убойный !!!!!!)
alex040269
этот запрос вернет декартово произведение, т.е. итоговое кво строк в запросе будет
кво = КвоВТаб1*КвоВТаб2*.... ну и т.д.

P.S. произведение количества строк всех таблиц.
EritikWoW
Это конечно замечательно, но моего вопроса это не решает ? С помощью данного запроса возможно сделать выгрузку или лучше делать выборку на каждый элемент в отдельности ?
sava1
Для начала напишите, что Вы хотите сделать.

Если выгрузить только валюту - тогда тот запрос , который закомментирован. вполне достаточен
EritikWoW
Перем ВыгрузкаХМЛ;
Перем ФормаПрогрессора;
Перем ВыборкаБанк;
Перем ВыборкаВалюта;


Процедура КнопкаВыполнитьНажатие(Кнопка)
    ЗаписьXML = Новый ЗаписьXML();
    ВыгрузкаХМЛ = ЗаписьXML;
    ЗаписьXML.ОткрытьФайл(ФайлXML);    
    ЗаписьXML.ЗаписатьНачалоЭлемента("Выгрузка");
    
    Если
        Номенклатура = Истина
        или     Валюты = Истина
        или   Контрагенты = Истина
        или  Банки = Истина
        
        Тогда
        ВыгрузкаХМЛ = ЗаписьXML;
        ЗаписьXML.ЗаписатьНачалоЭлемента("Справочники");
        
        Если Номенклатура = Истина
            Тогда ВыгрузкаНоменклатура();
        КонецЕсли;
        
        Если Валюты = Истина
            Тогда ВыгрузкаВалюты();
        КонецЕсли;
        
        Если Контрагенты = Истина
            Тогда ВыгрузкаКонтрагенты();
        КонецЕсли;
                
        Если Банки = Истина
            Тогда ВыгрузкаБанки();
        КонецЕсли;
        
        
        ЗаписьXML.ЗаписатьКонецЭлемента();
        
    КонецЕсли;
    
    
    Если РТУ = Истина
        Тогда
        ВыгрузкаХМЛ = ЗаписьXML;
        ЗаписьXML.ЗаписатьНачалоЭлемента("Документы");
        Если РТУ = Истина
            Тогда ВыгрузкаРТУ();
        КонецЕсли;
        ЗаписьXML.ЗаписатьКонецЭлемента();
    КонецЕсли;
    
    ЗаписьXML.ЗаписатьКонецЭлемента();
    ЗаписьXML.Закрыть();
    
    Попытка
        ЗаписьXML.Закрыть();
        Сообщить(НСтр("ru='Данные успешно выгружены в файл ';uk='Дані успішно вивантажені в файл '") + ФайлXML);
    Исключение
        Сообщить(НСтр("ru='Не удалось записать данные в файл. Возможно, отсутствует каталог.';uk='Не вдалося записати дані в файл. Можливо, відсутній каталог.'") + ФайлXML);
    КонецПопытки;
    
    
КонецПроцедуры


Процедура ВыгрузкаНоменклатура()
    
    ЗаписьXML =    ВыгрузкаХМЛ;
    ЗаписьXML.ЗаписатьНачалоЭлемента("Номенклатура");
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    Номенклатура.Ссылка КАК Номенклатура
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
        ТекущийСправочникНоменклатура = Выборка.Номенклатура.ПолучитьОбъект();
        ЗаписатьXML(ЗаписьXML,ТекущийСправочникНоменклатура);    
    КонецЦикла;
    
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    Возврат
КонецПроцедуры

Процедура ВыгрузкаБанки()
    
    ЗаписьXML =    ВыгрузкаХМЛ;
    ЗаписьXML.ЗаписатьНачалоЭлемента("Банки");
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    Банки.Ссылка КАК Банк
    |ИЗ
    |    Справочник.Банки КАК Банки";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
        ТекущийСправочникБанки = Выборка.Банк.ПолучитьОбъект();
        ЗаписатьXML(ЗаписьXML,ТекущийСправочникБанки);    
    КонецЦикла;    
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    Возврат
КонецПроцедуры

Процедура ВыгрузкаВалюты()
    
    ЗаписьXML =    ВыгрузкаХМЛ;    
    ЗаписьXML.ЗаписатьНачалоЭлемента("Валюты");    
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    Валюты.Ссылка КАК Валюта
                   |ИЗ
                   |    Справочник.Валюты КАК Валюты";
    
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        ТекущийСправочникВалюты = Выборка.Валюта.ПолучитьОбъект();
        ЗаписатьXML(ЗаписьXML,ТекущийСправочникВалюты);
    КонецЦикла;

    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    Возврат
КонецПроцедуры

Процедура ВыгрузкаКонтрагенты()
    
    ЗаписьXML =    ВыгрузкаХМЛ;
    ЗаписьXML.ЗаписатьНачалоЭлемента("Контрагенты");    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    Контрагенты.Ссылка КАК Контрагент
    |ИЗ
    |    Справочник.Контрагенты КАК Контрагенты";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл    
        ТекущийСправочникКонтрагенты = Выборка.Контрагент.ПолучитьОбъект();
        ЗаписатьXML(ЗаписьXML,ТекущийСправочникКонтрагенты);
    КонецЦикла;
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    Возврат
КонецПроцедуры

Процедура ВыгрузкаРТУ()
    
    ЗаписьXML =    ВыгрузкаХМЛ;
    ЗаписьXML.ЗаписатьНачалоЭлемента("РТУ");    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    РеализацияТоваровУслуг.Ссылка КАК РТУ
    |ИЗ
    |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг";
    
    РезультатЗапроса =Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл    
        ТекущийДокументРТУ = Выборка.РТУ.ПолучитьОбъект();
        ЗаписатьXML(ЗаписьXML,ТекущийДокументРТУ);
    КонецЦикла;
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    Возврат
КонецПроцедуры


Процедура ФайлXMLНачалоВыбора(Элемент, СтандартнаяОбработка)
    ВыборФайлаДляВыгрузки(Элемент)
КонецПроцедуры

Процедура ФайлXMLОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    СтандартнаяОбработка = ложь;
    ОткрытьФайлДляПросмотра(Элемент,ФайлXML,НСтр("ru='Файл выгрузки';uk='Файл вигрузки'"));
КонецПроцедуры



//    |ВЫБРАТЬ
//    |       #Таблица.Ссылка КАК Ссылка
//    |ИЗ
//    |       #Таблица
//    |";
//    
//ТекстЗапроса = "";
//Для каждого ТекДанные из Метаданные.Справочники Цикл
//    ТекстЗапроса = ТекстЗапроса + ?(ПустаяСтрока(ТекстЗапроса), "", "
//    |ОБЪЕДИНИТЬ ВСЕ
//    |")
//    + СтрЗаменить(ШаблонЗапроса, "#Таблица", "Документ." + ТекДанные.Имя);
//КонецЦикла;    Запрос = Новый Запрос;
//Запрос.Текст = ТекстЗапроса;
//    
//Выборка = Запрос.Выполнить().Выбрать();
//    
//Пока Выборка.Следующий() Цикл
//    Сообщить(Выборка.Ссылка);
//КонецЦикла;


Вот весь запрос
Перем ВыгрузкаХМЛ;
Перем ФормаПрогрессора;



Процедура КнопкаВыполнитьНажатие(Кнопка)
    ЗаписьXML = Новый ЗаписьXML();
    ВыгрузкаХМЛ = ЗаписьXML;
    ЗаписьXML.ОткрытьФайл(ФайлXML);    
    ЗаписьXML.ЗаписатьНачалоЭлемента("Выгрузка");
    
    Если
        Номенклатура = Истина
        или     Валюты = Истина
        или   Контрагенты = Истина
        или  Банки = Истина
        
        Тогда
        ВыгрузкаХМЛ = ЗаписьXML;
        ЗаписьXML.ЗаписатьНачалоЭлемента("Справочники");
        
        Если Номенклатура = Истина
            Тогда ВыгрузкаНоменклатура();
        КонецЕсли;
        
        Если Валюты = Истина
            Тогда ВыгрузкаВалюты();
        КонецЕсли;
        
        Если Контрагенты = Истина
            Тогда ВыгрузкаКонтрагенты();
        КонецЕсли;
                
        Если Банки = Истина
            Тогда ВыгрузкаБанки();
        КонецЕсли;
        
        
        ЗаписьXML.ЗаписатьКонецЭлемента();
        
    КонецЕсли;
    
    
    Если РТУ = Истина
        Тогда
        ВыгрузкаХМЛ = ЗаписьXML;
        ЗаписьXML.ЗаписатьНачалоЭлемента("Документы");
        Если РТУ = Истина
            Тогда ВыгрузкаРТУ();
        КонецЕсли;
        ЗаписьXML.ЗаписатьКонецЭлемента();
    КонецЕсли;
    
    ЗаписьXML.ЗаписатьКонецЭлемента();
    ЗаписьXML.Закрыть();
    
    Попытка
        ЗаписьXML.Закрыть();
        Сообщить(НСтр("ru='Данные успешно выгружены в файл ';uk='Дані успішно вивантажені в файл '") + ФайлXML);
    Исключение
        Сообщить(НСтр("ru='Не удалось записать данные в файл. Возможно, отсутствует каталог.';uk='Не вдалося записати дані в файл. Можливо, відсутній каталог.'") + ФайлXML);
    КонецПопытки;
    
    
КонецПроцедуры


Процедура ВыгрузкаНоменклатура()
    
    ЗаписьXML =    ВыгрузкаХМЛ;
    ЗаписьXML.ЗаписатьНачалоЭлемента("Номенклатура");
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    Номенклатура.Ссылка КАК Номенклатура
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
        ТекущийСправочникНоменклатура = Выборка.Номенклатура.ПолучитьОбъект();
        ЗаписатьXML(ЗаписьXML,ТекущийСправочникНоменклатура);    
    КонецЦикла;
    
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    Возврат
КонецПроцедуры

Процедура ВыгрузкаБанки()
    
    ЗаписьXML =    ВыгрузкаХМЛ;
    ЗаписьXML.ЗаписатьНачалоЭлемента("Банки");
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    Банки.Ссылка КАК Банк
    |ИЗ
    |    Справочник.Банки КАК Банки";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
        ТекущийСправочникБанки = Выборка.Банк.ПолучитьОбъект();
        ЗаписатьXML(ЗаписьXML,ТекущийСправочникБанки);    
    КонецЦикла;    
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    Возврат
КонецПроцедуры

Процедура ВыгрузкаВалюты()
    
    ЗаписьXML =    ВыгрузкаХМЛ;    
    ЗаписьXML.ЗаписатьНачалоЭлемента("Валюты");    
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    Валюты.Ссылка КАК Валюта
                   |ИЗ
                   |    Справочник.Валюты КАК Валюты";
    
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        ТекущийСправочникВалюты = Выборка.Валюта.ПолучитьОбъект();
        ЗаписатьXML(ЗаписьXML,ТекущийСправочникВалюты);
    КонецЦикла;

    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    Возврат
КонецПроцедуры

Процедура ВыгрузкаКонтрагенты()
    
    ЗаписьXML =    ВыгрузкаХМЛ;
    ЗаписьXML.ЗаписатьНачалоЭлемента("Контрагенты");    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    Контрагенты.Ссылка КАК Контрагент
    |ИЗ
    |    Справочник.Контрагенты КАК Контрагенты";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл    
        ТекущийСправочникКонтрагенты = Выборка.Контрагент.ПолучитьОбъект();
        ЗаписатьXML(ЗаписьXML,ТекущийСправочникКонтрагенты);
    КонецЦикла;
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    Возврат
КонецПроцедуры

Процедура ВыгрузкаРТУ()
    
    ЗаписьXML =    ВыгрузкаХМЛ;
    ЗаписьXML.ЗаписатьНачалоЭлемента("РТУ");    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    РеализацияТоваровУслуг.Ссылка КАК РТУ
    |ИЗ
    |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг";
    
    РезультатЗапроса =Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл    
        ТекущийДокументРТУ = Выборка.РТУ.ПолучитьОбъект();
        ЗаписатьXML(ЗаписьXML,ТекущийДокументРТУ);
    КонецЦикла;
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    Возврат
КонецПроцедуры


Процедура ФайлXMLНачалоВыбора(Элемент, СтандартнаяОбработка)
    ВыборФайлаДляВыгрузки(Элемент)
КонецПроцедуры

Процедура ФайлXMLОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    СтандартнаяОбработка = ложь;
    ОткрытьФайлДляПросмотра(Элемент,ФайлXML,НСтр("ru='Файл выгрузки';uk='Файл вигрузки'"));
КонецПроцедуры



А хочу я сделать общюю выборку с подстановкой данных в оброботку если она выбрана для выгрузки
sava1
Поверьте - вполне нормальный код - не надо ничего трогать.
Что есть общая выборка - Товары, Контрагенты, Валюты....... - все в одном ?
EritikWoW
Да просто как по мне очень долго идет выборка получаеться что для каждого элемента своя... мне почему то кажеться что если сделать единоразовую она будет малость быстрее работать.... хотя это лишь мои мысли.... может действительно лучше не будет ! =)))

хотя.... да я так подумал.... посмотрел на выгрузку.. если перенести все в одну процедуру тогда выгрузка кривая получаеться... документы и справочники не раздеяются... получаеться что то бы они разделялись при ввыгрузке их нужно каждую в отдельно процедуре делать =\
sava1
Цитата(alex040269 @ 14.08.14, 8:01) необходимо зарегистрироваться для просмотра ссылки
этот запрос вернет декартово произведение, т.е. итоговое кво строк в запросе будет кво = КвоВТаб1*КвоВТаб2*.... ну и т.д.

Так вот - преположим Валюты имеют 3 записи, Товары 10. По-отдельности будет 2 выборки размером 3 и 10 записей. В Вашем случае с общей выборкой Вы поимеете выборку в 30 записей различных комбинаций таблиц.
EritikWoW
Да я уже это понял =) да и говорю если делать так как я хотел тогда при выгрузку ломаеться подчиненость Элемента выгрузки =( Так что оставлю так как есть =))) Получиться конешн много процедур но за то "без проблем" =)))
sava1
А медленно не из-за запроса, а из-за записи в ХМЛ (+ПолучитьОбъект)
EritikWoW
Кстати.. пока вы тут =) не подскажете как можно список Всех справочников вынести в табличную часть... что бы не делать прверку для каждой отметки на выгрузку а общую проверку табчасти
sava1
Если я правильно догадываюсь, Пройти по метаданным.Справочники, заполнить ТЧ (или ТП)
EritikWoW
ок спс =)
EritikWoW
ФормаВыгрузки = ПолучитьФорму("Форма");    
    ЧтениеXML = Новый ЧтениеXML();
    ЧтениеXML.ОткрытьФайл(ФайлXML);

    ТабСпр = СпрЗагрузка;
    Пока ЧтениеXML.Прочитать() Цикл
        Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл
            Для Каждого [color="#FF00FF"]****[/color]из ЧтениеXML Цикл
            СтрСпр = ТабСпр.Добавить();    
            СтрСпр.СпрЗагрузка = Имя;
            КонецЦикла;    
        КонецЦикла;
    КонецЦикла;

ФормаВыгрузки = ПолучитьФорму("Форма");    
ФормаВыгрузки.Закрыть()



Данные из XML:
<Выгрузка>
<Справочники>
<Банки>
<CatalogObject.Банки>
<Ref>ea5fa0b0-6214-11dd-8913-00179a38ca78</Ref>
<IsFolder>false</IsFolder>
<DeletionMark>false</DeletionMark>
<Parent>00000000-0000-0000-0000-000000000000</Parent>
<Code>302429 </Code>
<Description>ФВАТ "Укр. Дер. Експ.-імп. банк"</Description>
<КоррСчет>26002000116122 </КоррСчет>
<Город>м. Вінниця</Город>
<Адрес>вул. Київська, 14</Адрес>
<Телефоны>26-54-12</Телефоны>
<КодПоЕДРПОУ>24896705</КодПоЕДРПОУ>
</CatalogObject.Банки>
</Банки>
</Справочники>
</Выгрузка


Помогите определить итератор для записи в таблицу имени что бы можно было выбирать что выгружать а что нет !


 ! 

Правила, п. 12
 
Petre
ЧтениеXML - это не коллекция.
Надо каждый раз читать очередной узел:
Пока Чтение.Прочитать() Цикл
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.