Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Выборка значений реквизитов из документов в 1С:Предприятии 8.2
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
mabuta009
Добрый день!

У меня возникла такая проблема:

Нужно выбрать из документа НачислениеОтпускаРаботникамОрганизаций значение реквизита ДниОтпуска и вывести их в табличный документс группировкой по сотрудникам организации.

При использовании Схемы компоновки данных у меня вышел такой вот запрос, который работает:

ВЫБРАТЬ
    НачислениеОтпускаРаботникамОрганизаций.Начисления.(
        Сотрудник,
        СУММА(ОплаченоДнейЧасов)
    )
ИЗ
    Документ.НачислениеОтпускаРаботникамОрганизаций КАК НачислениеОтпускаРаботникамОрганизаций
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
        ПО НачислениеОтпускаРаботникамОрганизаций.Сотрудник = СотрудникиОрганизаций.Ссылка

СГРУППИРОВАТЬ ПО
    НачислениеОтпускаРаботникамОрганизаций.Начисления.(Сотрудник)


И его внешняя форма
[ночью лучше спать, чем читать какие-то глупые правила...]

Но мне не устаивает использование Схемы компоновки данных, то есть мне надо иметь возможность еще работать с полученными из запроса параметрами.
Поэтому отчет я делаю программно, но в этом варианте ничего не выводиться на екран:

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


Помогите плиз
Или бросьте ссылку где можно посмотреть на примеры построения сложных запросов из документов.
Заранее благодарен.
MATEVI
ТабДок = ЭлементыФормы.ДокументРезультат;
ТабДок.Очистить();
Макет = ЭтотОбъект.ПолучитьМакет("Макет");
//............
ОбластьМакета = Макет.ПолучитьОбласть("СтрокаСчет");
ОбластьМакета.Параметры.Заполнить(ВыборкаПоСчету);
ТабДок.Вывести(ОбластьМакета);
mabuta009
так тоже не работает, я так пробовал, поэтому перешел и на указывание конкретных параметров
logist
А у Вас там в Результате выборки вообще что-то есть?
mabuta009
Спасибо за помощь
Разобрался
Вот как должно быть
Запрос.Текст = "ВЫБРАТЬ 
    |    НачислениеОтпускаРаботникамОрганизаций.Сотрудник КАК Сотрудник,
    |    СУММА(НачислениеОтпускаРаботникамОрганизаций.ОплаченоДнейЧасов) КАК РезервОтпуска
        |ИЗ
    |    Документ.НачислениеОтпускаРаботникамОрганизаций.Начисления КАК НачислениеОтпускаРаботникамОрганизаций
    |ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
    |    ПО НачислениеОтпускаРаботникамОрганизаций.Сотрудник = СотрудникиОрганизаций.Ссылка
    |
    |СГРУППИРОВАТЬ ПО
    |НачислениеОтпускаРаботникамОрганизаций.Сотрудник
    |УПОРЯДОЧИТЬ ПО
    |Сотрудник";


И еще вопросик

Как можно сделать выборку сразу из двух документов одновременно, то есть

ИЗ Документа1 и Документа2

(То есть как это представить синтаксически)
logist
        |ИЗ
    |    Документ.НачислениеОтпускаРаботникамОрганизаций.Начисления КАК НачислениеОтпускаРаботникамОрганизаций,
    |    Документ.БлаБлабла КАК Блаблабла
mabuta009
если так, то он портит первую выборку, то есть превращает с нормальной выборки черт знает что, так что так не работает я уже пробовал
logist
faceoff.gif
все нормально работает, если правильно описать поля выборки
kivals
Точнее если описать связи между выборками
"Какой вопрос - такой ответ"
Logist написал вариант выбора из двух независимых таблиц - в итоге получем декартово произвеение 2х таблиц:

A:
a1 a2
1  11
2  22

B:
b1 b2
1  33
2  44

select * from A,B:
a1 a2 b1 b2
1  11 1  33
2  22 1  33
1  11 2  44
2  22 2  44


Т.е. для каждой строки из A выбираются все строки из B и в итоговой таблице общее количество строк будет: КвоАВ=КвоА*КвоВ

Чтобы получить выборку, связанную по определенным полям нужно использовать СОЕДИНЕНИЕ, например ЛЕВОЕ СОЕДИНЕНИЕ (LEFT JOIN):
select * from A left join B on A.a1=B.b1:
a1 a2 b1 b2
1  11 1  33
2  22 2  44
mabuta009
Добрый день еще раз.

У меня есть маленький вопросик, возможно ли вывести эти два запроса (выборки) (по отдельности все работает):

Первый запрос(выборка) (основная):

    Запрос.Текст = "ВЫБРАТЬ 
    |    НачислениеОтпускаРаботникамОрганизаций.Сотрудник КАК Сотрудник,
    |    СУММА(НачислениеОтпускаРаботникамОрганизаций.ОплаченоДнейЧасов) КАК РезервОтпуска,
    |   СотрудникиОрганизаций.Резерв2010 КАК Резерв2010
    |ИЗ
    |    Документ.НачислениеОтпускаРаботникамОрганизаций.Начисления КАК НачислениеОтпускаРаботникамОрганизаций    
    |    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
    |    ПО НачислениеОтпускаРаботникамОрганизаций.Сотрудник = СотрудникиОрганизаций.Ссылка
    |     ГДЕ
    |    НачислениеОтпускаРаботникамОрганизаций.Ссылка.Дата Между &ДатаНач и &ДатаКон    
    |
    |СГРУППИРОВАТЬ ПО
    |НачислениеОтпускаРаботникамОрганизаций.Сотрудник,
    |СотрудникиОрганизаций.Резерв2010
    |УПОРЯДОЧИТЬ ПО
    |НачислениеОтпускаРаботникамОрганизаций.Сотрудник ВОЗР
    |АВТОУПОРЯДОЧИВАНИЕ";


И вторая выборка:

    ТекстЗапроса_Сотрудник = "ВЫБРАТЬ 
    |    Начисления.Сотрудник КАК СотрудникиНач,
    |       СУММА(Начисления.Результат) КАК РезультатСреднего
        |    
    |ИЗ
    |     РегистрРасчета.Начисления КАК Начисления
    |
    |СГРУППИРОВАТЬ ПО
    |Начисления.Сотрудник";


Или выполнить их одновременно через левое соединение?

Пытался в конструкторе, но ничего не вышло.

Заранее спасибо за помощь.

То есть не могу понять как синхронизировать эти два запроса по Сотрудникам, так как таблица одна и список сотрудников тянеться с первой выборки.
sava1
Запрос.Текст = "ВЫБРАТЬ 
    |    НачислениеОтпускаРаботникамОрганизаций.Сотрудник КАК Сотрудник,
    |    СУММА(НачислениеОтпускаРаботникамОрганизаций.ОплаченоДнейЧасов) КАК РезервОтпуска,
    |   СотрудникиОрганизаций.Резерв2010 КАК Резерв2010
    |ИЗ
    |    Документ.НачислениеОтпускаРаботникамОрганизаций.Начисления КАК НачислениеОтпускаРаботникамОрганизаций    
    |    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
    |    ПО НачислениеОтпускаРаботникамОрганизаций.Сотрудник = СотрудникиОрганизаций.Ссылка

         ЛевоеСоединение (ВЫБРАТЬ
    |    Начисления.Сотрудник КАК СотрудникиНач,
    |       СУММА(Начисления.Результат) КАК РезультатСреднего
    |    
       |ИЗ  
    |     РегистрРасчета.Начисления КАК Начисления
    |
    |СГРУППИРОВАТЬ ПО
    |Начисления.Сотрудник) как ААА
|   ПО  ААА.СотрудникиНач = СотрудникиОрганизаций.Ссылка


ОтформатируйТЕ самИ. Да и Сотрудника в выборке брать из справочника (коль привязали)
kivals
Предупреждение:
Если в документе НачислениеОтпускаРаботникамОрганизаций будет больше чем 1 строка по какому-либо Сотруднику (например - по разным периодам) результат запроса будет отличаться от ожидаемого - РезультатСреднего будет одинаков по все строкам с одним сотрудником
mabuta009
Всем спасибо за помощь.

Я все таки поборол этот запрос, вот он кому интересно:

Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ
|    НачислениеОтпускаРаботникамОрганизаций.Сотрудник КАК Сотрудник,
|    СУММА(НачислениеОтпускаРаботникамОрганизаций.ОплаченоДнейЧасов) КАК РезервОтпуска,
|    СотрудникиОрганизаций.Резерв2010 КАК Резерв2010
|ПОМЕСТИТЬ ОсновнаяВыборка
|ИЗ
|    Документ.НачислениеОтпускаРаботникамОрганизаций.Начисления КАК НачислениеОтпускаРаботникамОрганизаций
|    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
|    ПО НачислениеОтпускаРаботникамОрганизаций.Сотрудник = СотрудникиОрганизаций.Ссылка
|ГДЕ
|    НачислениеОтпускаРаботникамОрганизаций.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон
|
|СГРУППИРОВАТЬ ПО
|    НачислениеОтпускаРаботникамОрганизаций.Сотрудник,
|    СотрудникиОрганизаций.Резерв2010
|;
|
|////////////////////////////////////////////////////////////////////////////////

|ВЫБРАТЬ
|    Начисления.Сотрудник КАК СотрудникиНач,
|    СУММА(Начисления.Результат) КАК РезультатСреднего
|ПОМЕСТИТЬ НачисленияРезультат
|ИЗ
|    РегистрРасчета.Начисления КАК Начисления
|ГДЕ
|    Начисления.ПериодРегистрации МЕЖДУ ДОБАВИТЬКДАТЕ(&ДатаКон, МЕСЯЦ, -12) И &ДатаКон
|
|СГРУППИРОВАТЬ ПО
|    Начисления.Сотрудник
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    ОсновнаяВыборка.Сотрудник КАК Сотрудник,
|    ОсновнаяВыборка.РезервОтпуска - ОсновнаяВыборка.Резерв2010 КАК РезервРазница,
|    ЕСТЬNULL(НачисленияРезультат.РезультатСреднего, 0) КАК РезультатСреднего
|ИЗ
|    ОсновнаяВыборка КАК ОсновнаяВыборка
|        ЛЕВОЕ СОЕДИНЕНИЕ НачисленияРезультат КАК НачисленияРезультат
|        ПО ОсновнаяВыборка.Сотрудник = НачисленияРезультат.СотрудникиНач
|
|УПОРЯДОЧИТЬ ПО
|    Сотрудник
|АВТОУПОРЯДОЧИВАНИЕ";
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.