Имя: Пароль:
1C
1С v8
Установка доступных значений выбора в параметр отчета
,
0 Вова 100кг
 
04.07.24
10:07
Всем привет, 1С УХ. Возник такой вопрос. Есть отчет (внешний), у него есть параметры  - организация и период. Список выбора параметра организация должен меняться в момент изменения периода. Добавить значения в список выбора у меня получилось, но они не кликабельные. Форма отчета - общая.

Код добавления в список выбора
Элементы.КомпоновщикНастроекПОльзовательскиеНастройкиЭлемент1Значение.СписокВыбора.УстановитьЗначения(Массив).

Самое интересное что в модуле отчета ПриОпределенииПараметровВыбора с добавлением в нужную настройку списка выбора - все добавляется. Я просмотрел типовой код и делал по аналогии - но увы, не получилось, может кто-то сталкивался.
1 Волшебник
 
04.07.24
10:10
>> Список выбора параметра организация должен меняться в момент изменения периода.

Как связаны период и организация?
2 Вова 100кг
 
04.07.24
10:11
(1), никак не связаны. Просто при изменении параметра "период", должны браться организации из регламента сценария периода МСФО.
3 Волшебник
 
04.07.24
10:12
(2) Если никак не связаны, то почему должны? Вы противоречите сами себе.
4 Вова 100кг
 
04.07.24
10:14
Я добавил событие при изменении параметра периода. И вытащить  нужные организации у меня получилось. Не получается их корректно воткнуть их в список выбора параметра организации. Получается воткнуть только так что бы они отображались и их нельзя выбрать)
5 Вова 100кг
 
04.07.24
10:18
(3) я думаю что проблема в том что я не туда закидываю список выбора. Элементы.КомпоновщикНастроекПОльзовательскиеНастройкиЭлемент1Значение.СписокВыбора.УстановитьЗначения(Массив)

Вот сюда закидывается сейчас, а вероятно нужно закидывать в другое место. Я методом научного тыка пробовал - не прокатило.
6 Вова 100кг
 
04.07.24
10:23
Если  будет более понятнее вот код обработчика:

Массив = Новый Массив;
        Для каждого Регламент Из Регламенты Цикл
            Организации = JSA_ЗакрытиеМесяцаПовтИсп.ПолучитьСписокОрганизацийРегламентаОтчетностиМСФО(Регламент);
            Для каждого Организация Из Организации Цикл
                Если Массив.Найти(Организация) = Неопределено Тогда
                    Массив.Добавить(Организация);                
                КонецЕсли;            
            КонецЦикла;
        КонецЦикла;

        Элементы.КомпоновщикНастроекПОльзовательскиеНастройкиЭлемент1Значение.СписокВыбора.Очистить();
        Элементы.КомпоновщикНастроекПОльзовательскиеНастройкиЭлемент1Значение.СписокВыбора.УстановитьЗначения(Массив);
7 Вова 100кг
 
04.07.24
10:28
(6) Прошу прощения, вместо УстановитьЗначения - ЗагрузитьЗначения
8 RVN
 
04.07.24
10:31
А если так ?

ЭлементНастройки = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Организация");
        Если ЭлементНастройки <> Неопределено Тогда
            ЭлементПользовательскойНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ЭлементНастройки.ИдентификаторПользовательскойНастройки);
            Если ЭлементПользовательскойНастройки <> Неопределено Тогда
                ЭлементПользовательскойНастройки.СписокВыбора.Очистить();
                ЭлементПользовательскойНастройки.СписокВыбора.ЗагрузитьЗначения(Массив);
            КонецЕсли; // Если ЭлементПользовательскойНастройки <> Неопределено Тогда        
        КонецЕсли; // Если ЭлементНастройки <> Неопределено Тогда
9 Вова 100кг
 
04.07.24
10:37
(8), Поле объекта не обнаружено (СписокВыбора)
10 youalex
 
04.07.24
10:51
А вот это например
ДоступныйПараметрКомпоновкиДанных (DataCompositionAvailableParameter)
ДоступныеЗначения (AvailableValues)
Использование:
Чтение и запись.
11 youalex
 
04.07.24
10:52
* если подойдет, то у тебя в топике ответ)
12 Вова 100кг
 
04.07.24
10:52
(8), организации которые добавляются - отображаются как уже выбранные в виде <<Пустое значение>>. Это я закидывал и в ЭлементПользовательскойНастройки.Значение и в ЭлементПользовательскойНастройки.Значение.ДоступныеЗначения
13 Ногаминебить
 
04.07.24
10:55
(6) Тип значения под отладкой какой у элементов массива?
14 Вова 100кг
 
04.07.24
10:57
(13), СправочникСсылка.Организации
15 Волшебник
 
04.07.24
11:02
(7) Чтобы не было таких косяков, просто копируйте программный код. Не выдумывайте
16 Ногаминебить
 
04.07.24
11:05
(14) Точно? А Организации - это массив или Список значений?
17 Вова 100кг
 
04.07.24
11:11
(16), я пробовал и то и то
18 Вова 100кг
 
04.07.24
11:13
(15), не могу скопировать программый код, потому что там идет
обращение к разным модулям. Единственная процедура которая запускает все это - она экспортная, но на вход требует Объект  
отчета - внешний отчет. А у формы общей нет этих данных
19 Вова 100кг
 
04.07.24
11:15
(16), единственное при СпискеЗначений ругается на сериализацию ЭлементаСпискаЗначений, делал через

Для Каждого Эл из СпискаЗначений Цикл
     ....Значение.Добавить(Эл);
КонецЦикла;
20 Ногаминебить
 
04.07.24
11:15
В каком смысле то и то? Функция JSA_ЗакрытиеМесяцаПовтИсп.ПолучитьСписокОрганизацийРегламентаОтчетностиМСФО(Регламент) возвращает значение вполне конкретного типа. Этот тип и интересует. Или функция тоже в процессе переписывалась?

Вот на такое поменять пробовал?

                Если Массив.Найти(Организация.Значение) = Неопределено Тогда
                    Массив.Добавить(Организация.Значение);                
                КонецЕсли;
21 Вова 100кг
 
04.07.24
11:16
(19), *Эл.Значение
22 Вова 100кг
 
04.07.24
11:17
(20), Функцию сам делал, она возвращает массив смотрите (6),
там расписано что после получения идет
23 Вова 100кг
 
04.07.24
11:19
(20),

Есть код в модуле внешнего отчета, где все хорошо добавляется. Там тоже используется эта функция.


Процедура ПриОпределенииПараметровВыбора(Форма, СвойстваНастройки) Экспорт
    
    Если СвойстваНастройки.ОписаниеТипов = Новый ОписаниеТипов("СправочникСсылка.Организации") Тогда    
        
        Период = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти("abb1c1b1-911f-477f-9e75-34e8576c9377").Значение;
        Регламенты = JSA_ЗакрытиеМесяцаПовтИсп.ПолучитьАктуальныеРегламентыМСФОНаПериод(Период.ДатаНачала, Период.ДатаОкончания);
        
        Массив = Новый Массив;
        Если Регламенты <> Неопределено Тогда    
            Для каждого Регламент Из Регламенты Цикл
                Организации = JSA_ЗакрытиеМесяцаПовтИсп.ПолучитьСписокОрганизацийРегламентаОтчетностиМСФО(Регламент);                                        
                Для каждого Организация Из Организации Цикл
                    Если Массив.Найти(Организация) = Неопределено Тогда
                        Массив.Добавить(Организация);                
                    КонецЕсли;                                            
                КонецЦикла;
            КонецЦикла;
        КонецЕсли;
        
    СвойстваНастройки.ЗначенияДляВыбора.ЗагрузитьЗначения(Массив);
    КонецЕсли;                                         
    
КонецПроцедуры
24 RVN
 
04.07.24
11:23
(23) Если у тебя добавляется то в чем проблема-то?
25 Ногаминебить
 
04.07.24
11:25
Текст в (12) очень похож на то, что где-то не совпадают типы. Массив из кучи пустых ссылок скорее всего из-за этого. А вот где с типами косяк - это под отладкой по шагам. Тем более кода не так и много. Это конечно всего лишь гипотеза, но других-то пока нет. :)
26 Вова 100кг
 
04.07.24
14:09
(25), спустя неделю мучений дошло. Те поля что лежат на форме не питаются от пользовательских настроек. Им отдельно задаются значения. Вот почему нельзя было и выбрать на поле есть данные, а в настройке нету. По итогу путем затаскивания и туда и туда получилось сделать как положено.

Код -

ОтчетОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[0].Значение.ДатаНачала     = ДатаНачала;
        ОтчетОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[0].Значение.ДатаОкончания = ДатаОкончания;
        
        ОтчетыСервер.УстановитьДоступныеЗначения(ОтчетОбъект, ЭтаФорма);
        Если Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[1].Значение.Количество() <> 0 Тогда
            Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[1].Значение.Очистить();        
        КонецЕсли;
        
        Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы[3].ДоступныеЗначения = СписокЗначений;
        
        Если Элементы.КомпоновщикНастроекПользовательскиеНастройкиЭлемент1Значение.СписокВыбора.Количество() <> 0 Тогда
            Элементы.КомпоновщикНастроекПользовательскиеНастройкиЭлемент1Значение.СписокВыбора.Очистить();
        КонецЕсли;
        
        Для каждого Эл Из СписокЗначений Цикл
            Элементы.КомпоновщикНастроекПользовательскиеНастройкиЭлемент1Значение.СписокВыбора.Добавить(Эл.Значение);            
        КонецЦикла;

ВСЕМ ОГРОМНОЕ СПАСИБО!
27 Волшебник
 
04.07.24
14:15
(26) Как? Уже неделя пролетела? Вот время летит...
28 Вова 100кг
 
04.07.24
14:23
(27) Ну я же не сразу на форум полез)