Имя: Пароль:
1C
1С v8
Произвольный запрос к динамическому списку регистра сведений
0 AlexeyVM
 
01.06.17
04:00
Добрый день.
Не работает запрос.
Есть регистр сведений (измерения - Кошелек, Отправитель, УИД(уникальный идентификатор); ресурс - сумма) и есть регистр накопления (измерения Кошелек, источник, УИД; ресурс - сумма). У регистра сведений есть произвольная форма выбора, в которой к динамическом списке пишу произвольный запрос. Также есть форма документа приизменении даты которой открывается эта произвольная форма регистра сведений.
В динамический список мне надо отобрать все записи из регистра сведений, у которых УИД не равен УИД в регистре накопления и день периода = дню введенной даты.
Пишу вот так:

ВЫБРАТЬ
    РегистрСведенийПериодическийПриходСрезПоследних.Период КАК Период,
    РегистрСведенийПериодическийПриходСрезПоследних.Регистратор КАК Регистратор,
    РегистрСведенийПериодическийПриходСрезПоследних.НомерСтроки КАК НомерСтроки,
    РегистрСведенийПериодическийПриходСрезПоследних.Активность КАК Активность,
    РегистрСведенийПериодическийПриходСрезПоследних.Кошелек КАК Кошелек,
    РегистрСведенийПериодическийПриходСрезПоследних.Отправитель КАК Отправитель,
    РегистрСведенийПериодическийПриходСрезПоследних.Сумма КАК Сумма,
    РегистрСведенийПериодическийПриходСрезПоследних.УИД КАК УИД
ИЗ
    РегистрСведений.ПериодическийПриход.СрезПоследних КАК РегистрСведенийПериодическийПриходСрезПоследних
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.РегистрПоступления КАК РегистрПоступления
        ПО РегистрСведенийПериодическийПриходСрезПоследних.УИД <> РегистрПоступления.УИД
ГДЕ
    ДЕНЬ(РегистрСведенийПериодическийПриходСрезПоследних.Период) = &ТекДата

Выдает ошибку:
Обнаружено дублирование ключевых значений в колонках: "...." и перечислены все колонки.
Не пойму как исправить, помогите пожалуйста
1 DmVl76
 
01.06.17
04:11
(0)В консоли гляньте что выдает запрос-у вас тут написано по сути полное соединение регистров сведений и накоплений (за исключением равных уидов). Понятно, что дубли возникают-в динамическом списе не должно такого быть, записи должны быть уникальны.
2 DmVl76
 
01.06.17
04:14
И задача не совсем понятна. Допустим есть РС с УИД 1, 2, 3, 4 и РН с уид 1,2,3 должен выдаваться только уид=4?
3 AlexeyVM
 
01.06.17
04:23
(2)
Да, должна выдаваться только уид = 4
4 AlexeyVM
 
01.06.17
04:27
запрос выдает 20 строк, по 5 на каждый не совпадающий УИД
5 DmVl76
 
01.06.17
04:33
(4) Ну все верно, выдает в моем примере
1 (с 2)
1 (с 3)
2
2
3
3
4
4
4
Попробуйте вместо
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.РегистрПоступления КАК РегистрПоступления
        ПО РегистрСведенийПериодическийПриходСрезПоследних.УИД <> РегистрПоступления.УИД

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РегистрПоступления КАК РегистрПоступления
        ПО РегистрСведенийПериодическийПриходСрезПоследних.УИД = РегистрПоступления.УИД
ГДЕ РегистрПоступления.УИД ЕСТЬ NULL
6 AlexeyVM
 
01.06.17
10:52
(5) Ну да, пишу теперь вот так. Только регистр накопления поменял на регистр сведений, записи туда закидываю.

        "ВЫБРАТЬ
        |    ПериодическийПриходСрезПоследних.Период КАК Период,
        |    ПериодическийПриходСрезПоследних.Регистратор КАК Регистратор,
        |    ПериодическийПриходСрезПоследних.НомерСтроки КАК НомерСтроки,
        |    ПериодическийПриходСрезПоследних.Активность КАК Активность,
        |    ПериодическийПриходСрезПоследних.Кошелек КАК Кошелек,
        |    ПериодическийПриходСрезПоследних.Отправитель КАК Отправитель,
        |    ПериодическийПриходСрезПоследних.Сумма КАК Сумма,
        |    ПериодическийПриходСрезПоследних.УИД КАК УИД
        |ИЗ
        |    РегистрСведений.ПериодическийПриход.СрезПоследних КАК ПериодическийПриходСрезПоследних
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПериодическиеПроведенные.СрезПоследних КАК ПериодическиеПроведенные
        |        ПО ПериодическийПриходСрезПоследних.УИД = ПериодическиеПроведенные.УИД
        |ГДЕ
        |    ДЕНЬ(ПериодическийПриходСрезПоследних.Период) = ДЕНЬ(&ТекДата)
        |    И МЕСЯЦ(ПериодическийПриходСрезПоследних.Период) <= МЕСЯЦ(&ТекДата)
        |   И ПериодическиеПроведенные.УИД ЕСТЬ NULL";

Как бы в целом это хорошо, но забыл упомянуть вначале, что эти документы должны отображаться например в следующем месяце. Т.е. смысл такой - (в РС ПериодическийПриход записываются запланированные поступления на какие-то конкретные дни, когда в этом месяце я провожу это поступление, то сегодня оно больше не отображается, а в следующем месяце заново отображаются все поступления, пока их не проведешь).
А в этом запросе, если 1 раз провел, то больше она не будет отбираться
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший