Имя: Пароль:
1C
 
УТ, ошибка sql "Не удалось привязать составной идентификатор"
0 Bibr
 
06.03.25
17:12
Почти типовая УТ, предположительно после обновления (через 3дня) начала ошибку выдавать:

"Невосстановимая ошибка
Ошибка при выполнении запроса POST к ресурсу /e1cib/logForm:
по причине:
Ошибка СУБД:
Microsoft OLE DB Driver for SQL Server: Не удалось привязать составной идентификатор "T3._Fld3555_TYPE".
HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, SQLSrvr: SQLSTATE=42S22, state=1, Severity=10, native=4104, line=19
SQLSrvr: SQLSTATE=42S22, state=1, Severity=10, native=4104, line=19
SQLSrvr: SQLSTATE=42S22, state=1, Severity=10, native=4104, line=19"


Ошибку выдаёт типовая обработка "ОбеспечениеПотребностей" в момент выполнения запроса.
Запрос моделируется, после упрощения в консоли до минимального выдающего ошибку, превратился в:

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	null как поле
ИЗ
	(ВЫБРАТЬ
		0 КАК Поле1) КАК ВложенныйЗапрос
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаВозвратТоваровОтКлиента.ДополнительныеРеквизиты КАК ЗаявкаНаВозвратТоваровОтКлиентаДополнительныеРеквизиты
		ПО (ЗаявкаНаВозвратТоваровОтКлиентаДополнительныеРеквизиты.Ссылка = ВЫРАЗИТЬ(NULL КАК Справочник.Назначения).Заказ)
			И (ЗаявкаНаВозвратТоваровОтКлиентаДополнительныеРеквизиты.Свойство = &П),
	(ВЫБРАТЬ
		0 КАК Поле1) КАК ВложенныйЗапрос1
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.ДополнительныеРеквизиты КАК ЗаказКлиентаДополнительныеРеквизиты
		ПО (ЗаказКлиентаДополнительныеРеквизиты.Ссылка = ВЫРАЗИТЬ(NULL КАК Справочник.Назначения).Заказ)
			И (ЗаказКлиентаДополнительныеРеквизиты.Свойство = &П)


На копии моделируется, на копии же пробую как-либо чинить:
- выгрузка-загрузка dt
- ТИИ все пункты
- переиндексация базы средствами sql

Ничего не помогло.
Гуглёж выдал пару ссылок на старые темы, с прямыми скулёвыми запросами.
Платформа если что 8.3.24.1761, win server 2016, ms sql.

Коллеги, куда копать?
1 Галахад
 
гуру
06.03.25
20:27
Там правда есть соединение по составному реквизиту?
ВЫРАЗИТЬ(NULL КАК Справочник.Назначения).Заказ
2 Bibr
 
06.03.25
16:21
(1) Текст Запроса выгружен в отладчике непосредственно из объекта Запрос перед Запрос.Выполнить()
3 Bibr
 
06.03.25
17:12
(1) целиком если интересно выглядит так:

Подробности
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ТаблицаФорматы.Склад КАК Склад,
    ТаблицаФорматы.ФорматМагазина КАК ФорматМагазина
ПОМЕСТИТЬ ВтФорматыСкладов
ИЗ
    РегистрСведений.ИсторияИзмененияФорматовМагазинов.СрезПоследних(, ) КАК ТаблицаФорматы
ГДЕ
    ТаблицаФорматы.ФорматМагазина <> ЗНАЧЕНИЕ(Справочник.ФорматыМагазинов.ПустаяСсылка)

ИНДЕКСИРОВАТЬ ПО
    Склад
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    Таблица.Номенклатура КАК Номенклатура,
    Таблица.Характеристика КАК Характеристика,
    Таблица.Склад КАК Склад
ПОМЕСТИТЬ ВтТоварыПоддерживаемогоЗапаса
ИЗ
    РегистрСведений.ТоварныеОграничения КАК Таблица
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТоварныеОграничения КАК НастройкаГруппировки
        ПО (Таблица.ГруппировкаТоварныхОграничений <> ЗНАЧЕНИЕ(Справочник.ГруппировкиТоварныхОграничений.ПустаяСсылка))
            И (НастройкаГруппировки.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))
            И (НастройкаГруппировки.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка))
            И (НастройкаГруппировки.Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка))
            И (НастройкаГруппировки.ГруппировкаТоварныхОграничений = Таблица.ГруппировкаТоварныхОграничений)
            И (НастройкаГруппировки.ЭтоДействующийПараметр)
ГДЕ
    ЕСТЬNULL(НастройкаГруппировки.МетодОбеспеченияПотребностей, Таблица.МетодОбеспеченияПотребностей) <> ЗНАЧЕНИЕ(Перечисление.МетодыОбеспеченияПотребностей.ЗаказПодЗаказ)
    И Таблица.Номенклатура <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
    И (Таблица.Номенклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать)
            ИЛИ Таблица.Характеристика <> ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка))
    И Таблица.ЭтоДействующийПараметр
    И Таблица.Склад = &П2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    Таблица.Номенклатура,
    ТаблицаХарактеристик.Ссылка,
    Таблица.Склад
ИЗ
    РегистрСведений.ТоварныеОграничения КАК Таблица
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК ТаблицаНоменклатуры
        ПО (ТаблицаНоменклатуры.Ссылка = Таблица.Номенклатура)
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ТаблицаХарактеристик
        ПО (ТаблицаХарактеристик.Владелец = ВЫБОР
                КОГДА ТаблицаНоменклатуры.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры)
                    ТОГДА ТаблицаНоменклатуры.Ссылка
                КОГДА ТаблицаНоменклатуры.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры)
                    ТОГДА ТаблицаНоменклатуры.ВидНоменклатуры
                КОГДА ТаблицаНоменклатуры.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры)
                    ТОГДА ТаблицаНоменклатуры.ВладелецХарактеристик
            КОНЕЦ)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТоварныеОграничения КАК НастройкаДетальная
        ПО (НастройкаДетальная.Номенклатура = Таблица.Номенклатура)
            И (НастройкаДетальная.Характеристика = ТаблицаХарактеристик.Ссылка)
            И (НастройкаДетальная.Склад = Таблица.Склад)
            И (НастройкаДетальная.ЭтоДействующийПараметр)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТоварныеОграничения КАК НастройкаГруппировки
        ПО (Таблица.ГруппировкаТоварныхОграничений <> ЗНАЧЕНИЕ(Справочник.ГруппировкиТоварныхОграничений.ПустаяСсылка))
            И (НастройкаГруппировки.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))
            И (НастройкаГруппировки.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка))
            И (НастройкаГруппировки.Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка))
            И (НастройкаГруппировки.ГруппировкаТоварныхОграничений = Таблица.ГруппировкаТоварныхОграничений)
            И (НастройкаГруппировки.ЭтоДействующийПараметр)
ГДЕ
    ЕСТЬNULL(НастройкаГруппировки.МетодОбеспеченияПотребностей, Таблица.МетодОбеспеченияПотребностей) <> ЗНАЧЕНИЕ(Перечисление.МетодыОбеспеченияПотребностей.ЗаказПодЗаказ)
    И Таблица.Номенклатура <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
    И Таблица.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
    И Таблица.Номенклатура.ИспользованиеХарактеристик <> ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать)
    И Таблица.ЭтоДействующийПараметр
    И НастройкаДетальная.Склад ЕСТЬ NULL
    И НЕ ТаблицаХарактеристик.Ссылка ЕСТЬ NULL
    И Таблица.Склад = &П2
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    Т.Номенклатура КАК Номенклатура,
    Т.Характеристика КАК Характеристика,
    Т.Склад КАК Склад,
    СпрСпособ.Ссылка КАК СпособОбеспечения
ПОМЕСТИТЬ ВтТовары
ИЗ
    ВтТоварыПоддерживаемогоЗапаса КАК Т
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВариантыОбеспеченияРаботами КАК ТаблицаВариантыОбеспеченияРаботами
        ПО (Т.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа))
            И (ТаблицаВариантыОбеспеченияРаботами.Номенклатура = Т.Номенклатура)
            И (ТаблицаВариантыОбеспеченияРаботами.Характеристика = Т.Характеристика)
            И (ТаблицаВариантыОбеспеченияРаботами.РеквизитДопУпорядочивания = 1)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВариантыОбеспеченияТоварами КАК ТаблицаВариантыОбеспеченияТоварами
        ПО (Т.Номенклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар), ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара), ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)))
            И (ТаблицаВариантыОбеспеченияТоварами.Номенклатура = Т.Номенклатура)
            И (ТаблицаВариантыОбеспеченияТоварами.Характеристика = Т.Характеристика)
            И (ТаблицаВариантыОбеспеченияТоварами.Склад = Т.Склад)
            И (ТаблицаВариантыОбеспеченияТоварами.РеквизитДопУпорядочивания = 1)
        ЛЕВОЕ СОЕДИНЕНИЕ ВтФорматыСкладов КАК ТаблицаФорматыСкладов
        ПО (ТаблицаФорматыСкладов.Склад = Т.Склад)
            И (ТаблицаВариантыОбеспеченияТоварами.Номенклатура ЕСТЬ NULL)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СхемыОбеспечения КАК ТаблицаСхемыОбеспеченияСкладов
        ПО (ТаблицаСхемыОбеспеченияСкладов.СхемаОбеспечения = Т.Номенклатура.СхемаОбеспечения)
            И (ТаблицаСхемыОбеспеченияСкладов.Склад = Т.Склад)
            И (ТаблицаВариантыОбеспеченияТоварами.Номенклатура ЕСТЬ NULL)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СхемыОбеспечения КАК ТаблицаСхемыОбеспеченияФорматов
        ПО (ТаблицаСхемыОбеспеченияФорматов.СхемаОбеспечения = Т.Номенклатура.СхемаОбеспечения)
            И (ТаблицаСхемыОбеспеченияФорматов.Склад = ТаблицаФорматыСкладов.ФорматМагазина)
            И (ТаблицаСхемыОбеспеченияСкладов.СхемаОбеспечения ЕСТЬ NULL)
            И (ТаблицаВариантыОбеспеченияТоварами.Номенклатура ЕСТЬ NULL)
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СпособыОбеспеченияПотребностей КАК СпрСпособ
        ПО (ВЫБОР
                КОГДА Т.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа)
                    ТОГДА ЕСТЬNULL(ТаблицаВариантыОбеспеченияРаботами.СпособОбеспеченияПотребностей, Т.Номенклатура.СпособОбеспеченияПотребностей)
                ИНАЧЕ ЕСТЬNULL(ТаблицаВариантыОбеспеченияТоварами.СпособОбеспеченияПотребностей, ЕСТЬNULL(ТаблицаСхемыОбеспеченияСкладов.СпособОбеспеченияПотребностей, ЕСТЬNULL(ТаблицаСхемыОбеспеченияФорматов.СпособОбеспеченияПотребностей, ЗНАЧЕНИЕ(Справочник.СпособыОбеспеченияПотребностей.ПустаяСсылка))))
            КОНЕЦ = СпрСпособ.Ссылка),
    (ВЫБРАТЬ
        0 КАК Поле1) КАК ВложенныйЗапрос
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаВозвратТоваровОтКлиента.ДополнительныеРеквизиты КАК ЗаявкаНаВозвратТоваровОтКлиентаДополнительныеРеквизиты
        ПО (ЗаявкаНаВозвратТоваровОтКлиентаДополнительныеРеквизиты.Ссылка = ВЫРАЗИТЬ(NULL КАК Справочник.Назначения).Заказ
                И ЗаявкаНаВозвратТоваровОтКлиентаДополнительныеРеквизиты.Свойство = &П),
    (ВЫБРАТЬ
        0 КАК Поле1) КАК ВложенныйЗапрос1
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.ДополнительныеРеквизиты КАК ЗаказКлиентаДополнительныеРеквизиты
        ПО (ЗаказКлиентаДополнительныеРеквизиты.Ссылка = ВЫРАЗИТЬ(NULL КАК Справочник.Назначения).Заказ
                И ЗаказКлиентаДополнительныеРеквизиты.Свойство = &П)
ГДЕ
    ЕСТЬNULL(СпрСпособ.ТипОбеспечения, ЗНАЧЕНИЕ(Перечисление.ТипыОбеспечения.Покупка)) = &П3
    И ВЫБОР
            КОГДА ВЫРАЗИТЬ(NULL КАК Справочник.Назначения).Заказ ССЫЛКА Документ.ЗаявкаНаВозвратТоваровОтКлиента
                ТОГДА ВЫРАЗИТЬ(ЗаявкаНаВозвратТоваровОтКлиентаДополнительныеРеквизиты.Значение КАК ДАТА)
            КОГДА ВЫРАЗИТЬ(NULL КАК Справочник.Назначения).Заказ ССЫЛКА Документ.ЗаказКлиента
                ТОГДА ВЫРАЗИТЬ(ЗаказКлиентаДополнительныеРеквизиты.Значение КАК ДАТА)
        КОНЕЦ = &П4

ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    Характеристика,
    Склад,
    СпособОбеспечения
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВтФорматыСкладов
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ ПЕРВЫЕ 1
    Т.Номенклатура КАК Номенклатура,
    Т.Характеристика КАК Характеристика,
    Т.Склад КАК Склад,
    Т.СпособОбеспечения КАК СпособОбеспечения,
    ПРЕДСТАВЛЕНИЕССЫЛКИ(Т.Номенклатура) КАК НоменклатураПредставление,
    ПРЕДСТАВЛЕНИЕССЫЛКИ(Т.Склад) КАК СкладПредставление,
    ПРЕДСТАВЛЕНИЕССЫЛКИ(Т.СпособОбеспечения) КАК СпособОбеспеченияПредставление,
    ПРЕДСТАВЛЕНИЕССЫЛКИ(Т.Характеристика) КАК ХарактеристикаПредставление
