Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
15 дек 2024, 21:43

Не работает отбор в динамическом списке

Автор sas_255, 25 авг 2021, 20:03

0 Пользователей и 1 гость просматривают эту тему.

sas_255

Есть общая форма с двумя динамическими списками.
РабочиемМеста и СоставРМ
Отбор РабочиеМеста
ВЫБРАТЬ
РабочиеМеста.Код КАК Код,
РабочиеМеста.ВладелецРабочегоМеста КАК ВладелецРабочегоМеста,
РабочиеМеста.ВиртуальноеРМ КАК ВиртуальноеРМ,
РабочиеМеста.СервиснаяМетка КАК СервиснаяМетка
ИЗ
Справочник.РабочиеМеста КАК РабочиеМеста

СГРУППИРОВАТЬ ПО
РабочиеМеста.Код,
РабочиеМеста.ВладелецРабочегоМеста,
РабочиеМеста.ВиртуальноеРМ,
РабочиеМеста.СервиснаяМетка

В левой части отображаются из справочника рабочие места, в правой части должны отображаться устройства, которые оприходованы на выделенное рабочее место.
Для списка РабочиеМеста написана процедура установки параметра "Рабочее место" с целью отбирать из регистра остатков только те устройства, которые принадлежат выделенному.



&НаКлиенте
Процедура РабочиеМестаПриАктивизацииСтроки(Элемент)

лкСсылка = Элементы.РабочиеМеста.ТекущиеДанные;
лкСсылка = лкСсылка.Код;
УстановитьПараметр(лкСсылка);

КонецПроцедуры

&НаСервере
Процедура УстановитьПараметр(лкСсылка);

Параметр = Справочники.РабочиеМеста.НайтиПоКоду(лкСсылка);

СоставРМ.Параметры.УстановитьЗначениеПараметра("РабочееМесто",Параметр);

КонецПроцедуры

Список СоставРМ берет данные из Регистра остатков ОстаткиПоРм (Рабочее место и СерийныйНомер)и из справочника Устройства.
Отбор приведен ниже:

ВЫБРАТЬ
ОстатикиПоРМОстатки.РабочееМесто КАК РабочееМесто,
ОстатикиПоРМОстатки.СерийныйНомер КАК СерийныйНомер,
ОстатикиПоРМОстатки.ЦенаОстаток КАК ЦенаОстаток,
ОстатикиПоРМОстатки.КоличествоОстаток КАК КоличествоОстаток,
Устройства.Код КАК Код,
Устройства.ТипУстройства КАК ТипУстройства,
Устройства.Производитель КАК Производитель,
Устройства.Модель КАК Модель,
Устройства.СостояниеУстройства КАК СостояниеУстройства,
Устройства.ОкончаниеГарантии КАК ОкончаниеГарантии
ИЗ
РегистрНакопления.ОстатикиПоРМ.Остатки КАК ОстатикиПоРМОстатки
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Устройства КАК Устройства
ПО ОстатикиПоРМОстатки.СерийныйНомер = Устройства.Код
ГДЕ
ОстатикиПоРМОстатки.РабочееМесто = &РабочееМесто



Проблема возникает, когда я ставлю в качестве основной таблицы Справочник.Устройства.
 
Если стоит "РегистрНакопления.ОстатикиПоРМ.Остатки" то остатки по РМ отображаются корректно, но тут смысл в том, чтоб можно было нажатием на устройстве открыть его форму и создать на основании движение, обслуживание и т.д.

Проблема возникает, когда я ставлю в качестве основной таблицы Справочник.Устройства.
С одной стороны это вроде работает, и остатки отображаются, но не всегда. Более того в среде разработки остатки отображаются при нажатии на строку в левой части формы (РабочиеМеста) как только я выгружаю конфигурацию и устанавливаю ее в рабочую базу тут начинаются чудеса, в одной базе с этой конфигурацией остатки отображаются, в другой нет, то есть тупо одна конфигурация но работает через раз, в чем может быть причина? Куда нужно копать, может стоит как то по другому реализовать данную функцию?

На скриншоте ниже, видно, что при разработке при отладке все работает и корректно отображается. Но этот же код не работает по факту при установке базы из данной конфигурации

LexaK

при установке новой конфигурации, у вас происходит смена Типа (данных, реквизитов) они, просто обнуляются!
поэтому после установки новой конфигруации, проверьте все записи/данные регистров, справочником, документов
при необходимости их надо по новой перезаполнить а документы еще и перепровести.

как-то так

(чудеса в 1С только из-за корявости рук и ветра в голове) (и только 5% из-за косяков платформы)  :xfbnsdfb:
если помогло нажмите: Спасибо!

sas_255

Цитата: LexaK от 26 авг 2021, 09:56при установке новой конфигурации, у вас происходит смена Типа (данных, реквизитов) они, просто обнуляются!
поэтому после установки новой конфигруации, проверьте все записи/данные регистров, справочником, документов
при необходимости их надо по новой перезаполнить а документы еще и перепровести.

Я наверное неправильно выразился и вы меня не так поняли.

Я устанавливаю конфигурацию не в действующую базу, а в новую, в которой еще нет ничего, ни документов ни записей.
И вот в новой БД я завожу рабочее место, приходую на него устройство и все, оно не отображается в динамическом списке СоставРМ.

LexaK

а почему СФ а не ДТ используете при создании новой базы?
ну это так,
по любому проверяйте Типы и значения своих данных, помните что 1С любит (хорошо работает) когда Типы данных совпадают
у вас могут быть составные типы данных, например Строка и Ссылка, от этого зависят данные в этом реквизите, будут и Сроки и Ссылки
и зависит как вы будете выбирать эти данные, какие условия и параметры (Типы) передаете в отбор


   
если помогло нажмите: Спасибо!

sas_255

Начал экспериментировать с консолью запросов.
В самом деле по этому запросу ничего не выводит.
Но если в консоли установить тип параметра Рабочее место, то все работает.
Осталось понять, это получается тип ссылка?
ВЫБРАТЬ
ОстатикиПоРМОстатки.РабочееМесто КАК РабочееМесто,
ОстатикиПоРМОстатки.СерийныйНомер КАК СерийныйНомер,
ОстатикиПоРМОстатки.ЦенаОстаток КАК ЦенаОстаток,
ОстатикиПоРМОстатки.КоличествоОстаток КАК КоличествоОстаток,
Устройства.Код КАК Код,
Устройства.ТипУстройства КАК ТипУстройства,
Устройства.Производитель КАК Производитель,
Устройства.Модель КАК Модель,
Устройства.СостояниеУстройства КАК СостояниеУстройства,
Устройства.ОкончаниеГарантии КАК ОкончаниеГарантии
ИЗ
РегистрНакопления.ОстатикиПоРМ.Остатки КАК ОстатикиПоРМОстатки
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Устройства КАК Устройства
ПО ОстатикиПоРМОстатки.СерийныйНомер = Устройства.Код
ГДЕ
ОстатикиПоРМОстатки.РабочееМесто = &РабочееМесто



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

&НаКлиенте
Процедура РабочиеМестаПриАктивизацииСтроки(Элемент)

лкСсылка = Элементы.РабочиеМеста.ТекущиеДанные;
лкСсылка = лкСсылка.Код;
УстановитьПараметр(лкСсылка);

КонецПроцедуры

&НаСервере
Процедура УстановитьПараметр(лкСсылка);

Параметр = Справочники.РабочиеМеста.НайтиПоКоду(лкСсылка);
СоставРМ.Параметры.УстановитьЗначениеПараметра("РабочееМесто",Параметр);

КонецПроцедуры

antoneus

Может и оффтоп, но что, в текущих данных поля Ссылка нет, раз приходится вот так брать в текущих данных код, а потом по коду искать ссылку? Да еще и на сервер за этим бегать в процедуре ПриАктивизацииСтроки (а в ней, кстати, нельзя использовать серверные вызовы)?

&НаКлиенте
Процедура РабочиеМестаПриАктивизацииСтроки(Элемент)
   
    лкСсылка = Элементы.РабочиеМеста.ТекущиеДанные;
    лкСсылка = лкСсылка.Код;
    УстановитьПараметр(лкСсылка);
           
КонецПроцедуры

LexaK

хм, у вас такая схема

получили Ссылка из нее получили Код передали в процедуру по Коду нашли Ссылку - установили Параметр

вот так наверно проще было бы

получили Ссылка передали в процедуру - установили Параметр
Процедура РабочиеМестаПриАктивизацииСтроки(Элемент)
   
    лкСсылка = Элементы.РабочиеМеста.ТекущиеДанные;
   //// лкСсылка = лкСсылка.Код;
    УстановитьПараметр(лкСсылка);
       
КонецПроцедуры

&НаСервере
Процедура УстановитьПараметр(лкСсылка);
   
    ////Параметр = Справочники.РабочиеМеста.НайтиПоКоду(лкСсылка);   
    СоставРМ.Параметры.УстановитьЗначениеПараметра("РабочееМесто",лкСсылка);
   
КонецПроцедуры


если помогло нажмите: Спасибо!

sas_255

LexaK, Можно и так, но  я получаю тип Строка, который судя по всему там не работает, подскажите как получить параметр в виде ссылки, то есть чтобы был тип Ссылка, я так подозреваю в этом и кроется проблема неработающего отбора.
Выше я прикладывал скрин результата консоли запроса, с типом Строка запрос ничего не выдает.


antoneus, А что делать в моем случае? Как вы видите решение данной проблемы без вызова серверной процедуры?

antoneus

Да зачем на сервер, если параметр на клиенте можно установить в той же процедуре?

sas_255 в отладчике в текущих данных видно поле ссылка? Ну или в полях списка в конфигураторе оно есть?

LexaK

sas_255, попробуйте так
&НаКлиенте
Процедура РабочиеМестаПриАктивизацииСтроки(Элемент)
   
    текДанные = Элементы.РабочиеМеста.ТекущиеДанные;
    лкСсылка = текДанные.Ссылка; //вот так попробуйте сделать, только в ДС отметить надо что Ссылка всегда присутствует
    УстановитьПараметр(лкСсылка);
       
КонецПроцедуры
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск