Любая из конфигураций 1С может выдать ошибку:
Она может возникнуть при работе в режиме управляемого приложения, при открытии формы выбора, списка или установлении отбора в такой форме. Т.е. программа использует запрос в динамическом списке, а при переносе из-за сбоя программы могут появиться дублирующие строки, т.е. в списке будут содержаться одинаковые ссылки на справочник или регистр. Например, при установлении отбора в справочнике «Сотрудники». В результате и появляется такого рода ошибка.
Также случались ситуации, что такая ошибка появлялась при установлении отбора по группе в справочнике «Номенклатура» в «1С:Управление торговлей», при открытии журнала «Входящие ТТН для ЕГАИС» в «1С:Розница». Чтобы устранить такого рода ошибку, из списка запроса надо удалить повторяющиеся ссылки. Для этого необходимо проверить регистры.
Например, в ситуации со справочником «Сотрудников» рекомендуется проверить регистры текущих сведений (кадровые данные и тарифная ставка), чтобы в них не было дублей по одному и тому же работнику, и регистр «Основные сотрудники», чтобы не было физлиц с незаполненными сведениями. Здесь могут сохраниться сведения, например, когда работник был принят и когда уволен, но по каким-то причинам первая запись не удалилась, и образовались дубли. В таком случае необходимо просмотреть записи регистров и, если такая запись попадается, ее необходимо удалить (предыдущую, оставив одну последнюю), в результате чего ошибка ликвидируется.
Просмотр регистров через команду «Все функции»
Если данный раздел не доступен, то включить его можно в меню «Сервис-Параметры», установив соответствующую галочку. Открыв регистр и проанализировав данные, при обнаружении дублирующих записей их необходимо удалить.
Возникновение ошибки происходит, потому что динамические списки не поддерживают дублирование записей по ключевым полям. При работе с динамическим списком записи формируются в основную таблицу, из которой происходит динамическое считывание данных.
5 — 28.03.23 — 11:58
(4) ВЫБРАТЬ
СправочникНоменклатура.Ссылка КАК Ссылка,
СправочникНоменклатура.Артикул КАК Артикул,
СправочникНоменклатура.Код КАК Код,
СправочникНоменклатура.Наименование КАК Наименование,
СправочникНоменклатура.Ссылка КАК Номенклатура,
СправочникНоменклатура.Ссылка КАК ЭлементСписка,
СправочникНоменклатура.ИспользованиеХарактеристик КАК ИспользованиеХарактеристик,
СправочникНоменклатура.ВидНоменклатуры КАК ВидНоменклатуры,
СправочникНоменклатура.ТипНоменклатуры КАК ТипНоменклатуры,
СправочникНоменклатура.ЭтоГруппа КАК ЭтоГруппа,
СправочникНоменклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка) КАК Упаковка,
ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка) КАК ВидЦены,
НЕОПРЕДЕЛЕНО КАК ВладелецХарактеристик,
0 КАК Цена,
0 КАК ИндексКартинки,
0 КАК ВНаличииОстаток,
0 КАК ВНаличииВБазовыхЕдиницах,
0 КАК Доступно,
СправочникНоменклатура.Родитель КАК Родитель,
ЛОЖЬ КАК ХарактеристикиИспользуются,
ЛОЖЬ КАК ЭтоТовар,
ЛОЖЬ КАК ЭтоУслуга,
ЛОЖЬ КАК ПометкаУдаления,
СправочникНоменклатура.ЦеноваяГруппа КАК ЦеноваяГруппа,
СправочникНоменклатура.Качество КАК Качество,
ЗНАЧЕНИЕ(Перечисление.ВариантыРасчетаЦенНаборов.ПустаяСсылка) КАК ВариантРасчетаЦеныНабора,
ЛОЖЬ КАК СодержитТовары,
ЛОЖЬ КАК СодержитУслуги
ИЗ
Справочник.Номенклатура КАК СправочникНоменклатура
11 — 28.03.23 — 12:44
(9) ВЫБРАТЬ
СправочникНоменклатура.Ссылка КАК Ссылка,
СправочникНоменклатура.Артикул КАК Артикул,
СправочникНоменклатура.Код КАК Код,
СправочникНоменклатура.Наименование КАК Наименование,
СправочникНоменклатура.ПометкаУдаления КАК ПометкаУдаления,
СправочникНоменклатура.Родитель КАК Родитель,
СправочникНоменклатура.ЭтоГруппа КАК ЭтоГруппа,
СправочникНоменклатура.Ссылка КАК Номенклатура,
СправочникНоменклатура.Ссылка КАК ЭлементСписка,
СправочникНоменклатура.ВидНоменклатуры КАК ВидНоменклатуры,
СправочникНоменклатура.ТипНоменклатуры КАК ТипНоменклатуры,
ВЫБОР КОГДА СправочникНоменклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор) ТОГДА
ЕСТЬNULL(ВариантыКомплектацииНоменклатуры.ВариантРасчетаЦеныНабора, ЗНАЧЕНИЕ(Перечисление.ВариантыРасчетаЦенНаборов.ПустаяСсылка))
ИНАЧЕ
ЗНАЧЕНИЕ(Перечисление.ВариантыРасчетаЦенНаборов.ПустаяСсылка)
КОНЕЦ КАК ВариантРасчетаЦеныНабора,
ВариантыКомплектацииНоменклатуры.СодержитТовары КАК СодержитТовары,
ВариантыКомплектацииНоменклатуры.СодержитУслуги КАК СодержитУслуги,
СправочникНоменклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
СправочникНоменклатура.ЦеноваяГруппа КАК ЦеноваяГруппа,
СправочникНоменклатура.Качество КАК Качество,
СправочникНоменклатура.ИспользованиеХарактеристик КАК ИспользованиеХарактеристик,
ВЫБОР
КОГДА СправочникНоменклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар), ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара))
ТОГДА ИСТИНА
КОГДА СправочникНоменклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)) И ЕСТЬNULL(ВариантыКомплектацииНоменклатуры.СодержитТовары, ЛОЖЬ) И Не ЕСТЬNULL(ВариантыКомплектацииНоменклатуры.СодержитУслуги, ЛОЖЬ)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ КАК ЭтоТовар,
ВЫБОР
КОГДА СправочникНоменклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга), ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа))
ТОГДА ИСТИНА
КОГДА СправочникНоменклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)) И ЕСТЬNULL(ВариантыКомплектацииНоменклатуры.СодержитУслуги, ЛОЖЬ) И НЕ ЕСТЬNULL(ВариантыКомплектацииНоменклатуры.СодержитТовары, ЛОЖЬ)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ КАК ЭтоУслуга,
ВЫБОР
КОГДА СправочникНоменклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры)
ТОГДА СправочникНоменклатура.ВидНоменклатуры
КОГДА СправочникНоменклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры)
ТОГДА СправочникНоменклатура.Ссылка
КОГДА СправочникНоменклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры)
ТОГДА СправочникНоменклатура.ВладелецХарактеристик
ИНАЧЕ Неопределено
КОНЕЦ КАК ВладелецХарактеристик,
ВЫБОР
КОГДА СправочникНоменклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать)
ТОГДА ЛОЖЬ
ИНАЧЕ ИСТИНА
КОНЕЦ КАК ХарактеристикиИспользуются,
ВЫБОР
КОГДА СправочникНоменклатура.ЭтоГруппа
ТОГДА ВЫБОР
КОГДА СправочникНоменклатура.ПометкаУдаления
ТОГДА 13
ИНАЧЕ 12
КОНЕЦ
ИНАЧЕ ВЫБОР
КОГДА СправочникНоменклатура.ЕстьТоварыДругогоКачества
ТОГДА 4 + ВЫБОР
КОГДА СправочникНоменклатура.ПометкаУдаления
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ + ВЫБОР
КОГДА СправочникНоменклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать)
ТОГДА 0
ИНАЧЕ 2
КОНЕЦ
ИНАЧЕ -1 + ВЫБОР
КОГДА СправочникНоменклатура.ПометкаУдаления
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ + ВЫБОР
КОГДА СправочникНоменклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать)
ТОГДА 1
ИНАЧЕ 3
КОНЕЦ
КОНЕЦ
КОНЕЦ КАК ИндексКартинки,
ЕСТЬNULL(СоглашениеТовары.Упаковка, ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)) КАК Упаковка,
ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка) КАК ВидЦены,
ВЫРАЗИТЬ(ЕСТЬNULL(СоглашениеТовары.Цена, 0) * ВЫБОР
КОГДА &Валюта <> СоглашениеТовары.Ссылка.Валюта
ТОГДА ВЫБОР
КОГДА ЕСТЬNULL(КурсыСрезПоследнихВалютаСоглашения.КурсЗнаменатель, 0) > 0
И ЕСТЬNULL(КурсыСрезПоследнихВалютаСоглашения.КурсЧислитель, 0) > 0
И ЕСТЬNULL(КурсыСрезПоследнихВалютаДокумента.КурсЗнаменатель, 0) > 0
И ЕСТЬNULL(КурсыСрезПоследнихВалютаДокумента.КурсЧислитель, 0) > 0
ТОГДА КурсыСрезПоследнихВалютаСоглашения.КурсЧислитель * КурсыСрезПоследнихВалютаДокумента.КурсЗнаменатель / (КурсыСрезПоследнихВалютаДокумента.КурсЧислитель * КурсыСрезПоследнихВалютаСоглашения.КурсЗнаменатель)
ИНАЧЕ 0
КОНЕЦ
ИНАЧЕ 1
КОНЕЦ КАК ЧИСЛО(31,2)) КАК Цена,
ВЫРАЗИТЬ(ЕСТЬNULL(ВсеОстатки.ВНаличии, 0) / ЕСТЬNULL(ВЫБОР
КОГДА СоглашениеТовары.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Вес)
И СоглашениеТовары.Номенклатура.ВесИспользовать
И ЕСТЬNULL(СоглашениеТовары.Упаковка.Знаменатель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ВесЕдиницаИзмерения.Числитель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ВесЕдиницаИзмерения.Знаменатель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ВесЧислитель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ВесЗнаменатель, 0) <> 0
ТОГДА ВЫРАЗИТЬ((ВЫРАЗИТЬ((ВЫРАЗИТЬ(СоглашениеТовары.Упаковка.Числитель / СоглашениеТовары.Упаковка.Знаменатель КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(СоглашениеТовары.Номенклатура.ВесЕдиницаИзмерения.Числитель / СоглашениеТовары.Номенклатура.ВесЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(СоглашениеТовары.Номенклатура.ВесЧислитель / СоглашениеТовары.Номенклатура.ВесЗнаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))
КОГДА СоглашениеТовары.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Объем)
И СоглашениеТовары.Номенклатура.ОбъемИспользовать
И ЕСТЬNULL(СоглашениеТовары.Упаковка.Знаменатель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ОбъемЕдиницаИзмерения.Числитель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ОбъемЕдиницаИзмерения.Знаменатель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ОбъемЧислитель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ОбъемЗнаменатель, 0) <> 0
ТОГДА ВЫРАЗИТЬ((ВЫРАЗИТЬ((ВЫРАЗИТЬ(СоглашениеТовары.Упаковка.Числитель / СоглашениеТовары.Упаковка.Знаменатель КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(СоглашениеТовары.Номенклатура.ОбъемЕдиницаИзмерения.Числитель / СоглашениеТовары.Номенклатура.ОбъемЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(СоглашениеТовары.Номенклатура.ОбъемЧислитель / СоглашениеТовары.Номенклатура.ОбъемЗнаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))
КОГДА СоглашениеТовары.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Площадь)
И СоглашениеТовары.Номенклатура.ПлощадьИспользовать
И ЕСТЬNULL(СоглашениеТовары.Упаковка.Знаменатель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ПлощадьЕдиницаИзмерения.Числитель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ПлощадьЕдиницаИзмерения.Знаменатель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ПлощадьЧислитель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ПлощадьЗнаменатель, 0) <> 0
ТОГДА ВЫРАЗИТЬ((ВЫРАЗИТЬ((ВЫРАЗИТЬ(СоглашениеТовары.Упаковка.Числитель / СоглашениеТовары.Упаковка.Знаменатель КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(СоглашениеТовары.Номенклатура.ПлощадьЕдиницаИзмерения.Числитель / СоглашениеТовары.Номенклатура.ПлощадьЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(СоглашениеТовары.Номенклатура.ПлощадьЧислитель / СоглашениеТовары.Номенклатура.ПлощадьЗнаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))
КОГДА СоглашениеТовары.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Длина)
И СоглашениеТовары.Номенклатура.ДлинаИспользовать
И ЕСТЬNULL(СоглашениеТовары.Упаковка.Знаменатель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ДлинаЕдиницаИзмерения.Числитель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ДлинаЕдиницаИзмерения.Знаменатель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ДлинаЧислитель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ДлинаЗнаменатель, 0) <> 0
ТОГДА ВЫРАЗИТЬ((ВЫРАЗИТЬ((ВЫРАЗИТЬ(СоглашениеТовары.Упаковка.Числитель / СоглашениеТовары.Упаковка.Знаменатель КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(СоглашениеТовары.Номенклатура.ДлинаЕдиницаИзмерения.Числитель / СоглашениеТовары.Номенклатура.ДлинаЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(СоглашениеТовары.Номенклатура.ДлинаЧислитель / СоглашениеТовары.Номенклатура.ДлинаЗнаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))
КОГДА (СоглашениеТовары.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Мощность)
ИЛИ СоглашениеТовары.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Энергия)
ИЛИ СоглашениеТовары.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.ЭлектрическийЗаряд)
ИЛИ СоглашениеТовары.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Время))
И СоглашениеТовары.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = СоглашениеТовары.Упаковка.ТипИзмеряемойВеличины
И ЕСТЬNULL(СоглашениеТовары.Упаковка.Знаменатель, 0) <> 0
ТОГДА ВЫРАЗИТЬ((ВЫРАЗИТЬ(СоглашениеТовары.Упаковка.Числитель / СоглашениеТовары.Упаковка.Знаменатель КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(СоглашениеТовары.Номенклатура.ЕдиницаИзмерения.Числитель / СоглашениеТовары.Номенклатура.ЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))
КОГДА СоглашениеТовары.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Упаковка)
И ЕСТЬNULL(СоглашениеТовары.Упаковка.Знаменатель, 0) <> 0
ТОГДА ВЫРАЗИТЬ(СоглашениеТовары.Упаковка.Числитель / СоглашениеТовары.Упаковка.Знаменатель КАК ЧИСЛО(17, 7))
КОГДА СоглашениеТовары.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.КоличествоШтук)
ТОГДА 1
ИНАЧЕ NULL
КОНЕЦ, 1) КАК ЧИСЛО(15, 3)) КАК ВНаличииОстаток,
ЕСТЬNULL(ВсеОстатки.ВНаличии, 0) КАК ВНаличииВБазовыхЕдиницах,
ВЫРАЗИТЬ(ЕСТЬNULL(ВсеОстатки.Свободно, 0) / ЕСТЬNULL(ВЫБОР
КОГДА СоглашениеТовары.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Вес)
И СоглашениеТовары.Номенклатура.ВесИспользовать
И ЕСТЬNULL(СоглашениеТовары.Упаковка.Знаменатель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ВесЕдиницаИзмерения.Числитель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ВесЕдиницаИзмерения.Знаменатель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ВесЧислитель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ВесЗнаменатель, 0) <> 0
ТОГДА ВЫРАЗИТЬ((ВЫРАЗИТЬ((ВЫРАЗИТЬ(СоглашениеТовары.Упаковка.Числитель / СоглашениеТовары.Упаковка.Знаменатель КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(СоглашениеТовары.Номенклатура.ВесЕдиницаИзмерения.Числитель / СоглашениеТовары.Номенклатура.ВесЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(СоглашениеТовары.Номенклатура.ВесЧислитель / СоглашениеТовары.Номенклатура.ВесЗнаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))
КОГДА СоглашениеТовары.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Объем)
И СоглашениеТовары.Номенклатура.ОбъемИспользовать
И ЕСТЬNULL(СоглашениеТовары.Упаковка.Знаменатель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ОбъемЕдиницаИзмерения.Числитель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ОбъемЕдиницаИзмерения.Знаменатель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ОбъемЧислитель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ОбъемЗнаменатель, 0) <> 0
ТОГДА ВЫРАЗИТЬ((ВЫРАЗИТЬ((ВЫРАЗИТЬ(СоглашениеТовары.Упаковка.Числитель / СоглашениеТовары.Упаковка.Знаменатель КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(СоглашениеТовары.Номенклатура.ОбъемЕдиницаИзмерения.Числитель / СоглашениеТовары.Номенклатура.ОбъемЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(СоглашениеТовары.Номенклатура.ОбъемЧислитель / СоглашениеТовары.Номенклатура.ОбъемЗнаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))
КОГДА СоглашениеТовары.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Площадь)
И СоглашениеТовары.Номенклатура.ПлощадьИспользовать
И ЕСТЬNULL(СоглашениеТовары.Упаковка.Знаменатель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ПлощадьЕдиницаИзмерения.Числитель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ПлощадьЕдиницаИзмерения.Знаменатель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ПлощадьЧислитель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ПлощадьЗнаменатель, 0) <> 0
ТОГДА ВЫРАЗИТЬ((ВЫРАЗИТЬ((ВЫРАЗИТЬ(СоглашениеТовары.Упаковка.Числитель / СоглашениеТовары.Упаковка.Знаменатель КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(СоглашениеТовары.Номенклатура.ПлощадьЕдиницаИзмерения.Числитель / СоглашениеТовары.Номенклатура.ПлощадьЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(СоглашениеТовары.Номенклатура.ПлощадьЧислитель / СоглашениеТовары.Номенклатура.ПлощадьЗнаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))
КОГДА СоглашениеТовары.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Длина)
И СоглашениеТовары.Номенклатура.ДлинаИспользовать
И ЕСТЬNULL(СоглашениеТовары.Упаковка.Знаменатель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ДлинаЕдиницаИзмерения.Числитель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ДлинаЕдиницаИзмерения.Знаменатель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ДлинаЧислитель, 0) <> 0
И ЕСТЬNULL(СоглашениеТовары.Номенклатура.ДлинаЗнаменатель, 0) <> 0
ТОГДА ВЫРАЗИТЬ((ВЫРАЗИТЬ((ВЫРАЗИТЬ(СоглашениеТовары.Упаковка.Числитель / СоглашениеТовары.Упаковка.Знаменатель КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(СоглашениеТовары.Номенклатура.ДлинаЕдиницаИзмерения.Числитель / СоглашениеТовары.Номенклатура.ДлинаЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(СоглашениеТовары.Номенклатура.ДлинаЧислитель / СоглашениеТовары.Номенклатура.ДлинаЗнаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))
КОГДА (СоглашениеТовары.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Мощность)
ИЛИ СоглашениеТовары.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Энергия)
ИЛИ СоглашениеТовары.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.ЭлектрическийЗаряд)
ИЛИ СоглашениеТовары.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Время))
И СоглашениеТовары.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = СоглашениеТовары.Упаковка.ТипИзмеряемойВеличины
И ЕСТЬNULL(СоглашениеТовары.Упаковка.Знаменатель, 0) <> 0
ТОГДА ВЫРАЗИТЬ((ВЫРАЗИТЬ(СоглашениеТовары.Упаковка.Числитель / СоглашениеТовары.Упаковка.Знаменатель КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(СоглашениеТовары.Номенклатура.ЕдиницаИзмерения.Числитель / СоглашениеТовары.Номенклатура.ЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))
КОГДА СоглашениеТовары.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Упаковка)
И ЕСТЬNULL(СоглашениеТовары.Упаковка.Знаменатель, 0) <> 0
ТОГДА ВЫРАЗИТЬ(СоглашениеТовары.Упаковка.Числитель / СоглашениеТовары.Упаковка.Знаменатель КАК ЧИСЛО(17, 7))
КОГДА СоглашениеТовары.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.КоличествоШтук)
ТОГДА 1
ИНАЧЕ NULL
КОНЕЦ, 1) КАК ЧИСЛО(15, 3)) КАК Доступно
ИЗ
Справочник.Номенклатура КАК СправочникНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыКомплектацииНоменклатуры КАК ВариантыКомплектацииНоменклатуры
ПО ВариантыКомплектацииНоменклатуры.Владелец = СправочникНоменклатура.Ссылка
И ВариантыКомплектацииНоменклатуры.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
И ВариантыКомплектацииНоменклатуры.Основной
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СоглашенияСКлиентами.Товары КАК СоглашениеТовары
ПО (СоглашениеТовары.Ссылка = &Соглашение)
И СправочникНоменклатура.Ссылка = СоглашениеТовары.Номенклатура
И (СоглашениеТовары.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка))
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтносительныеКурсыВалют.СрезПоследних(,
БазоваяВалюта В (ВЫБРАТЬ
БазоваяВалютаПоУмолчанию.Значение КАК Значение
ИЗ
Константа.БазоваяВалютаПоУмолчанию КАК БазоваяВалютаПоУмолчанию)) КАК КурсыСрезПоследнихВалютаСоглашения
ПО (КурсыСрезПоследнихВалютаСоглашения.Валюта = СоглашениеТовары.Ссылка.Валюта)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтносительныеКурсыВалют.СрезПоследних(, Валюта = &Валюта
И БазоваяВалюта В (ВЫБРАТЬ
БазоваяВалютаПоУмолчанию.Значение КАК Значение
ИЗ
Константа.БазоваяВалютаПоУмолчанию КАК БазоваяВалютаПоУмолчанию)) КАК КурсыСрезПоследнихВалютаДокумента
ПО (ИСТИНА)
ЛЕВОЕ СОЕДИНЕНИЕ(
ВЫБРАТЬ
РаспределениеЗапасов.Номенклатура КАК Номенклатура,
СУММА(РаспределениеЗапасов.ВНаличии) КАК ВНаличии,
СУММА(РаспределениеЗапасов.Запас) КАК Запас,
СУММА(РаспределениеЗапасов.Свободно) КАК Свободно
ИЗ
РегистрСведений.РаспределениеЗапасов КАК РаспределениеЗапасов
ГДЕ
РаспределениеЗапасов.Состояние = ЗНАЧЕНИЕ(Перечисление.РаспределениеЗапасовСостояния.ОстатокНаСкладе)
И РаспределениеЗапасов.Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
И РаспределениеЗапасов.Склад = &Склад
СГРУППИРОВАТЬ ПО
РаспределениеЗапасов.Номенклатура
) КАК ВсеОстатки
ПО
(ВсеОстатки.Номенклатура = СправочникНоменклатура.Ссылка)
ГДЕ
НЕ СправочникНоменклатура.ЭтоГруппа
{ГДЕ
(1 В
(ВЫБРАТЬ ПЕРВЫЕ 1
1
ИЗ
РегистрСведений.НоменклатураСегмента КАК Сегменты
ГДЕ
Сегменты.Номенклатура = СправочникНоменклатура.Ссылка
И Сегменты.Сегмент = &СегментНоменклатуры))}
При разработке какой-либо из версий из версий конфигурации 1С и тестировании созданной программы программист 1С может столкнуться с уведомлением «Обнаружено дублирование ключевых значений в колонках «Ссылка» в 1С 8.3. Появление указанного уведомления обычно вызвано неправильным составлением запроса, и лечиться проверкой имеющейся базы данных и удалением дублирующих значений. Ниже разберём суть возникшей дисфункции и методы её решения.
Содержание статьи:
- 1 Что может означать «Обнаружено дублирование ключевых значений»?
- 2 Как исправить ошибку в 1С 8.3
- 3 Заключение
Что может означать «Обнаружено дублирование ключевых значений»?
Как правило, рассматриваемая ошибка проявляет себя уже на стадии тестирования создаваемой конфигурации. Она появляется при попытке открытия какой-либо формы выбора, или работающей на управляемом приложении формы списка в 1С, при выполнении других операций и процессов.
Проблема возникает как в версии 1С 8.3, так и более ранних версиях продукта (зафиксировано её появление в более ранних версиях 8.2 и 8.1.)
При возникновении ошибки появляется уведомление «Обнаружено дублирование ключевых значений в колонке «Ссылка» (или каких-либо альтернативных колонках). Отображение данных в списке невозможно». Программисту предлагается нажать на кнопку «Ок», после чего уведомление пропадает.
Появления указанного сообщения означает, что форма заполняется на основании динамического списка, запрос которого выдаёт дублирующие строки.
Причиной этого является неправильно настроенное соединение с основной таблицей, которое и предстоит откорректировать программисту 1С.
Также причиной указанной ошибки может выступать наличие в базе ряда элементов справочника с незаполненным кодом.
Решение возникшей дисфункции напрямую зависит от специфики создаваемого программистом программного кода. Рекомендуется открыть ваш динамический список, найти в его свойствах произвольный запрос, и соответствующим образом откорректировать его для того, чтобы он не выдавал дублирующих строк.
Для этого перейдите в конфигуратор базы 1С, откройте запрос динамического списка (лучше всего через конструктор запросов), и просмотрите имеющиеся связи между таблицами в запросе. После нахождения проблемы скорректируйте запрос с целью удаления дублирующих ссылок по колонке (в случае данной статьи это упомянутая в тексте ошибки колонка «Ссылка»). Для этого в большинстве случаев достаточно перейти на закладку «Группировка», и перераспределить имеющиеся поля запроса в суммируемые и группируемые поля.
В случае неудачи попробуйте также в конструкторе запросов динамического списка перейти в закладку «Дополнительно», и там поставить галочку на опции «Без повторяющихся». Довольно часто это позволяет избавиться от ошибки «Обнаружено дублирование ключевых значений» в версии 1С 8.3 (и более ранних версий).
Удалите все сомнительные соединения запроса. Если отыскать корень проблемы не удаётся – тогда стоит выполнить глобальное тестирование и исправление.
В более ранних версиях 1С помогал переход в раздел «Администрирование», далее «Обслуживание», затем выбор опции «Корректировка данных». Раскройте имеющуюся панель, выберите там «Поиск и удаление дублей», а затем кликните на «Искать». Выполните поиск и удаление дублей, каждый раз заново запуская обработку по справочникам.
Читайте также: как устранить проблему с нарушением целостности системы в 1С.
Заключение
В нашем материале мы разобрали, почему появляется ошибка — Обнаружено дублирование ключевых значений в колонках «Ссылка» в 1С 8.3, и как её можно исправить. В большинстве случаев причиной проблемы становится наличие дублирующих строк из запрашиваемого динамического списка. Для устранения дисфункции необходимо просмотреть имеющуюся программу (в частности, запросы динамического списка), после чего удалить дублирующие ссылки. После этого рассматриваемая нами проблема обычно бывает решена.
Leave a comment
При разработке какой-либо из версий из версий конфигурации 1С и тестировании созданной программы программист 1С может столкнуться с сообщением «Обнаружено дублирование ключевых значений в колонках «Ссылка» в 1С 8.3. Появление указанного уведомления обычно вызвано неправильным составлением запроса, и лечиться проверкой имеющейся базы данных и удалением дублирующих значений. Ниже разберём суть возникшей дисфункции и методы её решения.
Содержание
- Что означает данное сообщение
- Как исправить ошибку в 1С 8.3
- Заключение
Что означает данное сообщение
Как правило, рассматриваемая ошибка проявляет себя уже на стадии тестирования создаваемой конфигурации. Она появляется при попытке открытия какой-либо формы выбора, или работающей на управляемом приложении формы списка в 1С, при выполнении других операций и процессов.
Проблема возникает как в версии 1С 8.3, так и более ранних версиях продукта (зафиксировано её появление в более ранних версиях 8.2 и 8.1.)
При возникновении ошибки появляется уведомление «Обнаружено дублирование ключевых значений в колонке «Ссылка» (или каких-либо альтернативных колонках). Отображение данных в списке невозможно». Программисту предлагается нажать на кнопку «Ок», после чего уведомление пропадает.
Появления указанного сообщения означает, что форма заполняется на основании динамического списка, запрос которого выдаёт дублирующие строки.
Причиной этого является неправильно настроенное соединение с основной таблицей, которое и предстоит откорректировать программисту 1С.
Также причиной указанной ошибки может выступать наличие в базе ряда элементов справочника с незаполненным кодом.
Это интересно: как решить дисфункцию «неверный формат хранилища данных» в 1С версии 8.3.
Как исправить ошибку в 1С 8.3
Решение возникшей дисфункции напрямую зависит от специфики создаваемого программистом программного кода. Рекомендуется открыть ваш динамический список, найти в его свойствах произвольный запрос, и соответствующим образом откорректировать его для того, чтобы он не выдавал дублирующих строк.
Для этого перейдите в конфигуратор базы 1С, откройте запрос динамического списка (лучше всего через конструктор запросов), и просмотрите имеющиеся связи между таблицами в запросе. После нахождения проблемы скорректируйте запрос с целью удаления дублирующих ссылок по колонке (в случае данной статьи это упомянутая в тексте ошибки колонка «Ссылка»). Для этого в большинстве случаев достаточно перейти на закладку «Группировка», и перераспределить имеющиеся поля запроса в суммируемые и группируемые поля.
В случае неудачи попробуйте также в конструкторе запросов динамического списка перейти в закладку «Дополнительно», и там поставить галочку на опции «Без повторяющихся». Довольно часто это позволяет избавиться от проблемы в версии 1С 8.3 (и более ранних версий).
Удалите все сомнительные соединения запроса. Если отыскать корень проблемы не удаётся – тогда стоит выполнить глобальное тестирование и исправление.
В более ранних версиях 1С помогал переход в раздел «Администрирование», далее «Обслуживание», затем выбор опции «Корректировка данных». Раскройте имеющуюся панель, выберите там «Поиск и удаление дублей», а затем кликните на «Искать». Выполните поиск и удаление дублей, каждый раз заново запуская обработку по справочникам.
Читайте также: как устранить проблему с нарушением целостности системы в 1С.
Заключение
В нашем материале мы разобрали, почему появляется уведомление «Обнаружено дублирование ключевых значений» в колонках «Ссылка» в 1С 8.3, и как её можно исправить. В большинстве случаев причиной проблемы становится наличие дублирующих строк из запрашиваемого динамического списка. Для устранения дисфункции необходимо просмотреть имеющуюся программу (в частности, запросы динамического списка), после чего удалить дублирующие ссылки. После этого рассматриваемая нами проблема обычно бывает решена.
Сначала определения.
Повторяющиеся ключи это значения из набора столбцов некоторой
таблицы, которые встречаются в данной таблице более одного раза.
Потерянные проводки это строки таблицы _1SENTRY или _1SOPER.
Вы спросите – «Почему данные термины используются в заголовке
темы вместе?». Потому, что часто (хотя и не всегда) потерянные проводки проявляются
как строки с повторяющимися ключами.
В одной из моих статьей я уже писал как бороться с повторяющимися
ключами. Теперь же рассмотрим ситуации, при которых возникают сообщения об ошибках
в результате появления повторяющихся ключей. А таковых бывает несколько. Набираем
в известном всем Books Online (BOL) сочетание «duplicate key», сортируем по
колонке «Местонахождение» и перемещаемся на строки с разделом «Troubleshooting».
Получаем:
Native errorКод ошибки SQL |
SeverityУровень «серьезности» ошибки | Текст ошибки |
1505 | 14 | CREATE UNIQUE INDEX terminated because a duplicate key was found for index ID %d. Most significant primary key is ‘%S_KEY’. |
Невозможно создать уникальный индекс так как в талибце найдены повторяющиеся ключи |
||
1508 | 14 | CREATE INDEX terminated because a duplicate row was found. Primary key is ‘%S_KEY’. |
Невозможно создать кластерный индекс так как в таблице найдены повторяющиеся ключи |
||
2601 | 14 | Cannot insert duplicate key row in object ‘%.*ls’ with unique index ‘%.*ls’. |
Невозможно вставить строки (обновить строки) в таблице, так как для нее создан уникальный индекс и строка с таким ключом уже есть в таблице |
Первые две ошибки случаются когда предпринимается попытка создания
индекса (уникального или кластерного). Третья ошибка происходит при попытке
вставки записи (либо изменении поля существующей записи) и при этом нарушается
уникальность уже существующего индекса.
В том же BOL в качестве способа нахождения повторяющихся ключей
указан такой оператор:
Select field,…, fieldN form table group by field,…, fieldN,
здесь field,…, fieldN – набор полей таблицы, по которому создан
индекс, уникальный которого нарушается. Это конечно неудобно, так как приходится
пролистывать весь запрос для нахождения повторяющихся ключей. Удобнее будет
использовать следующий запрос:
select field,…, fieldN, «Count»=count(*) from Table
Group by field,…, fieldN having count(*)>1
После получения списка повторяющихся ключей, остается решить
какие из них нужно оставить, а какие удалить.
Теперь вернемся к потерянным проводкам. Часто такие сообщения
появляются для таблиц _1SENTRY и _1SOPER. Поэтому метод описанные выше также
подходит для исправления данных в таблице проводок и операций. Однако кроме
этого существуют специфичные для 1С методы борьбы с потерянными проводками:
- Поставить признак для документа,
создающего бухгалтерские проводки, «Всегда создавать операцию». Данный способ
лучше всего применять для конфигураций, которые еще не «в бою», то есть только
на этапе создания. При разработке конфигурации для SQL платформы всегда ставьте
признак «Всегда»для уменьшения вероятности возникновения потерянных проводок.
- Отмена проведения + проведение
документа (ов). Обычно не помогает документам, у которых не стоит признак
создавать операцию всегда. И именно при проведении документа возникает данная
ошибка. - Выгрузка – загрузка данных.
Очень действенный метод, но очень долгий. - Тестирование + исправление
конфигурации. Иногда помогает.
Что рекомендую. Сначала пробуйте отменить проведение документа
и провести его заново. Иногда бывает трудно определить у какого документа потерялись
проводки. В этом случае данная операция может занять столько же (если не больше)
времени сколько загрузка и выгрузка. Если не поможет – тестирование + исправление
конфигурации. Если не поможет – почистить проводки с помощью метода борьбы с
повторяющимися ключами, провести документ(ы). Крайняя мера – загрузка – выгрузка.
Изменение признака операции на «создавать всегда» приведет к пересчету бухгалтерских
итогов, поэтому данная операция сравнима по времени с выгрузкой – загрузкой
и тестированием с пересчетом итогов. Данную операцию я не применял, но думаю,
что ее можно использовть вместо тестирования – исправления конфигурации. В любом
случае если вы исправили положение, то для всех бухгалтерских документов лучше
поставить признак создавать операцию всегда.
Еще в данной статье хотелось бы обратится к другой моей статье
, в которой подробно был изложен способ нахождения потерянных проводок. Этот
способ основывается на другом предположении, а именно на том, что потерянные
проводки (операции) не принадлежат ни одному из документов. В статье был приведен
скрипт, с помощью которого можно получить список потерянных проводок. На его
основе легко получить другой скрипт, который сможет удалить такие проводки:
— есть проводки по непроведенным документам
— такое безобразие нужно «покоцать»
delete from _1sentry (nolock)
where docid in (select iddoc from _1sjourn (nolock)
where closed=0)
— есть проводки, но нет соответствующих документов
— такое безобразие нужно «покоцать»
delete from _1sentry (nolock)
where docid not in (select iddoc from _1sjourn (nolock))
— есть проводки, но нет соответствующих операций
— такое безобразие нужно «покоцать»
delete from _1sentry (nolock)
where docid not in (select docid from _1soper (nolock))
— есть операции, но нет соответствующих документов
— такое безобразие нужно «покоцать»
delete from _1soper (nolock)
where docid not in (select iddoc from _1sjourn (nolock))
— проверка правильности заполнения DATE_TIME_DOCID в _1sentry
— вместо проверки — замена на правильный DATE_TIME_DOCID
update _1sentry set DATE_TIME_DOCID=_1sjourn.DATE_TIME_idDOC
from _1sjourn (nolock)
—select _1sentry.DATE_TIME_DOCID,_1sjourn.DATE_TIME_idDOC
from _1sentry (nolock), _1sjourn (nolock)
where _1sentry.DOCID=_1sjourn.idDOC and
_1sentry.DATE_TIME_DOCID_1sjourn.DATE_TIME_idDOC
— здесь можно сделать установку поля APPCODE, которое содержит
— флаги, к какой компоненте принадлежит документ (см. статью на
— hare.ru в разделе Коллективный разум про структуру базы)
— поле устанавливается для определенного вида документа IDDOCDEF
— то есть известно какой документ, по какой компоненте делает
— движения
— проверка правильности заполнения APPCODE в _1Sjourn
—Update _1Sjourn set appcode=appcode+32
—where appcode1356 and
— iddoc in (select docid from _1sentry (nolock))
— 32 – заменить на нужный APPCODE
— 1356 –заменить на нужный IDDOCDEF
— проверка базы — можно раскомментировать
—dbcc checkdb
— переиндексация базы данных — можно раскомментировать
—exec _1sp_dbreindex
Запускать этот скрипт лучше всего на копии базы – мало ли что.
Важное замечание – если с помощью скрипта удаляются проводки по операции,
то восстановить их потом будет очень трудно, в то время как удаление проводок
по документам не так страшно (их всегда можно перепровести).
Вот и все. Пишите мне, если у вас есть свои методы борьбы с описанными
ситуациями – пополним наш арсенал вашим оружием!
Удачной борьбы с потерянными проводками и повторяющимся ключам
– глюками 1С!
Шемякин Павел
1csql@udmnet.ru
http://1csql.virtualave.net/1csql/