пятница, 26 февраля 2010 г.

Особенности табличный частей в 1С

В любой табличной части документа или любого другого объекта метаданных присутствует как минимум 2 реквизита:

  • Ссылка (*_IDRRef);
  • Номер строки (_LineNo*);
Однако в структуре хранения таблицы мы можем наблюдать еще одно поле _KeyField - ключ записи табличной части в рамках одного объекта базы данных (полное описание структуры хранения данных 1С 8 можно посмотреть здесь).
Поля *_IDRRef и _KeyField образуют уникальный кластерный (упорядоченны по индексу, для ускорения чтения и записи группы ) индекс.  Наиболее интересно поведение поля _KeyField .

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

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

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


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

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


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

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

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

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