Проблема со схемой запроса

1. soldierboy213 04.12.25 15:43 Сейчас в теме
Всем привет возникла проблема с запросом.
Обнаружено дублирование ключевых значений в колонках: "Ссылка".
Отображение данных в списке невозможно.
Вот код процедуры
&НаСервере
Процедура PEN005_ИзменитьЗапросСписка(Знач оСписок)
    Перем СхемаЗапроса, ОператорЗапроса, Источники, ИсточникПравый, ИсточникЛевый, сВыражение, Параметр;
    
    СхемаЗапроса = Новый СхемаЗапроса();
    СхемаЗапроса.УстановитьТекстЗапроса(оСписок.ТекстЗапроса);
    
    ОператорЗапроса = СхемаЗапроса.ПакетЗапросов[0].Операторы[0];
    Источники = ОператорЗапроса.Источники;
    
    ИсточникПравый = Источники.Добавить("РегистрБухгалтерии.Хозрасчетный.Обороты", "ХозрасчетныйОборотыОграничения");
    ИсточникПравый.Источник.Параметры[2].Выражение = Новый ВыражениеСхемыЗапроса("Регистратор");
    
    ИсточникПравый.Источник.Параметры[3].Выражение = Новый ВыражениеСхемыЗапроса("Счет В (&СчетаСОграничениями)");
    
    ИсточникЛевый = Источники.НайтиПоИмени("Документ.ОперацияБух");
    
    ИсточникПравый.Соединения.Добавить(ИсточникЛевый, "ХозрасчетныйОборотыОграничения.Регистратор = ДокументОперацияБух.Ссылка");
    ИсточникПравый.Соединения[0].ТипСоединения = ТипСоединенияСхемыЗапроса.ЛевоеВнешнее;
    
    сВыражение = "НЕ ХозрасчетныйОборотыОграничения.Счет ЕСТЬ NULL";
    
    ОператорЗапроса.ВыбираемыеПоля.Добавить(сВыражение, 0);
    СхемаЗапроса.ПакетЗапросов[0].Колонки[0].Псевдоним = "ЕстьСчетаСОграничениями";
    
    оСписок.ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();
    оСписок.УстановитьОбязательноеИспользование("ЕстьСчетаСОграничениями", Истина);
    
    Параметр = оСписок.Параметры.Элементы.Найти("СчетаСОграничениями");
    Параметр.Значение = PEN005_УправлениеДоступом.PEN005_СчетаЗарплаты();
    Параметр.Использование = Истина;
  
КонецПроцедуры
а вот конечный запрос исходя из отладчика
ВЫБРАТЬ
    НЕ ХозрасчетныйОборотыОграничения.Счет ЕСТЬ NULL КАК ЕстьСчетаСОграничениями,
    ДокументОперацияБух.ПометкаУдаления КАК ПометкаУдаления,
    ДокументОперацияБух.Номер КАК Номер,
    ДокументОперацияБух.Дата КАК Дата,
    ДокументОперацияБух.МежотчетныйПериод КАК МежотчетныйПериод,
    ДокументОперацияБух.Проведен КАК Проведен,
    ДокументОперацияБух.Организация КАК Организация,
    ДокументОперацияБух.СуммаОперации КАК СуммаОперации,
    ДокументОперацияБух.Содержание КАК Содержание,
    ДокументОперацияБух.СпособЗаполнения КАК СпособЗаполнения,
    ДокументОперацияБух.СторнируемыйДокумент КАК СторнируемыйДокумент,
    ДокументОперацияБух.Ответственный КАК Ответственный,
    ДокументОперацияБух.Комментарий КАК Комментарий,
    ДокументОперацияБух.ТиповаяОперация КАК ТиповаяОперация,
    ДокументОперацияБух.МоментВремени КАК МоментВремени,
    ВЫБОР
        КОГДА ДокументОперацияБух.ПометкаУдаления = ИСТИНА
            ТОГДА 2
        ИНАЧЕ 1
    КОНЕЦ КАК СостояниеДокумента,
    ВЫБОР
        КОГДА НаличиеФайлов.ЕстьФайлы ЕСТЬ NULL
            ТОГДА 1
        КОГДА НаличиеФайлов.ЕстьФайлы
            ТОГДА 0
        ИНАЧЕ 1
    КОНЕЦ КАК ЕстьФайлы,
    СостоянияПоОбъектамУчета.ПредставлениеСостояния КАК СостояниеЭДО
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Обороты(, , Регистратор, Счет В (&СчетаСОграничениями)) КАК ХозрасчетныйОборотыОграничения
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОперацияБух КАК ДокументОперацияБух
            {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаличиеФайлов КАК НаличиеФайлов
            ПО ДокументОперацияБух.Ссылка = НаличиеФайлов.ОбъектСФайлами}
            {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияПоОбъектамУчетаЭДО КАК СостоянияПоОбъектамУчета
            ПО ДокументОперацияБух.Ссылка = СостоянияПоОбъектамУчета.СсылкаНаОбъект}
        ПО ХозрасчетныйОборотыОграничения.Субконто1 = ДокументОперацияБух.Ссылка
            И ХозрасчетныйОборотыОграничения.Субконто2 = ДокументОперацияБух.Ссылка
            И ХозрасчетныйОборотыОграничения.Субконто3 = ДокументОперацияБух.Ссылка
            И ХозрасчетныйОборотыОграничения.КорСубконто1 = ДокументОперацияБух.Ссылка
            И ХозрасчетныйОборотыОграничения.КорСубконто2 = ДокументОперацияБух.Ссылка
            И ХозрасчетныйОборотыОграничения.КорСубконто3 = ДокументОперацияБух.Ссылка
            И (ХозрасчетныйОборотыОграничения.Регистратор = ДокументОперацияБух.Ссылка)
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 83 04.12.25 15:48 Сейчас в теме
(1) откажитесь от СхемаЗапроса совсем, если уж проблема именно в ней
3. soldierboy213 04.12.25 15:55 Сейчас в теме
(2) а может быть в теории проблема с самим запросом, а не со схемой?
4. Pavel Rodinchenko 04.12.25 15:58 Сейчас в теме
(3) Вероятнее всего в РС НаличиеФайлов есть более одной записи для документа ОперацияБУХ, что и приводит к дублированию ключевого поля.
Попробуйте итоговый запрос выполнить в консоли запросов, должно стать яснее в чем проблема
5. nomad_irk 83 04.12.25 16:02 Сейчас в теме
(3) не в теории, проблема даже не с запросом, а с данными, т.е. может быть несколько прикрепленных файлов, например, к документу
6. soldierboy213 04.12.25 16:05 Сейчас в теме
(5)
не в теории, проблема даже не с запросом, а с данными, т.е. может быть несколько прикрепленных файлов, например, к документу

Кхех, глупый вопрос, но все же я его задам.
И какое же решение сей проблемы
7. Pavel Rodinchenko 04.12.25 16:08 Сейчас в теме
(6) Например, соединяться не с регистров НаличиеФайлов напрямую, а группировать результат и помещать его во временную таблицу, а уже с ней и выполнять соединение
То есть у Вас должна получиться ВТ типа: Операция - КоличествоФайлов и тогда для каждого документа в таблице будет только одна запись.
9. soldierboy213 04.12.25 16:08 Сейчас в теме
(7) Да я просто новичок, если бы я хотя бы примерно знал как это сделать
8. nomad_irk 83 04.12.25 16:08 Сейчас в теме
(6) определить какой таки файл нужен и оставлять его - других решений нет
10. YozZzhik 04.12.25 16:18 Сейчас в теме
(6) Можно изменить объект вывода. Не в список, а в дерево значений. Можно вынести файлы в другой список, например, справа от основного. И по клику на основном списке обновлять файлы не в основном
11. VZyryanov 04.12.25 16:25 Сейчас в теме
В РС НаличиеФайлов нет собственно файлов и не предусмотрено несколько записей на документ. Думаю, соединение оборотов с операцией приводит к дублированию ссылки. Странно только, что в запросе в предложении ВЫБРАТЬ нет ссылки.
Уберите основную таблицу в настройке списка и получите список с дублем ключевых полей.
12. soldierboy213 04.12.25 17:41 Сейчас в теме
&НаСервере
Процедура PEN005_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
	
	PEN005_ИзменитьЗапросСписка(ЭтотОбъект.Список);
	
КонецПроцедуры


Переписал запрос в консоли запросов, но теперь такая проблема, как найти этот запрос, чтоб исправить
Прикрепленные файлы:
13. Pavel Rodinchenko 04.12.25 19:29 Сейчас в теме
(12) ЭтотОбъект.Список.ТекстЗапроса = исправленный текст запроса.
Можно его прямо из консоли взять
14. SlavaKron 05.12.25 09:19 Сейчас в теме
(12)
Переписал запрос в консоли запросов
Испортили такой красивый механизм доработки текста запроса динамического списка через схему запроса.
Для отправки сообщения требуется регистрация/авторизация

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