Можно ли в УФ такси в форме списка получить доступ к строке на 1 выше текущей?

1. DWZ2 18.05.21 12:42 Сейчас в теме
Можно ли в УФ такси из табличного поля прочитать значения реквизитов из строки, которая находится прямо над текущей? (С учётом отбора и сортировки).
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sashares 35 18.05.21 12:53 Сейчас в теме
(1)Как вариант - получить схему ДС, получить настройки ДС.
Выполнить схему и выгрузить ее в таблицу.
Найти в этой таблице строку, которая сейчас текущая в ДС.
Взять предыдущую строку.
Профит.
4. sinichenko_alex 210 18.05.21 13:05 Сейчас в теме
(2) хотя ели вы пишете в заголовке про форму списка, то смею предположить, что речь идет о динамическом списке с привязкой к "ТаблицаФормы" соответственно. Там к сожалению такой возможности нет.
А какова суть задачи вообще в целом? Может вы не тот подход выбрали, озвучьте задачу, а я попробую предложить Вам решение.
5. DWZ2 18.05.21 13:14 Сейчас в теме
(4) Да задача простая. Есть таблица, которая может быть отсортирована по одной из четырёх колонок. Требуется по кнопке у двух полей вычислить дельты с предыдущей строчкой.
8. Sashares 35 18.05.21 13:35 Сейчас в теме
(5)В вашем случае проще договориться, что пользователь выделит 2 строки, и по кнопке получать нужные данные для этих выделенных строк.
sinichenko_alex; +1 Ответить
11. DWZ2 21.05.21 00:43 Сейчас в теме
(10)
(8)
проще договориться


Ничуть не проще. Вот представьте - пришли Вы на экзамен, скажем, по 1с-СПециалисту и решаете не ту задачу, что Вам дали, а ту, что Вам удобнее. Что скажет экзаменатор?

по кнопке получать нужные данные для этих выделенных строк.


Кстати, как?
12. Sashares 35 21.05.21 01:19 Сейчас в теме
(11)
Что скажет экзаменатор?


В чем проблема обосновать свое решение/предложение?

Мы обсуждаем сферическую задачу в вакууме или реальную задачу, которая должна упростить работу пользователей?
Не вижу проблемы предложить альтернативные варианты решения заказчику.
Если вместо одной строки пользователь будет выделять 2 строки - для пользователя это не особое усложнение, зато появляется дополнительный функционал - можно получить данные не только с предыдущей строкой, но и с любой другой, что может быть полезно в каких-то сценариях работы.

(11)
Кстати, как?


Из выделенных строк динамического списка.
13. DWZ2 24.05.21 04:15 Сейчас в теме
(12)
Не вижу проблемы предложить альтернативные варианты решения заказчику.


Люди обычно хорошо видят, когда программист вместо того, чтобы облегчать жизнь им, облегчать жизнь себе за их счёт ;))))

Заказчик рассуждает просто:

У меня есть деньги и проблема, которую, как мне кажется, ты можешь решить. Если ты ее решать не можешь или не хочешь, эти деньги просто получит другой, который сможет. Вот и всё
14. Sashares 35 24.05.21 14:28 Сейчас в теме
(13)Давайте не будем бросаться громкими фразочками.
Речь не про облегчить себе жизнь, а про плюсы и минусы разных способов реализации.
Заказчик может рассуждать как угодно, но он может не знать особенности работы системы. Это ваша задача выбрать наиболее оптимальный вариант для реализации задачи.

Самый очевидный минус при варианте - если будет выделена 1 строка и надо найти для предыдущей строки списка разницу - результат работы в этом случае не гарантирован.
Т.к. это динамический список, то пользователь может сделать много всякой фигни в нем - различный поиск, отбор, сортировку по различным полям. И вот в список вывелось несколько строк, которые подходят под отбор, поиск, и с какой-то сортировкой.
То есть при одних и тех-же исходных данных - пользователь выделил одну и ту же строку и нажал кнопку - может быть получен различный результат, если в одном случае он еще и выполнил поиск, а в другом не выполнял.

Если вы даже этого не понимаете, продолжать обсуждение смысла не вижу.

Вам предложили несколько вариантов, а вы нос воротите - то слишком сложно, это слишком просто.
Да без вопросов - делайте как хотите.
Если вы не умеете разговаривать с заказчиками и доносить свою мысль - это ваши проблемы.
MishinVl; mihap; nomad_irk; +3 Ответить
3. sinichenko_alex 210 18.05.21 13:03 Сейчас в теме
Не совсем понятно про какой тип элемента идет речь если честно. "ТаблицаФормы" (с привязкой к чему - табилце значений в реквизите формы, к табличной части в документе, к динамическомцу списку на форме) или "ПолеТабличногоДокумента" (таблица типа экселя)? Определитесь пожалуйста четко с типом данных для начала. Тогда получите более развернутый ответ.
6. DWZ2 18.05.21 13:17 Сейчас в теме
(3) форма списка регистра сведений с произвольным запросом
7. Sashares 35 18.05.21 13:23 Сейчас в теме
- Доктор, меня все игнорируют.
- Следующий.

В смысле, чем вариант из (2) не устраивает?

Схема = Элементы.ОтчетыДляВыгрузки.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
	НастройкиСхемы = Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
	
	КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
	КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема));
	КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиСхемы);
	КомпоновщикНастроек.Восстановить();
	
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(Схема, КомпоновщикНастроек.ПолучитьНастройки(), , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);
	ПроцессорВыводаРезультатаОтчета = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
	
	РезультатСхемы = ПроцессорВыводаРезультатаОтчета.Вывести(ПроцессорКомпоновкиДанных);
Показать


Далее в результате схемы ищите текущую строку по ключевым полям вашего регистра, и берете предыдущую.
9. DWZ2 18.05.21 13:52 Сейчас в теме
(7)
В смысле, чем вариант из (2) не устраивает?


Да сложновато как-то. Думал, будет проще. Ладно, сделаю по-своему.
10. alekseineputin 26 18.05.21 15:27 Сейчас в теме
(9) А монеты-то выдай парням ;-)
user1135816; +1 Ответить
15. Aftee 24.05.21 14:30 Сейчас в теме
(10) Да он же
по-своему
сделает)
Sashares; +1 Ответить
19. user779438 30.05.21 02:27 Сейчас в теме
(9)В целях нашего образования, сможете показать свой вариант попроще? Очень уж любопытно!
20. DWZ2 31.05.21 04:46 Сейчас в теме
(19) Образованию это вряд ли поможет.

1. Написать служебку, в которой дать ссылку на этот форум.
2. Написать, что по мнению специалистов, решение задачи в предложенном виде невозможно
3. Продолжить использовать Дельфийскую программу, в которой это работает с 2009 г минимум
21. SlavaKron 31.05.21 09:37 Сейчас в теме
(20)
решение задачи в предложенном виде невозможно
Но ведь это не правда, решение было дано в этой теме (через СКД). Хотя мне было бы удобнее, видеть дельту для каждой строки в отдельной колонке, например, или рядом со значением, типа как в таблицах котировок.
22. user779438 31.05.21 12:50 Сейчас в теме
(20) Если есть чуть-чуть время на эксперименты, то можно попробовать реализовать.
По постановке задачи, я понял, что нужно показывать приращение ресурса по 4 измерениям. Вопрос первый, это нужно по всем строкам сразу или только по текущей? Вариант проще по текущей строке.
Алгоритм:
1. Если 4 измерения это измерения регистра, то ничего не делаем, если это реквизиты документа, то включаем по ним индексацию с доп. упорядочиванием.
2. В произвольный запрос динамического списка добавляем 4 поля
|...,
|NULL Как Прирост1,
|NULL Как Прирост2,
|NULL Как Прирост3,
|NULL Как Прирост4,
|...

3. Обязательно включаем флажки "Использовать" для реквизитов формы Ссылка, Прирост1, Пророст2, Прирост3, Прирост4.
4. В обработчике события "ПриПолученииДанныхНаСервере" поля таблицы в который выводим динамический список получаем запросом все 4 изменения по всем выводимым строкам и заполняем полученными значениями созданные ранее реквизиты формы в каждой строке.
Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
 	КлючиСтрок = Строки.ПолучитьКлючи();
 	Запрос = Новый Запрос;
 	Запрос.Текст = "
 	|// Запрос должен возвращать поля Ключ, Прирост1, Прирост2, Прирост3, Прирост4
 	|";
 	Запрос.УстановитьЗначение("Доументы", КлючиСтрок);
 	Выборка = Запрос.Выполнить().Выбрать();
 	Пока Выборка.Следующий() Цикл
 	 	Строка = Строки.Получить(Выборка.КлючСтроки);
 	 	Строка.Данные.Прирост1 = Выборка.Прирост1;
 	 	Строка.Данные.Прирост2 = Выборка.Прирост2;
 	 	Строка.Данные.Прирост3 = Выборка.Прирост3;
 	 	Строка.Данные.Прирост4 = Выборка.Прирост4;
 	КонецЦикла;
КонецПроцедуры
Показать

5. Если нас интересуют данные только по текущей строке, то ниже поля таблицы на форму, добавляем 4 поля и указываем у них, в свойстве "ПутьКДанным" "Список.Прирост1", "Список.Прирост2", "Список.Прирост3", "Список.Прирост4" соответственно. Иначе если мы хотим видеть данные по каждой строке одновременно, то надо думать как менять видимость нужных колонок "Прирост1...4"

Должно взлететь )))

p.s. А можно попробовать впихнуть в СКД как предлагают рядом, но надо смотреть как будут изменять данные, добавленные и измененные уже после открытия формы списка.
23. DWZ2 01.06.21 01:16 Сейчас в теме
(22)
По постановке задачи, я понял, что нужно показывать приращение ресурса по 4 измерениям.


По двум, точнее по периоду и ресурсу.

Вопрос первый, это нужно по всем строкам сразу или только по текущей?


По текущей.
17. user779438 30.05.21 02:16 Сейчас в теме
(7) А когда данные обновлять? Пытаться кэшировать или при активации строки каждый раз запрос по всему регистру выполнять или только при получении данных на сервере? ;-)
Подозреваю, что неадекватно описанная неадекватная задача.
16. AKsVS47o 25.05.21 00:57 Сейчас в теме
ИндексТекСтроки = Элементы.ВашаТЧ.ТекущаяСтрока;
СтрокаТЧВышеТекущей = Объект.ВашаТЧ.НайтиПоИдентификатору(ИндексТекСтроки  -1);
18. user779438 30.05.21 02:25 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот