Имя: Пароль:
1C
1С v8
Помогите разобраться с разрезами.
0 breezee
 
01.10.16
22:14
Добрый день! У меня есть код, взятый из решения задачи по спецу(код ниже), как я понял, разрез в коде служит чтобы отобрать все записи в запросе, кроме текущей. Мне не понятно, почему стоит условие на то что "ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ДополнительныеНачисления.Премия", хотя получается оклад. Объясните, пожалуйста. Так же попробовал на прямую указать что сотрудник - не сотрудник из табличной части. Получилась другая сумма при тетсировании(мой запрос еще ниже). Подскажите, почему не сработало?  
// ++КОД РЕШЕНИЯ
Измерения = Новый Массив;
    Измерения.Добавить("Подразделение");
    
    Разрез = Новый Массив;
    Разрез.Добавить("Сотрудник");
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ДНБазаОН.НомерСтроки КАК НомерСтроки,
        |    ДНБазаОН.РезультатБаза КАК РезультатБаза,
        |    ДНБазаОН.Размер КАК Размер,
        |    ДНБазаОН.Сотрудник,
        |    ДНБазаОН.Подразделение
        |ИЗ
        |    РегистрРасчета.ДН.БазаОН(
        |            &Измерения,
        |            &Измерения,
        |            &Разрез,
        |            Регистратор = &Ссылка
        |                И ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ДополнительныеНачисления.Премия)) КАК ДНБазаОН
        |ГДЕ
        |    ДНБазаОН.СотрудникРазрез <> ДНБазаОН.Сотрудник
        |ИТОГИ
        |    СУММА(РезультатБаза),
        |    СРЕДНЕЕ(Размер)
        |ПО
        |    НомерСтроки";
    
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.УстановитьПараметр("Измерения", Измерения);
    Запрос.УстановитьПараметр("Разрез", Разрез);
    
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    Для каждого Запись Из Движения.ДН Цикл
      СП.НомерСтроки = Запись.НомерСтроки;
      Пока Выборка.НайтиСледующий(СП) Цикл
          
          Запись.Результат = Выборка.РезультатБаза*Выборка.Размер/100;
          
      КонецЦикла;
    Выборка.Сбросить()
    КонецЦикла;
    
    Движения.ДН.Записать(,Истина);
// --КОД РЕШЕНИЯ

// ++Мой запрос
ВЫБРАТЬ
    ДНБазаОН.НомерСтроки КАК НомерСтроки,
    ДНБазаОН.РезультатБаза КАК РезультатБаза,
    ДНБазаОН.Размер КАК Размер,
    ДНБазаОН.Сотрудник,
    ДНБазаОН.Подразделение
ИЗ
    РегистрРасчета.ДН.БазаОН(
            &Измерения,
            &Измерения,
            &Разрез,
            Регистратор = &Ссылка
                И ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ДополнительныеНачисления.Премия)
                И НЕ Сотрудник В
                        (ВЫБРАТЬ
                            НачислениеЗарплатыДополнительныеНачисления.Ссылка
                        ИЗ
                            Документ.НачислениеЗарплаты.ДополнительныеНачисления КАК НачислениеЗарплатыДополнительныеНачисления
                        ГДЕ
                            НачислениеЗарплатыДополнительныеНачисления.Ссылка = &Ссылка)) КАК ДНБазаОН
ИТОГИ
    СУММА(РезультатБаза),
    СРЕДНЕЕ(Размер)
ПО
    НомерСтроки
// --Мой запрос
1 Boleev
 
01.10.16
22:29
Ничего не понятно, но спроси тут
http://forum.chistov.pro/index.php?board=16.0
2 breezee
 
01.10.16
22:32
(1) Хорошо, спасибо
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший