![]() |
|
пример из "1С: Предприятие 8.2. Практическое пособие разработчика" | ☑ | ||
---|---|---|---|---|
0
evilmox
29.08.11
✎
17:58
|
Объясните, пожалуйста, следующий момент в одном из примеров книги "1С: Предприятие 8.2. Практическое пособие разработчика" (Занятие 21. Редактирование движений в форме документа, Листинг 21.2, стр. 634):
Если Не Движения.ОстаткиМатериалов.Выбран() И Не Движения.ОстаткиМатериалов.Модифицированность() Тогда
В книге дается следующее пояснение: "... перед установкой даты мы проверяем, был ли прочитан набор записей в свойстве Движения объекта и изменялся ли он. Если оба этих условия ложны, значит набор записей в свойстве Движения объекта пуст, и это состояние не связано с его изменением. В этом случае, чтобы предотвратить ошибочное удаление записей с регистре (перезапись пустым набором значений), мы предварительно читаем движения из регистра в набор записей в свойстве Движения." Вопрос: если набор записей в свойстве Движения объекта пуст, и это состояние не связано с его изменением - это значит, что в документе не создавалось никаких движений или записывается документ, из которого ранее были удалены все движения и он был записан? Если так, то зачем читать движения (которых вроде бы и нет) и как может случиться это самое "ошибочное удаление записей с регистре (перезапись пустым набором значений)"? Также замечена на мой дилетантский взгляд странная вещь: предположим следующий сценарий - открывается существующий документ (такой, как описано в книге) и записывается (никаких изменений реквизитов не делается). Метод Движения.ОстаткиМатериалов.Модифицированность() в обработчике события формы документа |
|||
1
evilmox
29.08.11
✎
17:59
|
ПередЗаписьюНаСервере возвращает Ложь (как и должно быть), а в обработчике события документа ПередЗаписью возвращает Истина. Почему?
|
|||
2
Asmody
29.08.11
✎
18:05
|
(1) ответ на этот вопрос на стр. 831
|
|||
3
Asmody
29.08.11
✎
18:12
|
а условие (0) связано с тем, что может случится, например, программное изменение номера или даты документа (какой-нибудь обработкой), в этом случае свойство Движения у объекта может быть не заполнено. И если это действительно так, то происходит принудительное заполнение, т.е. чтение движений из регистра
|
|||
4
evilmox
29.08.11
✎
18:19
|
(3) - с этим разобрался, спасибо
(2) - ок, сразу после события формы ПередЗаписьюНаСервере наступает событие документа ПередЗаписью. Почему метод возвращает разные значения? |
|||
5
evilmox
31.08.11
✎
00:11
|
Может все-таки кто-нибудь внесет ясность?
|
|||
6
hhhh
31.08.11
✎
00:22
|
ПередЗаписьюНаСервере набор был пустой, потом вы дали команду
Движения.ОстаткиМатериалов.Прочитать(); теперь он заполнился данными. То есть изменился набор, модифицировался. Чего тут неясного? |
|||
7
evilmox
31.08.11
✎
20:24
|
(6) На всякий случай полный текст процедуры:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если перед самой первой операцией написать что-то в духе ЧтоТо = Движения.ОстаткиМатериалов.Модифицированность();
и на следующей строчке поставить точку останова, открыть уже имеющийся документ и, ничего не меняя, нажать "Записать", то значение переменной ЧтоТо будет равно Истина. И все это задолго до вызова Движения.ОстаткиМатериалов.Прочитать(); http://s2.ipicture.ru/uploads/20110831/VS7mHUUq.jpg |
|||
8
d_koz
31.08.11
✎
21:45
|
(0) замечательная книжка, но есть еще ценнее http://v8.1c.ru/metod/books/book.jsp?id=63 , жалко только одно, что господа книгоиздатели из 1с ее не доработали и не выпустили под 8.2 платформу, хотя за нее и 1,2к рублей не пожалел бы из личных средств.
Действительно настольная вещь! |
|||
9
Bober
01.09.11
✎
02:25
|
(8) эта книга мутировала в серию книг. и одна из них
|
|||
10
Bober
01.09.11
✎
02:25
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |