Имя: Пароль:
1C
 
Не работает отбор в таблице значений
🠗 (Волшебник 12.05.2025 09:18)
0 rookie2025
 
11.05.25
17:56
Делаю на СКД отчет, с набором данных объект.
В модуле объекта при компановке результата во внешние наборы данных передаю таблицу значений. Ее собираю вот этой функцией:
"&НаСервере
Функция ЗаполнитьДележку()
    
    Дележка = Новый ТаблицаЗначений;
    Дележка.Колонки.Добавить("Менеджер");
    Дележка.Колонки.Добавить("ПроцентДележки");
    Дележка.Колонки.Добавить("СуммаДележки");
    Дележка.Колонки.Добавить("ЗаказКлиента");
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ РАЗЛИЧНЫЕ
        |    РасчетыСКлиентами.Период КАК Период,
        |    РасчетыСКлиентами.Регистратор КАК Регистратор,
        |    РасчетыСКлиентами.ОбъектРасчетов КАК ЗаказКлиента,
        |    ВЫБОР
        |        КОГДА РасчетыСКлиентами.Оплачивается <> 0
        |            ТОГДА РасчетыСКлиентами.Оплачивается
        |        ИНАЧЕ РасчетыСКлиентами.Сумма
        |    КОНЕЦ КАК Приход,
        |    РасчетыСКлиентами.ХозяйственнаяОперация КАК ХозяйственнаяОперация,
        |    РасчетыСКлиентами.ОбъектРасчетов.Менеджер КАК Менеджер,
        |    РасчетыСКлиентами.ОбъектРасчетов.Подразделение КАК Подразделение,
        |    РасчетыСКлиентами.ОбъектРасчетов.Организация КАК Организация,
        |    РасчетыСКлиентами.ОбъектРасчетов.Контрагент КАК Контрагент,
        |    РасчетыСКлиентами.ФормаОплаты КАК ФормаОплаты
        |ИЗ
        |    РегистрНакопления.РасчетыСКлиентами КАК РасчетыСКлиентами
        |ГДЕ
       // |    РасчетыСКлиентами.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
           |    РасчетыСКлиентами.Период МЕЖДУ ДАТАВРЕМЯ(2024,10,1,0,0,0) И ДАТАВРЕМЯ(2025,1,1,0,0,0)
        |    И РасчетыСКлиентами.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПоступлениеОплатыОтКлиента)";
    Выборка = Запрос.Выполнить().Выбрать();    

    Запрос1 = Новый Запрос;
    Запрос1.Текст =
        "ВЫБРАТЬ
        |    ДП_УчастникиЗаказа.Менеджер КАК Менеджер,
        |    ДП_УчастникиЗаказа.Процент КАК Процент,
        |    0 КАК СуммаДележки,
        |    ДП_УчастникиЗаказа.ЗаказКлиента.Ссылка КАК Заказ
        |ИЗ
        |    РегистрСведений.ДП_УчастникиЗаказа КАК ДП_УчастникиЗаказа";
    
    ТабДележки = Запрос1.Выполнить().Выгрузить();  
    
    Пока Выборка.Следующий() Цикл
            стрОтбор = Новый Структура("Заказ", Выборка.ЗаказКлиента);
            МассивСтрок = ТабДележки.НайтиСтроки(стрОтбор);  
            Если МассивСтрок.Количество()>0 Тогда //еcть дележки,
                НомерСтр=0;
                Для каждого выбстрока из МассивСтрок Цикл
                    номерСтр=НомерСтр+1;
                    Если номерстр>1 тогда
                        НоваяСтрока=Дележка.Добавить();
                        НоваяСтрока.ЗаказКлиента=Выборка.ЗаказКлиента;
                    КонецЕсли;    
                    НоваяСтрока.Менеджер=Выбстрока.Менеджер;    
                    НоваяСтрока.СуммаДележки=Выборка.Приход;
                    НоваяСтрока.ПроцентДележки = Выбстрока.Процент;
                КонецЦикла;    
            Иначе     //нет дележки  все на менеджера указнного в заказе
                НоваяСтрока=Дележка.Добавить();
                НоваяСтрока.ЗаказКлиента=Выборка.ЗаказКлиента;
                НоваяСтрока.Менеджер=Выборка.Менеджер;    
                НоваяСтрока.СуммаДележки=Выборка.Приход;
                НоваяСтрока.ПроцентДележки = 100;
            КонецЕсли;
    КонецЦикла;    
    

    Возврат Дележка;

КонецФункции // ()"
переменная МассивСтрок всегда неопределено, отбор не работает. как поправить?
1 Chai Nic
 
11.05.25
18:00
Вроде бы ТЗ должна быть с типизированными полями
2 Мультук
 
гуру
11.05.25
18:06
(0)

1) Ради интереса посмотри в отладчике типЗнч() у  

РасчетыСКлиентами.ОбъектРасчетов (Выборка.ЗаказКлиента)

и внезапно это справочник, Карл (с)

2) В качестве говнокода можно наверное написать
 |    РасчетыСКлиентами.ОбъектРасчетов.Объект КАК ЗаказКлиента, 
3 Лодырь
 
11.05.25
18:27
А почему дележка в цикле, а не в запросе?
4 rookie2025
 
11.05.25
19:02
(2) Спасибо, изменение запросов проблему решило, все работает.
p.s. новичку с опытом в пару месяцев пока еще простительно говнокодить.
5 craxx
 
11.05.25
20:43
(4) Новичку как раз говнокодить НЕ простительно, иначе потом войдет в привычку. Делать надо сразу нормально.
6 Рэйв
 
12.05.25
08:12
(3)Выполнение запроса в цикле наше все:-)
7 Stepashkin
 
12.05.25
08:27
(5) 👍
8 maxab72
 
12.05.25
08:35
Философский вопрос: Если в цикле обращаться к функции глобального модуля в которой есть запрос, это считается моветоном или нет?
9 Климов Сергей
 
12.05.25
09:18
(8) Да, если ты знаешь, что в функции есть такой запрос.
10 Fish
 
гуру
12.05.25
09:04
(9) А если не знаешь, то норм?
11 lucky_
 
12.05.25
09:10
(8) не нужно путать философские вопросы с тупыми.
12 Мультук
 
гуру
12.05.25
09:14
Может заведём отдельную тему на форуме -- "утренний пук в лужу" ?

Будем постить туда котят, фотки завтрака.
Умные мысля а-ля -- "нельзя обращаться через три точки, иначе придёт адский сотона" ?
13 Волшебник
 
12.05.25
09:18
(12) Говноветка получится
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн