Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 21:40

Индекс находится за границами массива

Автор Александр Ездаков, 19 ноя 2015, 17:53

0 Пользователей и 1 гость просматривают эту тему.

Александр Ездаков

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

&НаКлиенте
Процедура расчет(Команда)
ТекущаяДата = Объект.Дата;
//Объект.Движения.Зарплата
ТекущийМесяц = Месяц(ТекущаяДата);
//Сообщить(ТекущийМесяц);
//ЗП = СпрЗарплата.ПродажДо;

//Сообщить(ЗП);
ЗП = 10;
Сообщить(ЗП);
ЗП = Элементы.Зарплата.ТекущиеДанные;
Парам = расчетНаСервере(ЗП.Сотрудник);

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

И есть ошибка:
{Документ.СведенияОЗарплате.Форма.ФормаДокумента.Форма(13)}: Индекс находится за границами массива
Результат = Запрос.Выполнить().Выгрузить()[0];

Есть предположения? Версия 8.3: ссыль на конфиг

Kironten

Цитата: Александр Ездаков от 19 ноя 2015, 17:53
Есть код:
&НаСервереБезКонтекста
Функция расчетНаСервере(Сотрудник)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|ПродажиОбороты.ПроданоОборот
|ИЗ
| РегистрНакопления.Продажи.Обороты(, , Месяц, ) КАК ПродажиОбороты
|ГДЕ
| ПродажиОбороты.Сотрудник.Наименование = &Сотрудник";
Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
Результат = Запрос.Выполнить().Выгрузить()[0];
//ВыборкаДетальныеЗаписи = Результат.Выбрать();
//ВашеЗначение = Запрос.Выполнить().Выгрузить()[0];
Сообщить(Результат);
КонецФункции

&НаКлиенте
Процедура расчет(Команда)
ТекущаяДата = Объект.Дата;
//Объект.Движения.Зарплата
ТекущийМесяц = Месяц(ТекущаяДата);
//Сообщить(ТекущийМесяц);
//ЗП = СпрЗарплата.ПродажДо;

//Сообщить(ЗП);
ЗП = 10;
Сообщить(ЗП);
ЗП = Элементы.Зарплата.ТекущиеДанные;
Парам = расчетНаСервере(ЗП.Сотрудник);

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

И есть ошибка:
{Документ.СведенияОЗарплате.Форма.ФормаДокумента.Форма(13)}: Индекс находится за границами массива
Результат = Запрос.Выполнить().Выгрузить()[0];

Есть предположения? Версия 8.3: ссыль на конфиг

Есть не предположение, а уверенность, что вы не умеете работать с запросами.
И тут надо не подсказывать, а учить.
Но увы, боюсь вас мой ответ не устроит.

Александр Ездаков

Цитата: Kironten от 19 ноя 2015, 18:14
Есть не предположение, а уверенность, что вы не умеете работать с запросами.
И тут надо не подсказывать, а учить.
Но увы, боюсь вас мой ответ не устроит.
Логично предположить, раз я задаю здесь вопрос про запросы, то я их и не знаю. И я как раз их сейчас учу, но что-то как видите не учится. Так я уже разобрался, что у меня запрос пустой и я его чутка переписал:
Запрос.Текст =
"ВЫБРАТЬ
| ПродажиОбороты.ПроданоОборот
| ИЗ
| РегистрНакопления.Продажи.Обороты(, , Месяц, ) КАК ПродажиОбороты
| ГДЕ
| ПродажиОбороты.Сотрудник = &Сотрудник";

Теперь у меня Запрос.Выполнить().Выгрузить()Количество() возвращает не ноль. Но легче не стало получить значения я так и не могу. Я одного не понимаю, не ужели нет ни какой консоли, чтобы увидеть результат запроса?

vitasw

ТЗРезультат = Запрос.Выполнить().Выгрузить();
СтрокаТЗ=ТЗРезультат[0];
Сообщить(СтрокаТЗ) - не очень понятно что вы тут пытаетесь таким образом увидеть. Тем более, что строка ТХ с сервера на клиент не передается.

Александр Ездаков

Цитата: vitasw от 19 ноя 2015, 19:08
ТЗРезультат = Запрос.Выполнить().Выгрузить();
СтрокаТЗ=ТЗРезультат[0];
Сообщить(СтрокаТЗ) - не очень понятно что вы тут пытаетесь таким образом увидеть. Тем более, что строка ТХ с сервера на клиент не передается.
И в итоге я вернулся к тому с чего начал. Сообщить мне выводит "СтрокаТаблицыЗначений", когда мне требуется получить содержимое этой строки. Я это делаю, чтобы полученное значение я мог в дальнейшем обработать в другой процедуре/функции. А использую сообщить в качестве проверки, как я прост других способов не знаю. Про отладку с точками останова можно не рассказывать, так как и их использую тоже.
Я нашёл обработку с консолью запросов:
Цитата: Kironten от 19 ноя 2015, 18:14
А Вам,Kironten, "спасибо" хочу сказать, из ваших слов я посчитал, что запрос у меня не верный, что мне добавило ещё один круг страданий, но благо я нашёл консоль запросов и убедился в правильности моего запроса.

Kironten

Цитата: Александр Ездаков от 19 ноя 2015, 19:47
А Вам,Kironten, "спасибо" хочу сказать, из ваших слов я посчитал, что запрос у меня не верный, что мне добавило ещё один круг страданий, но благо я нашёл консоль запросов и убедился в правильности моего запроса.

Т.е. вы искренне верите, что это:

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

