Перем
		OLEDBData,
		OLEDBCommand,
		ИмяКаталогаВременныхФайлов
		;

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

Процедура Конструктор()
	Сам=Сам();
	Сам.ВыброситьИсключениеДляМопольногоРежима();
	Сам.ВыброситьИсключениеНаБазеSQL();
	ИмяКаталогаВременныхФайлов = "";

	// проверю наличие провайдера
	РеестрWin = СоздатьОбъект("РеестрWin");
	Если РеестрWin.ОткрытьКлюч("HKEY_CLASSES_ROOT", "VFPOLEDB.1", "KEY_READ") = 0 Тогда
		Сам().ПропуститьТест(, "Не установлен провайдер VFP OLE DB");
	КонецЕсли;
КонецПроцедуры // Конструктор

Функция OLEDBData()
	Возврат СоздатьОбъект("OLEDBData");
КонецФункции

Функция OLEDBData_СоздатьИСоединить()
	OLEDBData = OLEDBData();

	СтрокаПодключения =
	"Provider=VFPOLEDB.1;
	|Deleted=Yes;
	|Data Source=" + КаталогИБ() + ";
	|Mode=ReadWrite;
	|Extended Properties="""";
	|User ID="""";
	|Password="""";
	|Mask Password=False;
	|Collating Sequence=RUSSIAN;
	|DSN=""""";

	лРезультатСоединения = OLEDBData.Соединение(СтрокаПодключения);
	Сам().ПроверитьРавенство(лРезультатСоединения, 1);

	Возврат OLEDBData;
КонецФункции

Функция СоздатьИСоединить()
	OLEDBData = OLEDBData();

	СтрокаПодключения =
	"Provider=VFPOLEDB.1;
	|Deleted=Yes;
	|Data Source=" + КаталогИБ() + ";
	|Mode=ReadWrite;
	|Extended Properties="""";
	|User ID="""";
	|Password="""";
	|Mask Password=False;
	|Collating Sequence=RUSSIAN;
	|DSN=""""";

	лРезультатСоединения = OLEDBData.Соединение(СтрокаПодключения);
	Сам().ПроверитьРавенство(лРезультатСоединения, 1);

	OLEDBCommand = OLEDBData.СоздатьКоманду();

	Возврат OLEDBCommand;
КонецФункции

Функция УдалитьРазделитель(Путь)
	Возврат ?(Прав(Путь, 1) <> "\", Путь, Лев(Путь, СтрДлина(Путь)-1));
КонецФункции //УдалитьРазделитель

Функция ЭтоКаталог(ИмяФайла)
	ИмяФайла = УдалитьРазделитель(ИмяФайла);
	П = ""; 	АтрибутыФайла = "";
	ФС.АтрибутыФайла(ИмяФайла, П, АтрибутыФайла, П, П, П, П);
	Если Сред(АтрибутыФайла, 4, 1)="1"  Тогда // каталог
		Возврат 1;
	КонецЕсли;
	Возврат 0;
КонецФункции //ЭтоКаталог

Процедура СоздатьКаталог(ИмяКаталога)
	Если ФС.СуществуетФайл(ИмяКаталога) = 0 Тогда
		ФС.СоздатьКаталог(ИмяКаталога);
		//Сообщить("каталог <"+ИмяКаталога+"> создан!");
	КонецЕсли;
КонецПроцедуры	// СоздатьКаталог

Процедура Деструктор()
	Попытка
		OLEDBCommand.Закрыть();
	Исключение
	КонецПопытки;

	OLEDBCommand = 0;
	Попытка
		OLEDBData.Закрыть();
	Исключение
	КонецПопытки;

	Если СокрЛП(ИмяКаталогаВременныхФайлов) <> "" Тогда

		Если ЭтоКаталог(ИмяКаталогаВременныхФайлов) = 1 Тогда
			//Сообщить("удаляю ИмяКаталогаВременныхФайлов = <"+ИмяКаталогаВременныхФайлов+">");
			ФС.УдалитьКаталог(ИмяКаталогаВременныхФайлов);
		КонецЕсли;
	КонецЕсли;

КонецПроцедуры	// Деструктор

Процедура Тест_OLEDBData_СоздатьОбъект() Экспорт
	OLEDBData = OLEDBData();
	Сам().ПроверитьРавенство(ТипЗначенияСтр(OLEDBData), "OLEDBData");
КонецПроцедуры

Процедура Тест_OLEDBData_Соединение() Экспорт
	OLEDBData_СоздатьИСоединить();
КонецПроцедуры

Процедура Тест_OLEDBData_СоединениеСОшибкой() Экспорт
	OLEDBData = OLEDBData();

	СтрокаПодключения =
	"Provider=НеверныйVFPOLEDB.1;
	|Deleted=Yes;
	|Data Source=" + КаталогИБ() + ";
	|Mode=ReadWrite;
	|Extended Properties="""";
	|User ID="""";
	|Password="""";
	|Mask Password=False;
	|Collating Sequence=RUSSIAN;
	|DSN=""""";
	Сам().ПроверитьИсключение(OLEDBData, "Соединение", СтрокаПодключения);

	СтрокаПодключения =
	"Provider=VFPOLEDB.1;
	|Deleted=Yes;
	|Data Source=" + "!ОШИБКА!" + КаталогИБ() + ";
	|Mode=ReadWrite;
	|Extended Properties="""";
	|User ID="""";
	|Password="""";
	|Mask Password=False;
	|Collating Sequence=RUSSIAN;
	|DSN=""""";
	Сам().ПроверитьИсключение(OLEDBData, "Соединение", СтрокаПодключения);
КонецПроцедуры

Процедура Тест_OLEDBData_Закрыть() Экспорт
	OLEDBData = OLEDBData_СоздатьИСоединить();
	OLEDBData.Закрыть();
	Сам().ПроверитьРавенство(ТипЗначенияСтр(OLEDBData), "OLEDBData");
КонецПроцедуры

Процедура Тест_OLEDBData_СоздатьКоманду() Экспорт
	СоздатьИСоединить();
	Сам().ПроверитьРавенство(ТипЗначенияСтр(OLEDBCommand), "OLEDBCommand");
КонецПроцедуры

Процедура Тест_OLEDBData_СоздатьКомандуБезСоединения() Экспорт
	OLEDBData = OLEDBData();
	Сам().ПроверитьИсключение(OLEDBData, "СоздатьКоманду"); // Объект.СоздатьКоманду();
КонецПроцедуры

Процедура Тест_OLEDBData_ЗакрытьИСоздатьКоманду() Экспорт
	OLEDBData = OLEDBData_СоздатьИСоединить();
	OLEDBData.Закрыть();

	Сам().ПроверитьИсключение(OLEDBData, "СоздатьКоманду"); // Объект.СоздатьКоманду();
КонецПроцедуры

Процедура Тест_OLEDBCommand_Создать() Экспорт
	фМожноСоздатьOLEDBCommand = 1;
	Попытка
		СоздатьОбъект("OLEDBCommand");
	Исключение
		фМожноСоздатьOLEDBCommand = 0;
	КонецПопытки;
	Сам().ПроверитьРавенство(фМожноСоздатьOLEDBCommand, 0);
КонецПроцедуры

Процедура Тест_OLEDBCommand_Отладка() Экспорт
	OLEDBCommand = СоздатьИСоединить();
	OLEDBCommand.Отладка(1);
	OLEDBCommand.Отладка(0);
КонецПроцедуры

Процедура Тест_OLEDBCommand_Закрыть() Экспорт
	OLEDBCommand = СоздатьИСоединить();
	OLEDBCommand.Закрыть();
	Сам().ПроверитьРавенство(ТипЗначенияСтр(OLEDBCommand), "OLEDBCommand");
КонецПроцедуры

Процедура Тест_OLEDBCommand_ВыполнитьПослеЗакрытия() Экспорт
	OLEDBCommand = СоздатьИСоединить();
	OLEDBCommand.Закрыть();

	ТекстЗапроса =
	"select *
	|from 1SUSERS.DBF";
	Сам().ПроверитьИсключение(OLEDBCommand, "Выполнить", ТекстЗапроса);
КонецПроцедуры

Процедура Тест_OLEDBCommand_ВыполнитьИнструкциюПослеЗакрытия() Экспорт
	OLEDBCommand = СоздатьИСоединить();
	OLEDBCommand.Закрыть();

	ТекстЗапроса =
	"select *
	|from 1SUSERS.DBF";
	Сам().ПроверитьИсключение(OLEDBCommand, "ВыполнитьИнструкцию", ТекстЗапроса);
КонецПроцедуры

Процедура Тест_OLEDBCommand_ВыполнитьПослеЗакрытияOLEDBData() Экспорт
	OLEDBCommand = СоздатьИСоединить();
	OLEDBData.Закрыть();

	ТекстЗапроса =
	"select *
	|from 1SUSERS.DBF";

	лКоличество = OLEDBCommand.Выполнить(ТекстЗапроса);
	Сам().ПроверитьРавенство(лКоличество, 1);
КонецПроцедуры

Процедура Тест_OLEDBCommand_ВыполнитьИнструкциюПослеЗакрытияOLEDBData() //Экспорт
	OLEDBCommand = СоздатьИСоединить();
	OLEDBData.Закрыть();

	ТекстЗапроса =
	"select *
	|from 1SUSERS.DBF";

	лТабЗапроса = OLEDBCommand.ВыполнитьИнструкцию(ТекстЗапроса);
	Сам().ПроверитьРавенство(ТипЗначенияСтр(лТабЗапроса), "ТаблицаЗначений");

	Сам().ПроверитьРавенство(лТабЗапроса.КоличествоСтрок(), 1);
	лТабЗапроса.ПолучитьСтрокуПоНомеру(1);
	Сам().ПроверитьБольшеИлиРавно(лТабЗапроса.USRSCNT, 1);
	Сам().ПроверитьБольшеИлиРавно(лТабЗапроса.NETCHGCN, 0);
КонецПроцедуры

Процедура Тест_OLEDBCommand_Выполнить() Экспорт
	OLEDBCommand = СоздатьИСоединить();

	ТекстЗапроса =
	"select *
	|from 1SUSERS.DBF";
	лКоличество = OLEDBCommand.Выполнить(ТекстЗапроса);
	Сам().ПроверитьРавенство(лКоличество, 1);
КонецПроцедуры

Процедура Тест_OLEDBCommand_Выполнить_CREATE_TABLE() Экспорт
	OLEDBCommand = СоздатьИСоединить();
	ИмяФайла = "1cpp156";

	ТекстЗапроса =
	"
	|CREATE TABLE "+ИмяФайла+" (ISFOLDER N(1,0))
	|";
	лКоличество = OLEDBCommand.Выполнить(ТекстЗапроса);

	Если ФС.СуществуетФайл(КаталогИБ()+ИмяФайла+".DBF") = 1 Тогда
		ФС.УдалитьФайл(КаталогИБ()+ИмяФайла+".DBF");
	КонецЕсли;

	Сам().ПроверитьРавенство(лКоличество, -1);
КонецПроцедуры

Процедура Тест_OLEDBCommand_Выполнить_DROP_TABLE() Экспорт
	OLEDBCommand = СоздатьИСоединить();
	ИмяФайла = "1cpp156";

	ТекстЗапроса =
	"
	|CREATE TABLE "+ИмяФайла+" (ISFOLDER N(1,0))
	|";
	OLEDBCommand.Выполнить(ТекстЗапроса);

	ТекстЗапроса =
	"
	| DROP TABLE "+ИмяФайла+"
	|";
	лКоличество = OLEDBCommand.Выполнить(ТекстЗапроса);

	Если ФС.СуществуетФайл(КаталогИБ()+ИмяФайла+".DBF") = 1 Тогда
		ФС.УдалитьФайл(КаталогИБ()+ИмяФайла+".DBF");
	КонецЕсли;

	Сам().ПроверитьРавенство(лКоличество, -1);
КонецПроцедуры

Процедура Тест_OLEDBCommand_Выполнить_НесколькоЗапросов() Экспорт
	OLEDBCommand = СоздатьИСоединить();
	ИмяФайла = "1cpp156";

	ТекстЗапроса =
	"
	|CREATE TABLE "+ИмяФайла+" (ISFOLDER N(1,0))
	|
	| DROP TABLE "+ИмяФайла+"
	|";
	Сам().ПроверитьИсключение(OLEDBCommand, "Выполнить", ТекстЗапроса);
КонецПроцедуры

Процедура Тест_OLEDBCommand_Выполнить_НеверныйЗапрос1() Экспорт
	OLEDBCommand = СоздатьИСоединить();

	ТекстЗапроса =
	"select *
	|from 11SUSERS.DBF"; // неверный файл

	Сам().ПроверитьИсключение(OLEDBCommand, "Выполнить", ТекстЗапроса); //OLEDBCommand.Выполнить(ТекстЗапроса);
КонецПроцедуры

Процедура Тест_OLEDBCommand_ВыполнитьИнструкцию() Экспорт
	OLEDBCommand = СоздатьИСоединить();

	ТекстЗапроса =
	"select *
	|from 1SUSERS.DBF";
	лТабЗапроса = OLEDBCommand.ВыполнитьИнструкцию(ТекстЗапроса);
	Сам().ПроверитьРавенство(ТипЗначенияСтр(лТабЗапроса), "ТаблицаЗначений");

	Сам().ПроверитьРавенство(лТабЗапроса.КоличествоСтрок(), 1);
	лТабЗапроса.ПолучитьСтрокуПоНомеру(1);
	Сам().ПроверитьБольшеИлиРавно(лТабЗапроса.USRSCNT, 1);
	Сам().ПроверитьБольшеИлиРавно(лТабЗапроса.NETCHGCN, 0);

КонецПроцедуры

Процедура Тест_OLEDBCommand_ВыполнитьИнструкцию_НеверныйЗапрос1() Экспорт
	OLEDBCommand = СоздатьИСоединить();

	ТекстЗапроса =
	"select *
	|from 11SUSERS.DBF"; // неверный файл

	Сам().ПроверитьИсключение(OLEDBCommand, "ВыполнитьИнструкцию", ТекстЗапроса); //OLEDBCommand.Выполнить(ТекстЗапроса);

	ТекстЗапроса =
	"select *
	|from :ИмяФайла"; // файл не будет указан

	Сам().ПроверитьИсключение(OLEDBCommand, "ВыполнитьИнструкцию", ТекстЗапроса); //OLEDBCommand.Выполнить(ТекстЗапроса);

	// несколько выражений в одном запросе
	ИмяФайла = "1cpp156";
	ТекстЗапроса =
	"
	|select *
	|from 1SUSERS.DBF
	|
	|  CREATE TABLE "+ИмяФайла+" (ISFOLDER N(1,0))
	|
	|  DROP TABLE "+ИмяФайла+"
	|";

	Сам().ПроверитьИсключение(OLEDBCommand, "ВыполнитьИнструкцию", ТекстЗапроса); //OLEDBCommand.Выполнить(ТекстЗапроса);

	// несколько выражений в одном запросе
	ТекстЗапроса =
	"
	|  CREATE TABLE "+ИмяФайла+" (ISFOLDER N(1,0))
	|
	|  DROP TABLE "+ИмяФайла+"
	|
	|  select *
	|from 1SUSERS.DBF
	|";

	Сам().ПроверитьИсключение(OLEDBCommand, "ВыполнитьИнструкцию", ТекстЗапроса); //OLEDBCommand.Выполнить(ТекстЗапроса);
КонецПроцедуры

Процедура Тест_OLEDBCommand_УстановитьТекстовыйПараметр() Экспорт
	OLEDBCommand = СоздатьИСоединить();

	ТекстЗапроса =
	"select *
	|from :ИмяФайла";

	ТекстЗапросаКопия =
	"select *
	|from :ИмяФайла";

	OLEDBCommand.УстановитьТекстовыйПараметр("ИмяФайла", "11SUSERS.DBF");
	OLEDBCommand.УстановитьТекстовыйПараметр("ИмяФайла", "1SUSERS.DBF");

	Сам().ПроверитьРавенство(ТекстЗапроса, ТекстЗапросаКопия); // убедимся, что исходная строка не меняется

	лТабЗапроса = OLEDBCommand.ВыполнитьИнструкцию(ТекстЗапроса);
	Сам().ПроверитьРавенство(ТипЗначенияСтр(лТабЗапроса), "ТаблицаЗначений");

	Сам().ПроверитьРавенство(лТабЗапроса.КоличествоСтрок(), 1);
	лТабЗапроса.ПолучитьСтрокуПоНомеру(1);
	Сам().ПроверитьБольшеИлиРавно(лТабЗапроса.USRSCNT, 1);
	Сам().ПроверитьБольшеИлиРавно(лТабЗапроса.NETCHGCN, 0);

КонецПроцедуры

Процедура Тест_OLEDBCommand_Выполнить_БезПовтораУстановитьТекстовыйПараметр() Экспорт
	OLEDBCommand = СоздатьИСоединить();

	ТекстЗапроса =
	"select *
	|from :ИмяФайла";

	OLEDBCommand.УстановитьТекстовыйПараметр("ИмяФайла", "1SUSERS.DBF");
	лТабЗапроса = OLEDBCommand.ВыполнитьИнструкцию(ТекстЗапроса);

	// TODO правильно ли выдается исключение или удобнее использовать предыдущую установку параметра ??
	//лТабЗапроса = OLEDBCommand.ВыполнитьИнструкцию(ТекстЗапроса);
	// если неправильно, включить след.строку
	Сам().ПроверитьИсключение(OLEDBCommand, "ВыполнитьИнструкцию", ТекстЗапроса);
КонецПроцедуры

Процедура Тест_OLEDBCommand_УстановитьТекстовыйПараметр_КоторыйНесуществует() Экспорт
	OLEDBCommand = СоздатьИСоединить();

	// TODO сейчас никаких ошибок при выполнении запроса, уточнить нужна ли ошибка :(
	OLEDBCommand.УстановитьТекстовыйПараметр("НесуществующийПараметр", "НенужноеДанное");

	ТекстЗапроса =
	"select *
	|from :ИмяФайла";

	OLEDBCommand.УстановитьТекстовыйПараметр("ИмяФайла", "1SUSERS.DBF");
	лТабЗапроса = OLEDBCommand.ВыполнитьИнструкцию(ТекстЗапроса);
КонецПроцедуры

Процедура Тест_OLEDBCommand_УстановитьТекстовыйПараметр_НеверныеПараметры() Экспорт
	OLEDBCommand = СоздатьИСоединить();

	// TODO сейчас никаких ошибок при выполнении :(
	OLEDBCommand.УстановитьТекстовыйПараметр("НесуществующийПараметр", "НенужноеДанное");

	ТекстЗапроса =
	"select *
	|from :ИмяФайла";

	OLEDBCommand.УстановитьТекстовыйПараметр("ИмяФайла", "11SUSERS.DBF");
	Сам().ПроверитьИсключение(OLEDBCommand, "ВыполнитьИнструкцию", ТекстЗапроса); //OLEDBCommand.Выполнить(ТекстЗапроса);

	OLEDBCommand.УстановитьТекстовыйПараметр("ИмяФайла", 0); // число
	Сам().ПроверитьИсключение(OLEDBCommand, "ВыполнитьИнструкцию", ТекстЗапроса); //OLEDBCommand.Выполнить(ТекстЗапроса);

КонецПроцедуры

Процедура Тест_OLEDBCommand_УстановитьКаталогВремТаблиц_НеверныеПараметры() Экспорт
	OLEDBCommand = СоздатьИСоединить();

	OLEDBCommand.УстановитьКаталогВремТаблиц("C:");
	OLEDBCommand.УстановитьКаталогВремТаблиц("C:\");

	Сам().ПроверитьИсключение(OLEDBCommand, "УстановитьКаталогВремТаблиц", ""); // пустая строка

	ИмяКаталогаСПробелами = КаталогИБ()+"Каталог Временных Файлов";
	Сам().ПроверитьИсключение(OLEDBCommand, "УстановитьКаталогВремТаблиц", ИмяКаталогаСПробелами); // проверю пробелы

	ИмяКаталогаСПробелами = КаталогИБ()+"Temp files folder";
	Сам().ПроверитьИсключение(OLEDBCommand, "УстановитьКаталогВремТаблиц", ИмяКаталогаСПробелами); // проверю пробелы
КонецПроцедуры

Процедура Тест_OLEDBCommand_УстановитьКаталогВремТаблиц() Экспорт
	OLEDBCommand = СоздатьИСоединить();

	ИмяКаталога = "КаталогВременныхФайлов";
	//ИмяКаталога = "TempFilesFolder";
	ИмяКаталогаВременныхФайлов = КаталогИБ()+ИмяКаталога;

	Если Найти(ИмяКаталогаВременныхФайлов, " ") > 0 Тогда // пробелы есть ?
		ИмяКаталогаВременныхФайлов = "C:\"+ИмяКаталога;
	КонецЕсли;

	СоздатьКаталог(ИмяКаталогаВременныхФайлов);
	OLEDBCommand.УстановитьКаталогВремТаблиц(ИмяКаталогаВременныхФайлов);

	ИмяКаталогаВременныхФайлов = ИмяКаталогаВременныхФайлов + "\";
	OLEDBCommand.УстановитьКаталогВремТаблиц(ИмяКаталогаВременныхФайлов);
КонецПроцедуры

Функция ПроверитьУложитьСписокОбъектов_Начало()
	OLEDBCommand = СоздатьИСоединить();

	СписокДокументов = СоздатьОбъект("СписокЗначений");
	Док = СоздатьОбъект("Документ");
	Док.ВыбратьДокументы(,);
	Пока Док.ПолучитьДокумент()=1  Цикл
		СписокДокументов.ДобавитьЗначение(Док.ТекущийДокумент());
	КонецЦикла;
	Возврат СписокДокументов;
КонецФункции

Функция ПроверитьУложитьСписокОбъектов_Конец(СписокДокументов)
	ИмяТаблицы = "";
	OLEDBCommand.УложитьСписокОбъектов(СписокДокументов, ИмяТаблицы);

	ИмяФайлаТаблицы = ИмяТаблицы+".dbf";

	// проверю созданный дбф-файл
	Сам().ПроверитьНеРавенство(ИмяТаблицы, "");
	Сам().ПроверитьРавенство(ФС.СуществуетФайл(ИмяФайлаТаблицы), 1);

	// т.к. ДБФ не работает с длинными именами файлов, создаю файл с коротким именем
	ИмяФайлаТаблицы2 = "C:\1cpptemp.dbf";
	Если ФС.СуществуетФайл(ИмяФайлаТаблицы2) = 1 Тогда
		ФС.УдалитьФайл(ИмяФайлаТаблицы2);
		Если ФС.СуществуетФайл(ИмяФайлаТаблицы2) = 1 Тогда
			Модуль = СоздатьОбъект("ВыполняемыйМодуль");
			Модуль.ВыброситьИскл(, "Не удалось удалить файл "+ИмяФайлаТаблицы2);
		КонецЕсли;
	КонецЕсли;
	ФС.КопироватьФайл(ИмяФайлаТаблицы, ИмяФайлаТаблицы2, 1);

	ДБФФайл = СоздатьОбъект("XBase");
	ДБФФайл.ОткрытьФайл(ИмяФайлаТаблицы2,, 1); // только чтение
	Сам().ПроверитьРавенство(ДБФФайл.Открыта(), 1);

	Сам().ПроверитьРавенство(ДБФФайл.КоличествоЗаписей(), СписокДокументов.РазмерСписка());
	Сам().ПроверитьБольшеИлиРавно(ДБФФайл.КоличествоПолей(), 2); // на самом деле 3 поля

	// теперь проверю тип полей
		//VAL         Character          9
		//ISFOLDER    Numeric            2       0

	НаименованиеПоля = "";
	ТипПоля = "";
	ДлинаПоля = 0;
	ТочностьПоля = 0;
	ДБФФайл.ОписаниеПоля(1, НаименованиеПоля, ТипПоля, ДлинаПоля, ТочностьПоля);
	Сам().ПроверитьРавенство(НаименованиеПоля, "VAL");
	Сам().ПроверитьРавенство(ТипПоля, 2);
	Сам().ПроверитьРавенство(ДлинаПоля, 9);

	НаименованиеПоля = "";
	ТипПоля = "";
	ДлинаПоля = 0;
	ТочностьПоля = -1;
	ДБФФайл.ОписаниеПоля(2, НаименованиеПоля, ТипПоля, ДлинаПоля, ТочностьПоля);
	Сам().ПроверитьРавенство(НаименованиеПоля, "ISFOLDER");
	Сам().ПроверитьРавенство(ТипПоля, 1);
	Сам().ПроверитьРавенство(ДлинаПоля, 2);
	Сам().ПроверитьРавенство(ТочностьПоля, 0);

	// теперь проверю сами значения полей
	MetaDataWork = СоздатьОбъект("MetaDataWork");
	Для к=1 По ДБФФайл.КоличествоЗаписей() Цикл
		ДБФФайл.Перейти(к);
		ИДИзБазы = ДБФФайл.VAL;

		ИДДокумента = MetaDataWork.ЗначениеВСтрокуБД(СписокДокументов.ПолучитьЗначение(к));
		Сам().ПроверитьРавенство(ИДИзБазы, ИДДокумента);

		Сам().ПроверитьРавенство(ДБФФайл.IsFolder, 2);
	КонецЦикла;

	ДБФФайл.ЗакрытьФайл();

	//// теперь проверю удаление временной таблицы
	//OLEDBCommand = 0;
	//Сам().ПроверитьРавенство(ФС.СуществуетФайл(ИмяФайлаТаблицы), 0);

	Возврат ИмяФайлаТаблицы;
КонецФункции

Процедура Тест_OLEDBCommand_УложитьСписокОбъектов_ВКаталогИБ_Список() Экспорт

	//Если Найти(КаталогИБ(), " ") > 0 Тогда // пробелы есть ?
	//	Сам().ПропуститьТест(0, "Для проверки этого теста в наименовании каталога ИБ не должно быть пробелов");
	//КонецЕсли;

	СписокДокументов = ПроверитьУложитьСписокОбъектов_Начало();
	ИмяФайлаТаблицы = ПроверитьУложитьСписокОбъектов_Конец(СписокДокументов);

	// проверю созданный дбф-файл
	Сам().ПроверитьНеРавенство(ИмяФайлаТаблицы, "");
	Сам().ПроверитьРавенство(ФС.СуществуетФайл(КаталогИБ()+ИмяФайлаТаблицы), 1);

КонецПроцедуры

Процедура Тест_OLEDBCommand_УложитьСписокОбъектов_ВДругойКаталог_Список() Экспорт
	СписокДокументов = ПроверитьУложитьСписокОбъектов_Начало();

	Тест_OLEDBCommand_УстановитьКаталогВремТаблиц();

	ПроверитьУложитьСписокОбъектов_Конец(СписокДокументов);
КонецПроцедуры

Процедура Тест_OLEDBCommand_УложитьСписокОбъектов_УдалениеВременныхФайлов_ВДеструкторе() Экспорт
	СписокДокументов = ПроверитьУложитьСписокОбъектов_Начало();

	ИмяКаталогаВременныхФайлов = "C:\"+"КаталогВременныхФайлов";
	//ИмяКаталогаВременныхФайлов = "C:\"+"TempFilesFolder";
	СоздатьКаталог(ИмяКаталогаВременныхФайлов);

	OLEDBCommand.УстановитьКаталогВремТаблиц(ИмяКаталогаВременныхФайлов);

	// несколько раз
	ИмяТаблицы1 = "";
	OLEDBCommand.УложитьСписокОбъектов(СписокДокументов, ИмяТаблицы1);

	ИмяТаблицы2 = "";
	OLEDBCommand.УложитьСписокОбъектов(СписокДокументов, ИмяТаблицы2);

	ИмяТаблицы3 = "";
	OLEDBCommand.УложитьСписокОбъектов(СписокДокументов, ИмяТаблицы3);

	Сам().ПроверитьНеРавенство(ИмяТаблицы1, ИмяТаблицы2);
	Сам().ПроверитьНеРавенство(ИмяТаблицы1, ИмяТаблицы3);
	Сам().ПроверитьНеРавенство(ИмяТаблицы2, ИмяТаблицы3);

	Сам().ПроверитьРавенство(ФС.СуществуетФайл(ИмяТаблицы1+".dbf"), 1);
	Сам().ПроверитьРавенство(ФС.СуществуетФайл(ИмяТаблицы2+".dbf"), 1);
	Сам().ПроверитьРавенство(ФС.СуществуетФайл(ИмяТаблицы3+".dbf"), 1);

	// теперь проверю удаление временной таблицы
	OLEDBCommand = 0;
	Сам().ПроверитьРавенство(ФС.СуществуетФайл(ИмяТаблицы1+".dbf"), 0);
	Сам().ПроверитьРавенство(ФС.СуществуетФайл(ИмяТаблицы2+".dbf"), 0);
	Сам().ПроверитьРавенство(ФС.СуществуетФайл(ИмяТаблицы3+".dbf"), 0);
КонецПроцедуры

Процедура Тест_OLEDBCommand_УложитьСписокОбъектов_УдалениеВременныхФайлов_ПриЗакрытии() Экспорт
	СписокДокументов = ПроверитьУложитьСписокОбъектов_Начало();

	ИмяКаталогаВременныхФайлов = "C:\"+"КаталогВременныхФайлов";
	//ИмяКаталогаВременныхФайлов = "C:\"+"TempFilesFolder";
	СоздатьКаталог(ИмяКаталогаВременныхФайлов);

	OLEDBCommand.УстановитьКаталогВремТаблиц(ИмяКаталогаВременныхФайлов);

	// несколько раз
	ИмяТаблицы1 = "";
	OLEDBCommand.УложитьСписокОбъектов(СписокДокументов, ИмяТаблицы1);

	ИмяТаблицы2 = "";
	OLEDBCommand.УложитьСписокОбъектов(СписокДокументов, ИмяТаблицы2);

	ИмяТаблицы3 = "";
	OLEDBCommand.УложитьСписокОбъектов(СписокДокументов, ИмяТаблицы3);

	Сам().ПроверитьНеРавенство(ИмяТаблицы1, ИмяТаблицы2);
	Сам().ПроверитьНеРавенство(ИмяТаблицы1, ИмяТаблицы3);
	Сам().ПроверитьНеРавенство(ИмяТаблицы2, ИмяТаблицы3);

	Сам().ПроверитьРавенство(ФС.СуществуетФайл(ИмяТаблицы1+".dbf"), 1);
	Сам().ПроверитьРавенство(ФС.СуществуетФайл(ИмяТаблицы2+".dbf"), 1);
	Сам().ПроверитьРавенство(ФС.СуществуетФайл(ИмяТаблицы3+".dbf"), 1);

	// теперь проверю удаление временной таблицы
	OLEDBCommand.Закрыть();
	Сам().ПроверитьРавенство(ФС.СуществуетФайл(ИмяТаблицы1+".dbf"), 0);
	Сам().ПроверитьРавенство(ФС.СуществуетФайл(ИмяТаблицы2+".dbf"), 0);
	Сам().ПроверитьРавенство(ФС.СуществуетФайл(ИмяТаблицы3+".dbf"), 0);
КонецПроцедуры

Процедура Тест_OLEDBData_СоединениеПоУмолчанию() Экспорт
	OLEDBData = OLEDBData();

	лРезультатСоединения = OLEDBData.Соединение();
	Сам().ПроверитьРавенство(лРезультатСоединения, 1);

	OLEDBCommand = OLEDBData.СоздатьКоманду();

	ТекстЗапроса =
	"select *
	|from 1SUSERS.DBF";
	лКоличество = OLEDBCommand.Выполнить(ТекстЗапроса);
	Сам().ПроверитьРавенство(лКоличество, 1);
КонецПроцедуры

Процедура Тест_OLEDBCommand_СоединениеПоУмолчанию2() Экспорт
	OLEDBData = OLEDBData();

	лРезультатСоединения = OLEDBData.Соединение();
	Сам().ПроверитьРавенство(лРезультатСоединения, 1);

	OLEDBCommand = OLEDBData.СоздатьКоманду();

	ТекстЗапроса =
	"select *
	|from 1SUSERS.DBF";
	лТабЗапроса = OLEDBCommand.ВыполнитьИнструкцию(ТекстЗапроса);
	Сам().ПроверитьРавенство(ТипЗначенияСтр(лТабЗапроса), "ТаблицаЗначений");

	Сам().ПроверитьРавенство(лТабЗапроса.КоличествоСтрок(), 1);
	лТабЗапроса.ПолучитьСтрокуПоНомеру(1);
	Сам().ПроверитьБольшеИлиРавно(лТабЗапроса.USRSCNT, 1);
	Сам().ПроверитьБольшеИлиРавно(лТабЗапроса.NETCHGCN, 0);

КонецПроцедуры

Процедура Тест_ПервыйТестКирилла() Экспорт // :)
	Сам = Сам();

	OLEDBCommand = СоздатьИСоединить();
	OLEDBCommand.Отладка(0);

	// получаем таблицу с id and descr
	//
	тЗапрос = "
	|SELECT
	|	id,
	|	descr
	|FROM
	|	$Справочник.Классы1СПП
	|";

	ТЗэт = OLEDBCommand.ExecuteStatement(тЗапрос);

	OLEDBCommand.ДобПараметр(1, 129, 9, 0, "");
	OLEDBCommand.ДобПараметр(1, 129, 100, 0, "");

	тЗапрос = "
	|SELECT
	|	id,
	|	descr
	|FROM
	|	$Справочник.Классы1СПП
	|WHERE (id = ?) AND (descr = ?)
	|";

	OLEDBCommand.Подготовить(тЗапрос);

	Для П = 1 По ТЗэт.КоличествоСтрок() Цикл
		ТекИД	 = ТЗэт.ПолучитьЗначение(П, "id");
		ТекНаим	 = ТЗэт.ПолучитьЗначение(П, "descr");

		OLEDBCommand.УстановитьПараметр(1, ТекИД);
		OLEDBCommand.УстановитьПараметр(2, ТекНаим);

		ТЗ = OLEDBCommand.ExecuteStatement();

		Сам.ПроверитьРавенство(ТЗ.ПолучитьЗначение(1, "id"), ТекИД);
		Сам.ПроверитьРавенство(ТЗ.ПолучитьЗначение(1, "descr"), ТекНаим);

		Состояние("Обработано строк: " + П);
	КонецЦикла;

	// эти две строки по идее должны быть в деструкторе теста, отсюда их можно убрать !
	//OLEDBCommand.Unprepare();
	//OLEDBCommand.Закрыть();

КонецПроцедуры
