Функция Конт(Конт) Возврат Конт; КонецФункции // : Контекст
Функция Сам() Возврат Конт(Контекст); КонецФункции

Процедура ТестДобавлениеСтрокВТабличнуюЧастьЧерезКонтекстДокумента() Экспорт
	Сам = Сам(); // : ТестовыйСлучайСДанными

	Сам.ОткрытьФорму("Документ.Новый1");
	Конт=Сам.КонтекстФормы;
	Сам.ПропуститьТест(, "Некоррекное позиционирование после НоваяСтрока()");
	//Срабатывает, если раскомментировать следущую строку
	Конт.__ВызыватьМетодыКакСобытия(0);

	Сам.ПроверитьРавенство(Конт.КоличествоСтрок(), 0);

	Конт.НоваяСтрока();
	Сам.ПроверитьРавенство(Конт.КоличествоСтрок(), 1);
	Конт.Новый1 = "1";
	Конт._НоваяСтрока();
	Сам.ПроверитьРавенство(Конт.КоличествоСтрок(), 2);
	Конт.Новый1 = "2";
	Конт.НоваяСтрока();
	Сам.ПроверитьРавенство(Конт.КоличествоСтрок(), 3);
	Конт.Новый1 = "3";
	
	Конт.ПолучитьСтрокуПоНомеру(1);
	Сам.ПроверитьРавенство(СокрЛП(Конт.Новый1), "1");
	Конт.ПолучитьСтрокуПоНомеру(2);
	Сам.ПроверитьРавенство(СокрЛП(Конт.Новый1), "2");
	Конт.ПолучитьСтрокуПоНомеру(3);
	Сам.ПроверитьРавенство(СокрЛП(Конт.Новый1), "3");
КонецПроцедуры	// ТестДобавлениеСтрокВТабличнуюЧастьЧерезКонтекстДокумента

// связка ТурбоБЛ и ФормЕкс
// при желании можно отключить тест "ТестДобавлениеСтрокВТабличнуюЧастьЧерезКонтекстДокумента"
// чтобы четко увидеть баг !
Процедура Тест_РаботаСКонтекстомНовогоДокумента_И_ДобавлениеСтрокВТабличнуюЧасть() Экспорт
	Сам = Сам();

	Сам.ОткрытьФорму("Документ.Новый1");
	Конт=Сам.КонтекстФормы;

	// даже не нужно обращаться к методам и данным контекста
	// любое обращение  контексту при первом открытии дока ТАКЖЕ ведет
	// к ошибке при обращении контекста во втором доке после добавления новой строки
	//
	//Сам.ПроверитьРавенство(Конт.КоличествоСтрок(), 0); // и так ошибка
	//Конт.Форма.Закрыть(0); // и так ошибка
	
	// sedmin. Непоняно, в чем проблема. 1С позволяет открыть только одну форму нового документа.

	Конт2 = 0; // специально другая переменная
	ОткрытьФорму("Документ.Новый1", Конт2);
	
	Сам.ПроверитьРавенство(Конт, Конт2);

	Сам.ПроверитьРавенство(Конт2.КоличествоСтрок(), 0);

	Конт.НоваяСтрока();

	Сам.ПроверитьРавенство(Конт2.КоличествоСтрок(), 1); // вот и ошибка

КонецПроцедуры	// Тест_РаботаСКонтекстомНовогоДокумента_И_ДобавлениеСтрокВТабличнуюЧасть
                                    
Процедура ПроверитьФормуОбработки(Форма)
	Сам = Сам();
	Сам.ПроверитьРавенство(ТипЗначенияСтр(Форма), "НеизвестныйОбъект");
	Сам.ПроверитьРавенство(Форма.АктивныйЭлемент(), "Реквизит");
	Сам.ПроверитьРавенство(Форма.Заголовок(), "");
КонецПроцедуры	// ОткрытьТестовуюФорму

Процедура ТестАтрибутФормы() Экспорт
	Сам = Сам();

	Сам.ОткрытьФорму("Обработка.ТестоваяДляFormEx");
	КонтФормы = Сам.КонтекстФормы;
	
	Форма = КонтФормы.Форма;
	ПроверитьФормуОбработки(Форма);
	
	РасширениеФормы = СоздатьОбъект("РасширениеФормы");
	
	Сам.ПроверитьИсключение(РасширениеФормы, "ПолучитьФорму"); // Форма = РасширениеФормы.ПолучитьФорму();
	
	РасширениеФормы.УстановитьФорму(Форма);
	
	Форма2 = РасширениеФормы.ПолучитьФорму();
	ПроверитьФормуОбработки(Форма2);
КонецПроцедуры	// ТестАтрибутФормы

Процедура ТестСервисПолучитьФорму() Экспорт 
	Сам = Сам();
	
	Сам.ОткрытьФорму("Обработка.ТестоваяДляFormEx");
	КонтФормы = Сам.КонтекстФормы;
	
	Форма = КонтФормы.ПолучитьФормуЧерезРасширение();
	ПроверитьФормуОбработки(Форма);
КонецПроцедуры
