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

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

Автор Роман Тарасов, 28 дек 2016, 15:32

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

Роман Тарасов

Добрый день. Столкнулся с такой проблемой. 1С 8.2, упаривание торговлей 10.3
При проведение документа "Установка тип цен по группам номенклатуры для покупателей" для некоторых контрагентов вылетает ошибка "Индекс находится за границами массива". Помогите, пожалуйста.

Ошибка в этой процедуре по строчке "СтрокаПоиска = ТЗ[Тмп];"
Процедура ПроверитьПересекающиесяДокументы(Отказ, Заголовок)

Запрос = Новый Запрос;

Запрос.УстановитьПараметр("ДокументСсылка", Ссылка);
Запрос.УстановитьПараметр("ПустойТипЦен", Справочники.ТипыЦенНоменклатуры.ПустаяСсылка());
Запрос.УстановитьПараметр("Дата", ДатаНачала);
Запрос.УстановитьПараметр("Контрагент", Контрагент);

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

ТЗ = Запрос.Выполнить().Выгрузить();

ТЗ.Колонки.Добавить("ДатаОкончания");
ТЗ.ЗаполнитьЗначения('00010101' ,"ДатаОкончания");

КоличествоСтрок = ТЗ.Количество() - 1;
Для Тмп = 0 По КоличествоСтрок Цикл
СтрокаТЗ = ТЗ[КоличествоСтрок - Тмп];

Если НЕ ЗначениеЗаполнено(СтрокаТЗ.ТипЦен) Тогда
Для Тмп1 = 0 По ТЗ.Количество() -1 Цикл
СтрокаПоиска = ТЗ[Тмп];

Если СтрокаПоиска.Группа = СтрокаТЗ.Группа
   И НЕ ЗначениеЗаполнено(СтрокаПоиска.ДатаОкончания) Тогда
СтрокаПоиска.ДатаОкончания = СтрокаТЗ.ДатаНачала;
ТЗ.Удалить(СтрокаТЗ);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;

СтрокаДокументовПересечений = "";
Для Каждого СтрокаТЗ Из ТЗ Цикл
Если НЕ ЗначениеЗаполнено(ДатаОкончания) Тогда
Если СтрокаТЗ.ДатаОкончания > Дата Или НЕ ЗначениеЗаполнено(СтрокаТЗ.ДатаОкончания) Тогда
СтрокаДокументовПересечений = СтрокаДокументовПересечений + Символы.ПС + СтрокаТЗ.Группа +": " + СтрокаТЗ.Регистратор;
КонецЕсли;
Иначе
Если (ДатаНачала >= СтрокаТЗ.ДатаНачала И ДатаОкончания <= СтрокаТЗ.ДатаОкончания)
  Или (ДатаНачала <= СтрокаТЗ.ДатаНачала И ДатаОкончания >= СтрокаТЗ.ДатаОкончания)
  Или (ДатаНачала <= СтрокаТЗ.ДатаНачала И ДатаОкончания >= СтрокаТЗ.ДатаНачала)
  Или (ДатаНачала <= СтрокаТЗ.ДатаОкончания И ДатаОкончания >= СтрокаТЗ.ДатаОкончания) Тогда
СтрокаДокументовПересечений = СтрокаДокументовПересечений + Символы.ПС + СтрокаТЗ.Группа +": " + СтрокаТЗ.Регистратор;
КонецЕсли;
КонецЕсли;
КонецЦикла;

Если НЕ ПустаяСтрока(СтрокаДокументовПересечений) Тогда
ОбщегоНазначения.СообщитьОбОшибке("Найдены записи о типах цен для групп, которые уже действуют в выбранном периоде:" + СтрокаДокументовПересечений, Отказ, Заголовок);
Отказ = Истина;
КонецЕсли;

КонецПроцедуры //ПроверитьПересекающиесяДокументы()

ilyay

Предположу, что индекс должен быть не по Тмп, а по Тмп1.

Роман Тарасов

Интересно то что эта проблема только у некоторых контрагентов, а не у всех

Теги:

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

Рейтинг@Mail.ru Rambler's Top100

Поиск