Имя: Пароль:
1C
1С v8
Проверка заполнения реквизитов через условие
,
0 Hammond
 
14.10.20
23:05
Доброго времени суток, форумчане.
Есть n количество переменных. Если все переменные заполнены, идёт код, иначе нужно чтобы вывело, какая переменная не заполнена.
Использую для этого значениезаполнено
Код:
Если ЗначениеЗаполнено(переменная1) и ЗначениеЗаполнено(переменная2) и ЗначениеЗаполнено(переменная3) и... И значениезаполнено(переменнаяn) тогда
//код
Иначе
Сообщить("не заполненная переменная") ;
КонецЕсли;

Что написать в тело сообщить вместо "не заполненная переменная", чтобы передалась переменная?
1 Tarlich
 
14.10.20
23:31
Еще в 7.7 в Тис была Функция
    // Проверка заполненности обязательных реквизитов.
       Если глВсеРеквизитыДокументаЗаполнены(Контекст,
        "Фирма,Склад,Валюта,Контрагент,Договор")=0 Тогда
        Возврат;
    КонецЕсли;

не то ?
2 Сияющий в темноте
 
14.10.20
23:39
а в цикле?
массивименпеременных=СтрРазделить(ИменаЧерезЗапятую,",",ложь)
для каждого ИмяПеременной из МассивИменПеременных цикл
если Вычислить("ЗначениеЗаполнено("+ИмяПеременной+")")=Ложь тогда
сообщить("Не заполнена переменная:"+ИмяПеременной)
конецесли
конеццикла
3 Hammond
 
14.10.20
23:39
Мне на заполненность нужно проверить не реквизиты формы или чего-то ещё, а именно переменные в коде, которые я создаю.
Более полно если, то я считываю таблицу екселя, колонки делаю переменными.
Нужно, что в иначе мне вывело какая именно переменная не заполнена
4 Tarlich
 
14.10.20
23:42
Дедовский способ
ДвижемсяДальше = 1 ;
Если Не ЗначениеЗаполнено(Перемен1) тогда
Сообщить("Что то там не запонено");
ДвижемсяДальше = 0 ;
КонецЕсли;
...........

Если ДвижемсяДальше = 0  тогда
Сообщить ("Есть незаполненные реквизиты");
Возврат ;
КонецЕсли;
5 Hammond
 
14.10.20
23:44
Мне нужно, чтобы он показал какия именно переменная из n незаполнена
6 Hammond
 
14.10.20
23:45
И чтобы особо сильно код не увеличился
7 RomanYS
 
14.10.20
23:47
(5) Если не хочешь много "если", можно в цикле.
Вычислить(ИмяПеременной) тебе поможет
8 Hammond
 
14.10.20
23:51
Можно поподробнее? Не знаком с этим
9 Tarlich
 
14.10.20
23:51
Усложняем -)
Создаем 2 массива :
Один со списком переменных , второй со значениями
Если Список.количество() = ....
10 Hammond
 
14.10.20
23:52
Не, через несколько массивов точно не покатит
11 Сияющий в темноте
 
14.10.20
23:54
строка excel это ComSafeArray,вот его и нужно проверять,а не какие-то переменные.
12 Tarlich
 
14.10.20
23:56
(10) ТЗ ? -)
13 Tarlich
 
14.10.20
23:59
если обижу - сори , но первое что приходит в голову - кто как хочет ....
14 Hammond
 
15.10.20
00:07
Требовательный заказчик, можно так сказать
Если использую переменную, без которой можно обойтись приходится переделывать, а тут не просто переменная, а массивы
Переменные это по сути названия колонок таблиц в экселе
15 Mihasya
 
15.10.20
00:08
(3) Покажи как создаешь переменные
16 Klesk
 
15.10.20
00:09
говорим про "реквизиты" формы или объекта ?
17 RomanYS
 
15.10.20
00:13
(8) в (2) же расписано, подробнее некуда
18 Hammond
 
15.10.20
00:15
Переменная1=формат(ТекЛист.cells(СчСтр,1).value)
19 Hammond
 
15.10.20
00:16
Не понимаю, куда конкретно записывать имена переменных в (2)
20 Hammond
 
15.10.20
00:18
Говорим про переменные, реквизиты в теме указал по ошибке
21 RomanYS
 
15.10.20
00:28
(19) ИменаЧерезЗапятую = "переменная1,переменная2, переменная3"
22 Mihasya
 
15.10.20
00:40
(18) т.е. ты заранее знаешь сколько у тебя переменных будет?
23 Mihasya
 
15.10.20
00:43
(2) я бы массивом сделал...

МассивПеременных = Новый Массив;

Для СчСтр = 1 по ВсегоСчСтр Цикл
   МассивПеременных.Добавить(Формат(ТекЛист.cells(СчСтр,1).value))
КонецЦикла;

...

Ну и после проверять эти переменные из массива по индексу...
24 Hammond
 
15.10.20
00:44
Ззнаю заранее, но их много. И для каждой писать если значениезаполнено(Переменная1) тогда
Если жначениезаполнено(Переменная2) тогда
И так далее до n
Иначе для каждой писать слишком много кода будет
25 Hammond
 
15.10.20
00:47
(23) каждая переменная имеет разные значения в cells(СчСтр)
Для второй там будет СчСтр, 2 и так далее
А в твоём коде будет одно значение присваиваться
26 youalex
 
15.10.20
00:55
В структуру эти переменные запихнуть не вариант?
27 Hammond
 
15.10.20
01:06
Видимо нет
То есть мне сказали сделать через переменную отказ и прервать/продолжить
То есть задать отказ=ложь
Если не отказ тогда
Продолжить
Конецесли
Но как к этому привязать сообщения об ошибках не могу понять, все равно же придётся для каждого значения делать условие
28 youalex
 
15.10.20
01:10
(27) >> считываю таблицу екселя, колонки делаю переменными.
ну и пихай их сразу в структуру.
А заполнение в цикле проверишь (можно отдельной функцией)
29 Mihasya
 
15.10.20
01:25
(25) с чего это вдруг?!

ну чутка переписать...

СчСтр = <Какая-то твоя трока>
ВсегоПеременных = <ВсегоТвоихПеременных>
Для а = 1 по ВсегоПеременных Цикл
   МассивПеременных.Добавить(Формат(ТекЛист.cells(СчСтр, а).value))
КонецЦикла;
30 Mihasya
 
15.10.20
01:27
Либо действительно через структуру...

СтруктураПеременных = Новый Структура;
СчСтр = <Какая-то твоя трока>
ВсегоПеременных = <ВсегоТвоихПеременных>
Для а = 1 по ВсегоПеременных Цикл
   СтруктураПеременных.Вставить("Переменная" + а, Формат(ТекЛист.cells(СчСтр, а).value))
КонецЦикла;