triteh.ru
  Решения     Новости     Файлы     Поддержка     Контакты     О сайте  

Генератор алгоритмов переноса документов через OLE-Automation на платформе 1С:Предприятие 7.7

Преамбула

Данная обработка предназначена для использования специалистами.
Неаккуратное и (или) непродуманное использование данной обработки может привести к порче или к потере Ваших данных.

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

Автор ни при каких обстоятельствах не может нести ответственность за результаты использования данной обработки, или невозможность ее использования.

Обработка создана для облегчения труда программиста 1С, и, в большинстве случаев, не может рассматриваться как "Готовое решение".

На данный момент (декабрь 2006 г.) обработка распространяется абсолютно бесплатно. Автору было бы интересно узнать Ваше мнение и пожелания по поводу эксплуатации данной обработки, но, при этом Автор не берет на себя никаких обязательств по ее сопровождению.

Общие принципы

Обработка предназначена для автоматизации создания алгоритмов переноса документов из одной конфигурации 1С:Предприятия 7.7 в другую. Обработка создает исходный текст алгоритма на языке 1С:Предприятие 7.7(7.5), доступный для дальнейшего использования и редактирования Вашим программистом.

Конфигурации 1С:Предприятия могут быть как аналогичными, так и различающимися по своей структуре (в т.ч. принадлежащие к разным технологическим платформам: Вам ничто не мешает построить перенос документов ,например, между Бухгалтерией и Торговлей).

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

Обработка создания шаблона запускается на конфигурации, в которую необходимо загрузить документы в режиме 1С:Предприятие.

После открытия сразу заполняются поля правил создания переносов, основанных на структуре Вашей конфигурации (см. рис.1).


рис 1. Вид обработки без подключения к внешней базе.

В первую очередь после открытия обработки необходимо указать Вид сопрягаемого документа нажав на кнопку [...] в соответствующем поле.

При изменении вида сопрягаемого документа настройки сопряжения заполнятся автоматически.

Для каждого реквизита шапки или многострочной части предусмотрено несколько режимов переноса (поле "Режим" в соответствующей таблице). Для изменения режима переноса необходимо дважды щелкнуть мышью в поле "Режим" в строке с идентификатором того реквизита, режим переноса которого необходимо изменить. Доступны следующие режимы переноса:

блокРеквизит не переносится
вырВыражение реквизит будет заполнен выражением, взятым из столбца "Параметры"
копияИспользуется только для реквизитов типа "строка","дата","число"
Коприрование из реквизита документа-источника, указанного в столбце "Параметры"
по_кодуИспользуется только для реквизитов типа "справочник"
Ссылка на элемент справочника, восстанавливаемая по коду элемента справочника.
по_номеруИспользуется только для реквизитов типа "документ"
Ссылка на документ, восстанавливаемая по номеру и дате документа.

Далее можно создать процедуру переноса, скорректировав правила переноса, затем нажав на клавишу "получить код", но это малоэффективно, поскольку обработка также позволяет заполнять правила в режиме "Авто-Сопряжение", экономя при этом уйму времени.

Режим "Авто-Сопряжение"

Для активации режима "Авто-Сопряжение" необходимо:
1. Выбрать каталог исходной конфигурации, нажав на кнопку [...] в соответствующем поле.
2. Нажать на кнопку "Подключить" в группе "Исходная конфигурация".
произойдет подключение к 1С:Предприятию исходной базы. Возможно, Вам потребуется вввести имя пользователя и пароль в процессе подключения. В исходной конфигурации Пользователь должен иметь права "Использование в качестве OLE-Automation сервера".
4. Укажите вид документа исходной конфигурации, нажав на кнопку [...] поля "Вид исходного документа".
после успешного подключения окно обработки примет следующий вид:


рис 2. Вид обработки после подключения к внешней базе.

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

5. Нажимаем кнопку "Авто-Сопряжение". Через несколько секунд, после анализа структуры исходной и конечной конфигурации Вам будет представлен набор правил для каждого реквизита документа принимающей конфигурации. В этот набор правил так же можно вносить изменения, но помните, что повторное нажатие на кнопку "Авто-Сопряжение" приводит к отмене всех правил сопряжения, созданных вручную. Механизм "Авто-Сопряжение" основан на анализе идентификаторов документов, и сопоставлении их типов, т.е. правило сопряжения создается для тех реквизитов, которые есть и в исходном и принимающем документе, при условии совпадения типов.


рис 3. Вид обработки после выполнения процедуры авто-сопряжения.

Приемы создания правил переноса

применение выражений

В соответствующей строке реквизита шапки или многострочной дважды щелкнуть мышью в столбце "Режим". Режимы переключаются циклически, щелкайте, пока значение в соответствующей ячейке не примет значение "выр".

Дважды щелкните в поле "параметры". Введите выражение на встроенном языке 1С. Выражение будет выполняться на стороне принимающей конфигурации, и должно быть заполнено в контексте принимающей конфигурации.

Если выражение содержит реквизиты документа конфигурации-источника, то перед выражением должен стоять префикс ДокОле. Например, для поля "Цена" выражение :
Окр(ДокОле.Цена*1.18,2)

Если выражение должно содержать фрагменты, выполняющиеся в контексте конфигурации-источника, то, фрагмент выражения вызывается через V7.EvalExpr. Например, для поля "Фирма" выражение : V7.EvalExpr("константа.ОсновнаяФирма")


рис 4. создание правила переноса в режиме выражения.

Применение режимов копирования и переноса по ссылке

При Авто-Сопряжении заполняются только правила для реквизитов с совпадающими идентификаторами, но, предусмотрена возможность указания для копирования других реквизитов документа того же вида. Для выбора предоставляется список реквизитов с учетом области видимости, т.е. для реквизитов табличной части - реквизиты табличной части и шапки документа-источника, для реквизитов шапки - только реквизиты шапки документа-источника. Если Вам необходимо скопировать с преобразованием типа, например, число преобразовать в строку, то для этого необходимо воспользоваться режимом "выр" (см. выше).


рис 5. создание правила переноса в режиме копирования или переноса по ссылке.

Механизм переноса справочников

Для каждого вида справочника создается своя процедура сопряжения по ссылке. Например, для сопряжения номенклатуры будет создан следующий код:

функция ПоКоду_Номенклатура(ОлеСсылка,ДокОЛЕ,Создавать=0);
	выб=СоздатьОбъект("Справочник.Номенклатура");
	выб.НайтиПоКоду(ОлеСсылка.Код);
	если выб.Выбран()=1 тогда возврат выб.ТекущийЭлемент(); конецЕсли;
	если Создавать=0 тогда возврат 0; конецЕсли;
	выб.Новый();
	выб.Код=ОлеСсылка.Код;
	выб.Наименование=ОлеСсылка.Наименование;
	//=== здесь копируем требуемые реквизиты справочника 
	выб.Записать();
	ЗаписьЖурналаРегистрации("по док № "+ДокОЛЕ.НомерДок,"OLE","OLE",выб,2);
	выб.Удалить(0); // что бы не путались с имеющимися - пометим на удаление.
	возврат выб.ТекущийЭлемент();
конецФункции // ПоКоду_Номенклатура(ОлеСсылка,ДокОЛЕ,Создавать=0);
Как видно из примера, перенос справочников обладает целым рядом ограничений, а именно:
  • При создании новых элементов переносится только код и наименование.
  • При создании новых элементов не учитывается иерархия, новые элементы будут созданы в корне.
  • Предполагается, что справочник не является подчиненным.
  • Предполагается, что уникальность кода установлена вне зависимости от подчинения.

    Перенос справочников : перенос дополнительных реквизитов

    При дополнительных реквизитов следует помнить, что обыкновенным присваиванием можно пользоваться только для скалярных величин, таких типов, как: строка, дата, число.

    функция ПоКоду_Номенклатура(ОлеСсылка,ДокОЛЕ,Создавать=0);
    	выб=СоздатьОбъект("Справочник.Номенклатура");
    	выб.НайтиПоКоду(ОлеСсылка.Код);
    	если выб.Выбран()=1 тогда возврат выб.ТекущийЭлемент(); конецЕсли;
    	если Создавать=0 тогда возврат 0; конецЕсли;
    	выб.Новый();
    	выб.Код=ОлеСсылка.Код;
    	выб.Наименование=ОлеСсылка.Наименование;
    	//=== здесь копируем требуемые реквизиты справочника 
    	
    	выб.Примечание="OLE-перенос";
    	выб.Цена=окр(ОлеСсылка.Цена*1.18,2);
    	если ОлеСсылка.видТовара=V7.EvalExpr("перечисление.видыТоваров.Услуга")
    		тогда выб.видТовара=перечисление.ВидыТоваров.Услуга;
    		иначе выб.видТовара=перечисление.ВидыТоваров.Товар;
    	конецЕсли;
    
    	выб.Записать();
    	ЗаписьЖурналаРегистрации("по док № "+ДокОЛЕ.НомерДок,"OLE","OLE",выб,2);
    	//выб.Удалить(0); // что бы не путались с имеющимися - пометим на удаление.
    	возврат выб.ТекущийЭлемент();
    конецФункции // ПоКоду_Номенклатура(ОлеСсылка,ДокОЛЕ,Создавать=0);
    

    Перенос справочников : учет иерархии

    Ниже приведен пример переноса с учетом иерархии групп

    функция ПоКоду_Номенклатура(ОлеСсылка,ДокОЛЕ,Создавать=0);
    	выб=СоздатьОбъект("Справочник.Номенклатура");
    	
    	ОлеГрп=ОлеСсылка.Родитель;
    	грп=СоздатьОбъект("Справочник.Номенклатура");
    	грп.НайтиПоКоду(ОлеГрп.Код);
    	если грп.Выбран()=0 тогда // создаем родителя 
    		грп.НоваяГруппа();
    		грп.Код=ОлеГрп.Код;
    		грп.Наименование=ОлеГрп.Наименование;
    		грп.Записать();
    	конецЕсли; // создаем родителя 
    	если грп.ЭтоГруппа()=1 тогда // ограничим поиск пределами родителя
    		выб.ИспользоватьРодителя(грп.ТекущийЭлемент());
    	конецЕсли;
    	
    	выб.НайтиПоКоду(ОлеСсылка.Код);
    	если выб.Выбран()=1 тогда возврат выб.ТекущийЭлемент(); конецЕсли;
    	если Создавать=0 тогда возврат 0; конецЕсли;
    	выб.Новый();
    	выб.Код=ОлеСсылка.Код;
    	выб.Наименование=ОлеСсылка.Наименование;
    	//=== здесь копируем требуемые реквизиты справочника 
    	
    	выб.Родитель=грп.ТекущийЭлемент();
    
    	выб.Записать();
    	ЗаписьЖурналаРегистрации("по док № "+ДокОЛЕ.НомерДок,"OLE","OLE",выб,2);
    	//выб.Удалить(0); // что бы не путались с имеющимися - пометим на удаление.
    	возврат выб.ТекущийЭлемент();
    конецФункции // ПоКоду_Номенклатура(ОлеСсылка,ДокОЛЕ,Создавать=0);
    
  • продукты и решения
    XLS1C - Преобразование электронных таблиц XLS в документы 1С Бухгалтерии 7.7

    TOpenOffice 1.0 - Ole automation интерфейс для OpenOffice.org

    Универсальный генератор алгоритма OLE-Automation переноса документов 1С 7.7
    all products 

    поиск по сайту
    поиск производится только по сайту http://triteh.ru
    powered by Google 

         
     
    ZIP
    100 Kb
     
     
     
    OLE перенос
    генератор алгоритма переноса документов для 1С 7.7
    * Бесплатная версия *
     

    новости
    20.02.2007 Опубликована бесплатная обработка для переноса электронных таблиц в документы 1С:Бухгалтерии 4.5 - XLS1C для 1С Бухгалтерии 7.7

    22.02.2007 доступен новый бесплатный релиз TOpenOffice 1.04 - OLE automation интерфейс для OpenOffice.org
    все новости




    Условия использования Положение о конфиденциальности Отзывы Распечатать
    Copyright © triteh.ru 2006.
    Designed by boroda.yard.ru 2006.