вторник, 17 декабря 2013 г.

1с: Обмен через табличный документ mxl

Код 77:
Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Таблица");
    Состояние("Обработка запроса...");


    Пока Запрос.Группировка() = 1 Цикл
        Если Запрос.Номенклатура.ЭтоГруппа()=1 Тогда
            Продолжить;
        КонецЕсли;
        Имя = СокрЛП(Запрос.Номенклатура.Наименование);
        Если ПустаяСтрока(Имя)=1 Тогда
            Продолжить;
        КонецЕсли;       
        Категория = СокрЛП(Запрос.КатегорияТовара.Наименование);
                Если (ПустаяСтрока(Категория)=1)  Тогда
            Продолжить;
        КонецЕсли;
        Таб.ВывестиСекцию("Строка");
    КонецЦикла;
    Состояние("Сохранение результата...");
    Таб.Записать("c:\Т_и_Н.mxl");

Код 8.2

&НаКлиенте
Процедура Загрузить_(Команда)
    Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные("c:\Т_и_Н.mxl"));
    Предупреждение(ЗагрузитьСервер(Адрес));
КонецПроцедуры

&НаСервере
Функция ЗагрузитьСервер(Адрес)
   
    СвКатегория = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Категория товара");
   
    Если СвКатегория.Пустая()  Тогда
        Возврат "Не нашли доп св-во ''";
    КонецЕсли;

    Запрос = Новый Запрос;
    Запрос.Текст="ВЫБРАТЬ
                 |    Номенклатура.Ссылка,
                 |    Номенклатура.Наименование
                 |ИЗ
                 |    Справочник.Номенклатура КАК Номенклатура
                 |ГДЕ
                 |    НЕ Номенклатура.ЭтоГруппа
                 |    И НЕ Номенклатура.ПометкаУдаления";
    ТзНом = Запрос.Выполнить().Выгрузить();
    ТзНом.Индексы.Добавить("Наименование");
   
    Дв = ПолучитьИзВременногоХранилища(Адрес);
    Врем = ПолучитьИмяВременногоФайла("mxl");
   
    Дв.Записать(Врем);
   
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Прочитать(Врем);
   
    Для инд = 1 по ТабДок.ВысотаТаблицы Цикл
         Имя = ТабДок.Область(инд,1).Текст;
        Категория = ТабДок.Область(инд,2).Текст;
               
        НашлиНом = ТзНом.НайтиСтроки(Новый Структура("Наименование",Имя));
        Если НашлиНом.Количество()<>1 Тогда
            Продолжить;
        КонецЕсли;
       
        Номенклатура = НашлиНом[0].Ссылка;
       
               
        Если не ПустаяСтрока(Категория) Тогда
            НашлиЗн = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(Категория,Истина,,СвКатегория);
            Если НашлиЗн.Пустая() Тогда
                НовЗн = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
                НовЗн.Наименование = Категория;
                НовЗн.Владелец = СвКатегория;
                НовЗн.Записать();
                НашлиЗн = НовЗн.Ссылка;               
            КонецЕсли;
            _З = РегистрыСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи();
            _З.Объект=Номенклатура;
            _З.Свойство=СвКатегория;
            _З.Значение=НашлиЗн;
            _З.Записать();
        КонецЕсли;
    КонецЦикла;
    Возврат "Готово";
КонецФункции // ()