Имя: Пароль:
1C
1С v8
Индекс находится за границами массива при проведении документа "Приобретение товаров и усл
0 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)}:    ПроведениеСерверУТ.ЗаписатьНаборыЗаписей(ЭтотОбъект);


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