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

Обход выборки по регистру остатков

Автор sas_255, 24 авг 2021, 17:42

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

sas_255

Добрый день.
Никак не могу понять что происходит.
Есть самописная конфигурация учета устройств на рабочих местах.
Есть справочник "Устройства" в котором присутсвует реквизит Рабочее место (тип строка).
При открытии формы или при создании на сервере работает процедура отбора из регистра остатков (отбирает по серийнику он же Код)
и считывает из того же регистра на каком рабочем месте находится устройство на текущий момент. Соответственно результат выборки присваивается реквизиту Рабочее место.

Код процедуры
&НаСервере
Процедура ПриОткрытииНаСервере()

   //В данном запросе мы отбираем из регистра остатков рабочее место на котором числится устройство
   //по серийному номеру и выводит значение рабочего места в поле "Рабочее место"

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

   Записать();

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

&НаКлиенте
 Процедура ПриОткрытии(Отказ)
ПриОткрытииНаСервере();
 КонецПроцедуры




Проблема состоит в том, что по какой то причине, через несколько перемещений процедура выдает не текущее рабочее место а предыдущее например, или вообще если отменена проводка и сделана другая оставляет то наименование рабочего места которого там быть уже не должно, то есть новое не считывает.

Приложил скриншоты цепочки перемещений.
Сначала устройство приходовалось на РМ Директор
Потом перемещалось
Директор-Менеджер
Менеджер-Гл.Бухгалтер
Гл.Бухгалтер-Тестовое рабочее место
Тестовое рабочее место - Директор
Директор-Зав.Бух

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

LexaK

@sas_255, попробуйте такой код
&НаСервере
Процедура ПриОткрытииНаСервере()
   
       //В данном запросе мы отбираем из регистра остатков рабочее место на котором числится устройство
       //по серийному номеру и выводит значение рабочего места в поле "Рабочее место"
       
       Запрос = Новый Запрос;
       Запрос.Текст =
       "ВЫБРАТЬ Первые 1
       |    ОстатикиПоРМ.РабочееМесто КАК РабочееМесто,
       |    ОстатикиПоРМ.СерийныйНомер КАК СерийныйНомер
       |ИЗ
       |    РегистрНакопления.ОстатикиПоРМ КАК ОстатикиПоРМ
       |ГДЕ
       |    ОстатикиПоРМ.СерийныйНомер = &СерийныйНомер
   |Упорядочить по
   | ОстатикиПоРМ.Период Убыв
   |
   |";
       
       Запрос.УстановитьПараметр("СерийныйНомер", Объект.Код);
       
       РезультатЗапроса = Запрос.Выполнить();
       
       ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
       
   Если ВыборкаДетальныеЗаписи.Следующий() Тогда
           Объект.РабочееМесто = ВыборкаДетальныеЗаписи.РабочееМесто;
       Записать();
   КонецЕсли;
       
 КонецПроцедуры
ответ Понравился? (в смысле пригодился?)

sas_255

Переделал согласно вашим подсказкам, все равно не хочет почему-то.
ТО есть он по какой то причине присваивает по первости правильное РМ, а вот потом тупо игнорирует изменения,
например если откатить перемещение на рабочее место Директор, из регистра данные удалятся а вот в форме справочника реквизит останется тот же, хотя по логике вещей выборка работает при каждом открытии формы и и данные должны браться из регистра на данный момент.


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

УПОРЯДОЧИТЬ ПО
Период УБЫВ


а вот по этому запросу в консоли выдает весь список РМ но в странной последовательности. Я совсем запутался, по какой причине он выдает не тот порядок, в котором происходили перемещения? Скрин приложил.

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

sas_255


Теги: выборка 

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

66558

Ответов: 0
Просмотров: 727

68964

Ответов: 1
Просмотров: 1110

40756

Ответов: 5
Просмотров: 6555

46526

Ответов: 3
Просмотров: 1488

Рейтинг@Mail.ru Rambler's Top100

Поиск