8.х Регистр свединий в документе

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Реланиум, 28 фев 2007.

  1. TopicStarter Overlay
    Реланиум
    Offline

    Реланиум Опытный в 1С

    Регистрация:
    12 сен 2006
    Сообщения:
    84
    Симпатии:
    0
    Баллы:
    26
    Переодический регистр сведений: ПоказанияСчетчиков
    с двумя измерениями: ТипСчетчика, Квартира Ресурс: Показание

    В документе при выборе Оплаты(выбирается счетчик: горячая вода например) событие при изменении:
    Надо что бы в реквизите ПоследниеПоказания стало последние значение из регистра, немогу передать значение Тип счетчика.. непойму как этот тип структура сделать..
    Код:
    СтрокаТабличнойЧасти=ЭлементыФормы.оплаты.ТекущиеДанные;
    Регистр=РегистрыСведений.ПоказанияСчетчиков;
    Отбор=Новый Структура("Счетчик");
    Счетчик ???
    СтрокаТабличнойЧасти.ПоследниеПоказание=Регистр.СрезПоследних(ТекущаяДата(), Отбор);
    
    
    
  2. Greck
    Offline

    Greck Опытный в 1С

    Регистрация:
    11 дек 2006
    Сообщения:
    94
    Симпатии:
    0
    Баллы:
    26
    Идея такая...
    "ТипСтетчитка" - Измерение регистра сведений,
    "Квартира" - Измерение регистра сведений
    "ПоследниеПоказание" - элемент формы, ты присвоишь вместо него в свою табличную часть...
    "Показание" - Ресурс регистра сведений

    Код:
    Отбор = Новый Структура("ТипСчетчика");
    Отбор.ТипСчетчика = ТвойТипСчетчика; 
    Отбор.Квартира = ТвояКвартира; 
    // ТипСчетчитка = выбранный счетчика в форме по кот.делаем срез в регистре сведений
    СрезПоследних = РегистрыСведений.ПоказанияСчетчиков.СрезПоследних(ТекущаяДата(),Отбор);
    
    Если СрезПоследних.Количество() < 1 Тогда
    ЭлементыФормы.ПоследниеПоказание.Значение = Неопределено;
    Иначе
    ЭлементыФормы.ПоследниеПоказание.Значение = СрезПоследних[0].Показание; 
    КонецЕсли;
    
  3. TopicStarter Overlay
    Реланиум
    Offline

    Реланиум Опытный в 1С

    Регистрация:
    12 сен 2006
    Сообщения:
    84
    Симпатии:
    0
    Баллы:
    26
    Пасибо большое, но чуть не допонял :( вот тут ругаеца на квартиру:

    я просто ни как принцип этой структуры не могу понять :(
    Отбор = Новый Структура("ТипСчетчика"); - тут "ТипСчетчика" это измерение регистра.. или што..
  4. TAHk
    Offline

    TAHk Опытный в 1С

    Регистрация:
    31 авг 2006
    Сообщения:
    100
    Симпатии:
    0
    Баллы:
    26
    как ругается? и где именно ругается (в какой строке)?
    Если во второй (Отбор.ТипСчетчика = ТвойТипСчетчика;), то видимо переменной ТвойТипСчетчика не заданно никакого значения.
    Если в третьей (Отбор.Квартира = ТвояКвартира;), то в первой строке необходимо дописать:
    ...("ТипСчетчика", "Квартира");
  5. TopicStarter Overlay
    Реланиум
    Offline

    Реланиум Опытный в 1С

    Регистрация:
    12 сен 2006
    Сообщения:
    84
    Симпатии:
    0
    Баллы:
    26
    Вот ошибка:
    {Документ.Оплата.Форма.ФормаДокумента(9)}: Поле объекта не обнаружено (Квартира)
    Отбор.Квартира = "11";
    Вот код:
    Код:
    СтрокаТабличнойЧасти=ЭлементыФормы.оплаты.ТекущиеДанные;
    Регистр=РегистрыСведений.ПоказанияСчетчиков;
    
    Отбор = Новый Структура("ТипСчетчика", "Квартира");
    Отбор.ТипСчетчика = "Холодная вода"; 
    Отбор.Квартира = "11"; 
    
    СтрокаТабличнойЧасти.ПоследниеПоказание=Регистр.СрезПоследних(ТекущаяДата(), Отбор); 
    
    
    :unsure:
  6. Greck
    Offline

    Greck Опытный в 1С

    Регистрация:
    11 дек 2006
    Сообщения:
    94
    Симпатии:
    0
    Баллы:
    26
    Опиши подробнее еще раз структуру и типы данных измерений и ресурсов Регистра сведений...
  7. TopicStarter Overlay
    Реланиум
    Offline

    Реланиум Опытный в 1С

    Регистрация:
    12 сен 2006
    Сообщения:
    84
    Симпатии:
    0
    Баллы:
    26
    Регистр сведений:
    ПоказанияСчетчиков
    Измерения:
    ТипСчетчика-СправочникСсылка.Оплаты
    Квартира-СправочникСсылка.Квартира
    Ресурсы:
    Показание-число

    В справочнике Квартира есть Элемент с наименованием 11
    В справочнике оплаты есть Холодная вода
  8. TAHk
    Offline

    TAHk Опытный в 1С

    Регистрация:
    31 авг 2006
    Сообщения:
    100
    Симпатии:
    0
    Баллы:
    26
    Правильно, что выдал ошибку.
    для измерений назначаешь тип:
    а в программе
    тип строка.
    Попробуй присвоить ссылки на справочники.
  9. Greck
    Offline

    Greck Опытный в 1С

    Регистрация:
    11 дек 2006
    Сообщения:
    94
    Симпатии:
    0
    Баллы:
    26
    Вот так попробуй - у меня работает!

    Код:
    Отбор = Новый Структура;
    Отбор.Вставить("ТипСчетчика",ТипСчетчика); 
    Отбор.Вставить("Квартира", Квартира); 
    
    СрезПоследних = РегистрыСведений.ПоказанияСчетчиков.СрезПоследних(ТекущаяДата(),Отбор);
    
    Если СрезПоследних.Количество() < 1 Тогда
    ЭлементыФормы.Показание.Значение = Неопределено;
    Иначе
    ЭлементыФормы.Показание.Значение = СрезПоследних[0].Показание; 
    КонецЕсли;
    
  10. TAHk
    Offline

    TAHk Опытный в 1С

    Регистрация:
    31 авг 2006
    Сообщения:
    100
    Симпатии:
    0
    Баллы:
    26
    хотябы так:
    Код:
    Отбор.ТипСчетчика = Справочники.Оплата.НайтиПоНаименованию("Холодная вода"); 
    Отбор.Квартира = Справочники.Квартира.НайтиПоНаименованию("11");
    
  11. Greck
    Offline

    Greck Опытный в 1С

    Регистрация:
    11 дек 2006
    Сообщения:
    94
    Симпатии:
    0
    Баллы:
    26
    По наименованию в Справочнике будет искать если по нему включенно индексирование... а так тоже ошибку выдаст...
  12. TAHk
    Offline

    TAHk Опытный в 1С

    Регистрация:
    31 авг 2006
    Сообщения:
    100
    Симпатии:
    0
    Баллы:
    26
    А как это делается? Первый раз слышу, что для наименования можно было бы менять Индексирование. Насколько я знаю индексирование наименования включено всегда, когда его длина не нулевая. В данном примере так оно и есть - не нулевая.
  13. TopicStarter Overlay
    Реланиум
    Offline

    Реланиум Опытный в 1С

    Регистрация:
    12 сен 2006
    Сообщения:
    84
    Симпатии:
    0
    Баллы:
    26
    Не работает ни так ни так, как у Грека переменная ТипСчетчика не определена в строке Отбор.Вставить("ТипСчетчика",ТипСчетчика)
    Как у Танка опять поле не найденно в строке
    Отбор.ТипСчетчика =Справочники.Оплата.НайтиПоНаименованию("Холодная вода");
    :unsure:
  14. Greck
    Offline

    Greck Опытный в 1С

    Регистрация:
    11 дек 2006
    Сообщения:
    94
    Симпатии:
    0
    Баллы:
    26
    Да ты прав, это я упустил :)



    ТипСчетчика - ты должен заполнить на свое значение типа счетчика, я когда у себя тестил это был реквизит документа
    Квартира - тоже самое...


    у тебя должно быть типа

    Код:
    Отбор = Новый Структура;
    Отбор.Вставить("ТипСчетчика",Справочники.Оплата.НайтиПоНаименованию("Холодная вода")); 
    Отбор.Вставить("Квартира", Справочники.Квартира.НайтиПоНаименованию("11")); 
    
    СрезПоследних = РегистрыСведений.ПоказанияСчетчиков.СрезПоследних(ТекущаяДата(),Отбор);
    
    Если СрезПоследних.Количество() < 1 Тогда
    ЭлементыФормы.Показание.Значение = Неопределено;
    Иначе
    ЭлементыФормы.Показание.Значение = СрезПоследних[0].Показание; 
    КонецЕсли;
    
    Ну и опять же тут в моем примере ты выбираешь конкретные значение Холодная вода и кв.11, а ты сам туда подставляй твои текущие данные по которым будешь делать срез :)

    да Кстати ЭлементыФормы.Показание.Значение - это тоже измени на то куда тебе необходимо присвоить полученное значение послденего "Показания"
  15. TopicStarter Overlay
    Реланиум
    Offline

    Реланиум Опытный в 1С

    Регистрация:
    12 сен 2006
    Сообщения:
    84
    Симпатии:
    0
    Баллы:
    26
    так и пробую что то получается :) 5 сек..
  16. TAHk
    Offline

    TAHk Опытный в 1С

    Регистрация:
    31 авг 2006
    Сообщения:
    100
    Симпатии:
    0
    Баллы:
    26
    А в справочнике точно есть элемент с таким наименованием. Попробуй вставить в форму реквизит типа СправочникСсылка.Оплата и сошлись на него перед отбором
  17. TopicStarter Overlay
    Реланиум
    Offline

    Реланиум Опытный в 1С

    Регистрация:
    12 сен 2006
    Сообщения:
    84
    Симпатии:
    0
    Баллы:
    26
    Отбор = Новый Структура;
    Отбор.Вставить("ТипСчетчика",Справочники.Оплаты.НайтиПоНаименованию("Холодная вода"));
    Отбор.Вставить("Квартира", Справочники.Квартира.НайтиПоНаименованию("11"));
    так получается токи терь правильно выборку по полю выведу
  18. TopicStarter Overlay
    Реланиум
    Offline

    Реланиум Опытный в 1С

    Регистрация:
    12 сен 2006
    Сообщения:
    84
    Симпатии:
    0
    Баллы:
    26
    Осталось только что бы он брал от туда сам...
    Код:
    СтрокаТабличнойЧасти=ЭлементыФормы.оплаты.ТекущиеДанные;
    Отбор = Новый Структура;
    Отбор.Вставить("ТипСчетчика",Справочники.Оплаты.НайтиПоНаименованию(СтрокаТабличнойЧасти.Оплаты)); 
    Отбор.Вставить("Квартира", Справочники.Квартира.НайтиПоНаименованию(ЭлементыФормы.Квартира)); 
    
    
    что то тут не так..
  19. Greck
    Offline

    Greck Опытный в 1С

    Регистрация:
    11 дек 2006
    Сообщения:
    94
    Симпатии:
    0
    Баллы:
    26
    Ну да :) у тебяж в строках табличной части не значения этоментов справочника а сами элементы... дебаггером погляди что ты подставляешь в функцию НайтиПоНаименованию(), я думаю нужно пробовать что-то типа такого:

    Код:
    СтрокаТабличнойЧасти=ЭлементыФормы.оплаты.ТекущиеДанные;
    Отбор = Новый Структура;
    Отбор.Вставить("ТипСчетчика", СтрокаТабличнойЧасти.Оплаты); 
    Отбор.Вставить("Квартира", ЭлементыФормы.Квартира); 
    
    
  20. TopicStarter Overlay
    Реланиум
    Offline

    Реланиум Опытный в 1С

    Регистрация:
    12 сен 2006
    Сообщения:
    84
    Симпатии:
    0
    Баллы:
    26
    то же самое получается
    а если пишу так:
    Отбор.Вставить("Квартира", Справочники.Квартира.НайтиПоНаименованию(ЭлементыФормы.Квартира.Значение));
    то пишет не нашел поле значение...
    ага посредством дебугера выяснилось, что там где ЭлементыФормы.Квартира он пишет ПолеВвода..
    а Где оплаты нормально так пишет Холодная вода.. хде я опять накосячил?

Поделиться этой страницей