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

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

ech

Есть такой справочник, в 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

т.е. все зоны и суммы этих зон должны принадлежать одному весу..
 
а можно попонятнее объяснить? тебе нужно просто отсортировать ТЗ?
 
ech
"Будь любезен, сформулируй вопрос..." (с) "Выдающийся ум".
 
что то табличку мою форум испоганил:(...сейчас попробую доступнее объяснить:

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

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

<?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",СокрЛП(спр.СуммаДД));

КонецЦикла;
Корень.Записать(ИмяФайла);
КонецПроцедуры
 
zone = ves.СоздатьПодчиненныйЭлемент("zone");
zone.УстановитьАтрибут("Num",СокрЛП(спр.Зона));
zone.УстановитьАтрибут("Cost",СокрЛП(спр.СуммаДД));
А откуда он второе значение зоны возьмет? тыж его из одного элемента спр вытаскиваешь. Если периодические - выбери историю и в переборе истории
zone = ves.СоздатьПодчиненныйЭлемент("zone");
zone.УстановитьАтрибут("Num",СокрЛП(спр.Зона));
zone.УстановитьАтрибут("Cost",СокрЛП(спр.СуммаДД));
 
А так ли необходимо заморачиваться с XML? Задача навскидку не выглядит сложной, если решать ее непосредственно через ТЗ или простой внешний файл обмена
 
А откуда он второе значение зоны возьмет? тыж его из одного элемента спр вытаскиваешь. Если периодические - выбери историю и в переборе истории
zone.УстановитьАтрибут("Num",СокрЛП(спр.Зона));
zone.УстановитьАтрибут("Cost",СокрЛП(спр.СуммаДД));

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

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

должно получиться два поля zone(хотя по хорошему лучше их по разному обозвать)
 
А так ли необходимо заморачиваться с XML? Задача навскидку не выглядит сложной, если решать ее непосредственно через ТЗ или простой внешний файл обмена

В итоге все равно нужен XML с данными! А вот через про тз уже думал, потом ее результаты и выгружать, а вот как в тз это все сформировать?? Вопрос..

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

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

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

Не, нужно только одно поле zone. Второе значение и следующие беруться из справочника. В первом посте написан его вид и данные (вкратеце)
 
а вот как в тз это все сформировать?? Вопрос..
Покажи на примере 4-5 элементов то, что есть и то, что должно получиться после обработки
 
вот справочник, на выходе в тз должно быть так:

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

Вложения

  • 123.JPG
    123.JPG
    85,1 КБ · Просмотры: 293
  • 123.JPG
    123.JPG
    85,1 КБ · Просмотры: 317
  • 123.JPG
    123.JPG
    85,1 КБ · Просмотры: 466
то есть, если я правильно понял, должна поменяться структура справочника ?
И из элементов с кодами, например, 11 и 29 должен родиться новый элемент - с начвес = 250 конвес = 300, зона1 = 1, сумма1 = 250, зона2 = 2, сумма2 = 300 ?
 
то есть, если я правильно понял, должна поменяться структура справочника ?
И из элементов с кодами, например, 11 и 29 должен родиться новый элемент - с начвес = 250 конвес = 300, зона1 = 1, сумма1 = 250, зона2 = 2, сумма2 = 300 ?

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

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab