Сортировка спаравочника 7.7

  • Автор темы ech
  • Дата начала
E

ech

Гость
#1
Есть такой справочник, в 1С имеет вид:

ВесНач ВесКон Зона Сумма
2 5 1 40
2 5 2 45
6 10 1 50
2 5 3 50
20 100 4 150


Нужно выгрузить в ТЗ и привести к такому виду:

ВесНач ВесКон Зона Сумма
2 5
1 40
2 45
3 50
6 10
1 50
20 100
4 150

т.е. все зоны и суммы этих зон должны принадлежать одному весу..
 
E

ech

Гость
#4
что то табличку мою форум испоганил:(...сейчас попробую доступнее объяснить:

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

хмл файл должен иметь вид:

<?xml version="1.0" encoding="windows-1251" ?>
- <Set>
- <price>
- <ves Begin="0" End="100">
<zone Num="1" Cost="55" />
<zone Num="2" Cost="155" />
</ves>
- <ves Begin="100" End="200">
<zone Num="1" Cost="11" />
<zone Num="2" Cost="111" />
</ves>
- <ves Begin="200" End="300">
<zone Num="1" Cost="22" />
<zone Num="2" Cost="2222" />
</ves>
</price>

У меня получатеться только так:

<?xml version="1.0" encoding="windows-1251" ?>
- <Set>
- <price>
- <ves Begin="0" End="100">
<zone Num="1" Cost="55" />
</ves>
- <ves Begin="0" End="100">
<zone Num="2" Cost="155" />
</ves>
- <ves Begin="100" End="200">
<zone Num="1" Cost="11" />
</ves>
- <ves Begin="100" End="200">
<zone Num="2" Cost="111" />
</ves>
- <ves Begin="200" End="300">
<zone Num="1" Cost="22" />
</ves>
- <ves Begin="200" End="300">
<zone Num="2" Cost="2222" />
</ves>
</price>


из структуры видно что мне надо и что у меня в итоге выходит

Вот код

Процедура Выполнить()

Анализатор = СоздатьОбъект("AddIn.XMLParser");
спр = СоздатьОбъект("Справочник.Доставка");

Корень = Анализатор.СоздатьДокумент();
Данные = Корень.СоздатьПодчиненныйЭлемент("Set");
price = Данные.СоздатьПодчиненныйЭлемент("price");

спр.ВыбратьЭлементы();
Пока спр.ПолучитьЭлемент()=1 Цикл

ves = price.СоздатьПодчиненныйЭлемент("ves");
ves.УстановитьАтрибут("Begin",СокрЛП(спр.ВесНач));
ves.УстановитьАтрибут("End",СокрЛП(спр.ВесКон));
zone = ves.СоздатьПодчиненныйЭлемент("zone");
zone.УстановитьАтрибут("Num",СокрЛП(спр.Зона));
zone.УстановитьАтрибут("Cost",СокрЛП(спр.СуммаДД));

КонецЦикла;
Корень.Записать(ИмяФайла);
КонецПроцедуры
 

puh14

Well-Known Member
11.07.2008
1 412
0
НеРезиновая
#5
zone = ves.СоздатьПодчиненныйЭлемент("zone");
zone.УстановитьАтрибут("Num",СокрЛП(спр.Зона));
zone.УстановитьАтрибут("Cost",СокрЛП(спр.СуммаДД));
А откуда он второе значение зоны возьмет? тыж его из одного элемента спр вытаскиваешь. Если периодические - выбери историю и в переборе истории
zone = ves.СоздатьПодчиненныйЭлемент("zone");
zone.УстановитьАтрибут("Num",СокрЛП(спр.Зона));
zone.УстановитьАтрибут("Cost",СокрЛП(спр.СуммаДД));
 

vbs

Well-Known Member
18.02.2007
1 708
3
Санкт-Петербург
#6
А так ли необходимо заморачиваться с XML? Задача навскидку не выглядит сложной, если решать ее непосредственно через ТЗ или простой внешний файл обмена
 
E

ech

Гость
#7
А откуда он второе значение зоны возьмет? тыж его из одного элемента спр вытаскиваешь. Если периодические - выбери историю и в переборе истории
zone.УстановитьАтрибут("Num",СокрЛП(спр.Зона));
zone.УстановитьАтрибут("Cost",СокрЛП(спр.СуммаДД));
Эл ты не периодические, это раз, а во вторых...так и не подсказал как сделать :)
 

puh14

Well-Known Member
11.07.2008
1 412
0
НеРезиновая
#8
а ты не сказал откуда должно браться второе значение zone ;-)
для примера попробуй так

zone = ves.СоздатьПодчиненныйЭлемент("zone");
zone.УстановитьАтрибут("Num",СокрЛП(спр.Зона));
zone.УстановитьАтрибут("Cost",СокрЛП(спр.СуммаДД));
zone1 = ves.СоздатьПодчиненныйЭлемент("zone");
zone1.УстановитьАтрибут("Num",СокрЛП(спр.Зона));
zone1.УстановитьАтрибут("Cost",СокрЛП(спр.СуммаДД));

должно получиться два поля zone(хотя по хорошему лучше их по разному обозвать)
 
E

ech

Гость
#9
А так ли необходимо заморачиваться с XML? Задача навскидку не выглядит сложной, если решать ее непосредственно через ТЗ или простой внешний файл обмена
В итоге все равно нужен XML с данными! А вот через про тз уже думал, потом ее результаты и выгружать, а вот как в тз это все сформировать?? Вопрос..

а ты не сказал откуда должно браться второе значение zone ;-)
для примера попробуй так

zone = ves.СоздатьПодчиненныйЭлемент("zone");
zone.УстановитьАтрибут("Num",СокрЛП(спр.Зона));
zone.УстановитьАтрибут("Cost",СокрЛП(спр.СуммаДД));
zone1 = ves.СоздатьПодчиненныйЭлемент("zone");
zone1.УстановитьАтрибут("Num",СокрЛП(спр.Зона));
zone1.УстановитьАтрибут("Cost",СокрЛП(спр.СуммаДД));

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

vbs

Well-Known Member
18.02.2007
1 708
3
Санкт-Петербург
#10
а вот как в тз это все сформировать?? Вопрос..
Покажи на примере 4-5 элементов то, что есть и то, что должно получиться после обработки
 
E

ech

Гость
#11
вот справочник, на выходе в тз должно быть так:

Все Зоны и все СуммыДД , у которых ВесНач и ВесКон одинаковый, должны стоять под своим весом
 

Вложения

  • 111.9 КБ Просмотры: 11
  • 111.9 КБ Просмотры: 9
  • 111.9 КБ Просмотры: 13

vbs

Well-Known Member
18.02.2007
1 708
3
Санкт-Петербург
#12
то есть, если я правильно понял, должна поменяться структура справочника ?
И из элементов с кодами, например, 11 и 29 должен родиться новый элемент - с начвес = 250 конвес = 300, зона1 = 1, сумма1 = 250, зона2 = 2, сумма2 = 300 ?
 
E

ech

Гость
#13
то есть, если я правильно понял, должна поменяться структура справочника ?
И из элементов с кодами, например, 11 и 29 должен родиться новый элемент - с начвес = 250 конвес = 300, зона1 = 1, сумма1 = 250, зона2 = 2, сумма2 = 300 ?
Чувствую долго рассказывать:), решил сделать через Запрос, тз не использовал, все отлично получилось, всем спасибо!!! :)