|
УФ Обновление Динамического списка, созданного программно | ☑ | ||
---|---|---|---|---|
0
spiller26
10.10.24
✎
14:37
|
Есть документ1.
Программно сделаны: - Реквизит "Динамический список" (произвольный запрос, отображения документов2) - Элемент "Таблица" для Динамического списка. - Кнопка создания документа2 из документ1 Всё работает, кроме обновления Динамического списка. Вопрос: как правильно обновить отображение данных ДС? &НаКлиенте Процедура ДобавитьПалетныйЛист(Команда) Если Параметры.Ключ.Пустая() Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Документ не записан"); Иначе Если Объект.ПометкаУдаления Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Документ помечен на удаление"); Иначе ФормаПЛ = ПолучитьФорму("Документ.зн_ПалетныйЛист.ФормаОбъекта"); ФормаПЛ.ОписаниеОповещенияОЗакрытии = Новый ОписаниеОповещения("ПослеЗакрытияФормыПЛ", ЭтаФорма); ДанныеФормыПЛ = ФормаПЛ.Объект; ЗаполнитьПалетныйЛистНаСервере(ДанныеФормыПЛ); КопироватьДанныеФормы(ДанныеФормыПЛ, ФормаПЛ.Объект); ФормаПЛ.Модифицированность = Истина; ФормаПЛ.Открыть(); //ФормаПЛ.ОткрытьФорму(,, ЭтаФорма,,,, ОповещениеЗакрытияПЛ); КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПослеЗакрытияФормыПЛ(Результат, ДополнительныеПараметры) Экспорт Элементы["Таблица_ПЛ"].Обновить(); //ЭтаФорма.Прочитать(); //ЭтаФорма.ОбновитьОтображениеДанных(); Прочитать(); ОбновитьОтображениеДанных(); КонецПроцедуры |
|||
1
spiller26
10.10.24
✎
16:49
|
Формирование ДС на форме&НаСервере &После("ПриЧтенииСозданииНаСервере") Процедура дит_ПриЧтенииСозданииНаСервере() Если ЗначениеЗаполнено(Объект.Ссылка) И Объект.Статус = Перечисления.СтатусыЗаданийНаПеревозку.Отправлено Тогда Если ЭтаФорма.Элементы.Найти("СтраницаПалетныеЛисты") = Неопределено Тогда //ГруппаСтраницы СтраницаПалетныеЛисты = ЭтаФорма.Элементы.Добавить("СтраницаПалетныеЛисты", Тип("ГруппаФормы"), Элементы.ГруппаСтраницы); СтраницаПалетныеЛисты.Вид = ВидГруппыФормы.Страница; СтраницаПалетныеЛисты.Заголовок = "Палетные листы"; //Панель ГруппаПанель_ПЛ = ЭтаФорма.Элементы.Добавить("ГруппаОбычная", Тип("ГруппаФормы"), СтраницаПалетныеЛисты); ГруппаПанель_ПЛ.Вид = ВидГруппыФормы.ОбычнаяГруппа; ГруппаПанель_ПЛ.Отображение = ОтображениеОбычнойГруппы.Нет; ГруппаПанель_ПЛ.ОтображатьЗаголовок = Ложь; ГруппаПанель_ПЛ.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; //Команда КомандаДобавить_ПЛ = ЭтаФорма.Команды.Добавить("ДобавитьПалетныйЛист"); КомандаДобавить_ПЛ.Заголовок = "Добавить Палетный лист"; КомандаДобавить_ПЛ.Действие = "ДобавитьПалетныйЛист"; //указываем только имя процедуры //Кнопка КнопкаДобавить_ПЛ = ЭтаФорма.Элементы.Добавить("ДобавитьПалетныйЛист", Тип("КнопкаФормы"), ГруппаПанель_ПЛ); КнопкаДобавить_ПЛ.Заголовок = "Добавить Палетный лист"; КнопкаДобавить_ПЛ.ИмяКоманды = "ДобавитьПалетныйЛист"; //Таблица для динамического списка Палетных листов //ТаблицаДС_ПЛ = Элементы.Добавить("ДС_ПЛ", Тип("ТаблицаФормы"), СтраницаПалетныеЛисты); //Запрос с параметрами для динамического списка Палетных листов #Область Запрос_для_Динамического_Списка Массив_ПЛ = СформироватьМассивПЛ(Объект.Ссылка); ТекстЗапроса_ПЛ = "ВЫБРАТЬ | зн_ПалетныйЛист.Ссылка КАК ПалетныйЛист, | зн_ПалетныйЛист.Статус КАК Статус, | ВЫБОР | КОГДА зн_ПалетныйЛист.ПометкаУдаления | ТОГДА 6 | ИНАЧЕ ВЫБОР | КОГДА зн_ПалетныйЛист.Статус = ЗНАЧЕНИЕ(Перечисление.зп_СтатусыПалетныйЛистов.Отпралено) | ТОГДА 1 | ИНАЧЕ ВЫБОР | КОГДА зн_ПалетныйЛист.Статус = ЗНАЧЕНИЕ(Перечисление.зп_СтатусыПалетныйЛистов.Принято) | ТОГДА 3 | ИНАЧЕ ВЫБОР | КОГДА зн_ПалетныйЛист.Статус = ЗНАЧЕНИЕ(Перечисление.зп_СтатусыПалетныйЛистов.Подготовлено) | ТОГДА 4 | ИНАЧЕ ВЫБОР | КОГДА зн_ПалетныйЛист.Статус = ЗНАЧЕНИЕ(Перечисление.зп_СтатусыПалетныйЛистов.ПринятоСОтклонениями) | ТОГДА 2 | ИНАЧЕ 0 | КОНЕЦ | КОНЕЦ | КОНЕЦ | КОНЕЦ | КОНЕЦ КАК КартинкаСтатус |ИЗ | Документ.зн_ПалетныйЛист КАК зн_ПалетныйЛист |ГДЕ | зн_ПалетныйЛист.Ссылка В(&МассивПЛ)"; #КонецОбласти МассивКолонок_ПЛ = Новый Массив; МассивКолонок_ПЛ.Добавить("ПалетныйЛист"); МассивКолонок_ПЛ.Добавить("Статус"); МассивКолонок_ПЛ.Добавить("КартинкаСтатус"); ПараметрыЗапроса_ПЛ = Новый Структура; ПараметрыЗапроса_ПЛ.Вставить("МассивПЛ",Массив_ПЛ); СписокДействий_ПЛ = Новый Структура; СписокДействий_ПЛ.Вставить("Выбор", "Таблица_ПЛ_Выбор"); // СозданиеДинамическогоСписка("Таблица_ПЛ", ТекстЗапроса_ПЛ, МассивКолонок_ПЛ, СписокДействий_ПЛ,,"СтраницаПалетныеЛисты",, Истина, ПараметрыЗапроса_ПЛ); //Картинка отображения статуса "Палетный лист" Элементы["Таблица_ПЛ"].ПутьКДаннымКартинкиСтроки = "Таблица_ПЛ.КартинкаСтатус"; Элементы["Таблица_ПЛ"].КартинкаСтрок = БиблиотекаКартинок.зн_КоллекцияСостоянийОбъекта; Элементы["Таблица_ПЛКартинкаСтатус"].Видимость = Ложь; //скрываем колонку КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
2
spiller26
10.10.24
✎
16:50
|
СозданиеДинамическогоСписка&НаСервере Процедура СозданиеДинамическогоСписка( ИмяСписка = "Список", //тип строка - имя будущего списка на форме и реквизита ТекстЗапроса = "", //тип строка - запрос, если он не указан, необходимо указать таблицу МассивКолонок, //тип массив - массив создаваемых колонок, значения тип строка. Пример: "Д,ДоговораКонтрагента" значит будет создана колонка // с заголовком "Д" и колонкой списка "ДоговораКонтрагента". Если указать просто "ДоговораКонтрагента", // заголовок будет идентичен заголовку по умолчанию типа "Договор контрагента". СписокДействий = Неопределено, //типа структура - структура содержит действия (свойства) динамического списка, можно указать только те которые необходимы. // пример: СписокДействий = Новый Структура("Выбор,ПриАктивизацииСтроки","СписокВыбор","СписокПриАктивизацииСтроки") ТаблицаСписка = "", //тип строка - содержит имя основной таблицы, пример: "Документ.РеализацияТоваровУслуг" ДобавитьВ = "", //тип строка - имя элемента на который будет размещен список, если пустое, тогда добавляется на форму ВставитьПеред = "", //тип строка - имя элемента перед которым будет размещен список, если пустое, будет просто добавлен в конец СвояКоманднаяПанель = ЛОЖЬ, //тип булево - если ИСТИНА, скрывает стандартную панель и создает свою пустую для будушего наполнения ИмяСписка+"КоманднаяПанель2" ПараметрыЗапроса = Неопределено)//тип структура - содержит перечень параметров, если они используются в запросе. //Защита от дурака Если ТекстЗапроса = "" И ТаблицаСписка = "" Тогда Сообщить("Ошибка формирования динамического списка, укажите запрос или таблицу"); Возврат; КонецЕсли; //Создаем свою командную панель, тот случай когда я не нашел способа снять галочку "Автозаполнение" Если СвояКоманднаяПанель Тогда Если ВставитьПеред = "" Тогда ГруппаДинамическогоСписка = Элементы.Добавить("Группа" + ИмяСписка + "CоСвоейКоманднойПанелью",Тип("ГруппаФормы"),?(ДобавитьВ = "",ЭтаФорма,ЭтаФорма.Элементы[ДобавитьВ])); Иначе ГруппаДинамическогоСписка = Элементы.Вставить("Группа" + ИмяСписка + "CоСвоейКоманднойПанелью",Тип("ГруппаФормы"),?(ДобавитьВ = "",ЭтаФорма,ЭтаФорма.Элементы[ДобавитьВ]),ЭтаФорма.Элементы[ВставитьПеред]); КонецЕсли; ГруппаДинамическогоСписка.Вид = ВидГруппыФормы.ОбычнаяГруппа; ГруппаДинамическогоСписка.ОтображатьЗаголовок = Ложь; ГруппаДинамическогоСписка.Отображение = ОтображениеОбычнойГруппы.Нет; ГруппаДинамическогоСписка.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; КоманднаяПанельСписка = Элементы.Добавить(ИмяСписка + "КоманднаяПанель2",Тип("ГруппаФормы"),ГруппаДинамическогоСписка); КоманднаяПанельСписка.Вид = ВидГруппыФормы.КоманднаяПанель; КонецЕсли; //Создаем реквизит формы ТипыРеквизита = Новый Массив; ТипыРеквизита.Добавить(Тип("ДинамическийСписок")); ОписаниеТиповДляРеквизита = Новый ОписаниеТипов(ТипыРеквизита); ДинамическийСписок = Новый РеквизитФормы(ИмяСписка, ОписаниеТиповДляРеквизита,,"",ЛОЖЬ); //Имя реквизита ДобавляемыеРеквизиты = Новый Массив; ДобавляемыеРеквизиты.Добавить(ДинамическийСписок); //Задаем свойства реквизиту ИзменитьРеквизиты(ДобавляемыеРеквизиты); РеквизитДинамическийСписок = ЭтаФорма[ИмяСписка]; //Имя реквизита Если ТекстЗапроса = "" Тогда РеквизитДинамическийСписок.ПроизвольныйЗапрос = ЛОЖЬ; РеквизитДинамическийСписок.ОсновнаяТаблица = ТаблицаСписка; Иначе РеквизитДинамическийСписок.ПроизвольныйЗапрос = ИСТИНА; РеквизитДинамическийСписок.ТекстЗапроса = ТекстЗапроса; Если ТаблицаСписка <> "" Тогда РеквизитДинамическийСписок.ОсновнаяТаблица = ТаблицаСписка; КонецЕсли; КонецЕсли; //Заполняем параметры если они были указаны Если ПараметрыЗапроса <> Неопределено Тогда Для Каждого Параметра из ПараметрыЗапроса Цикл РеквизитДинамическийСписок.Параметры.УстановитьЗначениеПараметра(Параметра.Ключ,Параметра.Значение); КонецЦикла; КонецЕсли; //Размещаем реквизит на форме Если ЛОЖЬ ИЛИ ВставитьПеред = "" ИЛИ СвояКоманднаяПанель //Если своя командная панель тогда нет логики уже в параметре ВставитьПеред Тогда ТаблицаФормы = Элементы.Добавить(ИмяСписка,Тип("ТаблицаФормы"),?(СвояКоманднаяПанель,ГруппаДинамическогоСписка,?(ДобавитьВ = "",ЭтаФорма,ЭтаФорма.Элементы[ДобавитьВ]))); Иначе ТаблицаФормы = Элементы.Вставить(ИмяСписка,Тип("ТаблицаФормы"),?(ДобавитьВ = "",ЭтаФорма,ЭтаФорма.Элементы[ДобавитьВ]),ЭтаФорма.Элементы[ВставитьПеред]); КонецЕсли; ТаблицаФормы.ПутьКДанным = ИмяСписка; //Имя реквизита //Если своя панель тогда скрываем стандартную Если СвояКоманднаяПанель Тогда Элементы[ИмяСписка].ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет; КонецЕсли; //Создание колонок на основание МассивКолонок Для Каждого Элемента Из МассивКолонок Цикл ПараметрыКолонки = СтрЗаменить(Элемента,",",Символы.ПС); Если СтрЧислоСтрок(ПараметрыКолонки) > 1 Тогда Заголовок = СтрПолучитьСтроку(ПараметрыКолонки, 1); ИмяКолонки = СтрПолучитьСтроку(ПараметрыКолонки, 2); Иначе Заголовок = ""; ИмяКолонки = ПараметрыКолонки; КонецЕсли; НоваяКолонкаТаблицы = Элементы.Добавить(ИмяСписка + ИмяКолонки, Тип("ПолеФормы"), ТаблицаФормы); Если Заголовок <> "" Тогда НоваяКолонкаТаблицы.Заголовок = Заголовок; КонецЕсли; НоваяКолонкаТаблицы.ПутьКДанным = ИмяСписка + "." + ИмяКолонки; КонецЦикла; //Задаем действия (События) на основание СписокДействий, если он определен Если СписокДействий <> Неопределено Тогда ПереченьСвойств = "ПриИзменении |Выбор |ПриАктивизацииСтроки |ВыборЗначения |ПриАктивизацииПоля |ПриАктивизацииЯчейки |ПередНачаломДобавления |ПередНачаломИзменения |ПередУдалением |ПриНачалеРедактирования |ПередОкончаниемРедактирования |ПриОкончанииРедактирования |ОбработкаВыбора |ПередРазворачиванием |ПередСворачиванием |ПослеУдаления |ПриСменеТекущегоРодителя |ОбработкаЗаписиНового |ПриСохраненииПользовательскихНастроекНаСервере |ПередЗагрузкойПользовательскихНастроекНаСервере |ПриЗагрузкеПользовательскихНастроекНаСервере |ПриОбновленииСоставаПользовательскихНастроекНаСервере |ОбработкаЗапросаОбновления |ПриПолученииДанныхНаСервере |НачалоПеретаскивания |ПроверкаПеретаскивания |ОкончаниеПеретаскивания |Перетаскивание"; Для Счетчик = 1 по 28 Цикл ИмяСвойства = СтрПолучитьСтроку(ПереченьСвойств, Счетчик); Элементы[ИмяСписка].УстановитьДействие(ИмяСвойства,?(СписокДействий.Свойство(ИмяСвойства),СписокДействий[ИмяСвойства],"")); КонецЦикла; КонецЕсли; КонецПроцедуры |
|||
3
Garykom
гуру
10.10.24
✎
15:52
|
ОповеститьОбИзменении в СП почитай
|
|||
4
osa1C
10.10.24
✎
16:36
|
(0) Зачем ты эти портянки выложил?
&НаКлиенте // Обновление динамического списка "Список" Элементы.Список.Обновить(); // для обновления Реквизитов ЭтаФорма.Прочитать(); // Обновление данных ЭтаФорма.ОбновитьОтображениеДанных(); |
|||
5
AAA
10.10.24
✎
16:50
|
(4) Видимо, думает, что будем вгрызаться взглядом в каждую строчку. Таких портянок и так хватает в типовых, но вот еще и тут)
|
|||
6
spiller26
10.10.24
✎
16:50
|
(3) Оповестить что?
ОповеститьОбИзменении(Ссылка) Ссылка обязательная. |
|||
7
spiller26
10.10.24
✎
16:54
|
(5) Документ "стоковый", доработка в расширении. Сам документ не трогается никак, просто на форме размещен программно Динамический список (запрос), документов с отбором. Из этой же формы создается или меняется документ2, после закрытия документ2 нужно, чтобы в Динамическом списке отобразились изменения.
|
|||
8
spiller26
10.10.24
✎
16:55
|
вот стоковый
|
|||
9
spiller26
10.10.24
✎
17:04
|
Страница "Палетные листы" и добавлены элементы, сделана программно.
1. По кнопке создается документ "Палетный лист", в обратку при закрытии стоит оповещение, чтобы обновить отоображаемые данные Таблицы "Палетные листы". 2. В Таблице "Палетные листы" (Динамический список) отображаются "Палетные листы" по связке с этим документом "Задание на перевозку". Вот при создании и изменении "Палетных листов" из этой формы документа и закрытии не могу обновить Таблицу "Палетные листы"
|
|||
10
spiller26
10.10.24
✎
17:15
|
(4) Этот код только обновляет, но не добавляет новый созданный.
Элементы.Таблица_ПЛ.Обновить(); ЭтаФорма.Прочитать(); ЭтаФорма.ОбновитьОтображениеДанных(); |
|||
11
timurhv
10.10.24
✎
17:19
|
Выкиньте уже из написания
"ЭтаФорма." - такого нет, оставили для поддержки |
|||
12
spiller26
10.10.24
✎
17:20
|
Всё нашел наконец таки, при записи не отрабатывает оповещение "ПослеЗакрытияФормыПЛ"
|
|||
13
spiller26
10.10.24
✎
17:22
|
(11) Как допишу код, потом буду "эстетику" наводить.
|
|||
14
youalex
10.10.24
✎
19:28
|
(6) Дальше прочитай
Вариант синтаксиса: Изменено много объектов Синтаксис: ОповеститьОбИзменении(<ИзмененныйТип>) Параметры: <ИзмененныйТип> (обязательный) Тип: Тип. Тип изменившихся объектов, например "ДокументСсылка.РасходнаяНакладная". Поведение при очистке кэша - очищается вся информация, которая связана с измененным типом. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |