powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / 1С 8.1 и ADO. DataTypeEnum Constants. Типы данных и преобразование
1 сообщений из 1, страница 1 из 1
1С 8.1 и ADO. DataTypeEnum Constants. Типы данных и преобразование
    #36079662
seforsource
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привожу в пример обработку для получения данных через КОМ объект из любого источника (поддерживаемого ADO при наличии драйвера) в таблицу значений. Далее использую для присвоения временной таблице, ну, и все такое...
Функция возврата таблицы значений
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
Функция ПолучитьДанные(ТекстЗапроса, СтрокаПодключения) Экспорт
	ТЗ   = Новый ТаблицаЗначений;
	conn = Новый COMОбъект("ADODB.Connection"); 
	rst  = Новый COMОбъект("ADODB.Recordset");
	
	Попытка
		conn.ConnectionString = СтрокаПодключения;
		conn.CursorLocation =  3 ;
		conn.Open();
		rst.Open(ТекстЗапроса, conn,  1 ,  1 ); 
		
		Для Счетчик =  0  По rst.Fields.Count- 1  Цикл
			TypeFields = rst.Fields(Счетчик).Type;
			DefinedSizeFields = rst.Fields(Счетчик).DefinedSize;
			NumericScaleFields = rst.Fields(Счетчик).NumericScale;
			NameFields = rst.Fields(Счетчик).Name;
			
			Если (TypeFields =  135 ) Тогда
				ТЗ.Колонки.Добавить(NameFields, ОписаниеТиповЗначений.ТипЗначенияДата(ЧастиДаты.ДатаВремя));
				Продолжить;	
			КонецЕсли;
			Если (TypeFields =  131 ) Тогда 
				ТЗ.Колонки.Добавить(NameFields, ОписаниеТиповЗначений.ТипЗначенияЧисло(DefinedSizeFields, NumericScaleFields, ДопустимыйЗнак.Любой));
				Продолжить;
			КонецЕсли;
			Если (TypeFields =  5 ) Тогда 
				ТЗ.Колонки.Добавить(NameFields, ОписаниеТиповЗначений.ТипЗначенияЧисло( 19 ,  6 , ДопустимыйЗнак.Любой));
				Продолжить;
			КонецЕсли;
			Если (TypeFields =  3 ) Тогда 
				ТЗ.Колонки.Добавить(NameFields, ОписаниеТиповЗначений.ТипЗначенияЧисло( 10 ,  0 , ДопустимыйЗнак.Любой));
				Продолжить;
			КонецЕсли;
			Если (TypeFields =  2 ) Тогда 
				ТЗ.Колонки.Добавить(NameFields, ОписаниеТиповЗначений.ТипЗначенияЧисло( 5 ,  0 , ДопустимыйЗнак.Любой));
				Продолжить;
			КонецЕсли;
			Если (TypeFields =  200 ) Тогда 
				ТЗ.Колонки.Добавить(NameFields, ОписаниеТиповЗначений.ТипЗначенияСтрока(DefinedSizeFields, ДопустимаяДлина.Переменная));
				Продолжить;
			КонецЕсли;
                //Если тип не определен, то создаем текстовое поле
				ТЗ.Колонки.Добавить(NameFields, ОписаниеТиповЗначений.ТипЗначенияСтрока(DefinedSizeFields, ДопустимаяДлина.Переменная));
		КонецЦикла;
		//Заполнение таблицы
		Пока rst.EOF() =  0  Цикл 

			НоваяСтрокаТаблицыЗначений = ТЗ.Добавить();
			Для Счетчик =  0  По rst.Fields.Count- 1  Цикл 
				НоваяСтрокаТаблицыЗначений[rst.Fields(Счетчик).Name]=rst.Fields(Счетчик).Value;
			КонецЦикла;
			rst.MoveNext(); 
		КонецЦикла; 

		Исключение
		Если rst.State <>  0  Тогда rst.Close(); КонецЕсли;
		Если conn.State <>  0  Тогда conn.Close(); КонецЕсли;
		Предупреждение(ОписаниеОшибки());
	КонецПопытки;	
	Если rst.State <>  0  Тогда rst.Close(); КонецЕсли;
	Если conn.State <>  0  Тогда conn.Close(); КонецЕсли;

	Возврат  ТЗ;
	ТЗ.Очистить();
	
	
КонецФункции

Общий модуль ОписаниеТиповЗначений
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Функция ТипЗначенияСтрока(Длина, ДопДлина) Экспорт 
	КвалификаторСтроки = Новый КвалификаторыСтроки(Длина, ДопДлина);
	Возврат Новый ОписаниеТипов("Строка", , КвалификаторСтроки, );
КонецФункции //ТипЗначенияСтрока
Функция ТипЗначенияЧисло(Разряд, РазрядДЧ, ДопЗнак) Экспорт 
	КвалификаторЧисла = Новый КвалификаторыЧисла(Разряд, РазрядДЧ, ДопЗнак);
	Возврат Новый ОписаниеТипов("Число", КвалификаторЧисла, , );
КонецФункции //ТипЗначенияЧисло
Функция ТипЗначенияДата(ЧастиД) Экспорт 
	КвалификаторДаты = Новый КвалификаторыДаты(ЧастиД);
	Возврат Новый ОписаниеТипов("Дата", , , КвалификаторДаты);
КонецФункции //ТипЗначенияДата
Функция ТипЗначенияБулево() Экспорт 
	Возврат Новый ОписаниеТипов("Булево", , , );
КонецФункции //ТипЗначенияДата

Constant Value DescriptionПояснение adArray 0x2000Combine with another data type to indicate that the other data type is an array adBigInt 208-byte signed integer64-битное целое adBinary 128BinaryДвоичное adBoolean 11True or false BooleanБулево adBSTR 8Null-terminated character string adChapter 1364-byte chapter value for a child recordset adChar 129StringString adCurrency 6Currency formatДенежный формат adDate 7Number of days since 12/30/1899Количество дней с момента 12/30/1899 adDBDate 133YYYYMMDD date formatУниверсальный формат даты ГГГГММДД adDBFileTime 137Database file timeБаза данных файлов времени adDBTime 134HHMMSS time formatУниверсальный формат времени HHMMSS adDBTimeStamp 135YYYYMMDDHHMMSS date/time formatДататайм как есть YYYYMMDDHHMMSS adDecimal 14Number with fixed precision and scaleСпециальный тип 1.0хЕ-28 - 1.0хЕ28 одним словом decimal adDouble 5Double precision floating-pointДвойной точности с плавающей точкой adEmpty 0no valueПусто adError 1032-bit error code32-битный код ошибки adFileTime 64Number of 100-nanosecond intervals since 1/1/1601 adGUID 72Globally Unique identifier adIDispatch 9Currently not supported by ADOВ настоящее время не поддерживается ADO adInteger 34-byte signed integer32-битное целое adIUnknown 13Currently not supported by ADOВ настоящее время не поддерживается ADO adLongVarBinary 205Long binary value adLongVarChar 201Long string value adLongVarWChar 203Long Null-terminates string value adNumeric 131Number with fixed precision and scaleЧисло с фиксированной точности и масштаба adPropVariant 138PROPVARIANT automation adSingle 4Single-precision floating-point value32-битное знаковое одинарной точности с плавающей точкой adSmallInt 22-byte signed integer16-битное целое со знаком adTinyInt 161-byte signed integer8-битное целое со знаком adUnsignedBigInt 218-byte unsigned integer64-битное целое беззнаковое adUnsignedInt 194-byte unsigned integer32-битное целое беззнаковое adUnsignedSmallInt 182-byte unsigned integer16-битное целое беззнаковое adUnsignedTinyInt 171-byte unsigned integer8-битное целое беззнаковое adUserDefined 132User-defined variableПользовательский тип adVarBinary 204Binary valueДвоичные значения adVarChar 200String adVariant 12Automation variant adVarNumeric 139Variable width exact numeric with signed scale adVarWChar 202Null-terminated Unicode character stringКакие-то строки в юникоде adWChar 130Null-terminated Unicode character stringКакие-то строки в юникоде

Еще у меня были вопросы:
Помогите разобраться с типами до конца.
Суть: соединяюсь с БД (MSSQL2005 или Текстовый документ) при помощи ADO из 1С (COM-объекты) драйвера подключения Driver={SQL Server} Driver={Microsoft Text Driver (*.txt; *.csv)}
В БД как и в текстовом файле типы данных полей Поле1 varchar(12) аналогично Text 12 и Поле2 varchar(128) аналогично Text 128
rst - ADODB.Recordset
Свойство rst.Fields(index).Type возвращает значания 201 и 202, даже если Поле1 varchar(12) преобразовать в Поле1 varchar(128)
Поле1 - не содержит кирилицы
Поле2 - только кирилица
Если в Поле1 добавить строки с кирилицей все равно Type = 201! Как так? (Это вопрос №1) Причем Поле1 и Поле2 отображается корректно!
Поможете заполнить таблицу до конца? (Это вопрос №2)
Но после сохранения конфигурации Тип строки стал 200 и все ок... в общем не очень-то понял почему так...

У меня вопрос, я правильно делаю или нет? Меня 1С напрягает неявными типами и объявлениями.
Может у кого-то есть подобный модуль? Поделитесь, а?


Табличку поможете заполнить до конца?
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / 1С 8.1 и ADO. DataTypeEnum Constants. Типы данных и преобразование
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]