Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Обращение к реквизитам Регистра Сведений
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
Гущин Артём
Как обратиться из модуля ФормыДокумента к ресурсу Регистра Сведений? Спасибо.

    &НаКлиенте
Процедура РасчетФСПРилляПриИзменении(Элемент)
    СтрокаРасчетФСП = Элементы.РасчетФСП.ТекущиеДанные;
    СтрокаЗемПлощадиПредприятия = Элементы.ЗемПлощадиПредприятия.ТекущиеДанные;
    СтрокаРасчетФСП.Рилля = СтрокаЗемПлощадиПредприятия.Рилля * РегистрыСведений.Ставка;
КонецПроцедуры
logist
Получить необходимые данные НаСервере и вернуть результирующий вариант на Клиент. Можно вернуть структуру значений.

upd:
СтрокаРасчетФСП.Рилля = СтрокаЗемПлощадиПредприятия.Рилля * РегистрыСведений.Ставка;

Вопрос в догонку, Вы с регистрами работать умеете?
Гущин Артём
Цитата(logist @ 20.03.13, 11:50) необходимо зарегистрироваться для просмотра ссылки
Получить необходимые данные НаСервере и вернуть результирующий вариант на Клиент. Можно вернуть структуру значений.

upd:
СтрокаРасчетФСП.Рилля = СтрокаЗемПлощадиПредприятия.Рилля * РегистрыСведений.Ставка;

Вопрос в догонку, Вы с регистрами работать умеете?



Можно писАть в Общем модули или в самом модуле формы документа?

С регистрами сведений работать не умею, как и с языком 1Ски(


&НаСервере
Функция ПрочитатьРесурсСтавкаФСП()
        
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    СтавкиНалогаФСП.СтавкаФСП
        |ИЗ
        |    РегистрСведений.СтавкиНалогаФСП КАК СтавкиНалогаФСП";

    Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        // Вставить обработку выборки ВыборкаДетальныеЗаписи
    КонецЦикла;

        

КонецФункции


В правильном русле рою?
logist
Цитата(Гущин Артём @ 20.03.13, 12:02) необходимо зарегистрироваться для просмотра ссылки
В правильном русле рою?

Если регистр не периодический то в правильном, кроме Пока/Цикл, т.к. запрос вернет одну запись.
Гущин Артём
Цитата(logist @ 20.03.13, 14:10) необходимо зарегистрироваться для просмотра ссылки
Если регистр не периодический то в правильном, кроме Пока/Цикл, т.к. запрос вернет одну запись.



Да, регистр не периодический
logist
Тогда, это
   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        // Вставить обработку выборки ВыборкаДетальныеЗаписи
    КонецЦикла;

заменить на это
   Если ВыборкаДетальныеЗаписи.Следующий() Тогда
        Возврат ВыборкаДетальныеЗаписи.СтавкаФСП;
Иначе
Возврат 0;
    КонецЕсли;
pablo
А в регистре сведений есть какие-либо измерения? Если есть, тогда все будет не так, как написал Логист
logist
Цитата(pablo @ 20.03.13, 16:01) необходимо зарегистрироваться для просмотра ссылки
А в регистре сведений есть какие-либо измерения?

Конечно есть. По другому не бывает.

Цитата(pablo @ 20.03.13, 16:01) необходимо зарегистрироваться для просмотра ссылки
тогда все будет не так, как написал Логист

Конечно не так smile.gif) Исходил из информации которую предоставляют. Если бы ТС четко описал задачу, что есть и что надо, ... а так, что говорят от того и пляшем smile.gif
Vofka
Цитата(logist @ 20.03.13, 16:31) необходимо зарегистрироваться для просмотра ссылки
Конечно есть. По другому не бывает.

Почему это не бывает? Бывает.
Гущин Артём
Спасибо всем!
logist
Цитата(Vofka @ 20.03.13, 16:59) необходимо зарегистрироваться для просмотра ссылки
Бывает.

Прям день новостей. Хорошо, бывает. Только зачем он тогда, можно пару примеров, а то я как-то не могу представить (ну кроме как хранения там одной записи, но это как-то глупо использовать регистр)
Гущин Артём
А если нужно на возврат получить
Возврат ВыборкаДетальныеЗаписи.СтавкаФСП;
через точку значение определённое значение ресурса (например: 1-й элемент), и потом его подставить в модуль формы документа:

    &НаКлиентеСервере
    Процедура РасчетФСПРилляПриИзменении(Элемент)
        СтрокаРасчетФСП = Элементы.РасчетФСП.ТекущиеДанные;
        СтрокаЗемПлощадиПредприятия = Элементы.ЗемПлощадиПредприятия.ТекущиеДанные;
        СтрокаРасчетФСП.Рилля = СтрокаЗемПлощадиПредприятия.Рилля * ПрочитатьРесурсСтавкаФСП.1();
    КонецПроцедуры
logist
Что значит первый элемент? Давайте сюда структуру регистра, а то не понятно, что у вас там вообще.

ПрочитатьРесурсСтавкаФСП.1();

Это прекратите, а то я до выходных не доживу))) Лучше сначала спросите как надо, а потом пишите.
Гущин Артём
Цитата(logist @ 20.03.13, 20:35) необходимо зарегистрироваться для просмотра ссылки
Что значит первый элемент? Давайте сюда структуру регистра, а то не понятно, что у вас там вообще.

ПрочитатьРесурсСтавкаФСП.1();

Это прекратите, а то я до выходных не доживу))) Лучше сначала спросите как надо, а потом пишите.



В режиме Конфигуратор РегистрСведений "СтавкиНалогаФСП" имеет одно измерение "БазаНалогооблажения" (тип: Перечисление.Ссылка) и один Ресурс "СтавкаФСП" (Тип: Число - в режиме Предприятие здесь хранятся числовые значения: 0,03, 0,09, 0,15 ..)
Vofka
Цитата(logist @ 20.03.13, 18:06) необходимо зарегистрироваться для просмотра ссылки
Прям день новостей. Хорошо, бывает. Только зачем он тогда, можно пару примеров, а то я как-то не могу представить (ну кроме как хранения там одной записи, но это как-то глупо использовать регистр)

Например, логи какие-то хранить.
pablo
СтрокаРасчетФСП.Рилля = СтрокаЗемПлощадиПредприятия.Рилля * ПрочитатьРесурсСтавкаФСП(БазаРасчета);


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

    ВыборкаДетальныеЗаписи = Результат.Выбрать();

    если ВыборкаДетальныеЗаписи.Следующий() тогда
     Возврат ВыборкаДетальныеЗаписи.СтавкаФСП;
   иначе
     возврат 0;
    КонецЕсли;      

КонецФункции
logist
Цитата(Гущин Артём @ 20.03.13, 20:46) необходимо зарегистрироваться для просмотра ссылки
В режиме Конфигуратор РегистрСведений "СтавкиНалогаФСП" имеет одно измерение "БазаНалогооблажения" (тип: Перечисление.Ссылка) и один Ресурс "СтавкаФСП" (Тип: Число - в режиме Предприятие здесь хранятся числовые значения: 0,03, 0,09, 0,15 ..)

Тогда уточните, что значит:
Цитата(Гущин Артём @ 20.03.13, 20:16) необходимо зарегистрироваться для просмотра ссылки
через точку значение определённое значение ресурса (например: 1-й элемент)

Ресурс хранит одно число и у вас с одним измерением есть несколько записей с разными ресурсами, или ресурс хранит строку в которой перечислены числовые значения?
Гущин Артём
Я хочу получать определённые записи, которые хранятся в ресурсе Регистра. Извините, что не чётко поставил задачу.(
logist
Цитата(Гущин Артём @ 21.03.13, 9:58) необходимо зарегистрироваться для просмотра ссылки
Я хочу получать определённые записи, которые хранятся в ресурсе Регистра.

Все этого хотят, регистры они такие smile.gif Но я так и не услышал ответ на свой последний вопрос, который связан с Вашим вопросом в сообщении #12
pablo
Цитата
или ресурс хранит строку в которой перечислены числовые значения?

Цитата
"СтавкаФСП" (Тип: Число
Гущин Артём
Цитата(logist @ 21.03.13, 10:04) необходимо зарегистрироваться для просмотра ссылки
Все этого хотят, регистры они такие smile.gif Но я так и не услышал ответ на свой последний вопрос, который связан с Вашим вопросом в сообщении #12


Я хочу узнать, можно ли подставить в код:
&НаКлиентеСервере
    Процедура РасчетФСПРилляПриИзменении(Элемент)
        СтрокаРасчетФСП = Элементы.РасчетФСП.ТекущиеДанные;
        СтрокаЗемПлощадиПредприятия = Элементы.ЗемПлощадиПредприятия.ТекущиеДанные;
        СтрокаРасчетФСП.Рилля = СтрокаЗемПлощадиПредприятия.Рилля * 9/100;
    КонецПроцедуры


заменить строку:
СтрокаРасчетФСП.Рилля = СтрокаЗемПлощадиПредприятия.Рилля * 9/100;


на вот эту:
СтрокаРасчетФСП.Рилля = СтрокаЗемПлощадиПредприятия.Рилля * ПрочитатьРесурсСтавкаФСП(Элемент3);


где:
Элемент3
- это значения, которыя я буду хранить в ресурсе РегистраСведений.
logist
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Блаблабла",    БазаНалогооблажения); // значение перечисления можно подставить тут или передать в вызове процедуры
"ВЫБРАТЬ
|    СтавкиНалогаФСП.СтавкаФСП
|ИЗ
|    РегистрСведений.СтавкиНалогаФСП КАК СтавкиНалогаФСП
|ГДЕ
|    СтавкиНалогаФСП.БазаНалогооблажения = &Блаблабла";

Результат = Запрос.Выполнить().Выгрузить();
Возврат Результат.ВыгрузитьКолонку("СтавкаФСП");


В этом случае вы получите массив результатов, и дальше можете использовать:
ВозвращенныйМассив[0] // для первого элемента, пример
ВозвращенныйМассив[2] // для третьего элемента, пример


Только не понятно, если у вас с одним измерением не сколько ресурсов, то как вы знаете какой использовать в расчетах (т.е. почему вы хотите получить первое значение или второе)?

Цитата(Гущин Артём @ 21.03.13, 10:14) необходимо зарегистрироваться для просмотра ссылки
где:
Элемент3
- это значения, которыя я буду хранить в ресурсе РегистраСведений.

Функция "ПрочитатьРесурсСтавкаФСП" уже вернет значение согласно параметрам запроса, в скобках передаются параметры для выполнения функции, а не желаемый результат.
Гущин Артём
Финансирование сайта осуществляется путём пожертвований или из каких-либо других источников?
Гущин Артём
Цитата(logist @ 21.03.13, 10:30) необходимо зарегистрироваться для просмотра ссылки
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Блаблабла",    БазаНалогооблажения); // значение перечисления можно подставить тут или передать в вызове процедуры
"ВЫБРАТЬ
|    СтавкиНалогаФСП.СтавкаФСП
|ИЗ
|    РегистрСведений.СтавкиНалогаФСП КАК СтавкиНалогаФСП
|ГДЕ
|    СтавкиНалогаФСП.БазаНалогооблажения = &Блаблабла";

Результат = Запрос.Выполнить().Выгрузить();
Возврат Результат.ВыгрузитьКолонку("СтавкаФСП");


В этом случае вы получите массив результатов, и дальше можете использовать:
ВозвращенныйМассив[0] // для первого элемента, пример
ВозвращенныйМассив[2] // для третьего элемента, пример


Только не понятно, если у вас с одним измерением не сколько ресурсов, то как вы знаете какой использовать в расчетах (т.е. почему вы хотите получить первое значение или второе)?


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



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


Что-то в этом роде?
Гущин Артём
Вот так наверное:

    &НаКлиентСервере
    Функция ПрочитатьРесурсСтавкаФСП()
        
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    СтавкиНалогаФСП.СтавкаФСП
        |ИЗ
        |    РегистрСведений.СтавкиНалогаФСП КАК СтавкиНалогаФСП
        |ГДЕ
        |    СтавкиНалогаФСП.БазаНалогооблажения = &База";
        Запрос.УстановитьПараметр("База", База);      
        Результат = Запрос.Выполнить().Выгрузить();
        Возврат Результат.ВыгрузитьКолонку("СтавкаФСП");
        
    КонецФункции
Vofka
Цитата(Гущин Артём @ 21.03.13, 16:11) необходимо зарегистрироваться для просмотра ссылки
Финансирование сайта осуществляется путём пожертвований или из каких-либо других источников?

Финансирование сайта осуществляется с кармана администрации. Вот вы видите рекламу на форуме - она тут висит не потому, что я, например, или кто-то другой из администрации косит на этом бабло, а затем, чтобы оплачивать те услуги, которые нужны для функционирования сайта. + любой желающий, само собой, может кинуть "пару рэ", если есть желание, это не запрещается (вот, кстати, даже необходимо зарегистрироваться для просмотра ссылки когда-то открывали). А вообще, подобным вопросам, в технических ветках не место. Есть необходимо зарегистрироваться для просмотра ссылки про обсуждении сайта, так что на будущее, подобного рода вопросы можете задавать там.
pablo
Гущин Артём, Вы мой пост вчерашний не читали?
Гущин Артём
Цитата(pablo @ 22.03.13, 8:12) необходимо зарегистрироваться для просмотра ссылки
Гущин Артём, Вы мой пост вчерашний не читали?


читал. В регистре сведений есть изменения. Заносятся ставки налога в Измерение "СтавкиФСП" раз в год.
pablo
А Вам каждый раз нужно получать ставкуФСП за все годы?
logist
Цитата(Гущин Артём @ 22.03.13, 12:53) необходимо зарегистрироваться для просмотра ссылки
раз в год.

Вам стоит сделать регистр периодичным, и потом получать срезпоследних на дату документа.
Гущин Артём
Цитата(pablo @ 22.03.13, 12:56) необходимо зарегистрироваться для просмотра ссылки
А Вам каждый раз нужно получать ставкуФСП за все годы?



Получать только те ставки, которые введены последними.
pablo
Цитата
введены последними.

То есть, если позавчера ввели ставку за 2013 год, а вчера - за 2012, то сегодня функция должна вернуть ставку за 2012 год?

Гущин Артём, Что-то у меня все больше и больше растет желание отправить Вас прочитать соответствующую литературу. Того же Радченко, к примеру.
Гущин Артём
Цитата(pablo @ 22.03.13, 13:37) необходимо зарегистрироваться для просмотра ссылки
То есть, если позавчера ввели ставку за 2013 год, а вчера - за 2012, то сегодня функция должна вернуть ставку за 2012 год?

Гущин Артём, Что-то у меня все больше и больше растет желание отправить Вас прочитать соответствующую литературу. Того же Радченко, к примеру.



Радченко читал.

То есть, если позавчера ввели ставку за 2013 год, а вчера - за 2012, то сегодня функция должна вернуть ставку за 2012 год?
Нет, вернуть 2013 (последний) год.
pablo
&НаСервере
Функция ПрочитатьРесурсСтавкаФСП(База)
        
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    СтавкиНалогаФСП.СтавкаФСП
        |ИЗ
        |    РегистрСведений.СтавкиНалогаФСП.СрезПоследних(&Период,БазаНалогооблажения=&База) КАК СтавкиНалогаФСП ";
    Запрос.УстановитьПараметр("База",База);
    Запрос.УстановитьПараметр("Период",ТекущаяДата());
    Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();

    если ВыборкаДетальныеЗаписи.Следующий() тогда
     Возврат ВыборкаДетальныеЗаписи.СтавкаФСП;
   иначе
     возврат 0;
    КонецЕсли;      

КонецФункции
logist
   Запрос.УстановитьПараметр("Период",ТекущаяДата());

Нужна дата документа, а не текущая.

upd:
Ну и лучше &НаСервереБезКонтекста
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.