Имя: Пароль:
1C
 
Почему требуется снова объявлять параметр?
0 pro3ri
 
07.11.15
19:02
ДОбрый вечер!
Процедура РассчитатьНачисления(Отказ)

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ОсновныеНачисленияДанныеГрафика.НомерСтроки,
        |    ОсновныеНачисленияДанныеГрафика.ЗначениеПериодДействия КАК План,
        |    ОсновныеНачисленияДанныеГрафика.ЗначениеФактическийПериодДействия КАК Факт,
        |    ОсновныеНачисленияДанныеГрафика.ВидРасчета.СпособРасчета КАК Способ
        |ИЗ
        |    РегистрРасчета.ОсновныеНачисления.ДанныеГрафика(
        |            Регистратор = &Ссылка
        |                И ВидРасчета.СпособРасчета В (&Способ)
        |                И ВидРасчета.КатегорияРасчета = 0) КАК ОсновныеНачисленияДанныеГрафика";
    
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Способы = Новый Массив;
    Способы.Добавить(Перечисления.СпособРасчета.ПоОтработанномуВремени);
    Способы.Добавить(Перечисления.СпособРасчета.ВынужденныйПростой);
    Способы.Добавить(Перечисления.СпособРасчета.УдержаниеЗаДеньНевыхода);
    Запрос.УстановитьПараметр("Способ", Способы);
    
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    СтруктураПоиска = Новый Структура("НомерСтроки");
    Набор = Движения.ОсновныеНачисления;
    Тариф = Перечисления.СпособРасчета.ПоОтработанномуВремени;
    Простой = Перечисления.СпособРасчета.ВынужденныйПростой;
    Невыход = Перечисления.СпособРасчета.УдержаниеЗаДеньНевыхода;
    
    Для каждого Запись Из Набор Цикл
        
        СтруктураПоиска.НомерСтроки = Запись.НомерСтроки;
        Выборка.Сбросить();
        Если Выборка.НайтиСледующий(СтруктураПоиска) Тогда
            
            Если Выборка.Способ = Тариф Или Выборка.Способ = Простой Тогда
                
                Если Выборка.План = 0 Тогда
                    Сообщение = Новый СообщениеПользователю;
                    Сообщение.Текст = "Нет данных графика";
                    Сообщение.Сообщить();    
                    Отказ = Истина;
                Иначе
                    Запись.Результат = Выборка.Факт * Запись.Размер/Выборка.План * ?(Запись.Сторно,-1,1) *
                        ?(Выборка.Способ = Простой,2/3, 1);    
                КонецЕсли;
                
            ИначеЕсли Выборка.Способ = Невыход Тогда
            
                Запись.Результат = -Выборка.Факт/8 * Запись.Размер * ?(Запись.Сторно,-1,1);
            КонецЕсли;
        //Иначе
        //    Сообщение = Новый СообщениеПользователю;
        //    Сообщение.Текст = "Неизвестный вид расчета " + Запись.ВидРасчета;
        //    Сообщение.Сообщить();
        //Отказ = Истина;
        
            
        КонецЕсли;
            
    КонецЦикла;
    //Набор.Записать(,Истина);
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ОсновныеНачисленияБазаОсновныеНачисления.НомерСтроки,
        |    ОсновныеНачисленияБазаОсновныеНачисления.ВидРасчета.СпособРасчета КАК Способ,
        |    ОсновныеНачисленияБазаОсновныеНачисления.РезультатБаза КАК База
        |ИЗ
        |    РегистрРасчета.ОсновныеНачисления.БазаОсновныеНачисления(
        |            &Измерения,
        |            &Измерения,
        |            ,
        |            Регистратор = &Ссылка
        |                И ВидРасчета.КатегорияРасчета = 1
        |                И ВидРасчета.СпособРасчета В (&Способы)) КАК ОсновныеНачисленияБазаОсновныеНачисления";
    
    
    Способы = Новый Массив;
    Способы.Добавить(Перечисления.СпособРасчета.Процентом);
    Запрос.УстановитьПараметр("Способ", Способы);
    
    Измерения = Новый Массив;
    Измерения.Добавить("Сотрудник");
    Измерения.Добавить("Подразделение");
    
    Запрос.УстановитьПараметр("Измерения", Измерения);
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    Процентом = Перечисления.СпособРасчета.Процентом;
    
    Для каждого Запись Из Набор Цикл
        
        СтруктураПоиска.НомерСтроки = Запись.НомерСтроки;
        Выборка.Сбросить();
        Если Выборка.НайтиСледующий(СтруктураПоиска) Тогда
            
            Если Выборка.Способ = Процентом Тогда
                
                Запись.Результат = Выборка.База * Запись.Размер/100 * ?(Запись.Сторно,-1,1);
                
            КонецЕсли;
        //Иначе
        //    Сообщение = Новый СообщениеПользователю;
        //    Сообщение.Текст = "Неизвестный вид расчета " + Запись.ВидРасчета;
        //    Сообщение.Сообщить();
        //Отказ = Истина;
        
            
        КонецЕсли;
            
    КонецЦикла;
    
    Набор.Записать(,Истина);

