Динамический список

1. aritochka777 08.07.24 23:41 Сейчас в теме
Нужно в списке доукментов вывести 2 колонки с валютой и суммами, Если в Документе "Заявка на расходование денежных средств" Валюта взаиморасчетов отличается от валюты платежей (Соответственно и суммы будут отличаться).
Список динамический, если в запросе выбираю валюту и сумму взаиморасчетов, то выдает ошибку "Обнаружено дублирование ключевых значений в колонках: "Ссылка".
Отображение данных в списке невозможно".

Как тогда можно организовать решение этого вопроса, помогите, пжл, разобраться.
На скрине как хотели бы видеть.
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
13. Sashares 35 23.07.24 06:46 Сейчас в теме
(12) Вы берете данные табличной части. В табличной части может быть несколько строк. Как минимум надо группировать по ссылке и валюте и суммировать СуммуВзаиморасчетов.
Ну и заполнять надо в цикле, а не после цикла.

ПОка РезультатЗапроса.Следующий() Цикл
ВалютаВзаиморасчетов = РезультатЗапроса.ВалютаВзаиморасчетов;
СуммаВзаиморасчетов = РезультатЗапроса.СуммаВзаиморасчетов;
СТрокаСписка = Строки[РезультатЗапроса.Ссылка];
СТрокаСписка.Данные.ВалютаВзаиморасчетов = ВалютаВзаиморасчетов;
СТрокаСписка.Данные.СуммаВзаиморасчетов = СуммаВзаиморасчетов; 
КонецЦикла;
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. karamazoff 118 08.07.24 23:50 Сейчас в теме
(1)и что нам делать с этой информацией? Возьмите консоль, там посмотрите
3. aritochka777 09.07.24 00:50 Сейчас в теме
(2) Если знаете, чем помочь, то ответить по сути)
Консоль нормально все отработала и показала список, как хотелось бы.

Но при открытии списка, вылетает ошибка...
4. Pokemonus 09.07.24 02:39 Сейчас в теме
(3) ну ответ в самом сообщении - Вы так модифицировали запрос, что теперь 1 или более строк документа показывается несколькими строками.

Не зная, физического устройства запроса - помочь сложно
7. aritochka777 18.07.24 00:14 Сейчас в теме
(4) ВЫБРАТЬ РАЗЛИЧНЫЕ
Заявка.Ссылка КАК Ссылка,
Заявка.ПометкаУдаления КАК ПометкаУдаления,
Заявка.Номер КАК Номер,
Заявка.Дата КАК Дата,
Заявка.Проведен КАК Проведен,
Заявка.Организация КАК Организация,
Заявка.Статус КАК Статус,
ВЫБОР
КОГДА Заявка.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыплатаЗарплаты)
ТОГДА Заявка.ХозяйственнаяОперацияПоЗарплате
ИНАЧЕ Заявка.ХозяйственнаяОперация
КОНЕЦ КАК ХозяйственнаяОперация,
Заявка.СуммаДокумента КАК СуммаДокумента,
Заявка.Валюта КАК Валюта,
Заявка.БанковскийСчет КАК БанковскийСчет,
Заявка.Касса КАК Касса,
Заявка.ЖелательнаяДатаПлатежа КАК ДатаПлатежа,
ВЫБОР
КОГДА Заявка.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыдачаДенежныхСредствПодотчетнику)
ТОГДА Заявка.ПодотчетноеЛицо
КОГДА Заявка.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ОплатаДенежныхСредствВДругуюОрганизацию)
ИЛИ Заявка.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВозвратДенежныхСредствВДругуюОрганизацию)
ИЛИ Заявка.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВнутренняяПередачаДенежныхСредств)
ТОГДА Заявка.ОрганизацияПолучатель
ИНАЧЕ Заявка.Контрагент
КОНЕЦ КАК Получатель,
Заявка.Контрагент КАК Контрагент,
Заявка.Подразделение КАК Подразделение,
Заявка.КтоЗаявил КАК Заявитель,
Заявка.Представление КАК Представление,
Заявка.ПриоритетОплаты КАК ПриоритетОплаты,
Заявка.СверхЛимита КАК СверхЛимита,
Заявка.Автор КАК Автор,
ВЫБОР
КОГДА Заявка.ПриоритетОплаты В
(ВЫБРАТЬ ПЕРВЫЕ 1
Приоритеты.Ссылка КАК Приоритет
ИЗ
Справочник.ПриоритетыОплаты КАК Приоритеты
УПОРЯДОЧИТЬ ПО
Приоритеты.РеквизитДопУпорядочивания)
ТОГДА 0
КОГДА Заявка.ПриоритетОплаты В
(ВЫБРАТЬ ПЕРВЫЕ 1
Приоритеты.Ссылка КАК Приоритет
ИЗ
Справочник.ПриоритетыОплаты КАК Приоритеты
УПОРЯДОЧИТЬ ПО
Приоритеты.РеквизитДопУпорядочивания УБЫВ)
ТОГДА 2
ИНАЧЕ 1
КОНЕЦ КАК КартинкаПриоритета,
ВЫБОР
КОГДА ЕСТЬNULL(ДенежныеСредства.СуммаОстаток, 0) <= 0
И Заявка.Проведен
И Заявка.Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыЗаявокНаРасходованиеДенежныхСредств.Отклонена)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ КАК ЗаявкаОплачена,
ВЫБОР
КОГДА НаличиеПрисоединенныхФайлов.ЕстьФайлы ЕСТЬ NULL
ТОГДА 1
КОГДА НаличиеПрисоединенныхФайлов.ЕстьФайлы
ТОГДА 0
ИНАЧЕ 1
КОНЕЦ КАК ЕстьФайлы,
СостоянияЭД.СостояниеЭДО КАК СостояниеЭДО,
СостоянияЭД.ПредставлениеСостояния КАК ПредставлениеСостояния,
ВЫБОР
КОГДА Заявка.Валюта = ЗаявкаРасшифровкаПлатежа.ВалютаВзаиморасчетов
ТОГДА ""
ИНАЧЕ ЗаявкаРасшифровкаПлатежа.ВалютаВзаиморасчетов
КОНЕЦ КАК ВалютаВзаиморасчетов,
ВЫБОР
КОГДА Заявка.СуммаДокумента = ЗаявкаРасшифровкаПлатежа.СуммаВзаиморасчетов
ТОГДА ""
ИНАЧЕ ЗаявкаРасшифровкаПлатежа.СуммаВзаиморасчетов
КОНЕЦ КАК СуммаВзаиморасчетов


ИЗ
Документ.ЗаявкаНаРасходованиеДенежныхСредств КАК Заявка
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ДенежныеСредстваКВыплате.Остатки КАК ДенежныеСредства
ПО (ДенежныеСредства.ЗаявкаНаРасходованиеДенежныхСредств = Заявка.Ссылка)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаличиеФайлов КАК НаличиеПрисоединенныхФайлов
ПО Заявка.Ссылка = НаличиеПрисоединенныхФайлов.ОбъектСФайлами
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияПоОбъектамУчетаЭДО КАК СостоянияЭД
ПО (СостоянияЭД.СсылкаНаОбъект = Заявка.Ссылка)
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаРасходованиеДенежныхСредств.РасшифровкаПлатежа КАК ЗаявкаРасшифровкаПлатежа
ПО (ЗаявкаРасшифровкаПлатежа.Ссылка = Заявка.Ссылка)


Вот запрос, добавила в него только 2 новых значения для выборки ВалютаВзаиморасчетов и суммавзаиморасчетов.
8. Sashares 35 18.07.24 07:06 Сейчас в теме
(7)
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаРасходованиеДенежныхСредств.РасшифровкаПлатежа КАК ЗаявкаРасшифровкаПлатежа
ПО (ЗаявкаРасшифровкаПлатежа.Ссылка = Заявка.Ссылка)


Соединение с табличной частью - если в ТЧ более 1 строки будет такая ошибка.

Вы можете выводить эти данные в событии ПриПолученииДанныхНаСервере, если отбор/сортировка по этим полям не нужны.
9. aritochka777 20.07.24 23:26 Сейчас в теме
(8) ПриПолученииДанныхНаСервере используется для небольших списков?

Я так пробовала, работает.
Но выводит данные для документов через 10 строк, т.е. заполнил значение для одного документа, затем строк 10-12 пустые, затем опять заполнил.

Почему-то строки не попорядку, как в списке документов, заполняет.
10. Sashares 35 22.07.24 09:03 Сейчас в теме
(9)
ПриПолученииДанныхНаСервере используется для небольших списков?

Для любых.

Но выводит данные для документов через 10 строк, т.е. заполнил значение для одного документа, затем строк 10-12 пустые, затем опять заполнил.


Значит не правильно заполняете.
11. aritochka777 22.07.24 13:03 Сейчас в теме
(10) &НаСервереБезКонтекста
Процедура С_СписокПриПолученииДанныхНаСервереПосле(ИмяЭлемента, Настройки, Строки)

Запрос = НОвый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаявкаНаРасходованиеДенежныхСредствРасшифровкаПлатежа.Ссылка КАК Ссылка,
| ЗаявкаНаРасходованиеДенежныхСредствРасшифровкаПлатежа.Сумма КАК Сумма,
| ЗаявкаНаРасходованиеДенежныхСредствРасшифровкаПлатежа.ВалютаВзаиморасчетов КАК ВалютаВзаиморасчетов,
| ЗаявкаНаРасходованиеДенежныхСредствРасшифровкаПлатежа.СуммаВзаиморасчетов КАК СуммаВзаиморасчетов
|ИЗ
| Документ.ЗаявкаНаРасходованиеДенежныхСредств.РасшифровкаПлатежа КАК ЗаявкаНаРасходованиеДенежныхСредствРасшифровкаПлатежа";
|ГДЕ
| ЗаявкаНаРасходованиеДенежныхСредствРасшифровкаПлатежа.Ссылка В(&Ссылка)";

Запрос.УстановитьПараметр("Ссылка", СТроки.ПолучитьКлючи());

РезультатЗапроса = Запрос.Выполнить().Выбрать();

ПОка РезультатЗапроса.Следующий() Цикл
ВалютаВзаиморасчетов = РезультатЗапроса.ВалютаВзаиморасчетов;
СуммаВзаиморасчетов = РезультатЗапроса.СуммаВзаиморасчетов;
КонецЦикла;

СТрокаСписка = Строки[РезультатЗапроса.Ссылка];
СТрокаСписка.Данные.ВалютаВзаиморасчетов = ВалютаВзаиморасчетов;
СТрокаСписка.Данные.СуммаВзаиморасчетов = СуммаВзаиморасчетов;

КонецПроцедуры
12. aritochka777 22.07.24 13:03 Сейчас в теме
(10) Можете посмотреть, где и что не так?
Совсем ничего не получается...
13. Sashares 35 23.07.24 06:46 Сейчас в теме
(12) Вы берете данные табличной части. В табличной части может быть несколько строк. Как минимум надо группировать по ссылке и валюте и суммировать СуммуВзаиморасчетов.
Ну и заполнять надо в цикле, а не после цикла.

ПОка РезультатЗапроса.Следующий() Цикл
ВалютаВзаиморасчетов = РезультатЗапроса.ВалютаВзаиморасчетов;
СуммаВзаиморасчетов = РезультатЗапроса.СуммаВзаиморасчетов;
СТрокаСписка = Строки[РезультатЗапроса.Ссылка];
СТрокаСписка.Данные.ВалютаВзаиморасчетов = ВалютаВзаиморасчетов;
СТрокаСписка.Данные.СуммаВзаиморасчетов = СуммаВзаиморасчетов; 
КонецЦикла;
14. Sashares 35 23.07.24 08:33 Сейчас в теме
Что делать, если в ТЧ документа будет несколько валют, вы должны выяснить у постановщика задачи.
15. aritochka777 24.07.24 00:21 Сейчас в теме
(13) СтрокиСписка в цикле хорошо заработали, заполняется список.
Про несколько валют, тут надо уточнить.
Спасибо!
5. -AI- 09.07.24 05:58 Сейчас в теме
(3) пару вариантов:
1) нужно более строгое условие при левом соединении
2) выбрать различные
3) сгруппировать
4) п.2и3. можно делать как над всем запросом так и соединение со сгруппированным запросом

PS либо избавиться от самого факта существования "ключевого поля"
6. Vinzor 107 09.07.24 06:47 Сейчас в теме
Проверьте запрос.
В выборке НЕ должно быть более одной строки по каждому документу.
karamazoff; +1 Ответить
Оставьте свое сообщение

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