Перенос данных с использованием технологии OLE::Журнал СА 11.2008
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Наука и технологии
Подписка
Где купить
Авторам
Рекламодателям
Архив номеров
Контакты
   

  Опросы
  Статьи

Рынок труда  

Системные администраторы по-прежнему востребованы и незаменимы

Системные администраторы, практически, есть везде. Порой их не видно и не слышно,

 Читать далее...

Учебные центры  

Карьерные мечты нужно воплощать! А мы поможем

Школа Bell Integrator открывает свои двери для всех, кто хочет освоить перспективную

 Читать далее...

Гость номера  

Дмитрий Галов: «Нельзя сказать, что люди становятся доверчивее, скорее эволюционирует ландшафт киберугроз»

Использование мобильных устройств растет. А вместе с ними быстро растет количество мобильных

 Читать далее...

Прошу слова  

Твердая рука в бархатной перчатке: принципы soft skills

Лауреат Нобелевской премии, специалист по рынку труда, профессор Лондонской школы экономики Кристофер

 Читать далее...

Как хорошо вы это знаете  

Портал Инкоманд. Для чего он? Для кого? Какие проблемы решает?

Компания «ЕМДЕВ» – создатель интернет-портала, предлагает всем желающим протестировать себя на

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 10017
Комментарии: 0
Потоковая обработка данных

 Читать далее...

19.03.2018г.
Просмотров: 8227
Комментарии: 0
Релевантный поиск с использованием Elasticsearch и Solr

 Читать далее...

19.03.2018г.
Просмотров: 8328
Комментарии: 0
Конкурентное программирование на SCALA

 Читать далее...

19.03.2018г.
Просмотров: 5286
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 5961
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

Друзья сайта  

 Перенос данных с использованием технологии OLE

Архив номеров / 2008 / Выпуск №11 (72) / Перенос данных с использованием технологии OLE

Рубрика: Администрирование /  Продукты и решения

Андрей Луконькин

Перенос данных с использованием технологии OLE

Не за горами новый год, а это значит, что во многих фирмах планируется перевод автоматизированного учета либо на новый качественный уровень, либо в новую чистую базу данных. Как правило, переносятся только справочники и остатки по счетам и регистрам. Существует много способов подобного переноса данных, и каждый выбирает тот, который ему пришелся по нраву, но сейчас я хочу рассказать о применении технологии OLE к данной проблеме.

Сразу хочу сказать, что полный программный код всех обработок печатать бессмысленно из-за достаточно большого объема. На примере одной обработки я покажу основные принципы работы и расскажу свой ход мысли. Готовые обработки можно найти на сайте журнала www.samag.ru в разделе «Исходный код».

Рассмотрим типовой случай перехода с платформы «1С:Предприятие» версии 7.7 на версию 8.1 с нового года.

Задача: перенести справочники «Контрагенты» и «Договора», а также остатки взаиморасчетов по счету 60 из «старой» базы в «новую». До перехода предприятие работало с конфигурацией «Производство + Услуги + Бухгалтерия» (платформа 7.7), после перехода собирается работать с конфигурацией «Управление производственным предприятием» (платформа 8.1).

Разделим задачу на две. Первая – перенос справочников, вторая – перенос остатков по счетам.

При переносе справочников создадим дополнительную структуру (регистр сведений), который будет использоваться для поиска и точной идентификации перенесенных объектов в базе данных. Назовем этот регистр «СтруктураПерегрузки», первое измерение будет «ИД» (строка, длина 150), второе – «Орг» (для случая многофирменного учета), ресурс «Элемент» составного типа данных, включающий в себя все справочники, которые мы собираемся заполнять переносом данных.

При загрузке справочников, кроме записи самих элементов, будет заполняться и этот регистр сведений примерно следующим образом:

Спр8 = Справочники.Контрагенты.СоздатьЭлемент();

Спр8.Наименование = Спр77.Наименование;

Спр8.Записать();

Рег = РегистрыСведений.СтруктураПерегрузки.СоздатьМенеджерЗаписи();

Рег.Ид = Семерка.ЗначениеВСтрокуВнутр(Спр77.текущийэлемент());

Рег.Орг = Орг.Ссылка;

Рег.Элемент = Спр8.Ссылка;

Рег.Записать();

Будем считать этап загрузки справочников подготовительным, перейдем к более подробному рассмотрению переноса данных о задолженности контрагентов.

Создадим внешнюю обработку, разместим на форме переключатель для выбора субсчета 60-го счета, а также дату итогов и дату создаваемой операции (см. рисунок).

Форма обработки загрузки данных во взаиморасчетах

Форма обработки загрузки данных во взаиморасчетах

В процедуре «КнопкаСформироватьНажатие» разместим весь необходимый текст программы.

Сначала подключимся через OLE к той базе данных, из которой будем брать данные:

КаталогПрограммы77 = "C:\Program Files\1Cv77\BIN\";

КаталогБазы77 = "C:\1c_base\ПУБ\";

СтрокаПодключения = """" + КаталогПрограммы77 + """" + "enterprise /d""" + КаталогБазы77 + """" + " /nЮзер /p123";

Семерка = Новый COMОбъект("V77S.Application");

Если Семерка.Initialize(Семерка.RMTrade,СтрокаПодключения,"NO_SPLASH_SHOW") Тогда

Сообщить("Открыта база 7.7");

Соединение=Истина;

КонецЕсли;

Каталоги программы и базы данных можно прописать в самом модуле, а можно и сделать интерактивный выбор на форме. Строка подключения собирается из каталога запуска программы, режима запуска, каталога базы данных, имени пользователя и пароля. В данном случае имя пользователя «Юзер», пароль «123».

Далее производим подключение, причем с параметром NO_SPLASH_SHOW, это означает, что запуск базы будет происходить без демонстрации заставки, т.е. практически незаметно для пользователя.

ИНН = Лев(Семерка.Константа.ИННОрганизации,10);

Орг = Справочники.Организации.НайтиПоРеквизиту("ИНН",ИНН);

Опер = Документы.ОперацияБух.СоздатьДокумент();

Опер.Организация = Орг.Ссылка;

Опер.Дата = ДатаОперации;

Определяем по ИНН организацию, по которой хотим выполнить загрузку, и создаем новый документ «Операция».

БИ77 = Семерка.CreateObject("БухгалтерскиеИтоги");

ОлеВидСубконто1=Семерка.EvalExpr("ВидыСубконто.Контрагенты");

ОлеВидСубконто2=Семерка.EvalExpr("ВидыСубконто.Договоры");

Замечу, что создание объектов в подключаемой по OLE-базе происходит с помощью англоязычного синонима CreateObject, а не «СоздатьОбъект». Метод EvalExpr также часто используется при работе с технологией OLE, означает вычисление выражения системы.

Если Счет60=1 Тогда

Счет = ПланыСчетов.Хозрасчетный.РасчетыСПоставщиками;

СчетСтр = "60.1";

ИначеЕсли Счет60=2 Тогда

Счет = ПланыСчетов.Хозрасчетный.РасчетыПоАвансамВыданным;

СчетСтр = "60.2";

ИначеЕсли Счет60=3 Тогда

Счет = ПланыСчетов.Хозрасчетный.РасчетыСПоставщикамиВал;

СчетСтр = "60.11";

ИначеЕсли Счет60=4 Тогда

Счет = ПланыСчетов.Хозрасчетный.РасчетыПоАвансамВыданнымВал;

СчетСтр = "60.22";

КонецЕсли;

Здесь всё достаточно ясно, происходит определение счета взаиморасчетов в зависимости от установленного переключателя на форме.

БИ77.ИспользоватьСубконто("Контрагенты");

БИ77.ИспользоватьСубконто("Договоры");

БИ77.ВыполнитьЗапрос(ДатаИтогов,ДатаИтогов,СчетСтр);

БИ77.ВыбратьСубконто(1);

В подключенной базе выполняем запрос по бухгалтерским итогам на дату, выбранную на форме обработки.

Пока БИ77.ПолучитьСубконто(1)=1 цикл

БИ77.ВыбратьСубконто(2);

ИД = Семерка.ЗначениеВСтрокуВнутр(БИ77.Субконто(1));

Рег = РегистрыСведений.СтруктураПерегрузки;

ОтборПоИД = Новый Структура("ИД, Орг");

ОтборПоИД.ИД = ИД;

ОтборПоИД.Орг = Орг.Ссылка;

ВыборкаИД = рег.Получить(ОтборПоИД);

Суб1 = ВыборкаИД.Элемент.Ссылка;

Начинаем цикл по первому субконто (Контрагенты). Из регистра сведений получаем ссылку на нужный элемент справочника. Вот тут и начинает работать созданный нами механизм. Идентификация происходит не по коду, не по наименованию, не по какому-либо другому реквизиту, а по уникальному внутреннему идентификатору объекта.

Пока БИ77.ПолучитьСубконто(2)=1 цикл

ДебетовоеСальдо = БИ77.скд(1);

КредитовоеСальдо = БИ77.скк(1);

Если ДебетовоеСальдо<>0 Тогда

ИД = Семерка.ЗначениеВСтрокуВнутр(БИ77.Субконто(2));

Рег = РегистрыСведений.СтруктураПерегрузки;

ОтборПоИД = Новый Структура("ИД, Орг");

ОтборПоИД.ИД = ИД;

ОтборПоИД.Орг = Орг.Ссылка;

ВыборкаИД = рег.Получить(ОтборПоИД);

Элемент8 = ВыборкаИД.Элемент.Ссылка;

Движ = Опер.Движения.Хозрасчетный.Добавить();

Движ.СчетДт = Счет.Ссылка;

Движ.СубконтоДт.Вставить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты,Элемент8.Владелец);

Движ.СубконтоДт.Вставить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры,Элемент8);

Движ.СчетКт = ПланыСчетов.Хозрасчетный.Вспомогательный;

Движ.Сумма = ДебетовоеСальдо;

Движ.Активность=Истина;

Движ.Период = ДатаОперации;

Опер.Движения.Хозрасчетный.Записать();

ИначеЕсли КредитовоеСальдо<>0 тогда

ИД = Семерка.ЗначениеВСтрокуВнутр(БИ77.Субконто(2));

Рег = РегистрыСведений.СтруктураПерегрузки;

ОтборПоИД = Новый Структура("ИД, Орг");

ОтборПоИД.ИД = ИД;

ОтборПоИД.Орг = Орг.Ссылка;

ВыборкаИД = рег.Получить(ОтборПоИД);

Элемент8 = ВыборкаИД.Элемент.Ссылка;

Движ = Опер.Движения.Хозрасчетный.Добавить();

Движ.СчетКт = Счет.Ссылка;

Движ.СубконтоКт.Вставить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты,Элемент8.Владелец);

Движ.СубконтоКт.Вставить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры,Элемент8);

Движ.СчетДт = ПланыСчетов.Хозрасчетный.Вспомогательный;

Движ.Сумма = КредитовоеСальдо;

Движ.Активность=Истина;

Движ.Период = ДатаОперации;

Опер.Движения.Хозрасчетный.Записать();

КонецЕсли;

КонецЦикла;

КонецЦикла;

По каждому договору определяем задолженность, и в зависимости от знака («+» или «-») формируем движения документа «Операция».

Опер.Записать();

Семерка="";

Соединение=Ложь;

Сообщить("Закрыта база 7.7");

Записываем созданный документ, закрываем соединение программно. На этом работа программиста заканчивается, остается только бухгалтеру сверить суммы в «старой» и «новой» программе.

В случае с другими счетами, возможно, понадобится создание и других документов. Например, по основным средствам организации необходим документ «ВводНачальныхОстатковОС». Но, используя уже имеющиеся наработки, создать что-то своё, индивидуальное, гораздо проще.

В заключение хочется сказать о некоторых распространенных трудностях, возникающих при работе с OLE.

Для обращения к перечислениям используется конструкция типа:

ЗначПеречисленияOLE = Объект77.Реквизит.Идентификатор();

«ЗначПеречисленияOLE» будет содержать строку со значением перечисления. Обращаться к процедурам глобального модуля можно следующим образом:

ТЗ = Семерка.глРасчетАмортизацииОС(Спр77.ТекущийЭлемент(), ДатаФормирования);

Остается только пожелать удачи в решении проблем и в освоении новых методов выполнения поставленных задач!


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-41
Fax: (499) 277-12-45
E-mail: sa@samag.ru