ИЗ
    ВтТовары КАК Т
4 АНДР
 
06.03.25
20:28
(0) Без этого не ругается!?
(ВЫБРАТЬ 0 КАК Поле1) КАК ВложенныйЗапрос
5 Bibr
 
06.03.25
16:53
(4) без этого не ругается, да.
6 Bibr
 
06.03.25
17:12
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	ЗаявкаНаВозвратТоваровОтКлиентаДополнительныеРеквизиты.Ссылка как Ссылка1,
	ЗаявкаНаВозвратТоваровОтКлиентаДополнительныеРеквизиты.Свойство как Свойство1,
	ЗаявкаНаВозвратТоваровОтКлиентаДополнительныеРеквизиты.Значение как Значение1,
	ЗаказКлиентаДополнительныеРеквизиты.Ссылка как Ссылка2,
	ЗаказКлиентаДополнительныеРеквизиты.Свойство как Свойство2,
	ЗаказКлиентаДополнительныеРеквизиты.Значение как Значение2

ИЗ
 Документ.ЗаявкаНаВозвратТоваровОтКлиента.ДополнительныеРеквизиты КАК ЗаявкаНаВозвратТоваровОтКлиентаДополнительныеРеквизиты,
Документ.ЗаказКлиента.ДополнительныеРеквизиты КАК ЗаказКлиентаДополнительныеРеквизиты


в таком виде не ругается
7 АНДР
 
06.03.25
17:20
(6) А если в Где добавить
(ЗаказКлиентаДополнительныеРеквизиты.Ссылка = ВЫРАЗИТЬ(NULL КАК Справочник.Назначения).Заказ)
8 АНДР
 
06.03.25
17:25
(7) И раздели уже таблицы Документ.ЗаявкаНаВозвратТоваровОтКлиента и
Документ.ЗаказКлиента
9 Ёпрст
 
06.03.25
20:21
Ипать, еще и кросс джоин туда.
10 Bibr
 
07.03.25
10:26
(7-9)
что делать-то?
интересует, как убрать ошибку. Желательно правкой данных/таблиц, а не кода
11 Bibr
 
07.03.25
10:33
(7) та же ошибка
12 Мультук
 
гуру
07.03.25
10:37
(10)

Сарказм.
1) Это же очевидно -- прихлопнуть все "ДополнительныеРеквизиты"
в "ЗаявкаНаВозвратТоваровОтКлиента" и "ЗаявкаНаВозвратТоваровОтКлиента" -- нет данных, нет выборки

2) Так-то запрос (6) прикольный, ага

3) Тут два варианта. Ждать патчей
ИЛИ
смотреть "а как раньше было". Либо раньше было также, но не было доп.реквизитов см пункт 1
13 АНДР
 
07.03.25
10:57
(11) Теперь ищи в какой таблице (8)
Потом по периодам ищи конкретную запись.
14 Мультук
 
гуру
07.03.25
11:15
Риторический вопрос.

А какое отношение к

типовая обработка "ОбеспечениеПотребностей"

Имеет таблица "Документ.ЗаказКлиента.ДополнительныеРеквизиты"
15 Bibr
 
07.03.25
12:55
(14)
юзеры в обработке ОбеспечениеПотребностей делают отбор по допреквизиту своему (своя дата доставки) и видимо автоматом идёт в скд.
похоже что в этом и проблема
16 Bibr
 
07.03.25
14:14
Проблема решена.
Причина - юзер добавил доп реквизит, который использовался в отборе обработки в ещё один тип документа. т.е. тот же доп реквизит расширил на новый тип. и после этого типовая обработка стала формировать такой запрос, который скуль отказывается переваривать.
Т.е. отбор по доп реквизиту в этой обработке нормально работает пока доп реквизит только для одного типа объекта.
Решение - удалить доп реквизит из нового типа дока и для нового создать отдельный.
всем спасибо
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан