Показаны сообщения с ярлыком КД. Показать все сообщения
Показаны сообщения с ярлыком КД. Показать все сообщения

понедельник, 28 марта 2011 г.

"Грузим все" или конвертация данных в кармане

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

Упрощенно схему взаимодействия можно представить следующим образом

Исходными данными могут быть файлы обмена или другие источники данных к которым можно обратится из конструктора (XLS, ADO, TXT, XML и .т.д.).
Исходными данными могут быть так же существующие объекты базы данных (аналогов не существует) , иными словами все то что можно отобразить в таблице результата может быть загружено в информационную базу.

Для загрузки используется одна из групповых обработок - "Загрузка данных"


В основу данной обработки положена методология Конвертации данных.  Вы здесь встретите те же ПКС и ПКО, вы будете обладать всеми возможностями конвертации данных в режиме "одного окна" и БЕЗ необходимости следить за деталями.

Поскольку до сегодняшнего :) момента ключевым инструментом загрузки данных была конвертации, приведу ряд аргументов за и против "Загрузки данных"

  • Загрузка производится на стороне приемника - очень просто проверять существование данных, задавать явные значения и наблюдать за результатом загрузки;
  • Возможность указывать явное соответствие для данных (применяется в случае загрузки "не нормализованных" данных);
  • Для загрузки данных нет необходимости загружать метаданные приемника, а уж тем более источника;
  • Возможность редактировать движения множества документов;
  • Простая отладка;
  • Использование в совокупности всех групповых обработок, визуализация созданных конструкций загрузки.
  • Для постоянного обмена между базами данных наверное все же лучше использовать Конвертацию данных.
Разгромный счет 6:1 в пользу "Загрузки данных"

Ну конечно самое интересное на видео

пятница, 6 августа 2010 г.

Конвертация данных. Описание

Введение

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


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

Таким образом, обмен данными  можно разделить на следующие стадии:
  1. Стадию подготовки правил обмена;
  2. Стадию обмена данными;
    1. Выгрузка;
    2. Преобразование(Конвертация);
    3. Запись в файл данных;
    4. Чтение данных из файла;
    5. Запись изменение объектов ИБ;

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

Самый сложным и ответственным этапа безусловно является подготовка правил обмена. Конфигурация Конвертация данных как раз и предназначена для разработки правил обмена данными.

Правила обмена представляют собой задание определенного соответствия или преобразования(конвертации) между объектами источника и объектами приемника.

четверг, 4 февраля 2010 г.

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

В конфигурации 1С "Конвертация данных" не так просто передать данные из источника в приемник, если в источнике И приемнике эти данные не закреплены за каким либо реквизитом. Иными словами нельзя создать ПКС с пустыми полями "Источник" и "Приемник".  Для того чтобы передать такие данные их необходимо непосредственно записать в файл обмена. Для этого в ПКО в обработчике "При выгрузке" прописываем примерно следующий код:


//запишем в файл обмена
ДопИнформация = СоздатьУзел("ДопИнформация");
УстановитьАтрибут(ДопИнформация, "Металл",Металл);
УстановитьАтрибут(ДопИнформация, "Наполнение",Наполнение);

ДобавитьПодчиненный(Приемник, ДопИнформация);


В файле обмена при выгрузке появится соответствующий узел
Теперь для того чтобы эти данные использовать, в ПКО того же самого объекта, в любом из обработчков:

  • Поля поиска;
  • Перед загрузкой;
  • При загрузке;
пропишем примерно следующий код:
//проверим наличие доп свойств, если они есть это продукция
Пока ФайлОбмена.Прочитать() Цикл
    ИмяУзла = ФайлОбмена.ЛокальноеИмя;
    ТипУзла = ФайлОбмена.ТипУзла;
    Если ИмяУзла = "ДопИнформация" И (ТипУзла = одТипУзлаXML_НачалоЭлемента) Тогда
        Металл     = одАтрибут(ФайлОбмена, одТипСтрока, "Металл");
        Наполнение = одАтрибут(ФайлОбмена, одТипСтрока, "Наполнение");
        Харка   = ОбрСоздания.вПолучитьПродукцию(Наименование,Металл,Наполнение);
        Если ЗначениеЗаполнено(Харка) Тогда
            СсылкаНаОбъект = Харка[ИмяСвойства];
        КонецЕсли;
        Прервать;
    КонецЕсли;
КонецЦикла;

На этом все. 
Важно обратить внимание на процедуру одАтрибут. 
Читает значение атрибута по имени из указанного объекта, приводит значение к указанному примитивному типу
Параметры: 

  1. Объект - объект типа XMLЧтение, спозиционированный на начале элемента, атрибут которого требуется получить
  2. Тип - Значение типа Тип. Тип атрибута
  3. Имя - Строка. Имя атрибута

понедельник, 14 декабря 2009 г.

"СтрокаИменСвойствПоиска" - особенности

В конфигурации "Конвертация данных 2.0" в ПКО существует обработчик Поля поиска.
Описание (из документации):
Условия возникновения события
Только для платформы 1cV8.
Событие выполняется при поиске элемента ссылочного типа. Если установлен поиск по уникальнму идентификатору и программа нашла элемент, то поиск прекращается. Если поиск по уникальному идентификатору не дал положительного результата и указано, что нужно продолжить поиск в этом случае или поиск по уникальному идентификатору не проводился, то программа пытается найти элементы по свойствам поиска. В обработчике нужно установить список полей через запятую по которым нужно проводить поиск. Если очередная попытка дала положительный результат, то поиск прекращается.
Поиск возможен только по тем полям у которых на этапе выгрузка был установлен флаг поиска данных!!!
Параметры:
НомерВариантаПоиска - число. Номер попытки поиска. Попыток поиска может быть не больше 10.
СвойстваПоиска -соотвествие в котором хранятся текущие значения реквизитов поиска
ПрекратитьПоиск - булево. Если Истина, то поиск объекта прекращается, в зависимости от того СсылкаНаОбъект заполнена или нет создается новый объект.
СсылкаНаОбъект - ссылка на результирующий объект. Если в обработчике установить данную ссылку (не пустую) то программа ее запомнит и поиск на этом будет считать успешно завершенным
УстанавливатьУОбъектаВсеСвойстваПоиска - булево. Определяет нужно ли после удачного завершения поиска установить объекту все реквизиты поиска. Объект может быть найден по части реквизитов. Этот флаг определяет нужно оставшиеся реквизиты, которые не участвовали в поиске (но по которым поиск возможен) установить объекту или нет. Значение по умолчанию: Истина.
НастройкаПоиска - строка. Выбранный пользователем вариант сопоставления объектов. В ПКО есть таблица Варианты настроек полей поиска - с возможными вариантами настроек полей поиска для пользователя. Разработчик правил определяет возможные комбинации полей поиска, которые пользователь может выбирать при настройке обмена. Все настройки указанные разработчиком правил должны быть отработаны в коде обработчика "Поля поиска". Переменная НастройкаПоиска в обработчике определяет выбранный пользователем вариант сопоставления (ИмяНастройкиДляАлгоритма из соответствующей строки таблицы). Если пользователь не выбрал ни один вариант сопоставления, или ему ни один вариант не был предложен, то НастройкаПоиска - пустая строка.
СтрокаИменСвойствПоиска – строка в которой задаются ключевые поля варианта поиска. Могут быть указаны только те свойства, для которых при настройке правил обмена был выставлен флаг поиска.

четверг, 22 октября 2009 г.

Перенос документов и закрытый период


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

Первое что необходимо сделать создать параметр "Ошибки" в правиле конвертации.
Это простая ТЗ, в которой мы будем собирать ошибки(сообщения) и выводить после обмена именно уникальные сообщения (предварительно свернув таблицу ошибок) .
Инициализируем параметр в обработчике "Перед загрузкой данных"
Параметры.Ошибки=Новый ТаблицаЗначений();
Параметры.Ошибки.Колонки.Добавить("Ошибка");


вторник, 26 мая 2009 г.

Соответсвие объектов обмена


Довольно часто при обмене данными нужно прописать соответствие одного объекту другому, не учитывая возможные реквизиты поиска и прочие очевидные вещие.
Просто А=В и все.

Примерно для этих целей в конфигурации УПП 1.2. существует регистр сведений Соответствие объектов для обмена.

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

Этот регистр мы и будем использовать для указания соответствия.
Заполним его необходимым соответствием.
  1. УзелОбмена - не заполняем, чтобы не путаться под ногами у реальных фоновых обменов.
  2. СсылкаВДругойИБ - уникальный идентификатор(источник БД 8 ) или другая уникальная конкатенация полей объекта.
  3. СобственнаяСсылка - ссылка назначение в текущей БД.
  4. ИмяТипаПриемника - строковое представление типа ссылки объекта в источнике
Теперь нужно всем этим соответствием воспользоваться в Конвертации данных
в ПКО "Поля поиска" прописываем вызов алгоритма

Если НомерВариантаПоиска = 1 тогда

Выполнить(Алгоритмы.ПолучитьСоотвествиеОбъектов);

КонецЕсли;

и создаем сам аглоритм "ПолучитьСоотвествиеОбъектв" с установленным флагом "Использовать при загрузке"

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ

| СоответствиеОбъектовДляОбмена.СобственнаяСсылка КАК Ссылка

|ИЗ

| РегистрСведений.СоответствиеОбъектовДляОбмена КАК СоответствиеОбъектовДляОбмена

|ГДЕ

| СоответствиеОбъектовДляОбмена.УзелОбмена = &УзелОбмена

| И СоответствиеОбъектовДляОбмена.СсылкаВДругойИБ = &СсылкаВДругойИБ

| И СоответствиеОбъектовДляОбмена.ИмяТипаПриемника = &ИмяТипаПриемника";

Запрос.УстановитьПараметр("УзелОбмена", Неопределено);

Запрос.УстановитьПараметр("СсылкаВДругойИБ",

СвойстваПоиска.Получить("{УникальныйИдентификатор}"));

Запрос.УстановитьПараметр("ИмяТипаПриемника", СтруктураСвойств.ТипСсылкиСтрокой);

Выборка = Запрос.Выполнить().Выбрать();

Если Выборка.Следующий() Тогда

СсылкаНаОбъект=Выборка.Ссылка;

ОбъектНайден=Истина;

КонецЕсли;

Теперь более подробно о алгоритме.

Алгоритм реализует передачу переменной СсылкаНаОбъект определенного значения.

Из документации: СсылкаНаОбъект - ссылка на результирующий объект. Если в обработчике установить данную ссылку (не пустую) то программа ее запомнит и поиск на этом будет считать успешно завершенным

Теперь о том чего в документации не написано:

  1. Если установить данную ссылку (не пустую) , обработчик загрузки не поймет, что объект найден, и изменит его несмотря на установку свойства НеЗамещать. Поэтому присвоим значение переменной ОбъектНайден=Истина;
  2. Получить уникальный идентификатор можно из структуры поиска, если установлена синхронизация по уникальному идентификатору СвойстваПоиска.Получить("{УникальныйИдентификатор}")
  3. Строковое представление типа можно вытянуть еще из одной недокументированной структуры - СтруктураСвойств вот образец значений, которые она может содержать



вторник, 3 марта 2009 г.

ЕдиницаХранениеОстаков перенос в КД


Очередная заметка по КД. Относится к разряду частых проблем. При переносе данных из УПП например в УПП очень редко удается обойтись без перегрузки номенклатуры. Так вот если справочник номенклатура выгружать только по ссылкам (из переносимых документов) тогда поля:
  • ЕдиницаХраненияОстатков;
  • ЕдиницаДляОтчетов;
остаются незаполненными. У данных полей владельцем является сам элемент в котором они присутствуют. Причем эти объекты будут присутствовать в файле обмена однако загрузить их не удастся.
Есть два решения этой проблемы:
  1. В ПКО "Номенклатура" поставить свойство "Не запоминать выгруженные объекты". Это самый простой способ однако в этом случае при большом количестве документов (в котором есть повторяющаяся номенклатура) обмен значительно замедлится, и число данных для загрузки может многократно увеличится.
  2. Скопировать ПКО "ЕдиницаИзмерения" назовем его ПКО "ЕдиницаИзмерения_Владелец" и в данным ПКО для ПКС "Владелец" укажем получать из входящих данных. После чего в ПКО номенклатура для данных реквизитов явно укажем правило конвертации "ЕдиницаИзмерения_Владелец" и в обработчике ПКС ПередВыгрузкой объекта передадим явно владельца
ИсходящиеДанные = Новый Структура(); ИсходящиеДанные.Вставить("Владелец",Источник);

Какой вариант использовать, решать Вам.
Удачи.

четверг, 11 декабря 2008 г.

Обмен данными КД.

До недавнего времени при обмене данными, между 7.7 и 8 использовал промежуточные файлы. Выгружал из источника или приемника нужные данные ОС и остатки по взаиморасчетам и загружал их в базу приемника (документом ввод остатков). Использовал для этого конечно же загрузку данных Ei

Однако время и объем задач внесли корректировки.
Вводная имеем 14 БУ 4.5 их нужно объединить в одну БД УПП 1.2.19.

Естественно, в данной ситуация свой взор я направил на КД и типовые обмены .
На диске ИТС есть все доступные правила, используя которые, можно перенести остатки практически из любой типовой Конфигурации.
  1. "Бухгалтерский учет", редакция 4.5 - файл Acc77.zip
  2. "Комплексная конфигурация", редакция 4.5 - файл Atc45.zip
  3. "Производство+Услуги+Бухгалтерия", редакция 2.8 - файл Mnfc28.zip
  4. "Торговля + Склад", редакция 9.2 - файл Tr92.zip
  5. "Управление торговлей", редакция 10.2 - файл UT10_2.zip
  6. "Управление производственным предприятием", редакция 1.2 - файл CnvUPP12.zip
  7. "Бухгалтерия предприятия", редакция 1.6 - файл BP1_6.zip
Взять эти правила можно здесь.
Одно но, все они для версии УПП 1.2.6 и платформы 8.0 .(очень оперативно :))

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

Для того что бы избежать лишнюю трату времени, и для желающих самостоятельно выполнить преобразование пишу по пунктам.
  1. Загружаем правило в КД.
  2. Загружаем метаданные наших конфигураций. (в результате загрузки некоторые МД используемые в правилах будут помечены на удаление )
  3. Помеченные на удаление ПКО и ПКС
  4. В обработчиках исправляем следующие конструкции:
  • ЗначениеНеЗаполнено();
  • ПолучитьСведенияОСчете(),ПреобразоватьСчетаБУвСчетНУ() для них добавляем префикс общего модуля БухгалтерскийУчет.;
  • глТекущийПользователь;
  • Некоторые предопределенные значение поменяли Коды вместо 0009 например теперь 0000009 (Виды контактной информации).
  • Дополнительно к справочнику ФизЛица теперь у нас есть сотрудники организации.
  • Обработчик конвертации "После загрузки объекта" приводим к следующему виду //Не используем свойство автоматически сгенирировать номер или код
    //Так как используется параметр не выгружать коды справочников и номера документов
    Если Объект<>Неопределено Тогда
    Попытка
    Ссылка=Объект.Ссылка;
    Если (Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка))
    ИЛИ ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка)))Тогда
    Если Не ЗначениеЗаполнено(Объект.Код) Тогда
    Объект.УстановитьНовыйКод();
    КонецЕсли;

    ИначеЕсли Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка)) Тогда
    Если ТипЗнч(Ссылка)<> Тип("ДокументСсылка.ДокументРасчетовСКонтрагентом")
    и ТипЗнч(Ссылка)<> Тип("ДокументСсылка.ОтражениеПоступленияТоваровИУслугНДС")
    и ТипЗнч(Ссылка)<> Тип("ДокументСсылка.ОтражениеРеализацииТоваровИУслугНДС") Тогда

    Объект.Ответственный = ПараметрыСеанса.ТекущийПользователь;
    КонецЕсли;

    Если Не ЗначениеЗаполнено(Объект.Номер) Тогда
    Объект.УстановитьНовыйНомер();
    КонецЕсли;
    КонецЕсли;
    Исключение
    КонецПопытки;
    КонецЕсли;
После этого можно выгружать правила предварительно проверив ИХ. Перед проверкой учтите что многие ТЧ документов поменяли имена. Имена некоторых реквизитов изменены. Поэтому перед непосредственным удалением ПКС .. пройдите по свойствам. Легче изменить назначение чем их создавать заново, когда обнаружется, что что -то кудато не грузится.


Обращаем внимание на ПКО по учетной политике ( УчетнаяПолитикаОбщаяДля РегламентированногоУчета. и .т.д.) Данные ПКО используется в обработчике конфигурации "Перед выгрузкой данных" благополучно комментируем их, после удаления. //ВыгрузитьПоПравилу(,,,, "УчетнаяПолитикаОбщаяДляРегламентированногоУчета"); и тд.
Что бы не заморачивать с 5 значения, комментируем всю учетную политику по БУ и НУ внесем ее руками.

Это далеко не все сюрпризы которые Вас ожидают :). Помочь разобраться с другими ситуациями Вам безусловно поможет обработка отладки обработчиков :) (прикольно звучит) Режим отладки через Внешние обработки в совокупности с книгой по КД превратят для вас любую проблему в интересную задачку.

Если вы все таки дочитали до конца и вам не очень хочется возится с этими правилами самому, то вариант правил обмена оптимизированный на загрузку нескольких организация (помещение совместно используемых справочников в группы(склады, номенклатура)) для версий БУ 4.5.502-> УПП 1.2.19 можно преобрести всего за 1400 р. (в 3 раза меньше ставки 1 часа специалиста 1Cv8)