Имя: Пароль:
1C
1С v8
Запрет повторно введенного значения на текущий день?
0 VSpicy
 
naïve
20.09.19
13:35
Добрый день!
В документе "Заявка на ремонт" есть поля: "Автомобиль", "Вид обслуживания" - нужно чтоб пользователи не могли на текущий день выбирать повторно один и тот же "Вид обслуживания" с выбранным автомобилем???
Какое лучше событие использовать и в каком поле: "Автомобиль" и "Вид обслуживания"?
Если можно - пример кода.

Заранее огромное спасибо!
1 catena
 
20.09.19
13:38
Писать автомобиль/вид обслуживания в периодический регистр с периодичностью - День. Физически не смогут дважды в день записать.
2 unenu
 
20.09.19
13:39
Подписки на событие перед записью достаточно
3 VSpicy
 
naïve
20.09.19
13:46
(2) Можно чуть подробнее, код в пример...
4 Очевидно
 
20.09.19
13:48
(1) - записать смогут, думаю провести не смогут...
(0) правильный вариант думаю будет
- организация проверки этих реквизитов перед записью документа в модуле объекта
или - организация этой проверки в событии ОбработкаПроведения в модуле объекта.
зависит от того:
- Можно ли записывать документы с повторными реквизитами за день ? (Например 100 записанных и только 1 за день может быть проведен) - это тогда в обработку проведения
- даже записывать нельзя - тогда "ПередЗаписью".
https://its.1c.ru/db/v8std#content:463:hdoc
5 D_E_S_131
 
20.09.19
14:07
(4) в (1) Не предлагается сделать документом движения в новом регистре. Предлагается просто записать.
6 Очевидно
 
20.09.19
14:24
(5) "Предлагается просто записать" :
1. Зачем эту информацию где-то отдельно записывать, если нужна проверка на корректность заполнения документа ?
2. Видимо придётся записывать "При записи" в новый РС, и отдельно удалять запись при удалении / пометке удалении документа.
3. Создали сегодня документ, записали/провели. Через час изменили дату "на вчера", вводят новый ... запись осталась с первичного документа. кто удалять будет ? и отслеживать перемещения между датами (Он же не будет регистратором, т.е. ссылки на документ не будет ?)

... короче городить отдельный РС, только чтоб юзать его проверку уникальности - имхо плохая идея. Для этого есть такие события "Обработка проверки заполнения" и "Перед записью" / "При записи" - для осуществления всех проверок, имеющих отношение к этому объекту (Документу).
7 VSpicy
 
naïve
20.09.19
15:21
(6) При создании документа у пользователя нет прав на изменение даты документа...
8 VSpicy
 
naïve
20.09.19
15:23
(4) Я по сути понял.
Можно пример в виде кода - скажем в событие "Перед записью"?
Заранее спасибо!
9 Очевидно
 
20.09.19
15:36
(8)
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    
    ПараметрыПроверки = Новый Структура();
    ПараметрыПроверки.Вставить("Автомобиль",Автомобиль);
    ПараметрыПроверки.Вставить("ВидОбслуживания",ВидОбслуживания);
    ПараметрыПроверки.Вставить("Дата",?(ЗначениеЗаполнено(Дата),Дата,НачалоДня(ТекущаяДата()));
    
    Если ПроверкаУникальностиДокументовЗаДату(ПараметрыПроверки) Тогда
        Отказ = Истина;
        Сообщить("За эту дату уже есть документы на эту машину.");
        Возврат;
    КонецЕсли;    
    ...
    
КонецПроцедуры

Функция ПроверкаУникальностиДокументовЗаДату(Знач ПараметрыПроверки)
    
    Запрос = Новый Запрос();
    Запрос.Текст = "";
    Запрос.УстановитьПараметр("Автомобиль"        ,ПараметрыПроверки.Автомобиль);
    Запрос.УстановитьПараметр("ВидОбслуживания"    ,ПараметрыПроверки.ВидОбслуживания);
    Запрос.УстановитьПараметр("Дата"            ,ПараметрыПроверки.Дата);
    
    Возврат Запрос.Выполнить().Пустой();
    
КонецФункции
10 VSpicy
 
naïve
20.09.19
15:37
(9) Спасибо огромное!!!