Сегодня поговорим о способах чтения и записи SDF-файлов в 1С. SDF-файл — это файл базы данных Microsoft SQL Server Compact Edition.
Для работы с этой базой данных потребуется становить сам SQL Server CE (ссылка) — последней на данный момент является версия 4.0, но я рекомендую версию 3.5 (по ссылке именно она).
К сожалению SDF-файл нельзя подключить к конфигурации как внешний источник данных — в открытых источниках не существует нужного ODBC драйвера, поэтому работа осуществляется через ADO.
Чтение из SDF
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 | &НаКлиенте Процедура Чтение(Команда) тАДО = Новый COMОбъект("ADODB.Connection"); тАДО.Open("Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=D:\base.sdf;SSCE:Database Password="); тАДОРекордСет = Новый COMОбъект("ADODB.RecordSet"); тАДОРекордСет.Open("SELECT * FROM material", тАДО); //Можно использовать другой, чуть более длинный вариант //тАДОКомманд = Новый COMОбъект("ADODB.Command"); //тАДОКомманд.ActiveConnection = тАДО; //тАДОКомманд.CommandText = "SELECT * FROM material"; //тАДОРекордСет = тАДОКомманд.Execute(); Если НЕ тАДОРекордСет.EOF() Тогда тАДОРекордСет.MoveFirst(); Пока тАДОРекордСет.EOF() = 0 Цикл Сообщить(""+тАДОРекордСет.Fields.Item(0).value); тАДОРекордСет.MoveNext(); КонецЦикла; КонецЕсли; тАДОРекордСет.Close(); КонецПроцедуры |
Запись в SDF
Судя по всевозможным мануалам для добавления новых строк в таблицы sdf-файла должен работать вот такой код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | &НаКлиенте Процедура Запись(Команда) тАДО = Новый COMОбъект("ADODB.Connection"); тАДО.Open("Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=D:\base.sdf;SSCE:Database Password="); тАДОРекордСет = Новый COMОбъект("ADODB.RecordSet"); тАДОРекордСет.CursorLocation = 3; тАДОРекордСет.Open("SELECT * FROM material", тАДО, 2, 3); тАДОРекордСет.AddNew(); тАДОРекордСет.Fields("code").value="1"; тАДОРекордСет.Update(); тАДОРекордСет.Close(); КонецПроцедуры |
Но по неизвестным мне причинам (скорее всего дело в поставщике) это код не работает (буду признателен за помощь в этом вопросе). Поэтому приходиться использовать sql-ную команду insert.
Выглядит это примерно так:
1 2 3 4 5 6 7 8 9 10 11 | &НаКлиенте Процедура Запись(Команда) тАДО = Новый COMОбъект("ADODB.Connection"); тАДО.Open("Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=D:\base.sdf;SSCE:Database Password="); тАДОКомманд = Новый COMОбъект("ADODB.Command"); тАДОКомманд.ActiveConnection = тАДО; тАДОКомманд.CommandText = "INSERT INTO material (code) VALUES ('1')"; тАДОКомманд.Execute(); КонецПроцедуры |
Также можно использовать команды update/delete для изменения/удаления существующих записей
На этом все, надеюсь эта статья Вам помогла.