Имя: Пароль:
1C
1С v8
Помогите сделать проверку
0 Начинающий_13
 
24.03.14
17:52
Здравствуйте
УФ
Модуль объекта.
Шапка; СчетЗатрат, при выборе активизируются субконто (Субконто1, Субконто 2 и т.д.) в зависимости от счета. Хочу в процедуре ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)сделать проверку, если субконто не заполнено, то отказ.
Когда субконто актизизируется от имеет ДОСТУПНОСТЬ = Истина

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты).
          
Если НЕ ЗначениеЗаполнено(СчетЗатрат) ????  Тогда
        
МассивНепроверяемыхРеквизитов = Новый Массив;
МассивНепроверяемыхРеквизитов.Добавить("СчетЗатрат");
МассивНепроверяемыхРеквизитов.Добавить("Субконто1");
МассивНепроверяемыхРеквизитов.Добавить("Субконто2");
МассивНепроверяемыхРеквизитов.Добавить("Субконто3");
МассивНепроверяемыхРеквизитов.Добавить("Субконто4");
УправлениеПроверками.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов);
        
    КонецЕсли;
    
КонецПроцедуры
1 vmv
 
24.03.14
17:54
не возражаю
2 Начинающий_13
 
24.03.14
17:57
Как подступить к Элементы из модуля Объекта
3 mikecool
 
24.03.14
18:02
(2) нафига тебе элементы? у тебя есть объект
4 Начинающий_13
 
24.03.14
18:03
Через объект КАК? Доступность у его нет.
5 vmv
 
24.03.14
18:03
+(3) объект видит только данные, а где они сидят ему по-барабану - циничный игнор
6 Начинающий_13
 
24.03.14
18:04
Можте другой подход есть?
7 vmv
 
24.03.14
18:05
(4) самое время забраться в гамак с сигарой и задуматься о смысле форм и содержания, прозрение обязательно будет - бэз абид
8 Начинающий_13
 
24.03.14
18:07
(7) Вот и думаю, что надо разбивать проверку на две или только в модуле формы, а хотелось бы в модуле объекта.
9 hhhh
 
24.03.14
18:07
(8) ну напрямую к реквизитам объекта обращаться. Вы же сами написали

ЗначениеЗаполнено(СчетЗатрат)

СчетЗатрат это реквизит объекта.
10 Начинающий_13
 
24.03.14
18:09
СчетЗатрат это проверяет заполнеение реквизита,
Если счет затрат на ЗАПОЛНЕН, то и проверять нечего все субконто недоступны
11 hhhh
 
24.03.14
18:11
(10) ну и что вас не устраивает в этой проверке?
12 Начинающий_13
 
24.03.14
18:13
Она не может правильно работать.
т.е сохрнанять документ можно с пустыми субконто.
13 hhhh
 
24.03.14
18:16
(12) ну так напишите Отказ = Истина; ничего и не сохранится
14 Начинающий_13
 
24.03.14
18:21
Если счетЗатрат пустой, тогда можно сохранять,
А если заполнен надо проверить субконто и потом принять решение сохранять или нет.
15 Начинающий_13
 
25.03.14
10:06
ПОЗВОЛЮ ПРОДОЛЖИТЬ ТЕМУ
проверку перенес в модуль формы

ВАРИАНТ №1 Все работает
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)

Если ЗначениеЗаполнено(Объект.СчетЗатрат) Тогда
    Если Элементы.Субконто1.Доступность = Истина
        И НЕ ЗначениеЗаполнено(Объект.Субконто1) Тогда
        ТекстСообщения = НСтр("ru='Не заполнено СУБКОНТО 1 !!!'");
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
        Отказ = Истина;
    КонецЕсли;
        
    Если Элементы.Субконто2.Доступность = Истина
        И НЕ ЗначениеЗаполнено(Объект.Субконто2) Тогда
        ТекстСообщения = НСтр("ru='Не заполнено СУБКОНТО 2 !!!'");
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
        Отказ = Истина;
    КонецЕсли;
        
    ..... и так для всех субконто
КонецЕсли;

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

ВАРИАНТ №2
Хочу переделать через МАССИВ. Не могу разобраться.
МассивНепроверяемыхРеквизитов - Определяется правильно
ПроверяемыеРеквизиты - это Объект, строка ??? Как их получить???
Что не так?

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

Если ЗначениеЗаполнено(Объект.СчетЗатрат) Тогда
        
    МассивНепроверяемыхРеквизитов = Новый Массив;
            
    Если Элементы.Субконто1.Доступность = Ложь
        И НЕ ЗначениеЗаполнено(Объект.Субконто1) Тогда
                    
        МассивНепроверяемыхРеквизитов.Добавить("Субконто1");
    КонецЕсли;
        
    Если Элементы.Субконто2.Доступность = Ложь
        И НЕ ЗначениеЗаполнено(Объект.Субконто2) Тогда
                        
        МассивНепроверяемыхРеквизитов.Добавить("Субконто2");
    КонецЕсли;

    УправлениеПроверками.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов);
        
        
/// ????
Если НЕ ЗначениеЗаполнено(ПроверяемыеРеквизиты) Тогда
    Отказ = Истина;
КонецЕсли;

КонецПроцедуры
16 Начинающий_13
 
25.03.14
10:35
Неужели никто на сталикался
17 vmv
 
25.03.14
10:47
СтруктураСубконто = Новый Структура;

СтруктураСубконто.Вставить("Субконто1", Объект.Субконто1);
СтруктураСубконто.Вставить("Субконто2", Объект.Субконто2);
СтруктураСубконто.Вставить("Субконто3", Объект.Субконто3);

Для каждого ЭлементСтруктуры Из СтруктураСубконто Цикл
    // ...какие-то условия
    // ЗначениеЗаполнено(Объект[ЭлементСтруктуры.Ключ])
    // Элементы[ЭлементСтруктуры.Ключ].Доступность = Истина
    
    // ...какие-то действия

КонецЦикла;
18 Начинающий_13
 
25.03.14
10:51
Хорошо через структуру попробую позже. Мне интересно печему на работает через массив. И нете чатал про проблему, но ответан на ее на нашел.
19 cw014
 
25.03.14
10:54
Наверное тебе нужно так:

Если ЗначениеЗаполнено(Объект.СчетЗатрат) Тогда
    МассивНепроверяемыхРеквизитов = Новый Массив;
    Для Сч = Объект.СчетЗатрат.ВидыСубконто.Количество() По Объект.СчетЗатрат.Метаданные().МаксКоличествоСубконто Цикл
         МассивНепроверяемыхРеквизитов.Добавить("Субконто" + Формат(Сч,"ЧН=; ЧГ="));
    КонецЦикла;
КонецЕсли;
20 cw014
 
25.03.14
10:54
С тебя 300 рублев :)
21 elCust
 
25.03.14
10:56
(20) Возьми у мамы.
22 cw014
 
25.03.14
10:56
(21) Умно
23 Начинающий_13
 
25.03.14
11:02
(19) Ну да тоже так можно, более понятным будет алгоритм. при систематизации восползуюсь