Вход | Регистрация


1С:Предприятие ::

Метки: 

Проверка заполненности поля табличной части

Я
   BlackRouZ
 
21.03.18 - 12:19
Доброго времени суток.
Прошу помощи.
Конфигурация Розница 2.1
Есть потребность, чтобы в режиме РМК, кассиры не могли произвести продажу без указания продавца.
Как проверить поле в шапке я разобрался. Не могу понять как сделать проверку в табличной части.
Сразу извиняюсь, за возможно не правильную терминологию и формулировку. В 1С, я совсем новичок.
В шапке есть объект Объект.Продавец, его я вычислил без труда и всё работает. Но в табличной части, если я правильно понял ссылка Объект.Товары.Продавец , но если я указываю именно так, то просто выдаётся ошибка, что поле "Продавец" не существует.
 
 
   BlackRouZ
 
1 - 21.03.18 - 12:21
   hhhh
 
2 - 21.03.18 - 12:24
(1) циклы кури
   lodger
 
3 - 21.03.18 - 12:24
(0) Объект.Товары это таблица.
сперва надо получить строку таблицы.
если надо проверить поле в каждой строке таблицы, тогда надо организовать обход строк таблицы.
Для Каждого СтрокаТаб из Объект.Товары Цикл

тогда в СтрокаТаб поочередно попадут все строчки. в каждой строке получаешь Продавец и проверяешь(а еще, можно заполнить продавцом из шапки).
   BlackRouZ
 
4 - 21.03.18 - 12:35
Да вот как раз и сижу пытаюсь разобрать как написать цикл)
Условием ниже проверяется шапка.
&НаКлиенте
Процедура КомандаЧО05Наличные(Команда)
Если ЗначениеЗаполнено (Объект.Продавец) Тогда
        ОплатитьТовары("ФормаПростойОплаты"); 
    
ИначеЕсли Не ЗначениеЗаполнено (Объект.Продавец) Тогда
    ЗаголовокИнформации = НСтр("ru = 'Выберите продавца!'"); 
    ТекстИнформации = НСтр("ru = 'Перед пробитием чека необходимо указать продавца!'");
    ОбщегоНазначенияРТКлиент.ВывестиИнформациюДляРМКУправляемой(ЗаголовокИнформации, ТекстИнформации);
КонецЕсли;    
КонецПроцедуры

Если с условием немного разбираюсь, с циклами пока что сложности.
   lodger
 
5 - 21.03.18 - 12:41
(4) ну так бери и пиши 
Для Каждого СтрокаТаб из Объект.Товары Цикл
КонецЦикла

после Если ЗначениеЗаполнено (Объект.Продавец) Тогда


в ИначеЕсли Не ЗначениеЗаполнено (Объект.Продавец) Тогда
можно писать просто Иначе
   BlackRouZ
 
6 - 21.03.18 - 16:41
Спасибо за наводку. Вроде бы уловил мысль. Попытался вывести через если, нашёл нужный объект. С 1м товаром прокатывает, если больше позиций, то уже требуется цикл.
Но не могу понять в какой коллекции искать элемент продавец.
Т.е. смотрите в каком случае мой код работает корректно(По поводу замены ИначеЕсли на Иначе - понял, просто пока не переделывал).

&НаКлиенте
Процедура КомандаЧО06ПлатежнаяКарта(Команда)
Если ЗначениеЗаполнено (Элементы.Товары.ТекущиеДанные.Продавец) Тогда
    ОплатитьТовары("ФормаПростойОплаты"); 
ИначеЕсли Не ЗначениеЗаполнено (Элементы.Товары.ТекущиеДанные.Продавец) Тогда
    ЗаголовокИнформации = НСтр("ru = 'Выберите продавца!'"); 
    ТекстИнформации = НСтр("ru = 'Перед пробитием чека необходимо указать продавца!'");
    ОбщегоНазначенияРТКлиент.ВывестиИнформациюДляРМКУправляемой(ЗаголовокИнформации, ТекстИнформации);
КонецЕсли;
КонецПроцедуры

Теперь хочу сверху добавить цикл, но не понимаю, что и где искать. Как определить в какой коллекции находится нужная мне строчка табличной части? Код выше рабочий, но выполняется только для 1 позиции в таблице, на последующие уже не реагирует, поэтому хочу, чтобы перебиралась каждая позиция.
   BlackRouZ
 
7 - 21.03.18 - 17:16
К сожалению не тот элемент нашёл. Столкнулся с новой проблемой. С циклом разобрался откуда брать. Но появилась новая проблема.
Для Каждого Продавец ИЗ Объект.Товары Цикл
Если ЗначениеЗаполнено (Элементы.Товары.ТекущиеДанные.Продавец) 
Тогда
    ОплатитьТовары("ФормаПростойОплаты"); 
ИначеЕсли Не ЗначениеЗаполнено (Элементы.Товары.ТекущиеДанные.Продавец) 

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

В данном случае "Оповещение" появляется только в случае, если курсор стоит на строке где нет продавца. А если у нас 4 позиции, в 1й из них указан продавец, а в 3х других  продавец не указан, то тут всё зависит от того на какой строчке стоит курсор. Если на строчке - где продавец указан, то продажа проходит. А если переключить на строчку где продавец не указан, то только в этом случае показывает "Оповещение".
   lodger
 
8 - 21.03.18 - 18:17
(7) похоже вы вообще не читаете что вам пишут. прочитайте тред заново.
   BlackRouZ
 
9 - 22.03.18 - 11:18
Я всё внимательно читал.

Вы имеете ввиду, что должен быть такой код:
 
Для Каждого СтрокаТаб из Объект.Товары Цикл
КонецЦикла;

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

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


Если так, то в данном случае у меня получается только с "ИначеЕсли", при использовании "Иначе" выдаётся ошибка при проверке кода. И код срабатывает только при отсутствии/наличии продавца в шапке(Под стрелкой 2 на скриншоте), а на отсутствие/наличиие продавца в табличной части не срабатывает(под стрелкой 1 на скриншоте).
http://ipev.ru/image/OtU

Поправьте пожалуйста, если я не правильно понял. То, что вы предложили я проверил в первые 2 минуты и у меня получилось то, что получилось.
   igorPetrov
 
10 - 22.03.18 - 11:22
(9) Может книжки по программированию чуть почитать сначала?
 
  Рекламное место пустует
   BlackRouZ
 
11 - 22.03.18 - 11:25
"Может книжки по программированию чуть почитать сначала?" Я как раз ждал таких ценных советов. Учусь на курсах уже. Жаль что ни кто не написал "Погугли", а то так подобных советов не хватает.
   igorPetrov
 
12 - 22.03.18 - 11:26
(11) Погугли.
   igorPetrov
 
13 - 22.03.18 - 11:26
(11) Плохо учишься. Учись внимательнее и не беги вперед паровоза.
   BlackRouZ
 
14 - 22.03.18 - 11:31
А Вы видимо хорошо учились. Много ума нужна написать "Книжки почитай" и "Погугли. А чтобы реально помочь, то тут уже возникают трудности.
   hhhh
 
15 - 22.03.18 - 11:33
(14) ну вот это смотрите
Для Каждого Продавец ИЗ Объект.Товары Цикл
Если ЗначениеЗаполнено (Элементы.Товары.ТекущиеДанные.Продавец) 


текущая строка у нас "Продавец", правильно?
   igorPetrov
 
16 - 22.03.18 - 11:33
(14) Ты сам просил написать "Погугли". Ты просишь не помощь, а готовый код.
   BlackRouZ
 
17 - 22.03.18 - 11:45
"текущая строка у нас "Продавец", правильно?"

Да, всё верно. Но в данном случае реакция происходит именно на ту строчку, где стоит курсор. Если я курсор поставлю на строчку с выбранным продавцом, то будет считать что и остальные строчки тоже заполнены. А если выбираю строчку с пустым продавцом, то даже там, где продавец указан, будет считаться, что продавец ни где не указан.

Чисто ради примера воспользовался кодом:
Сообщить(Элементы.Товары.ТекущиеДанные.Продавец);

Пробовал нечто похожее делать через цикл, результат тот же.
http://ipev.ru/image/Ot8
http://ipev.ru/image/Otf
   hhhh
 
18 - 22.03.18 - 11:51
(17) почему вы тогда пишете не "Продавец", а вот этот нереальный бред? Элементы.Товары.ТекущиеДанные.Продавец? Откуда вы эту хрень откопали? Где-то увидели? Понравилось четырехэтажное слово?
   BlackRouZ
 
19 - 22.03.18 - 11:55
"почему вы тогда пишете не "Продавец", а вот этот нереальный бред? Элементы.Товары.ТекущиеДанные.Продавец? Откуда вы эту хрень откопали? Где-то увидели? Понравилось четырехэтажное слово?" 

Случайным образом наткнулся. Если указать просто продавец, то как писал выше, он проверяет исключительно шапку.

http://ipev.ru/image/Otb
   igorPetrov
 
20 - 22.03.18 - 11:56
(19) "Случайным образом наткнулся" -Ппц.
   BlackRouZ
 
21 - 22.03.18 - 12:04
""Случайным образом наткнулся" -Ппц."
Хорошо умный человек, может расскажешь как мне определить точное ссылку на эту поле?
   lodger
 
22 - 22.03.18 - 16:46
(17) я тебе в переборе советовал ставить слово "Продавец"? нет? вот и не ставь. у тебя эта переменная зарезервирована в реквизитах объекта.
   lodger
 
23 - 22.03.18 - 16:46
(21) читай все с начала.
   BlackRouZ
 
24 - 22.03.18 - 17:41
Спасибо добрый человек! Я наконец-то догнал! 
Для Каждого СтрокаТаб из Объект.Товары Цикл
КонецЦикла;
Если ЗначениеЗаполнено (СтрокаТаб.Продавец) Тогда
    ОплатитьТовары("ФормаПростойОплаты");//2

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

Спасибо большое.
   lodger
 
25 - 22.03.18 - 18:55
ух.ё.
код вроде перевели на русский. а один х. "КонецЦикла;" - на мысли не наводит...
   xxTANATORxx
 
26 - 22.03.18 - 18:57
(0)а почему у реквизита не поставить "Проверку заполнения"???
   xxTANATORxx
 
27 - 22.03.18 - 18:58
(26)+ в Обработке проверки заполнения его можно докурить
   BlackRouZ
 
28 - 22.03.18 - 22:46
"а почему у реквизита не поставить "Проверку заполнения"???"
Пробовал. Реакции 0
   BlackRouZ
 
29 - 23.03.18 - 14:23
lodger
"ух.ё.
код вроде перевели на русский. а один х. "КонецЦикла;" - на мысли не наводит..."
Видимо это был сарказм, что всё таки код отработает не должным образом).
Ещё 1 моментик заметил). При текущем коде вроде всё хорошо. Но как я выяснил выполняется проверка только последней строчки, если у нас 10 позиций и вбить продавца только в последней строчке, а во всех верхних строчках продавец будет отсутствовать, то оплата пройдёт.
Где я накосячил?)
   BlackRouZ
 
30 - 23.03.18 - 15:25
TheBest
Для Каждого СтрокаТаб из Объект.Товары Цикл
    Если Не ЗначениеЗаполнено (СтрокаТаб.Продавец) Тогда
    ЗаголовокИнформации = НСтр("ru = 'Выберите продавца!'"); 
    ТекстИнформации = НСтр("ru = 'Перед пробитием чека необходимо указать продавца!'");
    ОбщегоНазначенияРТКлиент.ВывестиИнформациюДляРМКУправляемой(ЗаголовокИнформации, ТекстИнформации);
Прервать;
Иначе 
    ОплатитьТовары("ФормаПростойОплаты");
    КонецЕсли
КонецЦикла;
=)
   BlackRouZ
 
31 - 23.03.18 - 15:49
Издевательство какое-то. В данном варианте, если заполнить из 3х позиций первую и последнюю, то продажа проводится, а не должна.
   Kondarat
 
32 - 23.03.18 - 15:54
СтрокиТЧ = "";
Для Каждого СтрокаТаб из Объект.Товары Цикл
    Если Не ЗначениеЗаполнено (СтрокаТаб.Продавец) Тогда
        СтрокиТЧ = СтрокиТЧ + Строка(СтрокаТаб.НомерСТроки) + ", ";
    КонецЕсли;    
КонецЦикла;

Если НЕ ПустаяСтрока(СтрокиТЧ) ТОгда
    СтрокиТЧ = ЛЕВ(СтрокиТЧ,СтрДлина(СтрокиТЧ)-2);
    ЗаголовокИнформации = НСтр("ru = 'Выберите продавца!'"); 
    ТекстИнформации = НСтр("ru = 'Перед пробитием чека необходимо указать продавца в строках:'" + СтрокиТЧ);
    ОбщегоНазначенияРТКлиент.ВывестиИнформациюДляРМКУправляемой(ЗаголовокИнформации, ТекстИнформации);
Иначе 
    ОплатитьТовары("ФормаПростойОплаты");
КонецЦикла;
   BlackRouZ
 
33 - 23.03.18 - 16:00
Kondarat Спасибо спаситель!
Всё работает).
Теперь попробую разобраться что означают добавленные строки.
 
 
   BlackRouZ
 
34 - 23.03.18 - 16:13
Kondarat, если не сложно, не могли бы подсказать, для запоминания, что происходит в строчках:

СтрокиТЧ = СтрокиТЧ + Строка(СтрокаТаб.НомерСТроки) + ", ";

И
СтрокиТЧ = ЛЕВ(СтрокиТЧ,СтрДлина(СтрокиТЧ)-2);



Список тем форума
Рекламное место пустует  
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует