1c 7.7 Поиск Документа

Paume

Well-Known Member
15.12.2010
107
0
#1
Добрый день!

Разбираюсь с долгоиграющей обработкой, где есть вот такой кусочек:

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

Вопрос - может быть, это я чего-то не знаю, и действительно грамотнее писать
ДокСпец=СоздатьОбъект("Документ");
а потом делать проверку на его вид.

а не так, как я:
ДокСпец=СоздатьОбъект("Документ.Специальности");
и цикл только по документам этого вида.
 

vbs

Well-Known Member
18.02.2007
1 708
3
Санкт-Петербург
#2
Если Специальность является реквизитом нескольких видов документов - тогда первый вариант (возможно, для документов вида НЕ Специальности нужна обработка по другому типу),
если только одного - тогда второй сработает.
А в чем проблема ?
 

Paume

Well-Known Member
15.12.2010
107
0
#3
В данном случае - обработка только по этому виду документа.
Проблема - слишком большой объем базы, чтобы перебирать ВСЕ документы.
Ну и опять же - я не могу отрицать, что человек, который это писал, обладает знаниями, которых у меня может и не быть. Короче, пока я не понимаю, почему он все поиски в настройке пишет вот так:

Док = создатьОбъект("документ");
Док.ВыбратьДокументы();
Пока ПолучитьДокумент()=1 цикл
Если Док.Вид()=НужныйВид Тогда
КонецЕсли;
КонецЦикла;

у меня нет уверенности, что это действительно неправильно.
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#4
если нужно обрабатывать только один вид документов то его и надо определить в
Док = создатьОбъект("документ.конкретныйвид");
а потом уже можно будет искать к примеру по номеру или еще по чему-нибудь, не перебирая все доки. если база на скуле - нужно тогда цикл запросом заменить в котором можно указать необходимое условие

Ну и опять же - я не могу отрицать, что человек, который это писал, обладает знаниями, которых у меня может и не быть.
или же этот человек был неопытным и написал просто как сумел
 

Paume

Well-Known Member
15.12.2010
107
0
#5
или же этот человек был неопытным и написал просто как сумел
Неа. ;)
Там такая логика описана, что у меня до сих пор голова кругом - не то что реализовать, а просто чтобы придумать такое, нужно быть очень вумным. ;)))
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#6
Там такая логика описана, что у меня до сих пор голова кругом - не то что реализовать, а просто чтобы придумать такое, нужно быть очень вумным. ;)))
тогда есть смысл эту логику сюда сообщить чтобы люди подсказывали что-то конкретное, а не тыкали пальцем в небо
 

Дайнеко

Well-Known Member
19.11.2009
951
0
53
Минск
#7
Paume! Я хочу придать тебе уверенности, что глядя на написанную дебилом глупость, не надо считать себя неопытным и полагать, что ты не понимаешь чужой "мудрости". "Он же такую большую прогу написал!"


Тогда есть смысл эту логику сюда сообщить чтобы люди подсказывали что-то конкретное, а не тыкали пальцем в небо.
Человек покритиковал, и причем конкретными примерами. Вот и не надо ему пенять "пальцем в небо". Я бы за такое творчество руки отрывал. Может кто меня поддержит, когда я время от времени смотрю типовые конфигурации, диву даюсь, как можно написать так сложно и громоздко. Создалось впечатление, что в 1С одна команда создает гениальные инструменты, и совсем другая команда бывших бухгалтерш лепит не нем хлам.
 
H

Hryv

Гость
#8
Если мне не изменяет склероз, то после
ДокСпец=СоздатьОбъект("Документ.Специальность");
не будет работать
ДокСпец.ВыбратьПоЗначению(,,"Специальность",Спр.ТекущийЭлемент());

поэтому, как я понял, там и используется ДокСпец=СоздатьОбъект("Документ");
это во-первых


но во-вторых после
ДокСпец.ВыбратьПоЗначению(,,"Специальность",Спр.ТекущийЭлемент());
хоть убейте не пойму зачем
Если ДокСпец.Специальность=Спр.ТекущийЭлемент() Тогда
оно ведь всегда будет равно
;)
 

puh14

Well-Known Member
11.07.2008
1 412
0
НеРезиновая
#10
Не - криво написано.По сути надо определить есть в базе хоть один документ специальность с выбранной специальностью не помеченный на удаление. Запрос спасет отца русской демократии! хотя слова обратныйпорядок настораживают - сколько же там таких документов? Если дофига тогда проще проводить этот документ, и писать например специальность и документ специальность (измерения) + одинресурсик числовой в отдельный регистр остатков. Отмена проведения или пометка на удаление убивают запись в регистре. Плюсы - там ТОЛЬКО проведенные документы, будет летать.
 

Paume

Well-Known Member
15.12.2010
107
0
#11
Код писал человек умный ;) и ленивый ;)))
По-моему, одно на второе не влияет, ну и наоборот тоже ;)))

Всем спасибо - то, что хотелось услышать, мною услышано. ;)

Просто вот так вот я обучаюсь - прихожу на работу, получаю настройку, в которой вроде что-то реализовано, а что-то нет, и начинаю копать.
Главная задача - не напортачить в том, что уже работает. Ну, а чтобы понять, что работает правильно, нужно понять, почему же пред. программер написал именно так, а не иначе...

Самая показательная настройка в этом плане была Лаборатории Дайнеко. ;)))

Опыта огребаешь - по самое нехочу! ;)))
 

vbs

Well-Known Member
18.02.2007
1 708
3
Санкт-Петербург
#12
Если мне не изменяет склероз, то после
ДокСпец=СоздатьОбъект("Документ.Специальность");
не будет работать
ДокСпец.ВыбратьПоЗначению(,,"Специальность",Спр.ТекущийЭлемент());
Склероз не изменяет, документ не может быть определенного вида !. А я лоханулся ;)