Загружаем данные из Access в 1С
Код 1C v 8.х Файл = "C:\files\demo.mdb" ;
СтрокаПодключения = "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( ) ;
Код 1C v 7.x Акцесс = СоздатьОбъект( "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( ) ;
СтрокаПодключения= "Driver= Microsoft Access Driver (*.mdb)};systemDB=C:\wg.mdw;Dbq=C:\mybase.mdb;Uid=Admin;Pwd=" ;
Работа с ACCESS из 1С через DAO
Код 1C v 7.x Процедура Выполнить()
Спр = СоздатьОбъект( "Справочник.ТоварыВПрайсе" ) ;
Спр. ИспользоватьВладельца( ФасВладелец) ;
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( ) ;
Сообщить( "Выгрузка завершена" ) ;
КонецПроцедуры
Код 1C v 7.x
Процедура ACCESS()
dbe= CreateObject( "DAO.DBEngine.36" ) ;
wksp= dbe. Workspaces( 0 ) ;
db= 0 ;
Если ФС. СуществуетФайл( КаталогПользователя( ) + "sr.mdb" ) = 0 Тогда
db= wksp. CreateDataBase( КаталогПользователя( ) + "mars_sr.mdb" , ";LANGID=0x0419;CP=1251;COUNTRY=0" ) ;
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= db. OpenRecordset( "BANKS" ) ;
rs. AddNew( ) ;
rs. REC_IND = "1" ;
rs. BANKCODE = "34" ;
rs. BANKNAME = "Инвест" ;
rs. ModifiedFlg = "1" ;
rs. Update( ) ;
db. Close( ) ;
КонецПроцедуры
Нужен Отчет, в котором было бы видно, кто и из какой организации к нам пришел?
Эти данные хранятся в Табличной части "Трудовая деятельность" справочника "ФизическиеЛица", еще нужно вывести в отчет текущую Должность и Подразделение(Выводить ПолноеНаименование, т.е со всеми родителями) работника из регистра сведений "Работники орагнизации" и получить из документа "ПриемНаРаботуВОрганизацию" Дату приема и номер документа.
1. Создаем новый отчет, открываем СКД и добавляем набор данных Запрос. Согласно нашим требованиям формируем запрос:
Код 1C v 8.х ВЫБРАТЬ
ФизическиеЛицаТрудоваяДеятельность. Ссылка,
ФизическиеЛицаТрудоваяДеятельность. НомерСтроки,
ФизическиеЛицаТрудоваяДеятельность. Организация,
ФизическиеЛицаТрудоваяДеятельность. ДатаНачала,
ФизическиеЛицаТрудоваяДеятельность. ДатаОкончания,
ФизическиеЛицаТрудоваяДеятельность. Должность КАК ДолжностьТруд,
ПриемНаРаботуВОрганизациюРаботникиОрганизации. Ссылка. Номер,
ПриемНаРаботуВОрганизациюРаботникиОрганизации. Ссылка. Дата,
РаботникиОрганизацийСрезПоследних. ПодразделениеОрганизации,
РаботникиОрганизацийСрезПоследних. Должность КАК Должность,
РаботникиОрганизацийСрезПоследних. Сотрудник. Код,
ПриемНаРаботуВОрганизациюРаботникиОрганизации. ДатаПриема,
РаботникиОрганизацийСрезПоследних. Организация КАК ОрганизацияГлавная,
ВЫБОР
КОГДА РаботникиОрганизацийСрезПоследних. ПодразделениеОрганизации. Родитель. Наименование ЕСТЬ NULL
ТОГДА РаботникиОрганизацийСрезПоследних. ПодразделениеОрганизации. Наименование
КОГДА РаботникиОрганизацийСрезПоследних. ПодразделениеОрганизации. Родитель. Родитель. Наименование ЕСТЬ NULL
ТОГДА РаботникиОрганизацийСрезПоследних. ПодразделениеОрганизации. Родитель. Наименование + " / " + РаботникиОрганизацийСрезПоследних. ПодразделениеОрганизации. Наименование
ИНАЧЕ РаботникиОрганизацийСрезПоследних. ПодразделениеОрганизации. Родитель. Родитель. Наименование + " / " + РаботникиОрганизацийСрезПоследних. ПодразделениеОрганизации. Родитель. Наименование + " / " + РаботникиОрганизацийСрезПоследних. ПодразделениеОрганизации. Наименование
КОНЕЦ КАК ПолныйКод
ИЗ
Справочник. ФизическиеЛица. ТрудоваяДеятельность КАК ФизическиеЛицаТрудоваяДеятельность
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений. РаботникиОрганизаций. СрезПоследних КАК РаботникиОрганизацийСрезПоследних
ПО ФизическиеЛицаТрудоваяДеятельность. Ссылка = РаботникиОрганизацийСрезПоследних. Сотрудник. Физлицо. Ссылка
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ. ПриемНаРаботуВОрганизацию. РаботникиОрганизации КАК ПриемНаРаботуВОрганизациюРаботникиОрганизации
ПО ФизическиеЛицаТрудоваяДеятельность. Ссылка = ПриемНаРаботуВОрганизациюРаботникиОрганизации. ФизЛицо. Ссылка
2. Переходим в закладку Настройки, Заполняем Выбранные поля Добавляем к отчету пустую группировку:
3. В итоге должно получиться:
4. Сохраняем и проверяем отчет, уже что-то формируется
:
5. Теперь сделаем отчет красивым. Добавим отбор по организации на форме, и создадим макет вывода. Создадим основную форму отчета, кроме существующих Элементов панели и Табличного документа "Результат" добавим на форму "ТабличноеПоле" и установим Данные: "КомпоновщикНастроек.Настройки.Отбор"
6. Откроем СКД, закладку Макеты. В табличном поле Нарисуем макет, в левом верхнем поле Добавим макет Группировки "ЗаголовокОтчета:Заголовок" и "СтрокаОтчета:Заголовок". В нижнем левом поле опишем Параметры макета, для "СтрокаОтчета:Заголовок":
7. На закладке Настройки, добавим группировки "ОрганизацияГлавная" и входящая в нее "Детальные записи". Щелкнув правой клавишей мыши на каждой группировке и выбрав из меню пункт "Установить имя..." установим именя областей созданного макета. Заполним Выбранные поля:
8. Внизу на закладке "Отбор" установим:
9. Сохраним отчет и проверим его работу, все ок
Автор:
Евгений Мигачев Данный пример для 3-х уровнего справочника, но по аналогии можно построить и другие запросы
ПолныйКод будет равен = Надежные/Покупатели/ООО СтарМаг
Код 1C v 8.х ВЫБРАТЬ
Контрагенты. Ссылка,
ВЫБОР
КОГДА ( Контрагенты. Родитель. Наименование ЕСТЬ NULL ) ТОГДА Контрагенты. Наименование
КОГДА ( Контрагенты. Родитель. Родитель. Наименование ЕСТЬ NULL ) ТОГДА Контрагенты. Родитель. Наименование + "/" + Контрагенты. Наименование
ИНАЧЕ Контрагенты. Родитель. Родитель. Наименование + "/" + Контрагенты. Родитель. Наименование + "/" + Контрагенты. Наименование
КОНЕЦ КАК ПолныйКод
ИЗ
Справочник. Контрагенты КАК Контрагенты
Как получить Полный Код:
для Кода с типом - Строка:
Например ПолныйКод будет равен = 0012/0007/0045
Код 1C v 8.х
ВЫБРАТЬ
Контрагенты. Ссылка,
ВЫБОР
КОГДА ( Контрагенты. Родитель. Код ЕСТЬ NULL ) ТОГДА Контрагенты. Код
КОГДА ( Контрагенты. Родитель. Родитель. Код ЕСТЬ NULL ) ТОГДА Контрагенты. Родитель. Код + "/" + Контрагенты. Код
ИНАЧЕ Контрагенты. Родитель. Родитель. Код + "/" + Контрагенты. Родитель. Код + "/" + Контрагенты. Код
КОНЕЦ КАК ПолныйКод
ИЗ
Справочник. Контрагенты КАК Контрагенты
для Кода с типом - Число:
Целиком В запросе выбрать код
невозможно!
Только потом, обрабатывая результат через
ПолныйКод()