Имя: Пароль:
1C
1C 7.7
v7: Как НЕ записывать значения периодических реквизитов если они не заполнены?
, ,
0 aptemywka
 
15.10.15
11:19
Дано:
Интерактивно создается новый элемента справочника.
При записи записываются все периодические реквизиты.

Требуется:
НЕ записывать значения периодических реквизитов если они не заполнены (ПустоеЗначение(ПериодическийРеквизитN) = 1).

Подскажите, пожалуйста, как это можно сделать?
1 NikVars
 
15.10.15
15:26
(0) Смотри типовые конфигурации.
Для примера - Бух 7.7, справочник Валюты, форма элемента, процедура ПриЗаписи().
2 aptemywka
 
15.10.15
16:16
Посмотрел. Там все тоже самое.
Интерактивно создаю новый элемент справочника Валюты.
При записи записываются все периодические реквизиты, даже если они пустые.
3 mikecool
 
15.10.15
16:22
(2) вопрос "сохранять значения периодики" есть?
4 aptemywka
 
15.10.15
16:50
(3) Нет. Вопросов про периодику нет.
5 mikecool
 
15.10.15
16:58
(4) смотри в модуле формы, есть метод(забыл как звать), который отвечает за автозапись периодики
у него в параметрах еще будет (0)
в приоткрытии скорее всего будет
6 NikVars
 
15.10.15
17:28
(2) Так проверку сделай по аналогии.
7 aptemywka
 
15.10.15
17:37
(5) В процедуре ПриОткрытии() есть вызов метода СохранениеПериодическихРеквизитов(2, "*");
Я с этим методом протрахался кучу времени, толку от него - ноль. Все равно при записи нового элемента записываются все периодические реквизиты, даже если они пустые.
8 SleepyHead
 
гуру
15.10.15
17:45
(7) Заходишь в свойства периодического реквизита и отключаешь установку вручную, оставляешь только документом.

И устанавливай только документом.
9 NikVars
 
15.10.15
17:52
(8) Хороший вариант! Что не исключает проверки документа на запись на заполняемость периодики.
10 aptemywka
 
16.10.15
09:11
(8) Действительно хороший вариант. Это было первое о чем я подумал. Но этот вариант не уместен. Пользователи привыкли. Выкрутился я из этой ситуации следующим образом:
Создал процедуру локЗаписать() и вместо #Записать прописал вызов своей процедуры.

Процедура локЗаписать()

Записать();

Если Выбран() = 1 Тогда
  Если ВводНового = 1 Тогда
  
   ПР = СоздатьОбъект("Периодический");
  
   ПР.ИспользоватьОбъект("ИмяПериодическогоРеквизита", ТекущийЭлемент());
   Если ПР.ВыбратьЗначения() = 1 Тогда
    Пока ПР.ПолучитьЗначение() = 1 Цикл
     Если ПустоеЗначение(ПР.Значение) = 1 Тогда
      ПР.Удалить()
     КонецЕсли;
    КонецЦикла;
   КонецЕсли;
  
  КонецЕсли;
КонецЕсли;

КонецПроцедуры

Согласен не очень изящно и все дела но зато работает.
11 NikVars
 
16.10.15
09:48
(10) Комменты только ставь, что это ты ковырялся (типа копирайта для быстрого поиска) и дату укажи. Потом будет проще обновления накатывать.
12 aptemywka
 
16.10.15
11:01
(11) Это не типовая конфигурация. Сами написали, сами обновляем.
13 NikVars
 
16.10.15
11:04
(12) Ну тогда вообще можно как зря! Это ж для себя!
14 Сияющий в темноте
 
16.10.15
12:19
в параметрах процедуры при записи передаётся список изменяемых периодических реквизитов
для чего то же он передаётся
15 HawkEye
 
16.10.15
13:40
(0) в любой типовой это реализовано, зачем свой велосипед изобретать?
16 Eeakie
 
16.10.15
14:56
17 aptemywka
 
16.10.15
16:43
(14) При сохранении нового элемента справочника этот список пустой.
18 aptemywka
 
16.10.15
16:45
(15) Если не сложно, приведите, пожалуйста, конкретный пример какой реквизит в каком справочнике в какой конфигурации?
19 aptemywka
 
16.10.15
16:47
(16) Это не подходит  смотрите (8) и (10).
20 aptemywka
 
16.10.15
16:52
Кстати по поводу (10).
Не выполняется вызов ПриЗаписи()
Думаю дальше.