Имя: Пароль:
1C
1С v8
Сортировка в печатной форме
,
0 sotnikov
 
26.05.15
09:28
Всем привет. У меня есть вот такая печатная форма:

Функция ПечатьДокумента()
    
    
    //Созданим и заполним табличный документ
    ТабДокумент = Новый ТабличныйДокумент;
    
    Макет = ПолучитьМакет("МакетЗаказПокупателяПоСкладамРезерва");
    
    СекцияЗаголовок     = Макет.ПолучитьОбласть("Заголовок");
    СекцияПоставщик     = Макет.ПолучитьОбласть("Поставщик");
    СекцияПокупатель     = Макет.ПолучитьОбласть("Покупатеь");
    СекцияШапкаТаблицы     = Макет.ПолучитьОбласть("ШапкаТаблицы");
    СекцияСтрока         = Макет.ПолучитьОбласть("Строка");
    СекцияИтого         = Макет.ПолучитьОбласть("Итого");
    СекцияСуммаПрописью = Макет.ПолучитьОбласть("СуммаПрописью");
    СекцияПодвалЗаказа     = Макет.ПолучитьОбласть("ПодвалЗаказа");
        
    СекцияЗаголовок.Параметры.ТекстЗаголовка     = "Заказ покупателя № " + СсылкаНаОбъект.Номер + " от " + СсылкаНаОбъект.Дата;
    ТабДокумент.Вывести(СекцияЗаголовок);
    
    СекцияПоставщик.Параметры.Поставщик         = СсылкаНаОбъект.Организация;
    ТабДокумент.Вывести(СекцияПоставщик);
    
    СекцияПокупатель.Параметры.Покупатель         = СсылкаНаОбъект.Контрагент;
    СекцияПокупатель.Параметры.Комментарий         = СсылкаНаОбъект.Комментарий;
    ТабДокумент.Вывести(СекцияПокупатель);
    
    ТабДокумент.Вывести(СекцияШапкаТаблицы);
    
    Сумма            = 0;
    СуммаНДС           = 0;
    НумераторСтрок     = 0;
    
        
    Для каждого СтрТаб Из СсылкаНаОбъект.Товары Цикл
        НумераторСтрок = НумераторСтрок + 1;
        ЗаполнитьЗначенияСвойств(СекцияСтрока.Параметры,СтрТаб);
        СекцияСтрока.Параметры.Номенклатура = СокрЛП(СтрТаб.Номенклатура.Артикул) + " " + СокрЛП(СтрТаб.Номенклатура.Наименование);
        ТабДокумент.Вывести(СекцияСтрока);
    КонецЦикла;
    
    СекцияИтого.Параметры.Итого            = СсылкаНаОбъект.СуммаДокумента;
    ТабДокумент.Вывести(СекцияИтого);

    Сумма = СсылкаНаОбъект.СуммаДокумента;
    СуммаКПрописи = Сумма;
    СекцияСуммаПрописью.Параметры.ИтоговаяСтрока ="Всего наименований " + НумераторСтрок + ", на сумму " + ОбщегоНазначения.ФорматСумм(СуммаКПрописи, СсылкаНаОбъект.ВалютаДокумента);
    СекцияСуммаПрописью.Параметры.СуммаПрописью = ОбщегоНазначения.СформироватьСуммуПрописью(СуммаКПрописи, СсылкаНаОбъект.ВалютаДокумента);
    ТабДокумент.Вывести(СекцияСуммаПрописью);
    
    СекцияПодвалЗаказа.Параметры.Ответственный = СсылкаНаОбъект.Ответственный;
    ТабДокумент.Вывести(СекцияПодвалЗаказа);
    
    Возврат ТабДокумент;

КонецФункции // ПечатьДокумента()

Мне нужно организовать в выходной таблице сортировку по Артикулу.
Как это сделать в данном случае, без запроса ВЫБРАТЬ?

Пытался подойти к задаче через ВЫБРАТЬ, но в этом случае не знаю каким запросом вывести склад.
1 Jonny_Khomich
 
26.05.15
09:29
товары в ТЗ помести, да отсортируй.
2 chelentano
 
26.05.15
09:30
(0) и какая проблема с запросом возникла?
3 pessok
 
26.05.15
09:32
(2) проблема с запросом в том, что у него обход ТЗ, а не запрос :)
(0), делай (1)
4 ДенисЧ
 
26.05.15
09:33
Запросом отсортируй...
5 chelentano
 
26.05.15
09:33
(3) у него обход не ТЗ, а табличной части, не понимаю, почему нельзя тот обход сделать через выборку из запроса
6 pessok
 
26.05.15
09:35
(5) ТЗ, ТЧ, какая разница? :) В любом случае в ТЧ нет колонки "Артикул", сиречь либо выгружать в ТЗ, добавлять колонку "Артикул", заполнять и сортировать по ней (что плохо), либо поместить в пакетный запрос, где в параметре будет его ТЧ
7 Любопытная
 
26.05.15
09:40
(6) Артикул - реквизит справочника Номенклатура. Разве в запросе нельзя сортировать по Номенклатура.Артикул? Я чего-то не знаю?
8 sotnikov
 
26.05.15
09:42
Парни, я понимаю, что надо запросом отсортировать, только вот я пока недокурил мануал по программированию и не знаю как его правильно построить. Вчера пол дня колупался, то тут ни так, то там.
Можете мне сам запрос нарисовать, а то мне срочно надо эту форму допилить, что бы манагеры вручную не сортировали, у них проблема с этим.
9 chelentano
 
26.05.15
09:42
(6) ну так я и спросил, почему через запрос не получается, потому как в (0): "Как это сделать в данном случае, без запроса ВЫБРАТЬ? Пытался подойти к задаче через ВЫБРАТЬ, но в этом случае не знаю каким запросом вывести склад."
10 pessok
 
26.05.15
09:42
(7) так об этом и сказали сразу
11 pessok
 
26.05.15
09:44
(*)
ВЫБРАТЬ * ПОМЕСТИТЬ ДанныеТЧ ИЗ &ТЧ КАК ТЧ
;
ВЫБРАТЬ * ИЗ ТЧ
УПОРЯДОЧИТЬ ПО Номенклатура.Артикул УБЫВ
12 pessok
 
26.05.15
09:44
(11) к (8)
13 sotnikov
 
26.05.15
09:45
(9) А хз почему не получается. Я не знаю какой строкой добавить в запрос склад. Потому что через ЗаказПокупателя.Размещение он не выводится.
14 pessok
 
26.05.15
09:50
в (11) во втором запросе неправильное название таблицы, ессно, должно быть ДанныеТЧ
15 sotnikov
 
26.05.15
09:53
(11) Что писать вместо *?
16 Web00001
 
26.05.15
09:58
(15)так и пиши, это значит выбрать все поля
17 anaed
 
26.05.15
09:59
Я так и не понял, что мешает сделать сразу запрос к тч документа? Отсутствие знаний?

ВЫБРАТЬ * ИЗ Документ.ЗаказПокупателя.Товары КАК ТЧ
ГДЕ ТЧ.Ссылка = &Ссылка
УПОРЯДОЧИТЬ ПО Номенклатура.Артикул УБЫВ
18 pessok
 
26.05.15
10:01
(17) ну может ему без записи надо печатать, например
19 Любопытная
 
26.05.15
10:02
(17) Видимо именно отсутствие знаний.
А говорят * в запросе нехорошо...
20 pessok
 
26.05.15
10:03
(19) нехорошо, но тут ж был просто дан пример, я не знаю, что у товарища там в ТЧ
21 sotnikov
 
26.05.15
10:03
Ну конечно же отсутствие. Стал бы я спрашивать такие элементарные вещи имея знания. Я пока только учусь.
22 sotnikov
 
26.05.15
10:05
(17) Вставил такой запрос:
    Запрос = Новый Запрос;
    Запрос.Текст = "
    
    |ВЫБРАТЬ * ИЗ Документ.ЗаказПокупателя.Товары КАК ТЧ  
    |ГДЕ ТЧ.Ссылка = &Ссылка
    |УПОРЯДОЧИТЬ ПО Номенклатура.Артикул УБЫВ
    |";

    ЗапросТовары = Запрос.Выполнить().Выгрузить();
Ругается на:
Не задано значение параметра "Ссылка"
23 pessok
 
26.05.15
10:05
(22)
Запрос.УстановитьПараметр(Ссылка, СсылкаНаОбъект);
24 Любопытная
 
26.05.15
10:06
(22) В параметр надо указать ссылку на документ, который ты печатаешь. ЗапросТовары.УстановитьПараметр("Ссылка", ТутСсылкаНаТвойДокумент);
25 pessok
 
26.05.15
10:06
"Ссылка"
26 sotnikov
 
26.05.15
10:10
Ну вроде на синтаксис не ругается. Таблица выводится, только сортировка не работает.
Там важно в какое место этот  запрос вставлять?
27 anaed
 
26.05.15
10:13
(22) еще по тексту запроса можно клацнуть, выбрать "конструктор запроса" и он вам звездочку развалит на все поля, которые есть в тч.

И потом нужно обходить не СсылкаНаОбъект.Товары, а ЗапросТовары

А в идеале вообще не создавать лишнюю Тч и обойтись выборкой запроса:

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ЗаполнитьЗначенияСвойств(СекцияСтрока.Параметры,Выборка);
конеццикла;
28 anaed
 
26.05.15
10:14
(18) фуфу, палкой по голове автору такого документооборота :)
29 sotnikov
 
26.05.15
10:22
Не пашет:
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
    Запрос.Текст = "ВЫБРАТЬ
                   |    ТЧ.Ссылка,
                   |    ТЧ.НомерСтроки,
                   |    ТЧ.ЕдиницаИзмерения,
                   |    ТЧ.ЕдиницаИзмеренияМест,
                   |    ТЧ.Количество,
                   |    ТЧ.КоличествоМест,
                   |    ТЧ.Коэффициент,
                   |    ТЧ.Номенклатура,
                   |    ТЧ.ПлановаяСебестоимость,
                   |    ТЧ.ПроцентСкидкиНаценки,
                   |    ТЧ.Размещение,
                   |    ТЧ.СтавкаНДС,
                   |    ТЧ.Сумма,
                   |    ТЧ.СуммаНДС,
                   |    ТЧ.ХарактеристикаНоменклатуры,
                   |    ТЧ.Цена,
                   |    ТЧ.ПроцентАвтоматическихСкидок,
                   |    ТЧ.УсловиеАвтоматическойСкидки,
                   |    ТЧ.ЗначениеУсловияАвтоматическойСкидки,
                   |    ТЧ.КлючСтроки,
                   |    ТЧ.СерияНоменклатуры,
                   |    ТЧ.Номенклатура.Артикул
                   |ИЗ
                   |    Документ.ЗаказПокупателя.Товары КАК ТЧ
                   |ГДЕ
                   |    ТЧ.Ссылка = &Ссылка
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    ТЧ.Номенклатура.Артикул";

    ЗапросТовары = Запрос.Выполнить().Выгрузить();
30 Любопытная
 
26.05.15
10:22
(26) а артикул это вообще что? Строка? А то может у вас целый справочник этих артикулов...
31 Любопытная
 
26.05.15
10:23
(29) Что не пашет-то?
32 Любопытная
 
26.05.15
10:23
Перед тем, как запрос выполнить, надо параметр установить. Тебе ж сказали
33 sotnikov
 
26.05.15
10:25
(31) Сортировка не происходит
34 DGorgoN
 
26.05.15
10:25
Конструктор запросов лень использовать?
35 sotnikov
 
26.05.15
10:25
(32) Ну так я же установил параметр
Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
36 pessok
 
26.05.15
10:25
(33) обход показывай
37 Любопытная
 
26.05.15
10:26
(35) сверху, да, не увидела.
Показывай все целиком)
38 sotnikov
 
26.05.15
10:26
(36) Я бы с радостью его показал, только не знаю как=)
39 Любопытная
 
26.05.15
10:26
(38) текст весь обработки показывай, чудо :)
40 pessok
 
26.05.15
10:27
(38) весь код целиком тогда давай
41 sotnikov
 
26.05.15
10:27
Функция ПечатьДокумента()
    
    
    //Созданим и заполним табличный документ
    ТабДокумент = Новый ТабличныйДокумент;
    
    Макет = ПолучитьМакет("МакетЗаказПокупателяПоСкладамРезерва");
    
    СекцияЗаголовок     = Макет.ПолучитьОбласть("Заголовок");
    СекцияПоставщик     = Макет.ПолучитьОбласть("Поставщик");
    СекцияПокупатель     = Макет.ПолучитьОбласть("Покупатеь");
    СекцияШапкаТаблицы     = Макет.ПолучитьОбласть("ШапкаТаблицы");
    СекцияСтрока         = Макет.ПолучитьОбласть("Строка");
    СекцияИтого         = Макет.ПолучитьОбласть("Итого");
    СекцияСуммаПрописью = Макет.ПолучитьОбласть("СуммаПрописью");
    СекцияПодвалЗаказа     = Макет.ПолучитьОбласть("ПодвалЗаказа");
        
    СекцияЗаголовок.Параметры.ТекстЗаголовка     = "Заказ покупателя № " + СсылкаНаОбъект.Номер + " от " + СсылкаНаОбъект.Дата;
    ТабДокумент.Вывести(СекцияЗаголовок);
    
    СекцияПоставщик.Параметры.Поставщик         = СсылкаНаОбъект.Организация;
    ТабДокумент.Вывести(СекцияПоставщик);
    
    СекцияПокупатель.Параметры.Покупатель         = СсылкаНаОбъект.Контрагент;
    СекцияПокупатель.Параметры.Комментарий         = СсылкаНаОбъект.Комментарий;
    ТабДокумент.Вывести(СекцияПокупатель);
    
    ТабДокумент.Вывести(СекцияШапкаТаблицы);
    
    Сумма            = 0;
    СуммаНДС           = 0;
    НумераторСтрок     = 0;
    
        
    Для каждого СтрТаб Из СсылкаНаОбъект.Товары Цикл
        НумераторСтрок = НумераторСтрок + 1;
        ЗаполнитьЗначенияСвойств(СекцияСтрока.Параметры,СтрТаб);
        СекцияСтрока.Параметры.Номенклатура = СокрЛП(СтрТаб.Номенклатура.Артикул) + " " + СокрЛП(СтрТаб.Номенклатура.Наименование);
        ТабДокумент.Вывести(СекцияСтрока);
            КонецЦикла;
    
    СекцияИтого.Параметры.Итого            = СсылкаНаОбъект.СуммаДокумента;
    ТабДокумент.Вывести(СекцияИтого);

    Сумма = СсылкаНаОбъект.СуммаДокумента;
    СуммаКПрописи = Сумма;
    СекцияСуммаПрописью.Параметры.ИтоговаяСтрока ="Всего наименований " + НумераторСтрок + ", на сумму " + ОбщегоНазначения.ФорматСумм(СуммаКПрописи, СсылкаНаОбъект.ВалютаДокумента);
    СекцияСуммаПрописью.Параметры.СуммаПрописью = ОбщегоНазначения.СформироватьСуммуПрописью(СуммаКПрописи, СсылкаНаОбъект.ВалютаДокумента);
    ТабДокумент.Вывести(СекцияСуммаПрописью);
    
    СекцияПодвалЗаказа.Параметры.Ответственный = СсылкаНаОбъект.Ответственный;
    ТабДокумент.Вывести(СекцияПодвалЗаказа);
    
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
    Запрос.Текст = "ВЫБРАТЬ
                   |    ТЧ.Ссылка,
                   |    ТЧ.НомерСтроки,
                   |    ТЧ.ЕдиницаИзмерения,
                   |    ТЧ.ЕдиницаИзмеренияМест,
                   |    ТЧ.Количество,
                   |    ТЧ.КоличествоМест,
                   |    ТЧ.Коэффициент,
                   |    ТЧ.Номенклатура,
                   |    ТЧ.ПлановаяСебестоимость,
                   |    ТЧ.ПроцентСкидкиНаценки,
                   |    ТЧ.Размещение,
                   |    ТЧ.СтавкаНДС,
                   |    ТЧ.Сумма,
                   |    ТЧ.СуммаНДС,
                   |    ТЧ.ХарактеристикаНоменклатуры,
                   |    ТЧ.Цена,
                   |    ТЧ.ПроцентАвтоматическихСкидок,
                   |    ТЧ.УсловиеАвтоматическойСкидки,
                   |    ТЧ.ЗначениеУсловияАвтоматическойСкидки,
                   |    ТЧ.КлючСтроки,
                   |    ТЧ.СерияНоменклатуры,
                   |    ТЧ.Номенклатура.Артикул
                   |ИЗ
                   |    Документ.ЗаказПокупателя.Товары КАК ТЧ
                   |ГДЕ
                   |    ТЧ.Ссылка = &Ссылка
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    ТЧ.Номенклатура.Артикул";

    ЗапросТовары = Запрос.Выполнить().Выгрузить();
    
    
    
    Возврат ТабДокумент;
    

КонецФункции // ПечатьДокумента()
42 Любопытная
 
26.05.15
10:27
Это шутка, да?
43 sotnikov
 
26.05.15
10:28
(42) Нет...
44 pessok
 
26.05.15
10:28
эмммм...
запрос наверх, перед циклом
вместо
Для каждого СтрТаб Из СсылкаНаОбъект.Товары Цикл
Для каждого СтрТаб Из ЗапросТовары  Цикл

а вообще зачет, спасибо :)
45 Любопытная
 
26.05.15
10:30
(44) некошерно результат запроса выгружать. За это на экзамене палками бьют, говорят ;)
46 Гёдза
 
26.05.15
10:31
(45) почему некошерно?
47 pessok
 
26.05.15
10:32
(45) я хочу, чтобы у него уже заработало :)
а так да, надо выборку обходить
48 pessok
 
26.05.15
10:32
(46) потому что получается лишняя переменная. ну и методологически неверно
49 sotnikov
 
26.05.15
10:32
(44) (45)
Спасибо огромное=) Все заработало.
Остальным сочувствующим тоже спасибо.
50 Любопытная
 
26.05.15
10:33
(46) Ох, не помню. Разница в том, что ты либо получаешь весь результат пачкой в ТЗ, либо постепенно подгружаешь из выборки. Второе правильнее с точки зрения работы с памятью, особенно если в результате запроса 100500 строк
51 Любопытная
 
26.05.15
10:34
(49) Ну ты это... Учись)
52 KrabCore
 
26.05.15
10:36
(41) чуть чай носом не пошел. нельзя такое выкладывать
53 pessok
 
26.05.15
10:37
(52) все там были
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.