Как проверить что это новый документ 1с
В событии формы ПриСозданииНаСервере() Хочу проверить, новый это документ или нет. Объект.ЭтоНовый() — не работает..
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Объект.ЭтоНовый() Тогда // проверить объект на то, что он еще не внесен в ИБ
————
: Метод объекта не обнаружен (ЭтоНовый)
Если Объект.ЭтоНовый() Тогда // проверить объект на то, что он еще не внесен в ИБ
книжку почитай уже
ЗначениеЗаполнено(Объект.Ссылка) не катит?
(2) покатит, наверное :))
(1) в выходные.. закачала уже на флэшку лекции.
(2) а если кто установитьссылкунового() сделает?
у нас уже почти 9. пора домой.
Об = РеквзитФормыВЗначение(«Объект»);
Если Объект.ЭтоНовый() Тогда
Кароче Параметры.Ключ.Пустая()
(7) Спасибо. Сегодня почитала про эти методы, затупила насовсем. Попробую и это сейчас
(8) что такое ЛастРеестр?
(2) С днюхой тебя!
(11) ЛастРеестр — это Константа в конфигурации автора ответа. Капитан Очевидность будет завидовать мне сегодня! 🙂
(13) Да я понимаю.. Автор ответа мне процедуру ПриЗаписиНаСервере() привёл как пример, в то время как я работала с процедурой ПриСозданииНаСервере().. Я не поняла, зачем в констатны ссылку документа записывать.
Как при открытии формы определить, что создается новый элемент?
Как правило необходимость в определении того, что создается новый элемент, возникает тогда, когда новый элемент нужно предварительно заполнить какими-то данными. Поэтому рассмотрим сначала общую методику заполнения новых объектов данными.
Основной смысл заключается в том, что все действия, которые разработчику требуется сделать при создании нового объекта, должны быть выполнены на сервере.
Причем действия с данными самого объекта и действия с внешним видом его формы должны быть разделены. Действия с данными нужно выполнять в самом объекте, а внешним видом формы нужно управлять уже в форме, но в серверной процедуре.
Кроме этого могут понадобиться и другие действия при открытии формы, например открыть связанную форму, выдать предупреждение и т.д., которые нельзя сделать на сервере – их нужно выполнять в форме, но уже в клиентской процедуре.
Последовательность событий, которые происходят при открытии формы нового элемента, можно представить следующей схемой:
Прежде всего, при заполнении нового объекта данными, можно попробовать обойтись вообще без написания какого-либо кода. Для этого у реквизитов объектов конфигурации есть свойства ЗначениеЗаполнения и ЗаполнятьИзДанныхЗаполнения . Эти свойства позволяют визуально (в конфигураторе) задать правила, по которым реквизит будет заполняться данными при создании нового объекта.
Если этих возможностей недостаточно, то тогда нужно использовать возможности встроенного языка.
Действия с данными объекта нужно выполнять в модуле объекта, в обработчике события ОбработкаЗаполнения . Этот событие возникает только при создании новых объектов, при открытии форм существующих объектов это событие не вызывается. Поэтому в нем не нужно узнавать, новый это объект, или нет. Нужно только описать алгоритм заполнения объекта данными. При этом следует учитывать, что это событие будет вызываться в нескольких случаях:
- при интерактивном создании нового объекта
- при вводе на основании
- при выполнении метода объекта Заполнить()
При этом параметр ДанныеЗаполнения , передаваемый в этот обработчик, может иметь различные значения в зависимости от того, каким образом создается новый элемент. Например, он может иметь тип ссылки, если новый объект вводится на основании. Или он может иметь тип Структура , если новый объект создается интерактивной командой из списка, в котором установлен отбор. В этом случае структура будет содержать значения элементов отбора этого списка. Также этот параметр может иметь тип Неопределено , если новый элемент создается интерактивной командой из панели действий. То есть в своем алгоритме начального заполнения полезно анализировать этот параметр.
Подробнее о событии ОбработкаЗаполнения можно прочитать в синтакс-помощнике: ПрикладныеОбъекты — — Объект — События .
Что касается внешнего вида формы нового объекта, то им нужно управлять в обработчике события формы ПриСозданииНаСервере . Это событие возникает и для новых, и для существующих объектов. Поэтому в нем нужно убедиться в том, что открывается форма именно нового объекта. Убедиться в этом можно проанализировав параметр формы Ключ . Если объект новый, в этом параметре будет пустая ссылка. Если это существующий объект – в этом параметре будет ссылка на этот объект:
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Ключ.Пустая() Тогда
Сообщить(«Создается новый объект»);
И, наконец, если требуется выполнять какие-то действия в обработчике события формы ПриОткрытии , то в нем ситуация аналогичная, нужно анализировать параметр формы Ключ .
Как проверить что это новый документ 1с
8(495)005-62-29
skype: live:di-sem
@programmist_1C
Отправить заявку
Узнать новый ли это документ в 1с 8.2 и 1с 8.3 обычные и управляемые формы
В 1с 8.2 можно узнать новый ли документ создается функцией ЭтоНовый()
В 1с 8.3 в управляемых формах такой функции к сожалению нет. ЭтоНовый в УФ будет выглядеть так:
Параметры.Ключ.Пустая(); // в создаваемом документе этот параметр будет пустой.
&НаКлиенте Функция этоНовый() Если НЕ Параметры.Ключ.Пустая() Тогда Возврат Истина; иначе возврат ложь; КонецЕсли; КонецФункции
- Главная

- Блог

- В помощь 1с программисту

- Узнать новый ли это документ в 1с 8.2 и 1с 8.3 обычные и управляемые формы
Проверка на Новый документ в ОбработкаПроведения()
Управляемое приложение. Нужно при проведении проверять новый это док или нет.
user1296291; + 1 – Ответить
По теме из базы знаний
- Кто сейчас проводит документ: человек или компьютер? Зачем нужна подобная классификация «режимов» проведения документа в 1С 8.3 в клиент-серверном режиме и как получить ответ на этот вопрос при работе с обработчиками событий управляемой формы и документа?
- Проверка рентабельности по реализациям при проведении
- Пример создания документа с движениями в ERP 2.5.7
- Подключение подсистемы исправления документов и регистров в конфигурации ЗУП 3.1
- Как проводятся документы в типовых конфигурациях от 1С: дополнение
Найденные решения
4. DJDUH 17 11.07.19 16:35 Сейчас в теме
(1) передЗаписью
ЭтоНовый()
ДополнительныеСвойства
передать признак и в обработке проведения смотерть на него и принимать решение!
__MaxImuS__; request4t; + 2 – Ответить
7. lefthander 11.07.19 16:48 Сейчас в теме
передать признак и в обработке проведения смотерть на него и принимать решение!
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый()); ДополнительныеСвойства.Вставить("РежимЗаписи", РежимЗаписи); //что то ваше КонецПроцедуры
smartcoder; + 1 – Ответить
Остальные ответы
- Дата
- Дата
- Рейтинг всех уровней
- Рейтинг 1-го уровня
- Древо развёрнутое
- Древо свернутое
Свернуть все
2. lefthander 11.07.19 16:27 Сейчас в теме
(1)Вы не поверите ЭтоНовый()
3. request4t 11.07.19 16:32 Сейчас в теме
(2) не верю. не работает. значение = Ложь.
4. DJDUH 17 11.07.19 16:35 Сейчас в теме
(1) передЗаписью
ЭтоНовый()
ДополнительныеСвойства
передать признак и в обработке проведения смотерть на него и принимать решение!
__MaxImuS__; request4t; + 2 – Ответить
6. lefthander 11.07.19 16:45 Сейчас в теме
(4)СП иногда читайте ПередЗаписью() в модуле формы или модуль объекта?
ДокументОбъект. (DocumentObject.)
ЭтоНовый (IsNew)
Синтаксис:
ЭтоНовый()
Возвращаемое значение:
Тип: Булево.
Истина — изменяется еще ни разу не записанный документ; Ложь — документ уже записан.
Описание:
Определяет, записан ли документ в базу данных.
Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Пример:
Если РасходнаяНакладная.ЭтоНовый() Тогда
РасходнаяНакладная.Записать();
КонецЕсли;
8. DJDUH 17 11.07.19 16:54 Сейчас в теме
(6) Я иногда читаю, но предпочитаю проверять на практике, чего и вам советую.
А слать меня читать СП — думаю лишнее, сначала проверьте, а затем что-то доказывайте!
7. lefthander 11.07.19 16:48 Сейчас в теме
передать признак и в обработке проведения смотерть на него и принимать решение!
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый()); ДополнительныеСвойства.Вставить("РежимЗаписи", РежимЗаписи); //что то ваше КонецПроцедуры
smartcoder; + 1 – Ответить
9. DJDUH 17 11.07.19 16:55 Сейчас в теме
(7) Типа того, а «РежимЗаписи» думаю лишний.
25. Finbaev 16.06.22 21:12 Сейчас в теме
(1) В типовых конфигурация необходимо добавить документ в подписку на событие ПередЗаписьюДокументаДляУдаленияДвижений.
В подписке устанавливается в Дополнительные свойства значения ЭтоНовый и ДатаДокументаСдвинутаВперед.
5. Mikhail.Burayev 11.07.19 16:44 Сейчас в теме
В управляемых формах
Если Объект.Ссылка.Пустая() Тогда //Это новый документ КонецЕсли;
user745653; + 1 – Ответить
10. request4t 11.07.19 16:56 Сейчас в теме
я же написал в вопросе: проверка нужна в Обработке Проведения()
11. lefthander 11.07.19 17:01 Сейчас в теме
(10)Ну и проверяйте в обработке проведения Дополнительные свойства Если новый док ЭтоНовый() будет в Истине, иначе Ложь.
12. DJDUH 17 11.07.19 17:03 Сейчас в теме
(11) Специально для Вас сер
док = Документы.РеализацияТоваровУслуг.СоздатьДокумент(); Док.Дата = ТекущаяДата(); Док.УстановитьНовыйНомер(); док.Записать(РежимЗаписиДокумента.Проведение);
Просьба отладкой стать в процедуре ОбработкаПроведения() и при помощи [Shift+F9] вычислить
ЭтоНовый()
и результат скрином.
13. request4t 11.07.19 17:04 Сейчас в теме
(11) вас мое сообщение не касается) вы по сути ответили. спасибо) сейчас попробую.
14. lefthander 11.07.19 17:10 Сейчас в теме
(13)Что бы было понятно про дополнительные свойства скрин с кусочком кода
ДополнительныеСвойства не надо никак объявлять это свойство документа В ПередЗаписью вставили, в обработке проведения проверили.
ДокументОбъект. (DocumentObject.)
ДополнительныеСвойства (AdditionalProperties)
Использование:
Только чтение.
Описание:
Тип: Структура.
Может использоваться в тех случаях, когда необходимо хранить некоторые значения, связанные с объектом, на время выполнения некоторых операций, без изменения объекта. Например, при обработке событий в подписке на события.
Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Прикрепленные файлы:
15. Boneman 297 11.07.19 17:11 Сейчас в теме
(10) В обработке проведения, априори не может быть нового документа. Туда попадает когда документ уже записан в базу данных, имеет ссылку и уже технически не является новым.
Признак передать можно, проверив перед записью и передав через доп свойства, но это имеет свои баги,
например записать документ — открыть закрыть форму, и потом провести. Вроде новый документ, первый раз проводится — но проверка не проканает.
Тут либо задачу надо пересмотреть, либо какой-то более материальный признак проверять..(например сверять дату документа с текущей датой). Либо понимать, и принимать, несовершенство данной проверки.
16. lefthander 11.07.19 17:16 Сейчас в теме
В обработке проведения, априори не может быть нового документа. Туда попадает когда документ уже записан в базу данных, имеет ссылку и уже технически не является новым.
Ошибаетесь уважаемый.
Вот создан новый документ провожу, остановка на обработке проведения. ЭтоНовый в истине 😉
Прикрепленные файлы:
17. Boneman 297 11.07.19 17:24 Сейчас в теме
(16) В чем я ошибаюсь?
Если бы это было не так, то для чего весь сыр бор с доп свойствами ? Проверили бы на ЭтоНовый() прямо в обработке проведения и делу конец.
18. lefthander 11.07.19 17:28 Сейчас в теме
Проверили бы на ЭтоНовый() прямо в обработке проведения и делу конец.
В задании надо проверку сделать в обработке проведения и сделать это можно передав эту информацию через дополнительные
свойства.
20. Boneman 297 11.07.19 17:32 Сейчас в теме
В задании надо проверку сделать в обработке проведения и сделать это можно передав эту информацию через дополнительные
свойства.
Я прочитал топик, и понимаю задание. Поэтому и дополнил ваши ,безусловно верные ответы, дополнительной информацией, чтобы ТС потом не удивлялся, что в каких то случаях — у него это срабатывать не будет.
24. lefthander 11.07.19 17:43 Сейчас в теме
(20)Да, конечно, здесь Вы абсолютно правы. Если что то не сработает, то должно подвигнуть ТС для более глубокого изучения УФ. 😉
ЗЫ по скринам видно что код типовой, именно так поступает сама 1С.
19. Boneman 297 11.07.19 17:29 Сейчас в теме
(16) у тебя на скрине ЭтоНовый — это ключ переданной структуры, которая была передана из процедуры «передЗаписью».
А сама функция ЭтоНовый() всегда в обработке проведения будет давать Ложь, как раз по причине того, что документ сначала записывается, а потом проводится.
21. lefthander 11.07.19 17:33 Сейчас в теме
(19)Так именно это и надо — в обработке проведения выяснить новый документ или нет. При проведении уже записанного документа этот ключ будет всегда в ложь, и только при первой записи в истине.
Управляемое приложение. Нужно при проведении проверять новый это док или нет.
22. herfis 491 11.07.19 17:39 Сейчас в теме
(21) Boneman указывает на возможный ньюанс в трактовке фразы «проведение нового документа». Если трактовать его как «первое проведение документа», то все варианты описанный подход не покрывает.
23. SlavaKron 11.07.19 17:40 Сейчас в теме
Вроде новый документ, первый раз проводится — но проверка не проканает.
Как вариант, перед записью смотреть на свойство Проведен:
ДополнительныеСвойства.Вставить("ПроведениеНепроведенного", Не Проведен И РежимЗаписи = РежимЗаписиДокумента.Проведение);

