|
|
|
УФ Обновление Динамического списка, созданного программно | ☑ | ||
|---|---|---|---|---|
|
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) Дальше прочитай
Вариант синтаксиса: Изменено много объектов Синтаксис: ОповеститьОбИзменении(<ИзмененныйТип>) Параметры: <ИзмененныйТип> (обязательный) Тип: Тип. Тип изменившихся объектов, например "ДокументСсылка.РасходнаяНакладная". Поведение при очистке кэша - очищается вся информация, которая связана с измененным типом. |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |