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

Добавить новую запись в регистр сведений

Автор Tanya_Lo, 19 авг 2013, 14:40

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

Tanya_Lo

Есть Регистр Сведений Цены (сделала его независимым).
измерение - товар
ресурс - цена.

Задача такая :
   В расходной накладной при выборе товара в графу "цена" должно заноситься значение из реквизита "ЦенаПродажи" справочника на дату документа. (это сделала, заполняю автоматически при выборе товара)
   Если в накладной значение цены продажи изменяется, то новое значение должно быть записано в периодический реквизит "ЦенаПродажи". - как это реализовать?
Подскажите код ...
Я так понимаю при записи - надо проверить изменил ли пользователь Цену продажи по сравнению с актуальной ценой в регистре сведений по товару и если да - по добавить новую строку в регистр??

Вот функция которой получаю цену

функция ПолучитьЦену(АктуальнаяДата, ЭлементНоменклатуры) экспорт
     Отбор=Новый Структура("Товар",ЭлементНоменклатуры);
    ЗначениеРесурса=РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата,Отбор);
Возврат ЗначениеРесурса.Цена;
КонецФункции

Процедура ПередЗаписью(Отказ, РежимПроведения)
  Для Каждого ТекСтрокаТовары Из Товары Цикл
      ценаПоРегистру= ПолучитьЦену(Дата,ТекСтрока.Товар);
               Если Цена<>ЦенаПоРегистру Тогда
                   ???? как дописать новое значение в регистр??
                КонецЕсли;
КонецЦикла;
 
конецпроцедуры

Tanya_Lo


mixqn

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

вообще записи в регистр добавляются менеджером записи: МенеджерЗаписи = РегистрыСведений.<ИмяРегистраСведений>.СоздатьМенеджерЗаписи();

Tanya_Lo

Цитата: mixqn от 19 авг 2013, 21:31
буквально недавно делал подобное - в договорах контрагентов историю изменения кредитного лимита надо хранить было.
завтра могу куски кода скинуть. сейчас времени нет.

вообще записи в регистр добавляются менеджером записи: МенеджерЗаписи = РегистрыСведений.<ИмяРегистраСведений>.СоздатьМенеджерЗаписи();
Буду ждать "куски кода" )

GRADUS

Регистры надо самому уметь писать. Как бы. Это не сложные переодические расчеты же.

mixqn

обещанный код:
Процедура ЗаписатьИсториюЛимитовДебиторки(Период, ЛимитДебиторки)

МенеджерЗаписи = РегистрыСведений.ИсторияИзмененийДопустимойСуммыЗадолженности.СоздатьМенеджерЗаписи();
МенеджерЗаписи.ДоговорКонтрагента = Ссылка;
МенеджерЗаписи.Пользователь = ПараметрыСеанса.ТекущийПользователь;
МенеджерЗаписи.ДопустимаяСуммаЗадолженности = ЛимитДебиторки;
МенеджерЗаписи.Период = Период;

МенеджерЗаписи.Записать();

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

Процедура ПриЗаписи(Отказ)

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

Запрос.УстановитьПараметр("ДоговорКонтрагента", Ссылка);

ЕстьОшибки = Ложь;

Попытка
// выполнение запроса в попытке для исключения ошибки прав доступа
Результат = Запрос.Выполнить();
Исключение
ЕстьОшибки = Истина;
КонецПопытки;

Если НЕ ЕстьОшибки Тогда
ТекДата = ТекущаяДата();

Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
// есть данные в истории
Если Выборка.ДопустимаяСуммаЗадолженности <> ДопустимаяСуммаЗадолженности Тогда
// значение изменилось, пишем в регистр
ЗаписатьИсториюЛимитовДебиторки(ТекДата, ДопустимаяСуммаЗадолженности);
КонецЕсли;
Иначе
// данных в истории еще нет - нужно создать первую запись в регистре, если значение ДопустимаяСуммаЗадолженности заполнено
Если ЗначениеЗаполнено(ДопустимаяСуммаЗадолженности) Тогда
ЗаписатьИсториюЛимитовДебиторки(ТекДата, ДопустимаяСуммаЗадолженности);
КонецЕсли;
КонецЕсли;

КонецЕсли;
КонецЕсли;

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

Добавлено: 20 авг 2013, 08:15


у вас будет все 1 в 1, только подставьте свои объекты, регистры, реквизиты и т.п. (т.е. код будет в модуле справочника Номенклатура, регистр будет Цены и т.д.)

Tanya_Lo


Теги:

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

Рейтинг@Mail.ru

Поиск