Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: В запросе "Ошибка чтения значения"  (Прочитано 6142 раз)
0 Пользователей и 1 Гость смотрят эту тему.
yyyuuu123
Новенький

ru
Offline Offline

« : 17-07-2018 15:15 » 

Здравствуйте, занимаюсь по книге Радченко и Хрусталева. Обычно читаю задание не смотрю, и пишу сам запрос по условию. Тут сделал так. Ошибка! Посмотрел внимательно, сделал все как по учебнику, все ровно ошибка. Помогите пожалуйста разобраться
Код:

Процедура РасчитатьНачисления(НаборЗаписейРегистра, ТребуемыйВидРасчета, СписокСотрудников) Экспорт

Регистратор = НаборЗаписейРегистра.Отбор.Регистратор.Значение;

//Расчитать первычный записи
Если ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад Тогда

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НачисленияДанныеГрафика.ЗначениеПериодДействия КАК Норма,
| НачисленияДанныеГрафика.ЗначениеФактическийПериодДействия КАК Факт,
| НачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки
|ИЗ
| РегистрРасчета.Начисления.ДанныеГрафика(Регистратор = &Регистратор И
| ВидРасчета = &ВидРасчета И Сотрудник В (&СписокСотрудников))
| КАК НачисленияДанныеГрафика";

Запрос.УстановитьПараметр("Регистратор", Регистратор);
Запрос.УстановитьПараметр("ВидРасчета", ТребуемыйВидРасчета);
Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников);
Результат = Запрос.Выполнить();
ВыборкаРезультата = Результат.Выбрать();

Для Каждого ЗаписьРегистра ИЗ НаборЗаписейРегистра Цикл
СтруктураНомер = Новый Структура("НомерСтроки");
СтруктураНомер.НомерСтроки = ЗаписьРегистра.НомерСтроки;
ВыборкаРезультата.Сбросить();

Если ВыборкаРезультата.НайтиСледующий(СтруктураНомер) Тогда
Если ВыборкаРезультата.Норма = 0 Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Вид расчета : Оклад - Нет рабочих дней в периоде";
Сообщение.Сообщить();
ЗаписьРегистра.Результат = 0;
Иначе  
//Расчитать оклад по фактическому периоду и исходным данным
ЗаписьРегистра.Результат = (ЗаписьРегистра.ИсходныеДанныеВыборкаРезультата.Норма) * ВыборкаРезультата.Факт;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Выполнен расчет" = ЗаписьРегистра.Регистратор + "-" + ЗаписьРегистра.ВидРасчтеа + "-" +
ЗаписьРегистра.Сотрудник;
Сообщение.Сообщить();
КонецЕсли;
КонецЕсли;
КонецЦикла;
ИначеЕсли ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Премия Тогда

Запрос1 = Новый Запрос;
Запрос1.Текст =
  "ВЫБРАТЬ
  | НачисленияБазаНачисления.РезультатБаза,
  | НачисленияБазаНачисления.НомерСтроки КАК НомерСтроки
  |ИЗ
  | РегистрРасчета.Начисления.БазаНачисления(
  | &ИзмеренияОсновного,
  | &ИзмеренияБазового,
  | ,
  | Регистратор = &Регистратор
  | И ВидРасчета = &ВидРасчета
  | И Сотрудник В (&СписокСотрудников)) КАК НачисленияБазаНачисления";
Измер = Новый Массив(1);
Измер[0] = "Сотрудник";

Запрос.УстановитьПараметр("ИзмеренияОсновного", Измер);
Запрос.УстановитьПараметр("ИзмеренияБазового", Измер);
Запрос.УстановитьПараметр("Регистратор", Регистратор);
Запрос.УстановитьПараметр("ВидРасчета", ТребуемыйВидРасчета);
Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников);

ВыборкаРезультата = Запрос1.Выполнить().Выбрать();

Для Каждого ЗаписьРегистра ИЗ НаборЗаписейРегистра Цикл

СтруктураНомер = Новый Структура("НомерСтроки");
СтруктураНомер.НомерСтроки = ЗаписьРегистра.НомерСтроки;
ВыборкаРезультата.Сбросить();

Если ВыборкаРезультата.НайтиСледующий(СтруктураНомер) Тогда
ЗаписьРегистра.Результат = ВыборкаРезультата.База * (10/100);
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Выполнить расчет" + ЗаписьРегистра.Регистратор +
" - " + ЗаписьРегистра.ВидРасчета + "-" + ЗаписьРегистра.Сотрудник;
Сообщение.Сообщить();
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры

Код:
Если ВыборкаРезультата.НайтиСледующий(СтруктураНомер) Тогда
- Тут всегда ложь, в первом запросе!
Код: (1C v8)
[code=e1cv8][code=e1cv8]
[/code][/code]
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines