![]() |
![]() |
![]() |
|
УТ 11 Передача данных с сервера на форму | ☑ | ||
---|---|---|---|---|
0
Pashabr
10.07.25
✎
19:35
|
Приветствую! пытаюсь решить задачку.
Есть справочник Номенклатура, у него форма списка. При нажатии на элемент списка внизу должна появляться табличка с колонками ДокументПрихода, ДатаПрихода, Контрагент(кто поставил товар), Количество(имеется в виду остаток на текущий момент на складах), Склад(если складов несколько, то по ним разные строки). Вся информация для таблички находится запросом с регистров в серверной процедуре. Вот вопрос: как лучше собранную запросом информацию вывести обратно на форму? Я выбрал вариант через Таблицу значений, но может есть более правильный способ? Реквизит на форме и Таблицу на самой форме надо создавать или лучше програмно? Подскажите, плиз. Буду благодарен. Крайне желательно, для примера, какой-то условный код, чтобы от него оттолкнуться. |
|||
1
Волшебник
10.07.25
✎
19:35
|
А ничего, что приходов может быть много, а склад один? И как Вы это планируете показать в одной табличке? Делайте две таблички
|
|||
2
Волшебник
10.07.25
✎
19:36
|
Вы упёрлись в интерфейс, разделение контекста на клиент/сервер, и забыли про бизнес-логику!
|
|||
3
Волшебник
10.07.25
✎
19:37
|
Текущие остатки по складам можно показать, это даже приветствуется, но вот выводить все приходы будет напряжно. Для этого есть отчёты.
|
|||
4
Pashabr
10.07.25
✎
19:42
|
Если приходов было несколько, то и документов несколько. Будет несколько строк. Обычно контрагент один или два. Документов до 5, пока остатки со склада не уходят. Складов несколько, но обычно одни и те же контрагенты на одни и те же склады отгружаются. Строк 10 не больше обычно в табличке. Эта штука работает в УТ 10, другой делал, надо такую же в 11 сделать.
|
|||
5
Pashabr
10.07.25
✎
19:47
|
(2) Я уперся в интерфейс. Логика мне понятна. Не могу нормально данные запроса на форму передать. Совет бы)
|
|||
6
Волшебник
10.07.25
✎
19:47
|
(4) Пошёл и сделал!
|
|||
7
Волшебник
10.07.25
✎
19:47
|
(5) Погуглите
|
|||
8
timurhv
10.07.25
✎
19:51
|
(0) Какое событие у списка? ПриАктивизацииСтроки и вызываете серверную процедуру\функцию?
Если так, то при открытии большого списка 45 раз будет серверный вызов) Чтобы такого не было либо заполнение делаете по команде, либо в модуле "ПриАктивизацииСтроки" подключаете обработчик ожидания, пример: https://ironskills.by/tpost/zi7ytn6co1-kak-izbavitsya-ot-kontekstnogo-vizova-v Из справки: ФормаКлиентскогоПриложения (ClientApplicationForm) ПодключитьОбработчикОжидания (AttachIdleHandler) Синтаксис: ПодключитьОбработчикОжидания(<ИмяПроцедуры>, <Интервал>, <Однократно>) Описание: Подключает указанную процедуру в качестве обработчика ожидания. Процедура будет вызываться в период ожидания системы каждый раз по истечению указанного интервала времени. Вызов будет осуществляться только в "состоянии покоя", то есть в тот момент, когда программа не выполняет никаких действий. |
|||
9
Mort
11.07.25
✎
00:19
|
По моему опыту оптимальнее будет внизу динамический список с заданным запросом с параметром. При активации строки устанавливать параметры списка или отбор - тут можно поиграть что быстрее, смотря как запрос спика составлен. Вообще по-разному можно поиграться, если база огромная может и не стоить применять такое насилие и выводить эту информацию по запросу пользователя в отдельной кнопке - минус в интерактивности, плюс в оптимизации.
|
|||
10
Fish
гуру
11.07.25
✎
09:12
|
(0) Показывай код. И опиши, что не получилось.
|
|||
11
AAA
11.07.25
✎
11:43
|
Мертвая и ненужная задача. Со списком просто нереально будет работать. Получать документы и другую детализацию надо только по кнопкам. И без этого не так чтобы все летает
|
|||
12
Fish
гуру
11.07.25
✎
12:06
|
(11) Ну почему же. Если подготовить данные в отдельном регистре, то вполне себе можно минимизировать тормоза.
|
|||
13
AAA
11.07.25
✎
13:53
|
(12)Зачем? Прибыль повысится ?
|
|||
14
Fish
гуру
11.07.25
✎
15:10
|
(13) Не всё в этом мире определяется прибылью. Не надо быть таким меркантильным :)
|
|||
15
Pashabr
12.07.25
✎
21:27
|
(8) Да, ПриАктивизацииСтроки. Попробую с ожиданием, спасибо.
|
|||
16
Pashabr
12.07.25
✎
21:30
|
(11) Задача очень нужная, т.к. уже 5 лет комерсы так работают. Очень просят в новой базе так сделать.
|
|||
17
Pashabr
12.07.25
✎
21:32
|
(6) Ок, разберусь сам.
|
|||
18
Pashabr
13.07.25
✎
14:20
|
Голова сломалась сегодня. Не получается передать на форму ТЗ.
Пишу такой код, ТЗ получается правильная. Дальше затык. &НаКлиенте Процедура СписокПриАктивизацииСтроки(Элемент) Номенкл = Элементы.Список.ТекущиеДанные; ТипНоменклатуры = Номенкл.ТипНоменклатуры; Номенклатура = Элементы.Список.ТекущаяСтрока; ТипТовар = ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Товар"); Если ТипНоменклатуры = ТипТовар Тогда ПоказатьОповещениеПользователя("Окно сообщения", 50, "Это товар"); ПолучениеДанныхНоменклатуры(Номенклатура); КонецЕсли; КонецПроцедуры &НаСервере Процедура ПолучениеДанныхНоменклатуры(Номенклатура) Экспорт Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, | ТоварыНаСкладахОстатки.Склад КАК Склад, | СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК Количество, | СУММА(ТоварыНаСкладахОстатки.СуммаОстаток) КАК Сумма, | ПоступлениеТоваровИУслуг.Контрагент КАК Контрагент, | ПоступлениеТоваровИУслуг.Дата КАК ДатаПрихода, | ПоступлениеТоваровИУслуг.Ссылка КАК ДокументПрихода, | ЦеныНоменклатуры.Цена КАК Цена |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки | ПОЛНОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровИУслуг КАК ПоступлениеТоваровИУслуг | ПО ТоварыНаСкладахОстатки.Номенклатура = ПоступлениеТоваровИУслуг.Товары.Номенклатура | И ТоварыНаСкладахОстатки.Склад = ПоступлениеТоваровИУслуг.Склад | ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры | ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатуры.Номенклатура |ГДЕ | ТоварыНаСкладахОстатки.Номенклатура = &Номенклатура | |СГРУППИРОВАТЬ ПО | ТоварыНаСкладахОстатки.Номенклатура, | ТоварыНаСкладахОстатки.Склад, | ПоступлениеТоваровИУслуг.Контрагент, | ПоступлениеТоваровИУслуг.Ссылка, | ПоступлениеТоваровИУслуг.Дата, | ЦеныНоменклатуры.Цена"; Запрос.УстановитьПараметр("Номенклатура", Номенклатура); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); ТаблицаДанных = Новый ТаблицаЗначений; ТаблицаДанных.Колонки.Добавить("Контрагент", Новый ОписаниеТипов("Строка")); ТаблицаДанных.Колонки.Добавить("Склад", Новый ОписаниеТипов("Строка")); ТаблицаДанных.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число")); ТаблицаДанных.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число")); ТаблицаДанных.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число")); ТаблицаДанных.Колонки.Добавить("ДокументПрихода", Новый ОписаниеТипов("Строка")); ТаблицаДанных.Колонки.Добавить("ДатаПрихода", Новый ОписаниеТипов("Дата")); Пока Выборка.Следующий() Цикл СтрокаТаблицы = ТаблицаДанных.Добавить(); СтрокаТаблицы.Контрагент = Выборка.Контрагент; СтрокаТаблицы.Склад = Выборка.Склад; СтрокаТаблицы.Количество = Выборка.Количество; СтрокаТаблицы.Сумма = Выборка.Сумма; СтрокаТаблицы.Цена = Выборка.Цена; СтрокаТаблицы.ДокументПрихода = Выборка.ДокументПрихода; СтрокаТаблицы.ДатаПрихода = Выборка.ДатаПрихода; КонецЦикла; //Даллее идет код, кторый передает ТЗ на форму для отображения на интерфейсе КонецПроцедуры |
|||
19
timurhv
13.07.25
✎
15:00
|
(18) Добавьте на форму реквизит с типом таблицы и именем "ТаблицаДанных" с такими же колонками. Далее на сервере заполняйте ее без "ТаблицаДанных = Новый таблицаЗначений;" и описания колонок
|
|||
20
Pashabr
13.07.25
✎
15:09
|
(19) Не создавать ТЗ в процедуре? Сразу из выборки заполнять реквизит "ТаблицаДанных" на форме? Строки ниже убрать из процедуры совсем?
ТаблицаДанных = Новый ТаблицаЗначений; ТаблицаДанных.Колонки.Добавить("Контрагент", Новый ОписаниеТипов("Строка")); ТаблицаДанных.Колонки.Добавить("Склад", Новый ОписаниеТипов("Строка")); ТаблицаДанных.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число")); ТаблицаДанных.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число")); ТаблицаДанных.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число")); ТаблицаДанных.Колонки.Добавить("ДокументПрихода", Новый ОписаниеТипов("Строка")); ТаблицаДанных.Колонки.Добавить("ДатаПрихода", Новый ОписаниеТипов("Дата")); |
|||
21
timurhv
13.07.25
✎
15:16
|
(20) Да, очищайте только перед заполнением
|
|||
22
Pashabr
13.07.25
✎
15:16
|
(19) Спасибо, добрый человек. Я несколько дней по инету лазил, везде написано, что из запроса ТЗ сформировать и потом передавать на форму. Ине получалось. Теперь все работает!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |