Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Индекс находится за границами массива при проведении документа "Приобретение товаров и усл

Индекс находится за границами массива при проведении документа "Приобретение товаров и усл
Я
   Evgk2084
 
12.02.21 - 09:21
Добрый день такая ситуация: При проведении документа "Приобритение товаров и услуг" вышла ошибка: "Индекс находится за границами массива"

Индекс находится за границами массива
{ОбщийМодуль.ОбщегоНазначенияУТКлиент.Модуль(1957)}: Результат = Форма.Записать(ПараметрыЗаписи);
{Документ.ПриобретениеТоваровУслуг.Форма.ФормаДокумента.Форма(8382)}: ОбщегоНазначенияУТКлиент.ОбработатьЗаписьОбъектаВФорме(ЭтотОбъект, ПараметрыДляЗаписи);

по причине:
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
Индекс находится за границами массива
{ОбщийМодуль.ПроведениеСерверУТ.Модуль(355)}: Объект.Движения.Записать();
{Документ.ПриобретениеТоваровУслуг.МодульОбъекта(891)}: ПроведениеСерверУТ.ЗаписатьНаборыЗаписей(ЭтотОбъект);

по причине:
Ошибка при выполнении обработчика - 'ПриЗаписи'
по причине:
Индекс находится за границами массива
{ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль(4576)}: Если сч <= КурсыВалютыРасчетов.Количество()
{ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль(150)}: ТаблицаКурсовВалют = ПолучитьКурсыВалют(Запрос, ДатаНачалаКурсов, ГлобальныеПеременные);
{ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль(1408)}: ЗаполнитьОперативныеВзаиморасчеты(ОсновныеПараметры);
{РегистрНакопления.РасчетыСПоставщиками.МодульНабораЗаписей(313)}: ОперативныеВзаиморасчетыСервер.РассчитатьПоИзменениям(Запрос.МенеджерВременныхТаблиц, Ложь, Отбор.Регистратор.Значение, ДополнительныеСвойства);
{ОбщийМодуль.ПроведениеСерверУТ.Модуль(355)}: Объект.Движения.Записать();
{Документ.ПриобретениеТоваровУслуг.МодульОбъекта(891)}: ПроведениеСерверУТ.ЗаписатьНаборыЗаписей(ЭтотОбъект);


Потом посоветовали сделать так:
поменять
Если сч <= КурсыВалютыРасчетов.Количество()
на
Если сч < КурсыВалютыРасчетов.Количество()
в ОМ ОперативныеВзаиморасчетыСервер

После стало так:

Индекс находится за границами массива
{ОбщийМодуль.ОбщегоНазначенияУТКлиент.Модуль(1957)}:    Результат = Форма.Записать(ПараметрыЗаписи);
{Документ.ПриобретениеТоваровУслуг.Форма.ФормаДокумента.Форма(8382)}:    ОбщегоНазначенияУТКлиент.ОбработатьЗаписьОбъектаВФорме(ЭтотОбъект, ПараметрыДляЗаписи);

по причине:
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
Индекс находится за границами массива
{ОбщийМодуль.ПроведениеСерверУТ.Модуль(355)}:    Объект.Движения.Записать();
{Документ.ПриобретениеТоваровУслуг.МодульОбъекта(891)}:    ПроведениеСерверУТ.ЗаписатьНаборыЗаписей(ЭтотОбъект);

по причине:
Ошибка при выполнении обработчика - 'ПриЗаписи'
по причине:
Индекс находится за границами массива
{ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль(4583)}:            Если КурсыВалютыРасчетов[сч].КурсРегл = 0 Тогда
{ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль(150)}:        ТаблицаКурсовВалют = ПолучитьКурсыВалют(Запрос, ДатаНачалаКурсов, ГлобальныеПеременные);
{ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль(1408)}:        ЗаполнитьОперативныеВзаиморасчеты(ОсновныеПараметры);
{РегистрНакопления.РасчетыСПоставщиками.МодульНабораЗаписей(313)}:        ОперативныеВзаиморасчетыСервер.РассчитатьПоИзменениям(Запрос.МенеджерВременныхТаблиц, Ложь, Отбор.Регистратор.Значение, ДополнительныеСвойства);
{ОбщийМодуль.ПроведениеСерверУТ.Модуль(355)}:    Объект.Движения.Записать();
{Документ.ПриобретениеТоваровУслуг.МодульОбъекта(891)}:    ПроведениеСерверУТ.ЗаписатьНаборыЗаписей(ЭтотОбъект);


Кто подскажет как быть?
 
 Партнерская программа EFSOL Oblako
   Галахад
 
1 - 12.02.21 - 09:25
Хм. А отладчиком посмотреть?
   ZDenis
 
2 - 12.02.21 - 09:39
Вчера было уже что-то похожее
   ZDenis
 
3 - 12.02.21 - 09:41
   ZDenis
 
4 - 12.02.21 - 09:45
У Вас явная беда с валютами и/или курсами. Смотри какие в документе выбраны (и выбраны ли вообще). Валюты взаиморасчетов в договоре. Если другие документы проводятся, то попробуйте не копировать, а создать этот документ с нуля.
   ZDenis
 
5 - 12.02.21 - 09:46
Если было обновление конфигурации, то почистить кеш.
   Kesim
 
6 - 12.02.21 - 13:26
(0) отладкой посмотри что у тебя в "КурсыВалютыРасчетов" и на каком значении "сч" отваливается
//{ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль(4583)}:            Если КурсыВалютыРасчетов[сч].КурсРегл = 0 Тогда
   Evgk2084
 
7 - 12.02.21 - 16:19
(6) Не знаю что нужно, скопировал все,,,:))

Функция ПолучитьКурсыВалют(Запрос, ДатаНачала, ГлобальныеПеременные)
    
    ДатаОкончания = НачалоДня(ТекущаяДатаСеанса());
    
    Запрос.Текст = "
    |ВЫБРАТЬ
    |    ДанныеПроизводственногоКалендаря.Дата КАК Дата
    |ПОМЕСТИТЬ ПериодыКурсов
    |ИЗ
    |    РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
    |ГДЕ
    |    ДанныеПроизводственногоКалендаря.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    |;
    |ВЫБРАТЬ
    |    ПериодыКурсов.Дата КАК Дата,
    |    ВЫБОР
    |        КОГДА ЕСТЬNULL(КурсыВалютыРасчетов.Курс,0) = 0 И &ВалютаРасчетов <> &ВалютаРегл 
    |            ТОГДА 0 
    |        ИНАЧЕ ЕСТЬNULL(КурсыВалютыРасчетов.Курс,1) / ЕСТЬNULL(КурсыВалютыРасчетов.Кратность,1) 
    |    КОНЕЦ КАК КурсРегл,
    |    ВЫБОР 
    |        КОГДА ЕСТЬNULL(КурсыВалютыРасчетов.Курс,0) = 0 И &ВалютаРасчетов <> &ВалютаРегл 
    |            ТОГДА 0
    |        КОГДА ЕСТЬNULL(КурсыВалютыУпр.Курс,0) = 0 И &ВалютаУпр <> &ВалютаРегл 
    |            ТОГДА 0
    |        ИНАЧЕ (ЕСТЬNULL(КурсыВалютыРасчетов.Курс,1) / ЕСТЬNULL(КурсыВалютыРасчетов.Кратность,1)) / (ЕСТЬNULL(КурсыВалютыУпр.Курс,1) / ЕСТЬNULL(КурсыВалютыУпр.Кратность,1))
    |    КОНЕЦ КАК КурсУпр
    |ИЗ
    |    ПериодыКурсов КАК ПериодыКурсов
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалютыРасчетов
    |            ПО ПериодыКурсов.Дата = КурсыВалютыРасчетов.Период
    |                И КурсыВалютыРасчетов.Валюта = &ВалютаРасчетов
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалютыУпр
    |            ПО ПериодыКурсов.Дата = КурсыВалютыУпр.Период
    |                И КурсыВалютыУпр.Валюта = &ВалютаУпр
    |УПОРЯДОЧИТЬ ПО
    |    Дата ВОЗР
    |;
    |ВЫБРАТЬ
    |    &ДатаНачала КАК Дата,
    |    ЕСТЬNULL(КурсыВалют.Курс,1) / ЕСТЬNULL(КурсыВалют.Кратность,1) КАК КурсРегл,
    |    (ЕСТЬNULL(КурсыВалют.Курс,1) / ЕСТЬNULL(КурсыВалют.Кратность,1)) / (ЕСТЬNULL(КурсыВалютыУпр.Курс,1) / ЕСТЬNULL(КурсыВалютыУпр.Кратность,1)) КАК КурсУпр
    |ИЗ
    |    РегистрСведений.КурсыВалют.СрезПоследних(&ДатаНачала) КАК КурсыВалют
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&ДатаНачала) КАК КурсыВалютыУпр
    |            ПО КурсыВалютыУпр.Валюта = &ВалютаУпр
    |ГДЕ КурсыВалют.Валюта = &ВалютаРасчетов";
    
    Запрос.УстановитьПараметр("ЕжедневнаяПереоценка", ГлобальныеПеременные.ЕжедневнаяПереоценка);
    Запрос.УстановитьПараметр("ДатаНачала",           НачалоДня(ДатаНачала));
    Запрос.УстановитьПараметр("ДатаОкончания",        ДатаОкончания);
    Запрос.УстановитьПараметр("ВалютаРасчетов",       ГлобальныеПеременные.ВалютаРасчетов);
    Запрос.УстановитьПараметр("ВалютаУпр",            Константы.ВалютаУправленческогоУчета.Получить());
    
    Результаты = Запрос.ВыполнитьПакет();
    
    КурсыВалютыРасчетов = Результаты[1].Выгрузить();
    КурсыВалютСрезПоследних = Результаты[2].Выгрузить();
    
    ТекущийКурсРегл = ?(КурсыВалютСрезПоследних.Количество() > 0, КурсыВалютСрезПоследних[0].КурсРегл, 1);
    ТекущийКурсУпр = ?(КурсыВалютСрезПоследних.Количество() > 0, КурсыВалютСрезПоследних[0].КурсУпр, 1);
    
    ТекущаяДата = НачалоДня(ДатаНачала);
    сч = 0;
    Пока ТекущаяДата <= ДатаОкончания Цикл
        Если сч < КурсыВалютыРасчетов.Количество() 
            И КурсыВалютыРасчетов[сч].Дата <> ТекущаяДата Тогда
            НовСтр = КурсыВалютыРасчетов.Вставить(сч);
            НовСтр.Дата = ТекущаяДата;
            НовСтр.КурсРегл = ТекущийКурсРегл;
            НовСтр.КурсУпр = ТекущийКурсУпр;
        Иначе
            Если КурсыВалютыРасчетов[сч].КурсРегл = 0 Тогда
                КурсыВалютыРасчетов[сч].КурсРегл = ТекущийКурсРегл;
            Иначе
                ТекущийКурсРегл = КурсыВалютыРасчетов[сч].КурсРегл;
            КонецЕсли;
            Если КурсыВалютыРасчетов[сч].КурсУпр = 0 Тогда
                КурсыВалютыРасчетов[сч].КурсУпр = ТекущийКурсУпр;
            Иначе
                ТекущийКурсУпр = КурсыВалютыРасчетов[сч].КурсУпр;
            КонецЕсли;
        КонецЕсли;
        ТекущаяДата = ТекущаяДата + 24*60*60;
        сч = сч + 1 ;
    КонецЦикла;
    
    КурсыВалютыРасчетов.Индексы.Добавить("Дата");
    
    Возврат КурсыВалютыРасчетов;
    
КонецФункции
   программистище
 
8 - 12.02.21 - 16:23
т.е. прошло два дня, а человек не удосужился поставить точку останова и посмотреть, что у него в КурсыВалютыРасчетов
   Evgk2084
 
9 - 12.02.21 - 16:27
(8) А нельзя подсказать, как и что сделать.?
   программистище
 
10 - 12.02.21 - 16:31
(9) подсказать это в (6) сделали
отладчиком совсем не умеешь пользоваться?
а то получается надо не подсказать, а научить
   Evgk2084
 
11 - 12.02.21 - 16:41
(10) в том то и дело, что не умею...
   Evgk2084
 
12 - 12.02.21 - 18:12
Ну что ни кто не поможет???

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.