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

Периодическая константа в 1с 8.1

Автор Zeratul, 29 ноя 2010, 12:52

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

Zeratul

Добрый день!Существует константа СезонГорючего,тип данных перечисления!
В данной константе человек выбирает летний либо зимний, в зависимости от выбранного значения, при расчете нормы расходы бензина в путлисте, меняется норма расхода бензина!
Так вот вопрос, мне нужно сделать следующее:
установить дату начала зимнего периода, то есть если человек делает пут листы с 1 декабря, то автоматом берется норма зимняя, если до этого то берется норма летняя!
Как мне добавить данную константу в регистрсведений, чтобы все изменения регистрировались?
Или может в модуле документа переписать код процедуры рассчитать?
Процедура ПроцедураРассчитать(Элемент)
   Если Константы.СезонГорючего.Получить()=Перечисления.СезонТС.Зима тогда 
      НормаРасхода = ТранспортноеСредство.НормаГорючегоЗимняя;
   иначе
      НормаРасхода =  ТранспортноеСредство.НормаГорючего;
   КонецЕсли;   
   РасходГорючегоНорма = НормаРасхода * ПробегОбщий / 100;
   РасходГорючегоФакт = НормаРасхода * ПробегОбщий / 100;
   СпидометрОкончание = СпидометрНачало+ПробегОбщий;
   ГорючееОкончание=ГорючееНачало+Заправлено-РасходГорючегоФакт;
   
КонецПроцедуры

Вместо константы брать данные из РС?
Подскажите пожалуйста как сделать!

progmikon

А зачем вам здесь константа?

Сделайте периодический регистр сведений. поставьте в измерение ваше перечисление.
Добавляйте туда записи: 1 декабря - то-то и т.п.
А где нужно получайте срез последних на дату.

Zeratul

Процедура ПроцедураРассчитать(Элемент)
   Если РегистрыСведений.РегистрСведенийСезонГорючего.СрезПоследних(Дата)=Перечисления.СезонТС.Зима тогда 
      НормаРасхода = ТранспортноеСредство.НормаГорючегоЗимняя;
   иначе
      НормаРасхода =  ТранспортноеСредство.НормаГорючего;
   КонецЕсли;   
   РасходГорючегоНорма = НормаРасхода * ПробегОбщий / 100;
   РасходГорючегоФакт = НормаРасхода * ПробегОбщий / 100;
   СпидометрОкончание = СпидометрНачало+ПробегОбщий;
   ГорючееОкончание=ГорючееНачало+Заправлено-РасходГорючегоФакт;
   
КонецПроцедуры


В регистре в измерение добавлено моё перечисление в ресурс дата!
Данные из регистра все равное не берутся, что я не так делаю?

progmikon


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

Zeratul


progmikon

Попробуйте так:

ТабСП = РегистрыСведений.РегистрСведенийСезонГорючего.СрезПоследних(Дата);
Если ТабСП.Количество() > 0 Тогда
Стр = ТабСП.Получить(0);
НормаРасхода = Стр.НормаРасхода;
КонецЕсли;   

Slin

Перечисление должно быть не измерением, а ресурсом. Дата присутствует и так, в силу периодичности регистра.
Функция СрезПоследних() возвращает таблицу.
Пишите примерно в таком ключе:
Таб = Регистры сведений.РегистрСведенийСезонГорючего.СрезПоследних(Дата);
Если Таб.Количество > 0 Тогда    // если значение существует
// ваш код
КонецЕсли;

skype: slin-dev

Slin

Чего-то код коряво отображается :(
skype: slin-dev

Zeratul

Всем спасибо, все получилось!
Сделал так:

ТабСП = РегистрыСведений.РегистрСведенийСезонГорючего.СрезПоследних(Дата);
Если ТабСП.Количество() > 0 Тогда
Стр = ТабСП.Получить(0);
НормаРасхода = Стр;

КонецЕсли;
Если НормаРасхода.СезонГорючего = Перечисления.СезонТС.Зима Тогда
    НормаРасходаГор = ТранспортноеСредство.НормаГорючегоЗимняя;
Иначе
    НормаРасходаГор =  ТранспортноеСредство.НормаГорючего;
  КонецЕсли;
  РасходГорючегоНорма = НормаРасходаГор * ПробегОбщий / 100;
   РасходГорючегоФакт = НормаРасходаГор * ПробегОбщий / 100;
   СпидометрОкончание = СпидометрНачало+ПробегОбщий;
   ГорючееОкончание=ГорючееНачало+Заправлено-РасходГорючегоФакт;

Slin

skype: slin-dev

Теги:

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

Рейтинг@Mail.ru

Поиск