|
Почему требуется снова объявлять параметр? | ☑ | ||
---|---|---|---|---|
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) Лично тебе надо делать немного по-другому...
Сходить в отдел кадров и попросить у них чистый листок бумаги и ручку... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |