Имя: Пароль:
1C
1С v8
Обход справочники с учетом иерархии
,
0 serg-lom89
 
03.10.14
10:46
Подскажите алгоритм ..что то додуматься не могу.Может у кого есть пример..тему поднимал но так ничего не понял

Есть 2 таблицы у меня
1 таблица
Товар          Родитель      наценка
Товар1      БУмага цветная    
Товар2      Карандаш мелкий
Товар1      Ластик
Товар1      Точилки

2 таблица
ГруппыНом    Наценка
Ластик         2
Бумага         3
Канцтовары     10

Задача состоит в том .что бы обойти таб 1,и установить наценку для товара,с учетом иерархии.Папка канцтовары является родителем для всех из таб 1.
Канцтовары
      |
      | -БУмага(Папка)
      |       |
      |       |-БУмага цветная(Папка)  
                   |
                   |-Бумага ексел (нац =3)
                   |-Бумага 100 штук (нац =3)
      |
      |-Карандаши(Папка)
      |       |
      |       |-Элем. справоч. Карандаш мелкий(Нац 10)
      |
      |---Ластик(Папка)
      |       |
      |       |-Ластик круглый(Папка)
      |            |
      |            |-Элем. справоч. ластик для карандаша(нац =2)
      |            |-Элем. справоч. ластик для ручки(нац =2)
      |
      |-Точилки
              |
              |-точилки абраз.(папка)
              |       |
              |       |-Элем. справоч. Точилка абр. 2 (нац 10)
              |       |-Элем. справоч. Точилка абр. 5 (нац 10)
              |
              |
              |-Точилки неАбразивные(папка)
                       |
                       |-Элем. справоч. Точилка неАбразивные. 2 (нац 10)
                       |-Элем. справоч. Точилка неАбразивные. 5 (нац 10)
ну и в таб 1 должны записать наценки с учетом иерархии?
подскажите алгоритм пжл?
1 cons74
 
03.10.14
10:52
ДляКаждого строка из таблица2 цикл

   выборкаНоменкл = справочники.номенклатура.выбрать(строка.ГруппыНом)
  
   пока выбкаНомкнк.следующий() цикл
        выбкаНомкнк.наценка = строка.наценка
   кц
кц
2 Лодырь
 
03.10.14
10:52
Есть таблица товаров аля
Товар1
Товар2
Товар3

Преобразуем ее добавляя родителей в
Товар1 Товар1 0
Товар1 Родитель11 1
Товар2 Товар2 0
Товар2 Родитель21 1
Товар2 Родитель22 2
Товар3 ТОвар3 0
Товар3 Товар31 1

Соединяем в таблицей наценок и выбираем записи с наименьшим приоритетом (колонка 3 в предыдущей таблице) для каждого товара (колонка 1 в предыдущей таблице). Вуаля.
3 serg-lom89
 
03.10.14
10:58
точнее как бы обход не справчоника,а пользователя есть 2 таб части
4 serg-lom89
 
03.10.14
11:11
(2) ну так я в таб1 и вывел родителя,для наглядности
а в таб2 пользователь указывает папочки для которых надо установить наценку в таб1
5 Лодырь
 
03.10.14
11:14
(4) Ну дык, за чем дело то тогда? Пиши запрос.
6 serg-lom89
 
03.10.14
11:19
(5)
ну вот не понимаю как в запросе все это склепать)))
получается беру таб1
Товар1 Товар1  
Товар1 Родитель11  
Товар2 Товар2    
Товар2 Родитель21  
Товар2 Родитель22

и присобачиваю таб2...вот только как в запросе определить что для моего товара,его родитель есть уровнем ниже чем установлен в таб2.и для него элементов нужно установить нац,а для остальных установить другую нац
7 Лодырь
 
03.10.14
11:19
Обрати внимание на приоритет! это еще одна колонка.
8 serg-lom89
 
03.10.14
11:23
(7) как его вытянуть,приоритет?
9 Лодырь
 
03.10.14
11:30
(8) Когда ты строишь таблицу номенклатуры с родителями - паралельно вытягиваешь приоритет.
Там будет конструкция вида:

Для Каждого Стр из ИсходнаяТаблицаТоваров Цикл
    ТекущийЭлемент = Стр.Товар;
    ТекущийПриоритет = 0;
    НС = ВыходнаяТаблица.Добавить();
    НС.Товар = ТекущийЭлемент;
    НС.Приоритет = ТекущийПриоритет;
    Пока ЗначениеЗаполнено(ТекущийЭлемент.Родитель) Тогда
        ТекущийЭлемент = ТекущийЭлемент.Родитель;
        ТекущийПриоритет = ТекущийПриоритет+1;
        НС = ВыходнаяТаблица.Добавить();
        НС.Товар = ТекущийЭлемент;
        НС.Приоритет = ТекущийПриоритет;
    КонецЕсли;
КонецЦикла;
10 serg-lom89
 
03.10.14
11:34
ВыходнаяТаблица я так понимаю это ТабилцаЗначений?
11 Лодырь
 
03.10.14
11:37
(10) Ага, ты ее потом засунешь в запрос и сделаешь соединение с таблицей наценок. А уже результат соединения (РС) сгруппируешь по товару и получишь минимальный приоритет записи для каждого товара. Снова соединишь с РС по Товару и Приоритету и получишь то что хотел.
12 serg-lom89
 
03.10.14
11:47
(11) я так понимаю надо будет еще определить и для таб 2 приоритет и затем с этими 2 таблицами работать?
13 Лодырь
 
03.10.14
12:05
(12) смотри (11)
Закон Брукера: Даже маленькая практика стоит большой теории.