Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 20:15

Создание нестандартного отчёта

Автор mark2011, 18 мая 2011, 10:29

0 Пользователей и 1 гость просматривают эту тему.

mark2011

Добрый день!

Я в 1С соображаю очень мало, я web-программист. Так получилось, что надо связать эти две области....
В общем в 1С надо создать отчёт следующей структуры:

-----------------
id | parent_id | name
-----------------

Пример для пояснения:

-----------------
id | parent_id | name
-----------------
1        0          Корневой каталог
-----------------
2        1          Каталог в корневом каталоге
-----------------
3        2          Элемент в каталоге
-----------------
4        2          Элемент в каталоге
-----------------
5        1          Ещё каталог
-----------------
6        5          Элемент в ещё одном каталоге
-----------------
7        5          Элемент в ещё одном каталоге

Т.е. чтобы было всё древовидно.

Такое возможно? Если да, то буду благодарен за любую помощь где об этом можно почитать...

mark2011

А, да, забыл ещё, конфа "Торговля+Склад", редакция 9.2.

prog1c7.7

Конечно можно !!!
Это XML - ки, я этим пользуюсь постоянно,
например код на ходу:
ФайлХМЛ = СоздатьОбъект("AddIn.XMLParser");
Корень =ФайлХМЛ.СоздатьДокумент();
Данные =Корень.СоздатьПодчиненныйЭлемент("root");
Данные.УстановитьАтрибут("branch_code"," ");
ТОПИК= Данные.СоздатьПодчиненныйЭлемент("Topic");  
ТОПИК.УстановитьАтрибут("mlns","");
         ФИЛИАЛ       =    ТОПИК.СоздатьПодчиненныйЭлемент("ORG_NAME");
                         ФИЛИАЛ.Значение     = "чебоксары";
                         ИмяФайла    = СтрЗаменить(Строка(ДатаНач)+ " g " + Строка(ДатаКон),"."," ") + ".xml";
                  ПапкаФайла  = КаталогИБ() + "ВыгрузкаТОПИКА\";
                  Корень.Записать(ПапкаФайла+ИмяФайла);


prog1c7.7

Ну а как дальше в вебе работать с XML-ками я те объяснять не буду.
У меня у всех так, как отчетность кому нить, так нам нужно на вэбе шобы было   :wacko:
ну это понятно, потому как головные офисы в москвах...

Кстати данные не обязательно статические  должны быть,
Например для выгрузки в вэб спр.номенклатура:
ФайлХМЛ = СоздатьОбъект("AddIn.XMLParser");
Корень =ФайлХМЛ.СоздатьДокумент();
    Данные =Корень.СоздатьПодчиненныйЭлемент("root");
    Данные.УстановитьАтрибут("branch_code","    ");
ТОПИК= Данные.СоздатьПодчиненныйЭлемент("Topic");   
            ТОПИК.УстановитьАтрибут("mlns","");
СпрНоменклатура = СоздатьОбъект("Справочник.Номенклатура");
    СпрНоменклатура.ВыбратьЭлементы();
    Пока СпрНоменклатура.ПолучитьЭлемент() = 1 Цикл
      Номенкл = ТОПИК.СоздатьПодчиненныйЭлемент("Nomenkl");
      Номенкл.УстановитьАтрибут("mlns","");
            Родит          =    Номенкл.СоздатьПодчиненныйЭлемент("RODIT");
    ИМЯ1           =    Номенкл.СоздатьПодчиненныйЭлемент("NAME");   
    НомерГТД     =    Номенкл.СоздатьПодчиненныйЭлемент("SALE_PRODUCT");
            Родит.Значение   = СпрНоменклатура.ТекущийЭлемент().Родитель;             
            ИМЯ1.Значение    = СпрНоменклатура.ТекущийЭлемент().Наименование;             
            НомерГТД.Значение = СпрНоменклатура.ТекущийЭлемент().НомерГТД;                       
     КонецЦикла;
     ИмяФайла    = СтрЗаменить(Строка(ДатаНач)+ " g " + Строка(ДатаКон),"."," ") + ".xml";
                       ПапкаФайла  = КаталогИБ() + "ВыгрузкаТОПИКА\";
                       Корень.Записать(ПапкаФайла+ИмяФайла);


mark2011

Неудачная попытка создания объекта (AddIn.XMLParser).... к чему бы это? :)

prog1c7.7

А проверку?
Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "v7plus.dll") <> 1 Тогда
Если ЗагрузитьВнешнююКомпоненту(КаталогПрограммы() + "v7plus.dll") <> 1 Тогда
Предупреждение("Компонента v7plus.dll не найдена!");
КонецЕсли;
КонецЕсли;


и кстати есть v7plus.dll то?

mark2011

Спасибо, скопировал Ваш код в таком виде:


Процедура Сформировать()
Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "v7plus.dll") <> 1 Тогда
        Если ЗагрузитьВнешнююКомпоненту(КаталогПрограммы() + "v7plus.dll") <> 1 Тогда
            Предупреждение("Компонента v7plus.dll не найдена!");
        КонецЕсли;
    КонецЕсли;

ФайлХМЛ = СоздатьОбъект("AddIn.XMLParser");
Корень =ФайлХМЛ.СоздатьДокумент();
    Данные =Корень.СоздатьПодчиненныйЭлемент("root");
    Данные.УстановитьАтрибут("branch_code","    ");
ТОПИК= Данные.СоздатьПодчиненныйЭлемент("Topic");   
            ТОПИК.УстановитьАтрибут("mlns","");
СпрНоменклатура = СоздатьОбъект("Справочник.Номенклатура");
    СпрНоменклатура.ВыбратьЭлементы();
    Пока СпрНоменклатура.ПолучитьЭлемент() = 1 Цикл
      Номенкл = ТОПИК.СоздатьПодчиненныйЭлемент("Nomenkl");
      Номенкл.УстановитьАтрибут("mlns","");
            Родит             =    Номенкл.СоздатьПодчиненныйЭлемент("RODIT");
            ИМЯ1              =    Номенкл.СоздатьПодчиненныйЭлемент("NAME");   
            НомерГТД          =    Номенкл.СоздатьПодчиненныйЭлемент("SALE_PRODUCT");
            Родит.Значение    =    СпрНоменклатура.ТекущийЭлемент().Родитель;             
            ИМЯ1.Значение     =    СпрНоменклатура.ТекущийЭлемент().Наименование;             
            НомерГТД.Значение =    СпрНоменклатура.ТекущийЭлемент().НомерГТД;                       
     КонецЦикла;
     ИмяФайла    = "report.xml";
                       ПапкаФайла  = КаталогИБ() + "ВыгрузкаТОПИКА\";
                       Корень.Записать(ПапкаФайла+ИмяФайла);

КонецПроцедуры


Изменил имя файлика, поскольку 1С выдавала ошибку о неопределённой переменной...

В таком виде в каком код есть сейчас, выдаётся ошибка "Плохой тип переменной" вот на это:


Родит.Значение    =    СпрНоменклатура.ТекущийЭлемент().Родитель;


Вероятнее всего будет выдавать и на другие похожие структуры, поскольку они однотипные. Вот, но пока вот только на эту строчку.

prog1c7.7

Родителя убери (я с ним ошибся, получается в тег встроку ты вносишь элемент, вот он и посылает тебя), попробуй остальное прогнать, у меня работает, только щас попробовал

mark2011

Эээээ...... так мне родитель как раз и нужен )))) ради него весь сырбор )))
Нужно ведь чтобы был ID и parent_ID, если его не будет в XML, нафиг тогда вообще это всё нужно )))

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


Корень.Записать(ПапкаФайла+ИмяФайла);
{C:\DOCUMENTS AND SETTINGS\ADMIN\РАБОЧИЙ СТОЛ\TEST.ERT(23)}: Неизвестная ошибка


Т.е. я так понял что меня один-эса посылает при попытке записи файла непосредственно на диск. Проверил права папки (абсурд, поскольку нахожусь в винде, но тем не менее...) - снял галочку "Только чтение", но ничего не изменилось..


mark2011

В общем разобрался, ещё на ГТД ругался 1С, я его убрал, он всё равно не нужен...
а вот родитель ооооочень нужен...

Прикладываю к сообщению получившийся файлик xml.

Он записался, но в другой, специально созданный каталог на диске (видимо есть какие-то ограничения на запись в каталог ИБ)...

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск