Skip to content

Commit 4242513

Browse files
committed
fix EvilBeaver#1580.1: вставка вне размера Таблицы значений
1 parent 3c5f0c7 commit 4242513

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

src/OneScript.StandardLibrary/Collections/ValueTable/ValueTable.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,18 @@ public ValueTableRow Add()
7676
/// <summary>
7777
/// Вставляет строку в указанную позицию
7878
/// </summary>
79-
/// <param name="index">Число - Индекс позиции куда будет произведена вставка</param>
79+
/// <param name="index">Число - Индекс позиции куда будет произведена вставка.
80+
/// Если индекс вне размера Таблицы значений, строка добавляется в конец</param>
8081
/// <returns>СтрокаТаблицыЗначений</returns>
8182
[ContextMethod("Вставить", "Insert")]
8283
public ValueTableRow Insert(int index)
8384
{
8485
var row = new ValueTableRow(this);
85-
_rows.Insert(index, row);
86+
if (index < 0 || index > _rows.Count)
87+
_rows.Add(row); // для совместимости с 1С, хотя логичней было бы исключение
88+
else
89+
_rows.Insert(index, row);
90+
8691
Indexes.ElementAdded(row);
8792
return row;
8893
}

tests/valuetable.os

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@
5252
ВсеТесты.Добавить("ТестДолжен_ПроверитьСортировкуНеупорядочиваемыхТипов");
5353
ВсеТесты.Добавить("ТестДолжен_ПроверитьСортировкуРазныхТипов");
5454
ВсеТесты.Добавить("ТестДолжен_ПроверитьСортировкуПоПредставлению");
55+
56+
ВсеТесты.Добавить("ТестДолжен_ПроверитьВставкуВнеРазмераТаблицы");
57+
5558
Возврат ВсеТесты;
5659

5760
КонецФункции
@@ -951,3 +954,14 @@
951954
юТест.ПроверитьРавенство(КодСимвола(ТЗ[3].Тест,1), 917, "greek");
952955
юТест.ПроверитьРавенство(КодСимвола(ТЗ[4].Тест,1), 1045, "cyrillic");
953956
КонецПроцедуры
957+
958+
Процедура ТестДолжен_ПроверитьВставкуВнеРазмераТаблицы() Экспорт
959+
ТЗ = Новый ТаблицаЗначений();
960+
ТЗ.Колонки.Добавить("Тест");
961+
962+
ТЗ.Добавить().Тест = -1;
963+
ТЗ.Вставить(8).Тест = -2;
964+
965+
юТест.ПроверитьРавенство(ТЗ[1].Тест, -2);
966+
967+
КонецПроцедуры

0 commit comments

Comments
 (0)