КонецПроцедуры

На втором цикле вываливается ошибка - нет параметра ссылка, но я же ее определил в 1 запросе... Это новое поведение системы? 1с 8.3.6
1 pro3ri
 
07.11.15
19:04
+ поправка, на 2 запросе
2 Горогуля
 
07.11.15
19:16
это старое поведение системы. параметры требуется указывать
3 Горогуля
 
07.11.15
19:17
а второй запрос даже не родственник первому
4 GROOVY
 
07.11.15
19:18
Так ты же переменную "запрос" убил и заново создал.
5 pro3ri
 
07.11.15
19:28
пожоду надо так делать:

Процедура РассчитатьНачисления(Отказ)

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ОсновныеНачисленияДанныеГрафика.НомерСтроки,
        |    ОсновныеНачисленияДанныеГрафика.ЗначениеПериодДействия КАК План,
        |    ОсновныеНачисленияДанныеГрафика.ЗначениеФактическийПериодДействия КАК Факт,
        |    ОсновныеНачисленияДанныеГрафика.ВидРасчета.СпособРасчета КАК Способ
        |ИЗ
        |    РегистрРасчета.ОсновныеНачисления.ДанныеГрафика(
        |            Регистратор = &Ссылка
        |                И ВидРасчета.СпособРасчета В (&Способ)
        |                И ВидРасчета.КатегорияРасчета = 0) КАК ОсновныеНачисленияДанныеГрафика";
    
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Способы = Новый Массив;
    Способы.Добавить(Перечисления.СпособРасчета.ПоОтработанномуВремени);
    Способы.Добавить(Перечисления.СпособРасчета.ВынужденныйПростой);
    Способы.Добавить(Перечисления.СпособРасчета.УдержаниеЗаДеньНевыхода);
    Запрос.УстановитьПараметр("Способ", Способы);
    
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    СтруктураПоиска = Новый Структура("НомерСтроки");
    Набор = Движения.ОсновныеНачисления;
    Тариф = Перечисления.СпособРасчета.ПоОтработанномуВремени;
    Простой = Перечисления.СпособРасчета.ВынужденныйПростой;
    Невыход = Перечисления.СпособРасчета.УдержаниеЗаДеньНевыхода;
    
    Для каждого Запись Из Набор Цикл
        
        СтруктураПоиска.НомерСтроки = Запись.НомерСтроки;
        Выборка.Сбросить();
        Если Выборка.НайтиСледующий(СтруктураПоиска) Тогда
            
            Если Выборка.Способ = Тариф Или Выборка.Способ = Простой Тогда
                
                Если Выборка.План = 0 Тогда
                    Сообщение = Новый СообщениеПользователю;
                    Сообщение.Текст = "Нет данных графика";
                    Сообщение.Сообщить();    
                    Отказ = Истина;
                Иначе
                    Запись.Результат = Выборка.Факт * Запись.Размер/Выборка.План * ?(Запись.Сторно,-1,1) *
                        ?(Выборка.Способ = Простой,2/3, 1);    
                КонецЕсли;
                
            ИначеЕсли Выборка.Способ = Невыход Тогда
            
                Запись.Результат = -Выборка.Факт/8 * Запись.Размер * ?(Запись.Сторно,-1,1);
            КонецЕсли;
        //Иначе

        //    Сообщение = Новый СообщениеПользователю;

        //    Сообщение.Текст = "Неизвестный вид расчета " + Запись.ВидРасчета;

        //    Сообщение.Сообщить();

        //Отказ = Истина;

        
            
        КонецЕсли;
            
    КонецЦикла;
    //Набор.Записать(,Истина);

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

        //    Сообщение = Новый СообщениеПользователю;

        //    Сообщение.Текст = "Неизвестный вид расчета " + Запись.ВидРасчета;

        //    Сообщение.Сообщить();

        //Отказ = Истина;

        
            
        КонецЕсли;
            
    КонецЦикла;
    
    Набор.Записать(,Истина);

КонецПроцедуры

разобрался спасибо!
6 ДенисЧ
 
07.11.15
20:15
(5) Лично тебе надо делать немного по-другому...
Сходить в отдел кадров и попросить у них чистый листок бумаги и ручку...