Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Провить на заполнение реквизит
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.1 (8.0)
Log1c
Задача:
При проведении проверять на заполненность реквизит сотрудник, и если этот реквизит не заполнен - не проводить документ.

Проблема:
В 8.1 нет свойства у реквизита "проверка заполнения".
Есть свойство "АвтоОтметкаНезаполненного" но оно только подчеркивает красным поле.

Нашел что это можно сделать через метод ОбработкаПроверкиЗаполнения(...)
Но не при проведении, ни при записи этот метод не вызывается.
Получается что его надо вызывать.
Добавил вызов в ПриЗаписи();

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
    ПроверяемыеРеквизиты.Добавить("Сотрудник");
КонецПроцедуры

Процедура ПриЗаписи(Отказ)
    ОбработкаПроверкиЗаполнения(Ложь, Новый Массив);
КонецПроцедуры


Вопрос: Можно улучшить код или как-то по другому сделать?
sava1
Если конфа стандартная - то лучше проверять в подписке. Там доступен Источник:
типа так - Если не значениеЗаполнено(Источник.Сотрудник) тогда отказ=истина
logist
Цитата(Log1c @ 02.07.14, 11:10) необходимо зарегистрироваться для просмотра ссылки
Можно улучшить код

Можно. Вызывать проверку ПередЗаписью, это уменьшит дерганье базы.
Log1c
Цитата(sava1 @ 02.07.14, 12:21) необходимо зарегистрироваться для просмотра ссылки
Если конфа стандартная - то лучше проверять в подписке. Там доступен Источник:
типа так - Если не значениеЗаполнено(Источник.Сотрудник) тогда отказ=истина

На счет подписки не понял. Есть какая-то Глобальная функция или метод которая вызывается При записи документа?

Цитата(logist @ 02.07.14, 12:53) необходимо зарегистрироваться для просмотра ссылки
Можно. Вызывать проверку ПередЗаписью, это уменьшит дерганье базы.


Да, действительно, не задумывался над этим.

Но мне мой код, тот что выше все равно не подошел.
Я не могу отследить записался ли документ чтобы сообщить пользователю что он реквизит не заполнил.
Т. е. переменная Отказ в обоих случаях остается Ложь, хотя документ и не проводиться.

Прийдется делать по старинке.
logist
Сделайте по простому в ПередЗаписью добавьте строчку
Отказ = Не ЗначениеЗаполнено(Сотрудник);

Ardi
Цитата(logist @ 02.07.14, 11:53) необходимо зарегистрироваться для просмотра ссылки
Можно. Вызывать проверку ПередЗаписью, это уменьшит дерганье базы.

Тогда мы не сможем сохранить недозаполненный документ. Это неправильно.
logist
Цитата(Ardi @ 02.07.14, 17:07) необходимо зарегистрироваться для просмотра ссылки
Тогда мы не сможем сохранить недозаполненный документ. Это неправильно.

Ок, вставьте, ту же строчку, в ОбработкуПроведения smile.gif

p.s. почему порекомендовал именно так - бывают случаи когда людей надо приучивать сразу заполнять необходимые реквизиты, может быть полезно там - где это ключевой реквизит, например.
Rayne
В стандартных конфигурациях проверка заполнения реквизитов всегда в обработке проведения. (Даже в конфигурациях 1С 7.7).
Домовик
а вынести кнопку на форму "проверка на заполнение" кроме стандартной проверки...
мне всегда было удобней лишний раз кляцнуть на "синтакс-контроль" в конфигураторе, чем потом в Предприятии обнаруживать и вылетать с программы опять.
Пользователь не обидится.

Цитата(logist @ 02.07.14, 13:39) необходимо зарегистрироваться для просмотра ссылки
p.s. почему порекомендовал именно так - бывают случаи когда людей надо приучивать сразу заполнять необходимые реквизиты, может быть полезно там - где это ключевой реквизит, например.


да. особенно, когда программист или пользователь сам хочет протестировать выполнение чего-то, там, не связанного с заполнением реквизита - одно удовольствие все десять подряд вылетать с проведения smile.gif
Log1c
Цитата(Rayne @ 03.07.14, 8:32) необходимо зарегистрироваться для просмотра ссылки
В стандартных конфигурациях проверка заполнения реквизитов всегда в обработке проведения. (Даже в конфигурациях 1С 7.7).


Я как раз занимался полгода переписыванием проверок из ОбработкиПроведения в ПриЗаписи. ИМХО надо отлавливать неверные данные как можно раньше.
Vofka
Цитата(Rayne @ 03.07.14, 8:32) необходимо зарегистрироваться для просмотра ссылки
В стандартных конфигурациях проверка заполнения реквизитов всегда в обработке проведения.

А когда-то давно (ещё может в 8.0), возможно, этого сделать нельзя было, потому что определить что документ именно проводится можно было только в ОбработкаПроведения (то же самое и в 7.7). А теперешним конфигурациям, которые не на управляемых формах по сколько лет с какой версии платформы они начинали разрабатываться? old.gif
А в конфигурациях, которые изначально разрабатывались на платформе 8.2 - такого нету.

Цитата(Log1c @ 03.07.14, 11:56) необходимо зарегистрироваться для просмотра ссылки
Я как раз занимался полгода переписыванием проверок из ОбработкиПроведения в ПриЗаписи. ИМХО надо отлавливать неверные данные как можно раньше.

Я тоже так считаю. Но надо было это переносить хотя бы в ПередЗаписью и там смотреть документ проводится или просто записывается и выполнять проверку только если проводится.
Rayne
Цитата(Vofka @ 03.07.14, 12:06) необходимо зарегистрироваться для просмотра ссылки
А когда-то давно (ещё может в 8.0), возможно, этого сделать нельзя было, потому что определить что документ именно проводится можно было только в ОбработкаПроведения (то же самое и в 7.7).


О как. Как-то даже не задумывалась, проверка там не мешала никогда.
Vofka
Цитата(Rayne @ 03.07.14, 14:12) необходимо зарегистрироваться для просмотра ссылки
проверка там не мешала никогда.

Это смотрю кому smile.gif . Часто задача может решаться более чем 1 способом. Какой-то способ лучше, какой-то хуже, но конечный результат будет одинаковый.
Кстати я свой пост выше изменял и не дочитал, что немного потерялся смысл.
Цитата(Vofka @ 03.07.14, 12:06) необходимо зарегистрироваться для просмотра ссылки
А когда-то давно (ещё может в 8.0), возможно, этого сделать нельзя было

Под "этого" имелось ввиду определить в момент записи, что документ проводится.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.