Имя: Пароль:
1C
 
Заполнение таблицы через цикл Пока, почему не работает?
↓ (Волшебник 28.03.2024 11:19)
0 vienya
 
27.03.24
21:57
ОбластьМакета = Макет.ПолучитьОбласть("ТелоТаблицы");

    Запрос = Новый Запрос;
    Запрос.Текст =
"ВЫБРАТЬ
        |    СчетНаОплатуПокупателю.Товары.(
        |        Номенклатура КАК Номенклатура,
        |        Количество КАК Количество,
        |        Цена КАК Цена,
        |        Сумма КАК Сумма
        |    ) КАК Товары
        |ИЗ
        |    Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю";

    РезультатЗапроса = Запрос.Выполнить().Выбрать();
        //ТабличныйДокумент.Очистить();
    ТабличныйДокумент.Вывести(ОбластьМакета);

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

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        
        ОбластьМакета.Параметры.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
        ОбластьМакета.Параметры.Количество = ВыборкаДетальныеЗаписи.Количество;
        ОбластьМакета.Параметры.Цена = ВыборкаДетальныеЗаписи.Цена;
        ОбластьМакета.Параметры.Сумма = ВыборкаДетальныеЗаписи.Сумма;
        ОбластьМакета.Параметры.Записать();        

    КонецЦикла;

Внешняя обработка для БП 8.3 Корп. Запрос сделал через конструктор запросов. Цикл Пока ВыборкаДетальныеЗаписи.Следующий()  - показывает пустографы. Сильно не бейте.
1 sitex
 
naïve
27.03.24
21:59
(0) А какие были ожидания ?!
2 sitex
 
naïve
27.03.24
22:00
Возьми консоль открой в Приложении и свой запрос выполни в нем .
3 Волшебник
 
27.03.24
22:01
Используйте СКД
4 sitex
 
naïve
27.03.24
22:02
(3) Мне кажется у него там близко ОФ. и СКД не в милость
5 vienya
 
27.03.24
22:06
(4) (3) (2) Спасибо.
6 Волшебник
 
27.03.24
22:11
(5) Спасибо, что отвечаете. Что понимаете?
7 Ёпрст
 
28.03.24
00:17
(0)    Выборка = Запрос.Выполнить().Выбрать();
....
Пока Выборка.Следующий() Цикл

   ВыборкаДетальныеЗаписи = Выборка.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
8 vienya
 
28.03.24
04:35
(6) Меня отослали к СКД и консоли запросов. Это требует времени для освоения. Поэтому я попробовал цикл Для каждого. Жалуется - не видит СсылкаНаОбъект.Товары из СчетНаОплатуПокупателю:

ОбластьМакета = Макет.ПолучитьОбласть("ТелоТаблицы");  
        Для каждого ТекущаяСтрока Из СсылкаНаОбъект.Товары Цикл
        ОбластьМакета.Параметры.Номерклатура = ТекущаяСтрока.Номенклатура;
        ОбластьМакета.Параметры.Количество = ТекущаяСтрока.Количество;
        ОбластьМакета.Параметры.Цена = ТекущаяСтрока.Цена;
        ОбластьМакета.Параметры.Сумма = ТекущаяСтрока.Сумма;
        ОбластьМакета.Параметры.Всего = ТекущаяСтрока.Сумма * ТекущаяСтрока.Количество;
        ТабличныйДокумент.Вывести(ОбластьМакета);
        КонецЦикла;
9 vienya
 
28.03.24
04:46
10 rphosts
 
28.03.24
05:31
(0) >Цикл Пока ВыборкаДетальныеЗаписи.Следующий()  - показывает пустографы

с наркоманского на человеческий переведи!

у тебя то что ты называешь циклом по сути 4 типа операций:
1.циклическое выполнение блока кода
2.Получение данных колонок результата запроса
3.присвоение полученного в операции 2. параметру области табличного документа(макета).
4.Какое-то порно с записью вместо вывода в табличный докумекнт
11 rphosts
 
28.03.24
05:31
(8) ты ливингстар или бот?
12 vienya
 
28.03.24
06:55
(10) (11) Я отказался от цикла Пока в пользу Для каждого. Но это мне не помогло. По человечески, цель - заполнить таблицу данными из документа.

Почему  ругается на СсылкаНаОбъект.СчетНаОплатуПокупателю.Товары,
не видит ни СсылкаНаОбъект.Товары,
ни Товары,
как обратиться к табличной части?
13 vienya
 
28.03.24
07:18
14 steep1
 
28.03.24
07:20
(0) может у тебя нет документов с табличной частью заполненной?
15 vladmenleo
 
28.03.24
07:21
(0)
лТекст = "
        |ВЫБРАТЬ
        |    СчетНаОплатуПокупателю.Товары.(
        |        Номенклатура КАК Номенклатура,
        |        Количество КАК Количество,
        |        Цена КАК Цена,
        |        Сумма КАК Сумма
        |    ) КАК Товары
        |ИЗ
        |    Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю
        |ГДЕ
        |    СчетНаОплатуПокупателю.Дата МЕЖДУ &Дата1 И &Дата2
        |";

    лЗапрос = Новый Запрос(лТекст);

    // Присвоение значений переменным параметров.
    Дата1 = Дата(2024, 01, 01, 00, 00, 00);

    Дата2 = Дата(2024, 03, 01, 00, 00, 00);

    // Установка параметров.
    лЗапрос.УстановитьПараметр("Дата1", Дата1);
    лЗапрос.УстановитьПараметр("Дата2", Дата2);


    лВыборка = лЗапрос.Выполнить().Выбрать();

    Пока лВыборка.Следующий() Цикл
        СтрТовары = лВыборка.Товары.Выбрать();
        Пока СтрТовары.Следующий() Цикл
            сообщить("Номенклатура " + СтрТовары.Номенклатура);
        КонецЦикла;
    КонецЦикла;
Все чудно работает
16 vienya
 
28.03.24
07:25
(7) При таких двух циклах не обнаруживает номенклатуру в ОбластьМакета.Параметры.Номерклатура
17 Гипервизор
 
28.03.24
07:29
(13) Параметр Номенклатура с типом ДокументСсылка.СчетНаОплатуПокупателю..
Я не в состоянии постичь величие замысла.

А по что касается запроса, сравните:
ВЫБРАТЬ
    СчетНаОплатуПокупателю.Товары.(
        Номенклатура КАК Номенклатура
    ) КАК Товары
ИЗ
    Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю

и

ВЫБРАТЬ
    СчетНаОплатуПокупателюТовары.Номенклатура
ИЗ
    Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары

Дальше сами.
18 rphosts
 
28.03.24
08:39
(14) он не реагирует на простые вопросы, 99% это бот
19 vienya
 
28.03.24
08:41
(14) Чуть кандрашка не хватила, но нет, табличные части всех документов заполнены. Пустые не проводятся.
(17) Спасибо, хороший рабочий код запроса. Но это никак не повлияло на вывод данных в табличную часть. Для меня открытым остаётся вопрос, нужен ли вообще запрос для вывода данных.
20 vienya
 
28.03.24
08:47
(11) (18) Я думал, что это вообще типовая задача.
21 Волшебник
 
28.03.24
08:52
(20) Чем думали-то?
22 SerF_2011
 
28.03.24
09:04
(0) а то что в РезультатеЗапроса не результат запроса кто-нибудь видит?
23 vienya
 
28.03.24
09:07
24 vienya
 
28.03.24
09:09
(22) А без запроса, вообще возможно вывести данные в таблицу? Просто через цикл?
25 Галахад
 
28.03.24
09:14
(24)  Для Каждого Стр Из СсылкаНаОбъект.Товары Цикл
...

Но это не канонично.
26 Гена
 
28.03.24
09:16
ОбластьМакета.Параметры.Номерклатура

Это нормально?
27 vienya
 
28.03.24
09:17
(25) Галхард, что не так с СсылкаНаОбъект.Товары ?https://ltdfoto.ru/image/OEtBO7
https://ltdfoto.ru/image/OEze4p
28 vienya
 
28.03.24
09:20
(26) Спа-си-бо!!! Глаз - алмаз.
29 vienya
 
28.03.24
09:30
Как обратиться? https://ltdfoto.ru/image/OE7jid
30 Волшебник
 
28.03.24
09:31
(29) Если поля не обнаружено, значит его там нет! Успокойтесь уже и разберитесь с типами
31 vienya
 
28.03.24
09:34
из Документ.СчетНаОплатуПокупателю./Табличные части/Товары
32 vienya
 
28.03.24
09:35
тип ссылка
33 vienya
 
28.03.24
09:37
(30) вот же!: https://ltdfoto.ru/image/OEPeRA
34 Волшебник
 
28.03.24
09:38
(32) Это Вам так кажется! Поставьте точку останова и посмотрите истину
35 vienya
 
28.03.24
09:57
Я раздавлен. 1с - это путь страдания. Мне нужна таблетка от отчаянья.
36 vienya
 
28.03.24
09:58
Всё напрасно.
37 Волшебник
 
28.03.24
09:59
(35) А Вы думали, что в сказку попали? Вы в жизнь вляпались...
38 SerF_2011
 
28.03.24
10:36
(35) да не ссы ты)) для первой темы на форуме это еще вполне неплохо, вон сколько гигантов мысли сбежалось, даже сам Волшебник помогает!
39 Гена
 
28.03.24
10:43
Это... там рядом кто-нибудь есть?.. вдруг он... того...
40 Dmitrii
 
28.03.24
11:25
(0) Суть Вашего кода в том, что Вы берёте область макета

ОбластьМакета = Макет.ПолучитьОбласть("ТелоТаблицы");

Выполняете какой-то код, а потом, никак не изменив эту саму область (оставив по сути пустой) выводите в табличный документ

ТабличныйДокумент.Вывести(ОбластьМакета);

Никакого смысла от манипуляция с этой областью после того, как Вы вывели её в табличный документ, уже нет. Внутри цикла абсолютно бессмысленный код.
Внутри цикла Вы должны были заполнять параметры области и выводить область с заполненными параметрами в табличный документ. Перед циклом выводить область в ТД не нужно.

Что делает этот оператор

ОбластьМакета.Параметры.Записать();        

я вообще не понял.

А ещё интересно посмотреть что из себя представляет область "ТелоТаблицы". Есть подозрение, что это не строка табличной части....

Рекомендую Вам для начала просто посмотреть на типовой код, который выдаёт конструктор печати. В дереве метаданных конфигурации правая кнопка мыши на Вашем документе и выбрать "Конструкторы - Конструктор печати". Он состряпает Вам макет и процедуру "Печать" (конкретное имя метода и место его размещения можно выбрать в конструкторе). Конструктор выдаст код без использования запроса. Влепить туда запрос вместо объектного кода не составит труда.
41 vienya
 
28.03.24
16:45
(35) Таблетка, т.е. решение всё же нашлось - у меня в свойствах стоял ссылочный тип, а нужно было наоборот снять флаг с СодержитЗначение. Всем спасибо! https://ltdfoto.ru/image/OMhCCo
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.