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

Запрет изменения времени документа

Автор minakov.dmitry, 16 фев 2012, 20:29

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

minakov.dmitry

Как сделать запрет изменения времени документа, сдвиг его в начало/конец дня? Документ непроводимый.

sergejK74

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

Кнопочка Спасибо - слева!

AntonB

ой, как сложно то...
Вы объясните хоть, почему документ по ссылке получаете вот так - запросом?
и почему нельзя просто При Открытии сохранить дату в переменной,
а Перед Записью сравнить старую дату и новую?
Предлагаю полный ИТ сервис небольшой организации в Москве (приходящий сисадмин+1С7.7,1С8.x)

sergejK74

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

Вообще это первое что пришло в голову по аналогии со сравнением с изменившийся табличной частью.
В твоем варианте наверное нужно будет учитывать что документ можно создать копированием или вводом по основанию. Там наверное старой даты не будет.
Кнопочка Спасибо - слева!

AntonB

да я то об этих тонкостях и сам догадываюсь... :)
но думаю, что ТС вообще может не понять даже идею,
как это работает, а не то что эти тонкости оценить...

хотя почему запросом - даже мне не понятно...
Предлагаю полный ИТ сервис небольшой организации в Москве (приходящий сисадмин+1С7.7,1С8.x)

sergejK74

Запросом мы получаем старое значение времени документа по ссылке, такое которое записано в базе. Аналог глобальной переменной. Есть время по ссылке - замечательно. сравниваем его со значением из текущего объекта. Время разное - получаем отказ. Нет ссылки (документ новый) - выборка пустая - условие не проверяем.
Кнопочка Спасибо - слева!

Dethmontt

Только запрос дергает БД, а это не есть ГУД. Нужно использовать максимально то что у тебя храниться в памяти уже
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

sergejK74

Из Продвинутого курса Гилева точно запомнил, что лучше лишний раз дернуть БД, чем заставлять переезжать упавший рабочий процесс между кластерами с кучей пользовательского добра (разных глобальных переменных и пр.). Предлагаю компромисс -  использование дополнительных свойств документов. Хотя код расползется по модулю объекта. 
Кнопочка Спасибо - слева!

Dethmontt

Все равно не пойму "Ссылка" и есть значение из БД зачем ее запросом еще раз получать?
МожноМенять = РольДоступна("ТотКомуМожноМенять");
Если Не МожноМенять Тогда
    Если Не ЭтоНовый() Тогда
        Если Ссылка.Дата <> Дата Тогда
            Отказ = Истина;
        КонецЕсли;
   КонецЕсли;
КонецЕсли;

И причём тут вообще Глобальные переменные?
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

sergejK74

Так лучше. Ты прав. Если будет необходимость сделаю так. Глобальные переменные - проклятое наследие семерки, на которой приходится писать (запросом получал потому что нравятся ваши восьмерочные запросы после наших убогих семерочных. У меня после продвинутого курса сложилось впечатление, что в восьмерке все делают запросами. Оказывается нужно быть проще).
Кнопочка Спасибо - слева!

Теги:

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

Рейтинг@Mail.ru

Поиск