![]() |
|
Вопрос по обработчикам событий при записи объектов | ☑ | ||
---|---|---|---|---|
0
bfss-732
17.06.22
✎
15:39
|
Всем привет!
https://its.1c.ru/db/v8std/browse/13/-1/1/5 <--тут изучал, и в других источников. Но остался вопрос. Есть 1С ЕРП 2.5, есть документ акт выполненных работ. Есть табличная часть, в ней есть реквизит "НазначениеЗаказ", который надо контролировать расширением. Есть старые, "неправильные", документы, в которых придется менять "НазначениеЗаказ" при проведении, но тут засада. ВАЖНО: Нужно дать записать документ, если ВыборкаДетальныеЗаписи.ЗаказКлиента <> ВыборкаДетальныеЗаписи.НазначениеЗаказ = ИСТИНА, но нельзя провести документ при неравенстве. Процедура Расш2_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | АктВыполненныхРабот.Ссылка КАК Ссылка, | АктВыполненныхРабот.АктПоЗаказам КАК АктПоЗаказам, | АктВыполненныхРабот.ЗаказКлиента КАК ЗаказКлиента, | АктВыполненныхРаботУслуги.Назначение.Заказ КАК НазначениеЗаказ |ИЗ | Документ.АктВыполненныхРабот.Услуги КАК АктВыполненныхРаботУслуги | ЛЕВОЕ СОЕДИНЕНИЕ Документ.АктВыполненныхРабот КАК АктВыполненныхРабот | ПО АктВыполненныхРаботУслуги.Ссылка = АктВыполненныхРабот.Ссылка |ГДЕ | АктВыполненныхРабот.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", ЭтотОбъект.Ссылка); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Если ВыборкаДетальныеЗаписи.ЗаказКлиента <> ВыборкаДетальныеЗаписи.НазначениеЗаказ Тогда Отказ = Истина; Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "ВНИМАНИЕ!!! В поле ""Акт по заказу"" в обязательном порядке должен быть указан один документ, что и в поле ""Назначение"""; Сообщение.Поле = "ЭтотОбъект.ЗаказКлиента"; Сообщение.Сообщить(); КонецЕсли; КонецЦикла; КонецПроцедуры Если документ записать(но не проводить) то он запишется, а потом можно провести. Но если сразу нажать проведение, он выдаст ошибку(См. выше) по моему условию. Получается, заходит пользователь с старый, "неправильный" документ, что-то меняет, а ему мое условие не дает провести. Они меняют реквизит "НазначениеЗаказ" на правильный, нажимают провести, а ошибка таже (СМ.выше). Если сначала записывают, а потом проводят, все нормально. ВОПРОС: Как сделать чтоб документ "неправильный" мог только записаться, а если меняется реквизит "НазначениеЗаказ" на правильный, то через провести сразу проводился? |
|||
1
Лирик
17.06.22
✎
15:52
|
Событие ПЕРЕД записью, а данные получаешь из таблицы, то есть записанные в прошлый раз. Потому и не можешь. Контролируй ТЧ ОБЪЕКТА.
|
|||
2
bfss-732
17.06.22
✎
15:56
|
(1) так это я понимаю)) ОбработкаПроверкиЗаполнения не прокатит, надо записать "неправильный докумет"
|
|||
3
Kassern
17.06.22
✎
16:00
|
(0) это что за конструкции такие?) ВыборкаДетальныеЗаписи.ЗаказКлиента <> ВыборкаДетальныеЗаписи.НазначениеЗаказ = ИСТИНА
|
|||
4
lodger
17.06.22
✎
16:02
|
(2) анализируй варианты параметров РежимЗаписи, РежимПроведения
|
|||
5
Мультук
гуру
17.06.22
✎
16:03
|
(4)
Зачем анализировать РежимПроведения ? Что это даст? |
|||
6
bfss-732
17.06.22
✎
16:05
|
Спасибо! Вопрос ЗАКРЫТ!
&Перед("ОбработкаПроведения") Процедура Расш2_ОбработкаПроведения(Отказ, РежимПроведения) Если РежимПроведения = РежимПроведенияДокумента.Неоперативный ИЛИ РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | АктВыполненныхРабот.Ссылка КАК Ссылка, | АктВыполненныхРабот.АктПоЗаказам КАК АктПоЗаказам, | АктВыполненныхРабот.ЗаказКлиента КАК ЗаказКлиента, | АктВыполненныхРаботУслуги.Назначение.Заказ КАК НазначениеЗаказ |ИЗ | Документ.АктВыполненныхРабот.Услуги КАК АктВыполненныхРаботУслуги | ЛЕВОЕ СОЕДИНЕНИЕ Документ.АктВыполненныхРабот КАК АктВыполненныхРабот | ПО АктВыполненныхРаботУслуги.Ссылка = АктВыполненныхРабот.Ссылка |ГДЕ | АктВыполненныхРабот.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", ЭтотОбъект.Ссылка); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Если ВыборкаДетальныеЗаписи.ЗаказКлиента <> ВыборкаДетальныеЗаписи.НазначениеЗаказ Тогда Отказ = Истина; Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "ВНИМАНИЕ!!! В поле ""Акт по заказу"" в обязательном порядке должен быть указан один документ, что и в поле ""Назначение"""; Сообщение.Поле = "ЭтотОбъект.ЗаказКлиента"; Сообщение.Сообщить(); КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры |
|||
7
bfss-732
17.06.22
✎
16:06
|
Пока не пожалуешься, прозрение не придет)))
|
|||
8
Мультук
гуру
17.06.22
✎
16:08
|
(7)
Это очень важное условие. А в нем может быть "иначе" ? Если РежимПроведения = РежимПроведенияДокумента.Неоперативный ИЛИ РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда |
|||
9
Kigo_Kigo
17.06.22
✎
16:08
|
(7) Я называю это - "Эффект свободные уши" Бгггг, часто так бывает когда бух звонит, что то не получается, выговорится, а потом хоба, да блин, вот этож надо сделать, и трубку кладет :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |