Файл = "C:\files\demo.mdb" ; //СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Файл + "; Extended Properties=""Excel 8.0;HDR=NO;"""; СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Файл + ";"""; Connection = Новый COMОбъект("ADODB.Connection"); Попытка Connection.Open(СтрокаПодключения); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; Command = Новый COMОбъект("ADODB.Command"); Command.ActiveConnection = Connection; Command.CommandText = "S_elect * FROM Table1"; Command.CommandType = 1; RecordSet = Новый COMОбъект("ADODB.RecordSet"); RecordSet = Command.Execute(); стр =""; Пока RecordSet.EOF() = 0 Цикл для н=0 по Recordset.Fields.Count -1 цикл стр = стр + " " + Recordset.Fields(н).Value; КонецЦикла; Сообщить(стр); стр =""; RecordSet.MoveNext(); КонецЦикла; RecordSet.Close(); Connection.Close();
Акцесс = СоздатьОбъект("ADODB.CONNECTION"); Попытка СтрокаПодключения="Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mybase.mdb;Uid=Admin;Pwd="; Акцесс.Open(СтрокаПодключения); Исключение Сообщить("Все плохо:"+ОписаниеОшибки()); Возврат; КонецПопытки; Команда = СоздатьОбъект("ADODB.Command"); Команда.ActiveConnection=Акцесс; ТекстСелект = "S_elect * FROM tblCustoms"; НаборЗаписей = СоздатьОбъект("ADODB.RecordSet"); Команда.CommandText=ТекстСелект; Попытка НаборЗаписей=Команда.Execute; Исключение Сообщить("Обломись:"+ОписаниеОшибки()); КонецПопытки; Попытка НаборЗаписей.MoveFirst(); Исключение //нет записей в рекордсете НаборЗаписей.Close(); Возврат; КонецПопытки; Пока НаборЗаписей.EOF()=0 Цикл ИНН = НаборЗаписей.Fields("INN").Value; //ну и т.д. НаборЗаписей.MoveNext(); КонецЦикла; НаборЗаписей.Close(); // Для тех, у кого в базе Акцесс создана рабочая группа (есть файлик mdw), строка подключения будет такая: СтрокаПодключения="Driver= Microsoft Access Driver (*.mdb)};systemDB=C:\wg.mdw;Dbq=C:\mybase.mdb;Uid=Admin;Pwd=";
Процедура Выполнить() //фасВладелец = СтрЗаменить(фасВладелец," ","_"); Спр = СоздатьОбъект("Справочник.ТоварыВПрайсе"); Спр.ИспользоватьВладельца(ФасВладелец); dbe = СоздатьОбъект("dao.DBEngine.36"); wksp = dbe.Workspaces(0); db = 0; Если ФС.СуществуетФайл(КаталогИБ()+"Pric_list.mdb")=0 Тогда // db = wksp.CreateDataBase(КаталогИБ()+"Pric_list.mdb",";LANGID=0x0419;Cp=1251;Country=0"); // db.Execute("Create table [" + Строка(фасВладелец) + "] |(Rec_ind integer, |Код text, |Артикул text, |Цена integer, |Товар text, |Единица text, |Val text);" ); db.Execute("Create index Rec_ind on ["+Строка(фасВладелец)+"] (Rec_ind);"); Иначе db= wksp.OpenDataBase(КаталогИБ()+"Pric_list.mdb"); Попытка rs = db.OpenRecordset(Строка(фасВладелец)); Исключение Сообщить("Создается новая таблица"); КонецПопытки; Если ПустоеЗначение(rs)= 1 Тогда db.Execute("Create table [" + Строка(фасВладелец) + "] |(Rec_ind integer, |Код text, |Артикул text, |Цена integer, |Товар text, |Единица text, |Val text);" ); db.Execute("Create index Rec_ind on ["+Строка(фасВладелец)+"] (Rec_ind);"); КонецЕсли; db.Execute("Delete * From ["+Строка(фасВладелец)+"];"); КонецЕсли; rs = db.OpenRecordset(Строка(фасВладелец)); Y = 1; Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент() = 1 Цикл лсЕдиницы = ""; Если Спр.асТовар.апТип=Перечисление.ТипТовара.Услуга Тогда лсЕдиницы = ""; ИначеЕсли Спр.асТовар.апТип=Перечисление.ТипТовара.Весовой Тогда лсЕдиницы = "г"; ИначеЕсли Спр.асТовар.апТип=Перечисление.ТипТовара.Штучный Тогда лсЕдиницы = "шт."; КонецЕсли; Если Спр.ЭтоГруппа() = 0 Тогда rs.AddNew(); rs.Rec_ind = Y; rs.Код= Спр.асТовар.ПолныйКод(); rs.Артикул = Спр.асТовар.сАртикул; rs.Цена = Спр.чЦена; rs.Товар=Спр.асТовар.сПолнНаименование; rs.Единица = лсЕдиницы; rs.Val = Спр.асВалюта.Код; rs.Update(); Y=Y+1; КонецЕсли; КонецЦикла; db.Close(); Сообщить("Выгрузка завершена"); КонецПроцедуры
Процедура ACCESS() dbe=CreateObject("DAO.DBEngine.36"); wksp=dbe.Workspaces(0); db=0; // в ковычках имя фаила с расширением MDB Если ФС.СуществуетФайл(КаталогПользователя()+"sr.mdb")=0 Тогда // создание файла базы данных с русским порядком сортировки db=wksp.CreateDataBase(КаталогПользователя()+"mars_sr.mdb",";LANGID=0x0419;CP=1251;COUNTRY=0"); // DDL - запрос на создание таблицы // описание языка DDL (подмножество SQL) смотрите в хелпе по MS Access // не пытайтесь делать это с другими форматами - DDL через DAO поддерживается только для MDB //Создадим еще таблицу db.Execute("CREATE TABLE BANKS |(REC_IND INTEGER, |BANKCODE INTEGER, |BANKNAME TEXT , |ModifiedFlg BIT, |ChangeSeqFlg BIT);" ); // индекс на нужные поля db.Execute("CREATE INDEX REC_IND ON BANKS (REC_IND);"); Иначе // просто открываем базу данных в разделенном режиме db=wksp.OpenDataBase(КаталогПользователя()+"sr.mdb"); // и очищаем имеющиеся данные db.Execute("DELETE * FROM BANKS;"); КонецЕсли; // rs-это как раз сама таблица, куда мы будем добавлять записи rs=db.OpenRecordset("BANKS"); // добавление записи rs.AddNew(); // присвоение значений полям rs.REC_IND = "1"; rs.BANKCODE = "34"; rs.BANKNAME = "Инвест"; rs.ModifiedFlg = "1"; // запомним запись rs.Update(); // и так далее ... db.Close(); // закрытие базы данных КонецПроцедуры
// Параметры: // ВидСправочника - Строка, указывающая вид справочника, как он задан в конфигураторе // ДобавлятьЭлементыСправочника - 1- добавить колонку с наименованием "Элемент", содержащую элементы справочников, 0 - не добавлять колонку // ИмяРеквизита - Имя реквизита, как он задан в конфигураторе. Используется при заполнении таблицы из выборки по значению реквизита. // ЗначениеРеквизита - Значение реквизита, по которому надо построить выборку. Используется при заполнении таблицы из выборки по значению реквизита. // ЭлементВладелец - Владелец, указывается для подчиненных справочников // ЭлементРодитель - Родитель, используется в случае, если надо ограничить выборку условием принадлежности элементов одной группе // ВключатьПодчиненные - Установить флаг выборки всех подчиненных элементов. // Иерархия - Флаг указывающий на то как выбирать элементы (1 - выбирать элементы с учетом иерархии, 0 - выбирать элементы без учета иерархии) // ВОбратномПорядке - Число: 1 - выбирать элементы справочника в обратном порядке; 0 - выбирать элементы справочника в прямом порядке // ВключатьГруппы - 1 - выбирать среди групп справочника, 0 - выбирать только среди элементов // // Возвращает: Таблица значений, колонками которой, являются реквизиты справочника Функция СправочникВТЗ(ВидСправочника, ДобавлятьЭлементыСправочника = 0,ИмяРеквизита = 0, ЗначениеРеквизита = 0, ЭлементВладелец = 0, ЭлементРодитель = 0, ВключатьПодчиненные = 1, Иерархия = 1, ВОбратномПорядке = 0, ВключатьГруппы = 0) Экспорт ТаблицаСпр = СоздатьОбъект("ТаблицаЗначений"); мдСпр = Метаданные.Справочник(ВидСправочника); ВсегоРеквизитовСпр = мдСпр.Реквизит(); Для индРекв = 1 по ВсегоРеквизитовСпр Цикл Вид = мдСпр.Реквизит(индРекв).Вид; ТаблицаСпр.НоваяКолонка(мдСпр.Реквизит(индРекв).Идентификатор, мдСпр.Реквизит(индРекв).Тип + ?(ПустоеЗначение(Вид) = 0, "." + Вид, ""), мдСпр.Реквизит(индРекв).Длина, мдСпр.Реквизит(индРекв).Точность); КонецЦикла; ТаблицаСпр.НоваяКолонка("Код", ?(мдСпр.ТипКода = "Текстовый", "Строка", "Число"), мдСпр.ДлинаКода); ТаблицаСпр.НоваяКолонка("Наименование", "Строка", мдСпр.ДлинаНаименования); Если ДобавлятьЭлементыСправочника = 1 тогда ТаблицаСпр.НоваяКолонка("Элемент", "Справочник." + ВидСправочника); КонецЕсли; Спр = СоздатьОбъект("Справочник." + ВидСправочника); Если ЭлементВладелец <> 0 тогда Спр.ИспользоватьВладельца(ЭлементВладелец); КонецЕсли; Если ЭлементРодитель <> 0 тогда Спр.ИспользоватьРодителя(ЭлементРодитель); КонецЕсли; Спр.ОбратныйПорядок(ВОбратномПорядке); Спр.ВключатьПодчиненные(ВключатьПодчиненные); Если ИмяРеквизита = 0 тогда Спр.ВыбратьЭлементы(Иерархия); Иначе Спр.ВыбратьЭлементыПоРеквизиту(ИмяРеквизита, ЗначениеРеквизита, Иерархия, ВключатьГруппы); КонецЕсли; Пока Спр.ПолучитьЭлемент() = 1 Цикл ТаблицаСпр.НоваяСтрока(); ТекущаяСтрока = ТаблицаСпр.НомерСтроки; Для НомерКолонки= 1 по ВсегоРеквизитовСпр Цикл ТаблицаСпр.УстановитьЗначение(ТекущаяСтрока, НомерКолонки, Спр.ПолучитьАтрибут(мдСпр.Реквизит(НомерКолонки))); КонецЦикла; ТаблицаСпр.Код = Спр.Код; ТаблицаСпр.Наименование = Спр.Наименование; Если ДобавлятьЭлементыСправочника = 1 тогда ТаблицаСпр.УстановитьЗначение(ТекущаяСтрока, "Элемент", Спр.ТекущийЭлемент()); КонецЕсли; КонецЦикла; Возврат ТаблицаСпр; КонецФункции
Выборка = Справочники.Номенклатура.Выбрать( , Владелец); Если Выборка.Следующий() = Истина Тогда // Есть подчиненные элементы. КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ЕдиницыИзмерения.Ссылка |ИЗ | Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения |ГДЕ | ЕдиницыИзмерения.Владелец = &Владелец"; Запрос.УстановитьПараметр("Владелец", Владелец); Если НЕ Запрос.Выполнить().Пустой() Тогда // Есть подчиненные элементы! КонецЕсли;
Спр=СоздатьОбъект("Справочник.Контрагенты"); Попытка дог=СоздатьОбъект("Справочник.Договоры"); исключение Предупреждение("В конфигурации нет справочника ДОГОВОРЫ"); возврат; конецПопытки; Спр.ВыбратьЭлементы();//перебираем справочник-владелец Пока спр.ПолучитьЭлемент()=1 Цикл Если спр.ЭтоГруппа()=1 Тогда продолжить;//группы не имеют подчиненных элементов КонецЕсли; Сообщить("Контрагент "+спр.Наименование+ " его договоры:"); дог.ИспользоватьВладельца(Спр.ТекущийЭлемент());//будем перебирать только //подчиненные владельцу дог.ВыбратьЭлементы(); //перебираем только подчиненные конкретному владельцу Пока дог.получитьЭлемент()=1 Цикл сообщить("----------"+дог.наименование); КонецЦикла; КонецЦикла;
//проуедура всем контрагентам мозжает подчиненный докогвор "Дополнительный" Спр=СоздатьОбъект("Справочник.Контрагенты"); Попытка дог=СоздатьОбъект("Справочник.Договоры"); исключение Предупреждение("В конфигурации нет справочника ДОГОВОРЫ"); возврат; конецПопытки; Спр.ВыбратьЭлементы();//перебираем справочник-владелец Пока спр.ПолучитьЭлемент()=1 Цикл Если спр.ЭтоГруппа()=1 Тогда продолжить;//группы не могут имет подчиненных элементов КонецЕсли; дог.ИспользоватьВладельца(спр.ТекущийЭлемент()); дог.Новый(); Дог.наименование="Дополнительный"; дог.записать();//это часто забывают написать конецЦикла;
// Получить выборку по указанному контрагенту. Выборка = Справочники.КонтактныеЛица.Выбрать( , Контрагент); Пока Выборка.Следующий() Цикл ОчереднойПодчиненый = Выборка.Ссылка; КонецЦикла; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КонтактныеЛица.Ссылка |ИЗ | Справочник.КонтактныеЛица КАК КонтактныеЛица |ГДЕ | КонтактныеЛица.Владелец = &Владелец"; Запрос.УстановитьПараметр("Владелец", Контрагент); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл ОчереднойПодчиненый = Выборка.Ссылка; КонецЦикла;
//При работе с подчиненным справочником (например, при переборе или поиске элементов) //требуется указать, для какого конкретно элемента-владельца получать подчиненные элементы. //Для этого предназначена процедура ИспользоватьВладельца(ОбъектВладелец) //агрегатного типа данных Справочник. // Пример 1 спр=СоздатьОбъект("Справочник.Модели"); спрМарка=СоздатьОбъект("Справочник.Марки"); спрМарка.НайтиПоНаименованию("BMW"); спр.ИспользоватьВладельца(спрМарка.ТекущийЭлемент()); спр.ВыбратьЭлементы(); Пока спр.ПолучитьЭлемент()=1 Цикл Сообщение(спр.ТекущийЭлемент().Наименование); КонецЦикла; // Пример 2 Спр=СоздатьОбъект("Справочник.Контрагенты"); Попытка дог=СоздатьОбъект("Справочник.Договоры"); исключение Предупреждение("В конфигурации нет справочника ДОГОВОРЫ"); возврат; конецПопытки; Спр.ВыбратьЭлементы();//перебираем справочник-владелец Пока спр.ПолучитьЭлемент()=1 Цикл Если спр.ЭтоГруппа()=1 Тогда продолжить;//группы не имеют подчиненных элементов КонецЕсли; Сообщить("Контрагент "+спр.Наименование+ " его договоры:"); дог.ИспользоватьВладельца(Спр.ТекущийЭлемент());//будем перебирать только //подчиненные владельцу дог.ВыбратьЭлементы(); //перебираем только подчиненные конкретному владельцу Пока дог.получитьЭлемент()=1 Цикл сообщить("----------"+дог.наименование); КонецЦикла; КонецЦикла;
Справ=СоздатьОбъект("Справочник.Задания"); Справ2=СоздатьОбъект("Справочник.Задания"); Справ.ИспользоватьВладельца(Цель); Справ2.ИспользоватьВладельца(Источник); Справ.ИспользоватьДату(НаДату); Справ2.ИспользоватьДату(НаДату); Справ2.ВыбратьЭлементы(); Пока Справ2.ПолучитьЭлемент()>0 Цикл Справ.Новый(); Справ.Записать(); МетаСправочник=Метаданные.Справочник(Справ.Вид()); Для Счетчик=1 По МетаСправочник.Реквизит() Цикл МетаРеквизит=МетаСправочник.Реквизит(Счетчик); Идентификатор=Строка(МетаРеквизит.Идентификатор); Значенице=Справ2.ПолучитьАтрибут(Идентификатор); Справ.УстановитьАтрибут(Идентификатор,Значенице); КонецЦикла; Справ.Записать(); КонецЦикла;