Имя: Пароль:
1C
1C 7.7
v7: Доступ к свойству контрагента в запросе
0 Palll
 
17.03.15
17:07
Пытаюсь запросом получить реализации с группировкой по свойству контрагента. На выходе получаю строки с пустым свойством и строки со всеми остальными контрагентами без отгрузок но с проставленным свойством. Помогите найти ошибку в запросе.

Период С ВыбДата1 По ВыбДата1;
ЮрЛицо = Справочник.СвойстваКонтрагентов.Владелец, Документ.Реализация.ТекущийДокумент.Контрагент;
ТекущийДокумент= Документ.Реализация.ТекущийДокумент;
ДатаПродажи = Документ.Реализация.ТекущийДокумент.ДатаДок;
Свойство = Справочник.СвойстваКонтрагентов.ВидСвойства;
Район = Справочник.СвойстваКонтрагентов.ЗначениеСвойства;
Родитель = Документ.Реализация.Контрагент.Родитель;
ПродСтоимость = Документ.Реализация.Сумма;
Количество = Документ.Реализация.Количество;
Условие(Свойство  = ЗначениеСвойства);
Функция КоличествоВсего = Сумма(Количество);
Функция  СтоимостьВсего = Сумма(ПродСтоимость);
Группировка Район без групп;
Группировка Родитель без групп;  
Группировка ЮрЛицо упорядочить по ЮрЛицо.Наименование без групп;
1 palpetrovich
 
17.03.15
17:57
смешались в кучу, кони, люди... :)
хотелось-бы конечно как-то так
Владелец = Справочник.СвойстваКонтрагентов.Владелец;
ЮрЛицо = Документ.Реализация.ТекущийДокумент.Контрагент;
Условие(Владелец = ЮрЛицо);
но думаю не прокатит
2 Palll
 
17.03.15
18:20
(1) Нет, не прокатило. Похоже в запросе подобного не реализовать.
3 palpetrovich
 
17.03.15
18:40
(2) я тат накидал, копрокодик :)  ...работать будет, про оптимальность - промолчу :)
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = "  
    |без Итогов;
    |Владелец = Справочник.СвойстваКонтрагентов.Владелец;
    |ВидСвойства = Справочник.СвойстваКонтрагентов.ВидСвойства;
    |ЗначениеСвойства = Справочник.СвойстваКонтрагентов.ЗначениеСвойства;
    |Условие(ВидСвойства = ВыбВидСвойства);
    |Группировка ЗначениеСвойства;
    |Группировка Владелец без групп;
    |";
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;        
    тз = создатьОбъект("ТаблицаЗначений");
    Запрос.Выгрузить(тз, 1);      
    сз = создатьОбъект("СписокЗначений");  
    тз.Выгрузить(сз,,,"Владелец");
    
    тзСвойств = создатьОбъект("ТаблицаЗначений");
    тз.Выгрузить(тзСвойств,,,"ЗначениеСвойства");
    тзСвойств.Свернуть("ЗначениеСвойства",);
    
    Запрос2 = СоздатьОбъект("Запрос");
    ТекстЗапроса = "
    |Период с ВыбНачПериода по ВыбКонПериода;
    |ТекущийДокумент = Документ.Реализация.ТекущийДокумент;
    |Контрагент = Документ.Реализация.Контрагент;
    |Сумма = Документ.Реализация.Сумма;        
    |Функция СуммаСумма = Сумма(Сумма);
    |
    |Группировка Контрагент;
    |
    |Условие(Контрагент В сз);
    |";
    Если Запрос2.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;        
    тз2 = создатьОбъект("ТаблицаЗначений");
    Запрос2.Выгрузить(тз2, 1);      
                
    тзСвойств.ВыбратьСтроки();
    Пока тзСвойств.ПолучитьСтроку() = 1 Цикл
        сообщить("ЗначениеСвойства   "+тзСвойств.ЗначениеСвойства);
        тз.ВыбратьСтроки();
        Пока тз.ПолучитьСтроку() = 1 Цикл
            Если тзСвойств.ЗначениеСвойства = тз.ЗначениеСвойства Тогда    
                тз2.ВыбратьСтроки();
                Пока тз2.ПолучитьСтроку() = 1 Цикл
                    Если тз2.Контрагент <> тз.Владелец Тогда    
                        продолжить;
                    КонецЕсли;
                    сообщить("   Контрагент   "+ тз2.Контрагент +" Сумма = " +тз2.СуммаСумма);
                КонецЦикла;    
            КонецЕсли;     
        КонецЦикла;
    КонецЦикла;
4 Palll
 
17.03.15
18:46
(3) Так то да, можно сделать. Тут вся закоывка в том что нужно было именно в запросе.
5 Ёпрст
 
17.03.15
18:49
если несколько значений свойств для одного вида свойства, тогда, какое брать ?
6 palpetrovich
 
17.03.15
18:50
(4) если "именно в запросе", то смотри в сторону прямых запросов
1sqlite или 1spp те в руки ...вот как-раз и спец в этом деле (5) подтянулся :)
7 Palll
 
17.03.15
19:06
(5) У контрагента для одного вида свойства только одно значение. Изначально была необходимость группировать реализации по регионам. Я пытался получить эту информацию из дерева контрагентов, но конструкция Родитель.Родитель в запросе не срабатывала. Потом решил взять эту информацию из подчиненного контрагентам справочника свойств. И на этом застрял.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.