7.7 Проблемма со справочником Прайс-Лист

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем ZEMA, 31 мар 2008.

  1. TopicStarter Overlay
    ZEMA
    Offline

    ZEMA Опытный в 1С

    Регистрация:
    5 окт 2007
    Сообщения:
    231
    Симпатии:
    0
    Баллы:
    26
    Код:
     Тз = СоздатьОбъект("ТаблицаЗначений");
    Тз2 = СоздатьОбъект("ТаблицаЗначений");
    Тз2.НоваяКолонка("Товар","Справочник.ПрайсЛист");
    Тз2.НоваяКолонка("СрокГодн","Строка",20);
    Тз2.НоваяКолонка("Остаток","Число",15,2); 
    Тз2.НоваяКолонка("Ряд","Число",15,2);
    
    Спр = СоздатьОбъект("Справочник.ПрайсЛист");
    Спр.ИспользоватьРодителя(ВыбЭл);
    
    Спр.ВыбратьЭлементы();
    Ном=0;
    // с остаточными сроками годности ...
    Если (ВыбСклад.Выбран()=1)и(ВыбОстСроки=1) Тогда
    Иначе
    Пока Спр.ПолучитьЭлемент()=1 Цикл
    ЕслИ Спр.ПометкаУдаления() = 1 <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/тогда')">Тогда	</span>      Продолжить;
    ИНАЧЕ
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент()=1 цикл
    ТЗ2.НоваяСтрока();
    ТЗ2.Товар=Спр.ТекущийЭлемент();
    ТЗ2.СрокГодн=Строка( Спр.Товар.СрокГодности_old);   
    ТЗ2.Ряд=Спр.Ряд; 
    КонецЦикла;
    ТЗ.Загрузить(ТЗ2);
    Ном=1;
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку()=1 цикл  
    Если ТЗ.тОВАР.ЭтоГруппа()=1 Тогда
    НаименованиеГруппы = ТЗ.Товар.Наименование;
    Т.ВывестиСекцию("Группа");
    продолжить;
    КонецЕсли;    
    тз.сортировать("ряд");	 			            
    
    ПечНаименование =ТЗ.Товар.Наименование; 
    МНН = ТЗ.Товар.МежНайм;
    ЕдИзм = ТЗ.Товар.Товар.БазоваяЕдиница;
    ЗаводУп = ТЗ.Товар.Товар.КолЦУ;
    СрокГодн = ТЗ.СрокГодн;  
    
    Ном=Ном+1;
    Если ВыбСклад.Выбран()=1 Тогда
    Т.ВывестиСекцию("Строка|Ост");
    Иначе
    Т.ВывестиСекцию("Строка|Общ"); 
    КонецЕсли;  
    конецЦикла;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;  
    если ВыбСклад.Выбран()=1 Тогда
    Т.ВывестиСекцию("Подвал|Ост");
    Иначе
    Т.ВывестиСекцию("Подвал|Общ");
    КонецЕсли;
    
    В этом фрагменте из спр.Прайс-Лист выбирается элемент,в данном случае это наименование папки.Затем
    идет перебор вложенных данных.И после того как перебор в папке прошел,надо перейти на следущую папку,но.....((((((т.е. происходит сортировка только в первой папке). Если я уберу "тз.сортировать("ряд");",то все нормалек,но не сробатывает условие(в каждом товаре из спр Прайс-Лист указывается ряд.Например наипишу наглядно
    папка препораты
    глюкоза ряд1
    эуфилин ряд2
    бромгексин ряд1
    рифабутин2
    папка гранулы
    натрия ряд0
    .......
    Этид ряд0
    надо чтобы выводилось на печать
    папка препораты
    глюкоза ряд1
    бромгексин ряд1

    эуфилин ряд2
    рифабутин2
    папка гранулы
    натрия ряд0
    .......
    Этид ряд0
    т.е. сортирование по ряду.
    Подскажите где у меня ошибка?????



    )
  2. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    Код:
    Пока Спр.ПолучитьЭлемент()=1 Цикл
    ЕслИ Спр.ПометкаУдаления() = 1 Тогда 
    Продолжить;
    ИНАЧЕ
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент()=1 цикл
    
    не понял я этого куска... ет че и зачем? да и вообще помоему если выбрать один раз и сразу прогнать по циклу, то все будет хорошо и по порядку... да и ТЗ зачем тебе не очень понятно...
  3. TopicStarter Overlay
    ZEMA
    Offline

    ZEMA Опытный в 1С

    Регистрация:
    5 окт 2007
    Сообщения:
    231
    Симпатии:
    0
    Баллы:
    26
    Убрала я лишнее , у меня получилось

    Код:
                
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент()=1 цикл
    ТЗ2.НоваяСтрока();
    ТЗ2.Товар=Спр.ТекущийЭлемент();   
    Тз2.Группа=Спр.Родитель;
    ТЗ2.СрокГодн=Строка( Спр.Товар.СрокГодности_old);   
    ТЗ2.Ряд=Спр.Ряд; 
    КонецЦикла;
    тз2.сортировать("группа,ряд");       
    
    Ном=1;
    ТЗ2.ВыбратьСтроки();  
    Пока ТЗ2.ПолучитьСтроку()=1 цикл  
    Если тз2.товар.Этогруппа()=1 тогда
    НаименованиеГруппы = ТЗ2.товар.Наименование;
    Т.ВывестиСекцию("Группа1"); 
    продолжить;
    конецесли;
    ПечНаименование =ТЗ2.Товар.Наименование; 
    МНН = ТЗ2.Товар.МежНайм;
    ЕдИзм = ТЗ2.Товар.Товар.БазоваяЕдиница;
    ЗаводУп = ТЗ2.Товар.Товар.КолЦУ;
    СрокГодн = ТЗ2.СрокГодн;  
    Ном=Ном+1;
    Если ВыбСклад.Выбран()=1 Тогда
    Т.ВывестиСекцию("Строка|Ост");
    Иначе
    Т.ВывестиСекцию("Строка|Общ"); 
    КонецЕсли;  
    КонецЦикла;
    КонецЕсли;
    
    Если ВыбСклад.Выбран()=1 Тогда
    Т.ВывестиСекцию("Подвал|Ост");
    Иначе
    Т.ВывестиСекцию("Подвал|Общ");
    КонецЕсли;
    Т.Опции(0,0,4,0);     
    УстановкаПараметровСтраницы(Т,"ПрайсЛист.Таблица");
    
    
    
    результат у меня получился

    товар1 папки1
    .....
    товар2 папки1
    товар3 папки2
    ...
    товарN папки2
    .....и т.д
    папка1
    папка2,

    т.е. должно быть:
    папка1

    товар1 папки1
    .....
    товар2 папки1
    папка2
    товар3 папки2
    ...
    товарN папки2
    .....и т.д
    папка3
    .....
  4. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    повторяю вопрос: на кой хрен тебе ТЗ вообще? это из серии про взрывающийся вертолет?
    Код:
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент()=1 цикл
    
    
    
    и СРАЗУ в это цикле выводишь! без всяких ТЗ и прочей ерунды...
  5. TopicStarter Overlay
    ZEMA
    Offline

    ZEMA Опытный в 1С

    Регистрация:
    5 окт 2007
    Сообщения:
    231
    Симпатии:
    0
    Баллы:
    26
    ну как же,тз я использую для сортировки таблиц значений....по ряд.у меня же у товара есть реквизит числовой ряд
    должно получиться:
    папка1
    товар1 папки1 ряд1
    товар2 папки1 ряд1

    .....
    товар10 папки1 ряд2
    товар11 папка1 ряд2
    .....
    папка2
    товар3 папки2 ряд0
    ...
    товарN папки2 ряд0
    .....и т.д
    папка3
    .....
  6. Seeker
    Offline

    Seeker

    Регистрация:
    10 апр 2008
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1


    Если я правильно понял, должно тебе помочь вот такое.
    Выкинь из Тз2 элементы-группы (колонка "группа" пущай будет). А выводи вот так:

    ПредГруппа = "";
    Тз2.ВыбратьСтроки();
    Пока Тз2.ПолучитьСтроку()=1 Цикл
    Если Тз2.Группа<>ПредГруппа Тогда
    Таб.ВывестиСекцию("Группа");
    ПредГруппа = Тз2.Группа;
    КонецЕсли;
    ...
    // Твоя обработка цикла
    ...
    КонецЦикла;
  7. Kaboom
    Offline

    Kaboom Опытный в 1С

    Регистрация:
    2 июл 2007
    Сообщения:
    158
    Симпатии:
    0
    Баллы:
    26
    Послушай Stado_adama и используй только один цикл по справочнику.

Поделиться этой страницей