Имя: Пароль:
1C
1С v8
Проверка существования документа в 1с 8.1
,
0 freem-alex
 
12.03.12
17:04
Добрый день! Как проверить документ на существование? То есть если документ есть со значениями определенный реквизитов, то создавать ничего не надо. Если документа нет - создать.
1 Reset
 
12.03.12
17:09
Поискать документ "со значениями определенный реквизитов".
Если не нашли, то документа нет. Вроде логично.
2 NDN
 
12.03.12
17:11
результат запроса выгрузить в тз. И посмотреть количество строк
3 Управляемые Формы
 
12.03.12
17:11
Документ = Документы.СправкаОбИнвалидности.НайтиПоРеквизиту("Сотрудник",глТекущийПользователь.ФизЛицо);
Если Не Документ = Неопределено
Предупреждение("ВЫ - ИДИОТ! Отойдите от компьютера, ждите приезда врачей!" );
КонецЕсли;
4 freem-alex
 
12.03.12
17:11
Я новичок. Подскажите как это реализовать.
5 Reset
 
12.03.12
17:12
Запрос,НайтиПоНомеру,НайтиПоРеквизиту,Выбрать.
Универсальнее - запрос.
6 freem-alex
 
12.03.12
17:16
Спасибо. Разобрался.
7 ptiz
 
12.03.12
17:16
Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Документ.МойВидДокумента КАК МойВидДокумента ГДЕ МойВидДокумента.Реквизит1 = &Реквизит1 И МойВидДокумента.Реквизит2 = &Реквизит2");
Запрос.УстановитьПараметр("Реквизит1", "тут должно быть значение реквизита 1");
Запрос.УстановитьПараметр("Реквизит2", "тут должно быть значение реквизита 2");

ТаблицаНайденныхДокументов = Запрос.Выполнить().Выгрузить();
8 Управляемые Формы
 
12.03.12
17:17
(2) Вам тоже предупреждение.
Выгружать результат запроса, что бы проверить, что он пустой? Это нубство, и свинство. Верните зарплаты в кассу.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    РегистрацияТупогоМистабола .Ссылка
|ИЗ
|    Документ.РегистрацияСообщенияТупогоМистабола КАК РегистрацияСообщенияТупогоМистабола
|ГДЕ
|    РегистрацияСообщенияТупогоМистабола.Ник = &Ник
|    ИЛИ РегистрацияСообщенияТупогоМистабола.Сообщение = &Сообщение";
Запрос.УстановитьПараметр("Ник","NDN");
Запрос.УстановитьПараметр("Сообщение","результат запроса выгрузить в тз. И посмотреть количество строк");


Если Результат.Пустой() Тогда
Сообщить("Таких идиотов не бывает");
КонецЕсли;

Иначе
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить("Идиот детектед! Ник" + Выборка.Ссылка.Ник + ", сообщение:" + Выборка.Ссылка.Сообщение);
КонецЦикла;
9 Управляемые Формы
 
12.03.12
17:18
(7) Нельзя инициировать выборку результата запроса, или выгрузку результата запроса в ТЗ, не проверив Результат.Пустой()
Это типичное быдлокодерство.
10 Reset
 
12.03.12
17:20
(8)
"Выборка.Ссылка.Сообщение"
--> (9) (вторая строка)
11 Управляемые Формы
 
12.03.12
17:21
(10) +1
12 ptiz
 
12.03.12
17:21
(9) Сколько агрессии.
В данном случае лучше пожертвовать "правильностью" в пользу более короткого кода, т.к. в производительности мы нисколько не теряем, предполагая, что результат запроса может быть из считанного числа документов.
А вот более короткий код легче воспринять.
13 spu79
 
12.03.12
17:22
(8) гы гы. А что проверить на Результат.Пустой() надо бы сначала сделать Результат = Запрос.Выполнить()
)))))))))))
14 spu79
 
12.03.12
17:24
(12) Вы не правы. Если уж "новичок", то надо учиться сразу правильно делать, потом уже не переучишься...
15 Тарантул
 
12.03.12
17:27
(13) у брутальне УправляемыеФормы - запрос работает и без  "Запрос.Выполнить()"   )))
16 Управляемые Формы
 
12.03.12
17:28
(12) в производительности мы нисколько не теряем, предполагая, что результат запроса может быть из считанного числа документов.

Их может быть 0.
Вызывать конструктор создания нового класса "ТаблицаЗначений", причем при создании его из РезультатЗапроса.Выгрузить() вызывается два метода класса (создание колонок, создание строк), не проверив, нужен ли этот класс, или воспользоваться им для того, что бы использовать его метод Count() вместо того, что бы сразу использовать Count() результата запроса, который по своей сути тот же класс, только созданный перегрузкой другим конструктором?

Вы наверное так тоже делаете?
ТаблицаЗначений = Новый ТаблицаЗначений;
...
... заполняем таблицу значений
...
НоваяТаблицаЗначений = ТаблицаЗначений.Выгрузить();
ТаблицаПустая = (НоваяТаблицаЗначений.Количество() = 0)

Наверное нет. Так зачем в (2) и (7) предлагать аналогичную ерунду?
17 ptiz
 
12.03.12
17:30
(16) "Вызывать конструктор создания нового класса " - такой мизер по затратам, что как-то странно это слышать.
Вот когда результат запроса возвращает 100 тыс. строк - тут разница есть.
18 Управляемые Формы
 
12.03.12
17:30
(15) Тоже любитель конструкции Запрос.Выполнить().Выгрузить()?
Понятно, что в (8) код, написанный прямо в форум.
19 Управляемые Формы
 
12.03.12
17:33
(17) Мизер?
Можно плюнуть под ноги, сказав - "а чо, я же не нассал тут".
Проверять, пустой ли результат запроса, перед тем, как вызывать методы "Выгрузить()" или "Выбрать()" - просто хороший тон.
А если там 1 000 000 полей составного типа, если уж про привычку быдлокодеров оперировать фразами типа "100 тыс. строк - тут разница есть."?
20 ptiz
 
12.03.12
17:35
(19) Да я не против хорошего тона. Но бороться за милисекунды в некритичных операциях - ну его нафиг.
21 Тарантул
 
12.03.12
17:36
(19) пейте пустырник
22 Управляемые Формы
 
12.03.12
17:36
(20) И черт с ним.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой