Автоматическое заполнение даты отгрузки в документе "Заказ Покупателя"

1. Sagalscki 17.03.20 14:20 Сейчас в теме
Нужно что бы при проведении документа, если поле "дата отгрузки" пустое ставилась дата на следующий день. Если поле заполнено, то оставить то значение которое поставили.

В модуле объекта написал следующее:
Если НЕ ЗначениеЗаполнено(ДатаОтгрузки)
		Тогда ДатаОтгрузки = ТекущаяДата() + 60 * 60 * 24;
	КонецЕсли;

Он срабатывает но не совсем верно, прибавляет дату когда она уже стоит. Если поле пустое, то просит заполнить.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
3. PeterVP 17.03.20 15:03 Сейчас в теме +0.09 $m
У меня сейчас нет под рукой 1С (и вообще не открывал 1С почти 2 года))), но чисто по памяти: там вроде бы в начале проведения многих документов идёт проверка заполнения обязательных реквизитов документов в одной из предопределенных процедур то ли модуля документа, то ли модуля формы документа -- ПередЗаписью(), ПриЗаписи() -- для чего из одной из этих предопределенных процедур вызывается процедура с названием типа ПроверкаЗаполнения(). Вот оттуда вас и просят заполнить пустое поле.

То есть вам нужно свой код, указанный выше, вставить перед вызовом вот этой самой процедуры ПроверкаЗаполнения(). В результате перед проверкой заполнения обязательных реквизитов документа поле "дата отгрузки" уже будет заполнено и всё пройдёт как вам надо.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. user-z99999 78 17.03.20 15:19 Сейчас в теме
(1)
Поставь точку остановки. И проверяй какое там значение при записи.
2. VmvLer 17.03.20 14:53 Сейчас в теме
без указания контекста вызова мы может обсудить только извращенный синтаксис фрагмента
3. PeterVP 17.03.20 15:03 Сейчас в теме +0.09 $m
У меня сейчас нет под рукой 1С (и вообще не открывал 1С почти 2 года))), но чисто по памяти: там вроде бы в начале проведения многих документов идёт проверка заполнения обязательных реквизитов документов в одной из предопределенных процедур то ли модуля документа, то ли модуля формы документа -- ПередЗаписью(), ПриЗаписи() -- для чего из одной из этих предопределенных процедур вызывается процедура с названием типа ПроверкаЗаполнения(). Вот оттуда вас и просят заполнить пустое поле.

То есть вам нужно свой код, указанный выше, вставить перед вызовом вот этой самой процедуры ПроверкаЗаполнения(). В результате перед проверкой заполнения обязательных реквизитов документа поле "дата отгрузки" уже будет заполнено и всё пройдёт как вам надо.
11. skeptik2105 18.03.20 23:52 Сейчас в теме
(3)
но чисто по памяти


Не вводите в заблуждение. Сплошные неточности.
5. Sergex 59 17.03.20 15:38 Сейчас в теме
У вас просто отрабатывает проверка заполнения потому что в реквизите документа "ДатаОтгрузки" как показано на картинке - стоит выдавать ошибку. Я думаю если вы поставите - "не проверять" раз уж вы в коде проверяете заполненность реквизита и нормализуете его значение когда он не заполнен, то все у вас получится.

Пример картинки из релиза 1.6.15.39 но я думаю что там во всех релизах стоит выдавать ошибку для незаполненной даты отгрузки.
Прикрепленные файлы:
6. skeptik2105 17.03.20 15:50 Сейчас в теме
(5)
Я думаю если вы поставите - "не проверять" раз уж вы в коде проверяете заполненность реквизита и нормализуете его значение когда он не заполнен, то все у вас получится.


Правильнее, добавить в расширение событие ОбработкаПроверкиЗаполнения и удалить дату отгрузки из массива проверяемых реквизитов:

&Перед("ОбработкаПроверкиЗаполнения")
Процедура ОФ_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)

	Индекс = ПроверяемыеРеквизиты.Найти("ДатаОтгрузки");
	Если Не Индекс = Неопределено Тогда 
		ПроверяемыеРеквизиты.Удалить(Индекс);
	КонецЕсли;
		
КонецПроцедуры
Показать
8. Sergex 59 17.03.20 15:53 Сейчас в теме
(6) Ну каноничнее может быть и так. Однако ТС не сомневаясь, в модуле объекта, безо всяких расширений модифицирует типовой код. Одно с другим не сочетается вы не находите? :)
7. Emeks5 8 17.03.20 15:52 Сейчас в теме
После отключения "Выдавать ошибку" или размещения кода для удаления из Проверяемых реквизитов:
Если ДатаОтгрузки = Дата(01,01,0001)
Тогда ДатаОтгрузки = ТекущаяДата() + 60 * 60 * 24;
КонецЕсли;
9. Sergex 59 17.03.20 15:54 Сейчас в теме
(7)У него ошибка возникает до того как начинает исполнятся обработка проведения. так что тут с чем хочешь сравнивай :)
10. Emeks5 8 17.03.20 15:56 Сейчас в теме
(9) Это я привел пример для размещения после отключения проверки вашим методом у реквизита или кодом от skeptik2105 :)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот