1с описание свойства записывать модифицированные
При открытии формы уже в ПриСозданииНаСервере объект модифицирован. Где до этого он может модифицироваться?
+ Жизненный цикл формы объекта Давайте рассмотрим, что происходит, когда мы открываем форму существующего элемента справочника. На клиенте вызывается метод «ОткрытьФорму» или мы просто открываем форму из какого-либо списка справочника. Начинается серверный вызов В памяти сервера создается новый СправочникОбъект, выполняется код модуля объекта (тот, что написан в самом низу модуля) Данные объекта считываются из базы данных, присваиваются значения реквизитов, наполняются табличные части объекта СправочникОбъект. В памяти сервера создается новая управляемая форма элемента Вызывается событие формы ПриЧтенииНаСервере, куда передается свежесозданный СправочникОбъект в параметре ТекущийОбъект Основной реквизит формы «Объект», тот, что в списке реквизитов выделен жирным шрифтом наполняется данными на основании данных СправочникОбъект. Здесь происходит обычное поэлементное присваивание свойствам объекта ДанныеФормы значений, записанных в одноименных свойствах объекта СправочникОбъект. По сути, происходит «ЗаполнитьЗначенияСвойств(ДанныеФормы, СправочникОбъект) СправочникОбъект уничтожается. Все его данные стираются из памяти сервера. Вызывается событие формы «ПриСозданииНаСервере», в котором мы получаем уже заполненные ДанныеФормы Данные формы сериализуются и отправляются на клиента, где форма отображается пользователю не факт
а если поменяли на тоже самое? я давным давно любил автоименования элементов в ПриОткрытии загонять типа ФИО = Ф+" "+И" "+О
А ничего страшного, что Модифицированность есть только у , которых в УФ не наблюдается, если их только самому не создавать?
Можно конечно своую ПроверитьМодифицированностьОбъекта(ИсточникОбъект) использовать, но хотелось бы понять - что там меняется
У Объекта не бывает модифицированности, в отличие от Формы Объекта У него есть только новизна, т.е. записан он в базу или нет.
а что такое модифицированность объекта в базе данных? про время модификации = времени записи ничего не говорю
Так как я не знаю, что такое "объект в базе данных", то ничего ответить не могу. Объект - он в памяти живет, а не в БД.
да согласен, неправильно выразился в если считать что объект это то что считано в память из бд то да есть модифицированность СправочникОбъект. <Имя справочника>(CatalogObject.<Имя справочника>) Модифицированность (Modified) Синтаксис: Модифицированность Возвращаемое значение: Тип: Булево. Истина - объект изменен; Ложь - в противном случае. Описание: Определяет, был ли изменен объект после считывания из базы данных. Доступность: Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер). Примечание: Метод не позволяет определить, был ли изменен объект другими пользователями.Имя>
Алгоритм проведения документа с учетом подписок на события
Если посмотреть свойства документа через палитру свойств, то можно увидеть два важных свойства: "Удаление движений" и "Запись движений при проведении", причем второе НЕ вынесено на закладку "Движения" окна редактирования документа.
1. Удаление движений.
Если свойство "Удаление движений" уставновлено в "Удалять автоматически", то ПЕРЕД началом проведения программа очищает все движения по регистрам. Фактически это означает запись пустого набора записей регистра с видом записи - замещение. А значит, программа выполняет код из процедур "ПередЗаписью" и "ПриЗаписи" модуля набора записей регистров.
2. Процедура "ОбработкаПроведения" модуля документа.
Обратим внимание: в начале обработки проведения у всех движений флаг модифицированности Ложь (значение возвращает метод Движения.Регистр.Модифицированность() ).
При работе с набором записей регистра (например, Движения.Регистр.Очистить() , Движения.Регистр.Добавить() и т.д.) флаг модифицированности становится Истина.
После записи движения в базу Движения.Регистр.Записать() модифицированность снова ложь.
Если в модуле процедуры подписки происходит запись набора регистра в явном виде ( .Записать() ), то программа выполняет код из процедур "ПередЗаписью" и "ПриЗаписи" модуля набора записей регистров и процедуры из подписки на событие "При записи" регистра.
3. Подписки на событие "При проведении" документа
Очередность подписок на одно и то же событие явным образом не определяется 1С, но на практике подписки вызываются в порядке следования в ветке "Подписки на события" окна редактирования конфигурации.
Если регистры записываются с помощь метода Записать () , то выполняются все связанные процедуры.
4. Запись движений.
Вспомним про свойство "Запись движений при проведении" из настроек документа.
Если оно равно "Записывать модифицированные", то в базу будут записаны все движения документа, у которых флаг "Модифицированность" Истина.
Если оно равно "Записывать выбранные", то в базу будут записаны движения регистров, для которых мы явным образом указали необходимость записи.
Запись движений в базу происходит с режимом замещения Истина . Это означает, что будут записаны записи из текущего набора записей регистра коллекции Движения и очищены предыдущие записи.
И в конце р ассмотрим несколько примеров:
Пусть свойство документа "Запись движений при проведении" равно "Записывать модифицированные", а "Удаление движений" - "Не удалять автоматически".
При такой процедуре проведения документ при каждом перепроведении будет добавлять запись в регистр, записи будут множиться. Т.к. строка //*** добавляет записи в регистр, признак Модифицированности снимается.
Правильнее будет написать строку //*** как
или вообще ее опустить, и тогда программа сама запишет модифицированные движения.
В 1С 8 движения документа могут формироваться не только в обработке проведения, но и извне, например, из некоторой служебной обработки (так реализовано допроведение документов, восстановление авансов и т.д.).
В этом случае при перепроведении документа, если происходит изменение движений регистра бухгалтерии (флаг Модифицированности Истина), записи будут замещены записями, сформированными документом.
Перед началом проведения документа все реквизиты документа записываются в базу данных (т.е. программист может их получить с помощью запроса). Во внутренней памяти создается Объект документа, и у этого объекта есть коллекция движений, которая будет записана после окончания процедуры проведения (см. этап 4).
Если в процессе проведения документа движения по регистрам формируются не с помощью коллекции Движения, принадлежащей внутреннему объекту , а другими способами (вручную в форме набора записей или как в примере 2 и т.д.), то на этапе 4 эти записи будут замещены. Чтобы избежать замещения в типовых базах, для документа "ОперацияБух" свойство документа "Проведение" устанавливается в "Запретить".
Если документ должен проводиться по другим регистрам и нельзя запретить проведение, тогда нужно внимательно настраивать свойства документа:
- выбрать вариант записи движений "Записывать выбранные" и убедиться, что Движения.Регистр.Записывать = Ложь
- выбрать вариант записи движений "Записывать модифицированные" и контролировать признак Модифицированности для набора записей этого регистра.
Нужно понимать, что объект, полученный по ссылке (назовем его "ОбъектДок"), и внутренний объект ("ЭтотОбъект"), созданный в памяти в момент проведения, это два разных экземляра объектов.
Соответственно и коллекции движений у них будут разные. У "ОбъектаДок" коллекция движений будет включать только записанный в базу набор записей регистра, а у "ЭтогоОбъекта" - как записанные, так и добавленные и незаписанные записи. По окончании проведения (этап 4) в базу будут записаны наборы записей "ЭтогоОбъекта", причем с признаком Замещать = Истина.
Если записи в набор записей добавляются по способу, описанному выше, то они могут быть замещены на этапе 4.
В платформе 8.3.18 произошли значительные изменения, связанные с механизмом расширений. Например, теперь при помощи расширений можно изменять типы реквизитов из основной конфигурации!
Этот функционал давно ожидался всеми разработчиками, использующими расширения при внедрениях.
Этот функционал давно ожидался всеми разработчиками, использующими расширения при внедрениях, так как он сильно увеличивает их возможности при доработках.
Раньше можно было только менять логику дорабатываемой конфигурации, корректировать программный код в модулях, добавлять новые объекты (справочники, документы) в расширении. А вот изменять существующие реквизиты – нельзя. Теперь такая возможность появилась.
Какие преимущества это дает?
- К примеру, когда не хватает типовой длины строкового поля, ее можно можно увеличить с помощью расширения – то есть, не снимая конфигурацию с поддержки.
- Можно увеличить длину числового реквизита в документе, когда разработчики типовой задали недостаточную длину для хранения данных конкретного предприятия.
- Также можно в реквизит составного типа добавить еще один тип данных при помощи расширения. Например, разработчик типовой предполагает, что в реквизите можно указывать только документы «Заказ клиента» и «Реализация». А на проекте для реализации требований заказчика нужно добавить в этот реквизит еще «Заказ поставщику». Это можно теперь сделать при помощи расширения, что очень удобно.
Работа с расширением типов реквизитов детально рассмотрена в этой серии видеоуроков — с практическими примерами и описаниями ограничений.
Кроме того, разобраны и другие полезные возможности расширений:
- Объединение расширений с cfe-файлом из командной строки
- Работа платформы при отключенных расширениях — когда при старте сеанса были подключены не все расширения, изменяющие структуру хранения данных
- Новая логика проверки применимости расширения, использующего аннотацию ИзменениеИКонтроль
- И другие полезные «фишки»…
Общая длительность видео – полтора часа. Приятного просмотра! :)
Видео 1 – Вступление
Ключевые моменты видео:
00:00 – Узнаем, какие темы разбираются в занятии.
Видео 2 – Объединение расширений
Ключевые моменты видео:
00:00 – При помощи какой команды пакетного режима запуска конфигуратора можно выполнять сравнение расширения с файлом на диске?
00:45 – Где на сайте ИТС найти описание параметров командной строки
04:05 – Как вручную в конфигураторе выполнить объединение расширения с файлом на диске
05:10 – Какие параметры нужно указывать в командной строке
06:40 – Почему при объединении расширения из командной строки возникает ошибка “Каталог не обнаружен”
07:50 – Как работает сохранение настроек объединения в файл
12:50 – В каких случаях на практике можно применять объединение расширения с файлом на диске
Видео 3 – Расширение типов реквизитов
Ключевые моменты видео:
00:00 – Как убедиться, что в платформе 8.3.17 и ранее нельзя изменить тип реквизита при помощи расширения
01:20 – Как установить признак контролируемого или проверяемого свойства в расширении
Видео 4 – Расширение строковых реквизитов
Ключевые моменты видео:
00:00 – Как в платформе 8.3.18 увеличить длину строкового реквизита при помощи расширения
01:20 – Какие изменения произошли в панели свойств объекта расширения
03:20 – Можно ли уменьшить длину строкового реквизита при помощи расширения
04:20 – Происходит ли потеря данных при уменьшении длины строкового реквизита с помощью расширения
Видео 5 – Расширение числовых реквизитов
Ключевые моменты видео:
00:00 – Как в платформе 8.3.18 изменить длину и точность числового реквизита при помощи расширения
01:50 – Можно ли уменьшить длину и точность числового реквизита при помощи расширения
Видео 6 – Изменение длины кода
Ключевые моменты видео:
00:00 – Можно ли изменить длину кода и наименования справочника при помощи расширения
01:20 – Как в расширении установить признак контролируемого или проверяемого свойства для длины кода и наименования справочника
02:20 – Можно ли изменить длину номера документа при помощи расширения
Видео 7 – Формирование результирующего типа
Ключевые моменты видео:
00:00 – Почему нельзя уменьшить длину строкового реквизита при помощи расширения
00:50 – Каким образом при расширении типа реквизитов получается составной тип данных
03:20 – Как при помощи расширения добавить дополнительные типы в тип данных реквизита из основной конфигурации
04:20 – Как платформа обеспечивает сохранность данных при расширении типов реквизитов
Видео 8 – Примеры расширения типа
Ключевые моменты видео:
00:00 – Какой тип данных в результате будет иметь реквизит, если его тип изменяет одновременно несколько расширений
02:15 – Как ведет себя платформа при отключении расширения, изменяющего тип данных реквизита основной конфигурации
04:30 – Как при помощи консоли запросов проверить результирующую длину строки реквизита
06:00 – Как воспроизвести пример потери данных при изменении типа данных в расширении
Видео 9 – Свойство Тип
Ключевые моменты видео:
00:00 – Как сделать в расширении свойство Тип одновременно и контролируемым, и модифицируемым
01:30 – Что означает признак контролируемости свойства при расширении типа данных реквизита
02:50 – Каким образом формируется всплывающая подсказка для свойства Тип
Видео 10 – Ограничения составного типа
Ключевые моменты видео:
00:00 – Какие типы данных нельзя включать в составной тип
02:00 – Почему при помощи расширения нельзя изменить тип строкового реквизита на ХранилищеЗначения
Видео 11 – Ограничения расширений
Ключевые моменты видео:
00:00 – Можно ли расширить тип данных для общего реквизита
00:50 – Можно ли при помощи расширения изменить тип реквизита, ссылающегося на внешний источник данных
02:50 – Можно ли расширить тип данных определяемого типа
04:30 – Какие ограничения существуют при работе с планом видов характеристик
Видео 12 – Типовые конфигурации
Ключевые моменты видео:
00:00 – Можно ли в типовой конфигурации УТ 11 воспользоваться расширением типов данных
01:20 – Какой режим совместимости необходим для расширения типов данных
02:20 – Как использование определяемых типов усложняет использование расширения типов
Видео 13 – Отключенные расширения
Ключевые моменты видео:
00:00 – Как ведет себя система, когда при старте сеанса подключены не все расширения, изменяющие структуру хранения данных
01:00 – Как работают предыдущие версии платформы в таком случае
03:40 – Какие изменения произошли в платформе 8.3.18
04:10 – Какие особенности существуют при работе со справочниками, документами, планами обмена
10:40 – Какие особенности существуют при работе с табличными частями
15:50 – Какие особенности существуют при работе с регистрами
Видео 14 – Изменение и контроль
Ключевые моменты видео:
Вопрос 1.28 – Определение состава свойств характеристики
В рамках задания необходимо выяснить, каким способом задается состав свойств характеристики:
- Характеристике нельзя задать дополнительные свойства
- Задается в шаблоне характеристики, определенном в виде номенклатуры, или в самой номенклатуре
- Посредством универсального механизма дополнительных реквизитов
Возможность учета номенклатуры по характеристикам определяется в настройках системы функциональной опцией Характеристики номенклатуры (Администрирование – Номенклатура – Характеристики номенклатуры). Для учета номенклатуры по характеристикам флаг должен быть установлен.
Возможность задания для объектов системы дополнительных свойств включается функциональной опцией Дополнительные реквизиты и сведения (Администрирование – Общие настройки – Дополнительные реквизиты и сведения). В том же разделе настроек системы по гиперссылке Дополнительные реквизиты может быть открыта форма универсального механизма управления дополнительными реквизитами объектов системы.
В открывшейся форме видим, что доступно управление перечнем и значениями дополнительных реквизитов как характеристик, так и других объектов системы.
В частности, видим, что для характеристик вида номенклатуры Изделия из ткани задан дополнительный реквизит Цвет ткани. Таким образом, предположение, что характеристике нельзя задать дополнительные свойства, оказывается ложным. В то же время можно говорить о том, что состав свойств характеристики может быть определен при помощи универсального механизма дополнительных реквизитов.
Обратимся к справочнику Номенклатура (Нормативно-справочная информация – Номенклатура). В открывшейся форме установим отбор по виду номенклатуры Изделия из ткани.
Откроем карточку позиции номенклатуры Р.к спинки Изо Артикул 006002-02.
В открывшейся форме номенклатуры ни на закладке Описание ни на закладке Учетная информация не находим возможности задать шаблон состава свойств характеристик. Откроем карточку вида номенклатуры, как показано на рисунке.
В форме вида номенклатуры на закладке Дополнительные реквизиты обнаруживаем возможность управления составом дополнительных характеристик.
Друзья, читаю в ПодпискеНаСобытие Перед записью Источник.Модифицированность(), и оно ВСЕГДА ИСТИНА.
Ничего не понимаю, данные не изменяются, как такое может быть?
1С 8.2 Управляемое Тонкий
Fragster
нет, проверял даже на Валюте, там всего-то 3 реквизита, в форме ничего не меняется. Модуль объекта абсолютно чист.
откуда берется модифицированность не понятно.
Перед запись в форме проверяю модифицированност формы = ЛОЖЬ.
смысл проверки для версионирования. Выгружаю версию объекта в логи, если объект модифицирован.
Всегда выгружать нет желания.
(15) ПередЗаписью() - вдумайся в смысл.
У тебя есть ОбъектВФорме, ОбъектНаСервере. ОбъектВФорме модифицируется, а до ОбъектаНаСервере еще дело не дошло.
Копай ДанныеФормыВЗначение или что-то подобное.
Создал специально справочник вообще без реквизитов, объект все равно всегда модифицирован.
Похоже смотрит на версию объекта, а версия объекта всегда меняется при записи.
Жму, например, кнопку записать в форме 10 раз (в ней нет реквизитов вообще, одна кнока) и все 10 раз объект модифицирован.
Есть процедура "ПередЗаписью()" и она срабатывает всегда когда жмешь кнопку записать, не важно менял ты что=то или нет.
Но как в ней понять модифицирован объект или нет?
Проблема возникает только если записывать объект из формы.
Видимо на форму создается объект и латформа уже считает его модифицированным, т.к. он обратно в базу идет с клиента.
Если просто программнополучить объект и записать его, то Модифицированность() = ЛОЖЬ, если нажать на кнопку в форме, то будет ИСТИНА (хотя форма не менялась)
НаКлиенте, али НаСервере?
Икогнито
Хватит глупости нести.
1)
Берем объект на сервере, суем его в форму на клиенте, открываем форму.
В форме ничего не меняем, ПередЗаписью() в форме МОдифифцированность формы = ЛОЖЬ, нигде нет никаких обработчиков, которые могли бы изменить объект. В подписке на события ПередЗаписью() сам объект МОдифицированность()=ИСТИНА (Почему, если ничего не менялось?)
PS:
Что я хочу я уже написал, читай 4 = "смысл проверки для версионирования. Выгружаю версию объекта в логи, если объект модифицирован. Всегда выгружать нет желания."
(14) ты ваще не догоняешь в своем п. 2
Я тебя спрашивал: "Как объект может быть не модифицирован, если ты в форме жмешь кнопку "ЗАПИСАТЬ"?
Перед записью данные формы конвертируются в прикладной объект, и у него меняется реквизит ВерсияДанных. От сюда и модифицированность.
(22) насколько я понял объяснения Гончарова, версия данных была и в 8.1, тока она была недоступна для разработчика.
это для урбд изначально ?
Читайте также: