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

После закрытия форме происходит новая запись в РС.

Вопрос:
Как программно сделать сформулировать код так,чтобы была проверка,если Ставка равна Последней Ставке в РС,то запись не проходит?
Сделал вот такой вот запрос,работает...Но вот если РС пустой то ни чего не происходит,что не так?

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

     Результат=Запрос.Выполнить().Выбрать();
    
     Пока Результат.Следующий() Цикл
        
    Если Результат.Ставка=Ставка Тогда
        Предупреждение("Ставка осталось прежней");
        ЭлементыФормы.ЗаписатьВРеестр.Видимость=Ложь;    
    КонецЕсли;
    Если НЕ Результат.Ставка=Ставка Тогда
        Набор=РегистрыСведений.Константы.СоздатьМенеджерЗаписи();
        Запись=Набор;
          Запись.Период=ПоследнееИзменение;
        Запись.Дата=ПоследнееИзменение;
        Запись.Пользователь=ПараметрыСеанса.ТекущийПользователь;
        Запись.Ставка=Ставка;
        Набор.Записать();
        ЭлементыФормы.ЗаписатьВРеестр.Видимость=Ложь;        
    КонецЕсли;
Домовик
Цитата(Kami4 @ 30.03.13, 6:27) необходимо зарегистрироваться для просмотра ссылки
.Но вот если РС пустой то ни чего не происходит,что не так?


если РС пустой, результат запроса тоже пустой. в цикл программа не заходит(и зачем он -нужна одна запись). да и как тут сравнивать результат с тек ставкой?
если результат запроса пустой, то просто выполняете код по формированию записи в РС.
Kami4
Цитата(Домовик @ 30.03.13, 14:12) необходимо зарегистрироваться для просмотра ссылки
если РС пустой, результат запроса тоже пустой. в цикл программа не заходит(и зачем он -нужна одна запись). да и как тут сравнивать результат с тек ставкой?
если результат запроса пустой, то просто выполняете код по формированию записи в РС.

По видимому лучше будет при открытии формы получать СрезПоследних,выводит в форму,а при закрытии если не совпадает то делается новая запись.Это вариант один. Может есть другой вариант?
logist
Не мог пройти мимо загадочного словосочетания "Периодическая константа" smile.gif

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