Имя: Пароль:
1C
1С v8
Индекс находится за границами масива
0 andriylord
 
15.05.12
15:49
Зраствуйте.
У меня есть кнопка в обработке. В модуль с таким кодом:
&НаКлиенте
Процедура Команда1(Команда)
   ОбъектыНазначения = Новый Структура;
   ОбъектыНазначения.Вставить("ТабличныйДокумент", Результат);
   
   ПараметрыИсточника = Новый Структура;
   ПараметрыИсточника.Вставить("ИдентификаторКоманды", "АнализСебестоимостиТоваровПоПоставщикам");
   ПараметрыИсточника.Вставить("БезопасныйРежим", Ложь);
   ПараметрыИсточника.Вставить("ОбъектыНазначения", ОбъектыНазначения);
   ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", Новый Структура("ИсточникДанных, ПараметрыИсточника", ПолучитьСсылкуОбработку(), ПараметрыИсточника));
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьСсылкуОбработку()
   Возврат Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Анализ себестоимости товаров по поставщикам");    
КонецФункции

Выдает ошибку: "Индекс находится за границами масива".
Помогите пожалуйста.
1 DrShad
 
15.05.12
15:50
этот код не может давать такую ошибку
2 GROOVY
 
15.05.12
15:51
Здравствуйте. Видимо у Вас есть массив, и элементов в нем меньше чем Вы предполагаете.
3 GROOVY
 
15.05.12
15:51
Да и код в (0) к ошибке отношения не имеет.
4 andriylord
 
15.05.12
15:59
Я вывожу табличный документ через СКД.

Также в обработке в модуле объекта следующий код:
// ПЕЧАТЬ


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ПараметрыПечати, ОбъектыПечати) Экспорт
   
   Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "АнализСебестоимостиТоваровПоПоставщикам") Тогда
       УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "АнализСебестоимостиТоваровПоПоставщикам", "Анализ себестоимости товаров по поставщикам", МассивОбъектов.ТабличныйДокумент);
   КонецЕсли;
   
КонецПроцедуры                      
   
// ИНФОРМАЦИЯ ОБ ОБРАБОТКЕ

Функция СведенияОВнешнейОбработке() Экспорт
   
   // Объявим переменную, в которой мы сохраним и вернем "наружу" необходимые данные
   ПараметрыРегистрации = Новый Структура;

   // Объявим еще одну переменную, которая нам потребуется ниже
   МассивНазначений = Новый Массив;
   
   // Первый параметр, который мы должны указать - это какой вид обработки системе должна зарегистрировать.
   // Допустимые типы: ДополнительнаяОбработка, ДополнительныйОтчет, ЗаполнениеОбъекта, Отчет, ПечатнаяФорма, СозданиеСвязанныхОбъектов
   ПараметрыРегистрации.Вставить("Вид", "ДополнительныйОтчет");    
   ПараметрыРегистрации.Вставить("Назначение", Новый Массив);
   
   // Теперь зададим имя, под которым ВПФ будет зарегистрирована в справочнике внешних обработок
   ПараметрыРегистрации.Вставить("Наименование", "Анализ себестоимости товаров по поставщикам");
   
   // Зададим право обработке на использование безопасного режима. Более подробно можно узнать в справке к платформе (метод УстановитьБезопасныйРежим)
   ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);

   // Следующие два параметра играют больше информационную роль, т.е. это то, что будет видеть пользователь в информации к обработке
   ПараметрыРегистрации.Вставить("Версия", "1.0");    
   ПараметрыРегистрации.Вставить("Информация", "Анализ себестоимости товаров по поставщикам");
   
   // Создадим таблицу команд (подробнее смотрим ниже)
   ТаблицаКоманд = Получить Таблицу Команд();
   
   // Добавим команду в таблицу
   ДобавитьКоманду(ТаблицаКоманд, "Анализ себестоимости товаров по поставщикам", "АСТПП", "ОткрытиеФормы", Ложь, "АСТПП");
   
   // Сохраним таблицу команд в параметры регистрации обработки
   ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
   
   // Теперь вернем системе наши параметры
   Возврат ПараметрыРегистрации;
   
КонецФункции

Функция Получить Таблицу Команд()

  // Создадим пустую таблицу команд и колонки в ней
  Команды = Новый ТаблицаЗначений;

  // Как будет выглядеть описание печатной формы для пользователя
  Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));

  // Имя нашего макета, что бы могли отличить вызванную команду в обработке печати
  Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));

  // Тут задается, как должна вызваться команда обработки
  // Возможные варианты:
  // - ОткрытиеФормы - в этом случае в колонке идентификатор должно быть указано имя формы, которое должна будет открыть система
  // - ВызовКлиентскогоМетода - вызвать клиентскую экспортную процедуру из модуля формы обработки
  // - ВызовСерверногоМетода - вызвать серверную экспортную процедуру из модуля объекта обработки
  Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));

  // Следующий параметр указывает, необходимо ли показывать оповещение при начале и завершению работы обработки. Не имеет смысла при открытии формы
  Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));

  // Для печатной формы должен содержать строку ПечатьMXL
  Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
 
  Возврат Команды;
 
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
 // Добавляем команду в таблицу команд по переданному описанию.
 // Параметры и их значения можно посмотреть в функции Получить Таблицу Команд
 НоваяКоманда = ТаблицаКоманд.Добавить();
 НоваяКоманда.Представление = Представление;
 НоваяКоманда.Идентификатор = Идентификатор;
 НоваяКоманда.Использование = Использование;
 НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
 НоваяКоманда.Модификатор = Модификатор;

КонецПроцедуры
5 hhhh
 
15.05.12
16:09
так у вас тут все массивы пустые.
6 andriylord
 
15.05.12
16:13
(5) Что именно не правильно?

Здесь ошибка?
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ПараметрыПечати, ОбъектыПечати) Экспорт
   
   Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "АнализСебестоимостиТоваровПоПоставщикам") Тогда
       УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "АнализСебестоимостиТоваровПоПоставщикам", "Анализ себестоимости товаров по поставщикам", МассивОбъектов.ТабличныйДокумент);
   КонецЕсли;
   
КонецПроцедуры
7 Адинэснег
 
15.05.12
16:14
(0)Выдает ошибку: "Индекс находится за границами масива".
что за мода, несуществующий текст ошибки писать, и спрашивать что случилось?
написал бы тогда, что-то то тип "Ошибка программы"
8 andriylord
 
15.05.12
16:15
Ошибка программы: "Индекс находится за границами масива".
9 hhhh
 
15.05.12
16:18
ну там строка ведь должна быть, в которой эта ошибка. Чего вы нас разводите?
10 Wobland
 
15.05.12
16:19
(9) это сильное колдунство, не всякий способен правильно прочитать сообщение об ошибке
11 hhhh
 
15.05.12
16:22
(10) да, тут спрашивали, какие инструменты применять при отладке запросов. Всё-таки самый главный инструмент - очки.
12 Mort
 
15.05.12
16:25
один ЦЭ на самом деле не всегда говорит номер строки с ошибкой.
13 andriylord
 
15.05.12
16:25
(11) В програмировании я не силен.
У меня есть эта обработка. Но программа выдает ошибку. Код я скинул. Поможете исправить?
14 Mort
 
15.05.12
16:25
(13) Сколько платишь?