и это:
Результат = Запрос.Выполнить().Выгрузить()[0];
Это нормальная работа с запросами?

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


тоже считается правильным? О.о
Ну, за ради Бога. Сколько людей, столько мнений.

Александр Ездаков

Цитата: Kironten от 19 ноя 2015, 20:48Т.е. вы искренне верите, что это:
Первый код Вы выдернули из предыдущей моей темы, я полностью соглашусь что он нисколечки не правильный, ниразу, даже под дулом пистолета.
Цитата: Kironten от 19 ноя 2015, 20:48Это нормальная работа с запросами?
Я вообще не имею никакого понятия как после выполнения запроса с ним работать. Поэтому я в новой теме уже прошу помощи именно с этим, так как понял, что глобальные проблемы тут не решаются. Было простое желание хотя бы получить пинка в сторону, где я могу найти ответ.
Цитата: Kironten от 19 ноя 2015, 20:48А в конце концов, ваш "правильный" запрос, за ВСЕ периоды:
Не знаю чем Вас не утроил последний запрос, может другим видением решения данной задачи, но то, что данный запрос в консоли запросов выдаёт нужный мне и ожидаемым мной ответ говорит лишь о том, что я полный идиот. Получается так.
Из ваших слов я понял, что зря зарегистрировался и задал здесь вопрос. Но при всём при этом не понял как учиться и не задавать при этом вопросы.



Kironten

Цитата: Александр Ездаков от 19 ноя 2015, 21:19
Цитата: Kironten от 19 ноя 2015, 20:48Т.е. вы искренне верите, что это:
Первый код Вы выдернули из предыдущей моей темы, я полностью соглашусь что он нисколечки не правильный, ниразу, даже под дулом пистолета.
Цитата: Kironten от 19 ноя 2015, 20:48Это нормальная работа с запросами?
Я вообще не имею никакого понятия как после выполнения запроса с ним работать. Поэтому я в новой теме уже прошу помощи именно с этим, так как понял, что глобальные проблемы тут не решаются. Было простое желание хотя бы получить пинка в сторону, где я могу найти ответ.
Все это и указывало на то, что я и ответил вам в первом посте. Выдернут, не выдернут - называйте как хотите, это ваши сегодняшние посты. Все это свидетельствует, о том, что как бы это грубо не звучало, но вы не очень хорошо представляете, как вообще работают запросы. Этому надо учиться, как вы правильно заметили. Для этого есть книги (в первую очередь Радченко), видео тоже очень много (тот же Чистов, в свободном доступе). С моей точки зрения, лучше было бы сначала подучить азы, а потом спрашивать, где тут ошибка? А у вас получилось, что вы фактически все написали некорректно. сложнее было найти, что там написано правильно.

Цитата: Александр Ездаков от 19 ноя 2015, 21:19
Цитата: Kironten от 19 ноя 2015, 20:48А в конце концов, ваш "правильный" запрос, за ВСЕ периоды:
Не знаю чем Вас не утроил последний запрос, может другим видением решения данной задачи, но то, что данный запрос в консоли запросов выдаёт нужный мне и ожидаемым мной ответ говорит лишь о том, что я полный идиот. Получается так.
Из ваших слов я понял, что зря зарегистрировался и задал здесь вопрос. Но при всём при этом не понял как учиться и не задавать при этом вопросы.
Последний ваш запрос написан как минимум без параметров времени. Т.е. вы получаете продажи сотрудника за все время существования базы. Зачем спрашивается нужны продажи января 2014 года для расчета премии/зарплаты октября 2015 года?

Ну да ладно. Это все полемика. На самом деле здесь все белые и пушистые.
П.С.
Точка зрения автора может не совпадать с мнением редакции (с)

Александр Ездаков

Цитата: Kironten от 19 ноя 2015, 21:35Все это и указывало на то, что я и ответил вам в первом посте. Выдернут, не выдернут - называйте как хотите, это ваши сегодняшние посты. Все это свидетельствует, о том, что как бы это грубо не звучало, но вы не очень хорошо представляете, как вообще работают запросы. Этому надо учиться, как вы правильно заметили. Для этого есть книги (в первую очередь Радченко), видео тоже очень много (тот же Чистов, в свободном доступе). С моей точки зрения, лучше было бы сначала подучить азы, а потом спрашивать, где тут ошибка? А у вас получилось, что вы фактически все написали некорректно. сложнее было найти, что там написано правильно.
Вот тут действительно спасибо, без сарказма. Радченко у меня скачан, но объём очень внушительный, поэтому, чтобы в этой книге найти что-то конкретное уходит ну очень большое кол-во времени. Про Чистова не знал, сейчас качаю. Про весь синтаксис языка в 1с скажу, что я его не понимаю, он мне напоминает C# Я много раз пытался учить его, перелопатил кучу книг, толку было ноль, а вот когда взялся решить конкретную задачу, так дело сразу сдвинулось с мёртвой точки. Так и с 1с. Уперся в эти запросы и ни туда и ни сюда.
Цитата: Kironten от 19 ноя 2015, 21:35Последний ваш запрос написан как минимум без параметров времени.
А мне пока оно и не надо. Мне бы разобраться как просто получить число, которое этот запрос выдаёт, в виде переменной, чтобы её дальше использовать. Вот как я с этим разберусь, то я вернусь опять к времени, так как Вы правильно заметили мне не нужны продажи за всё время, а мне нужны всего за один месяц. Если слон большой, зачем пытаться его съесть целиком, когда можно по частям?

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск