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

Тема в разделе "1C и всё что с ней связано", создана пользователем Paume, 12 окт 2011.

  1. Paume

    Paume Well-Known Member

    Регистрация:
    15 дек 2010
    Сообщения:
    110
    Симпатии:
    0
    Добрый день!

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

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

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

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

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Если Специальность является реквизитом нескольких видов документов - тогда первый вариант (возможно, для документов вида НЕ Специальности нужна обработка по другому типу),
    если только одного - тогда второй сработает.
    А в чем проблема ?
     
  3. Paume

    Paume Well-Known Member

    Регистрация:
    15 дек 2010
    Сообщения:
    110
    Симпатии:
    0
    В данном случае - обработка только по этому виду документа.
    Проблема - слишком большой объем базы, чтобы перебирать ВСЕ документы.
    Ну и опять же - я не могу отрицать, что человек, который это писал, обладает знаниями, которых у меня может и не быть. Короче, пока я не понимаю, почему он все поиски в настройке пишет вот так:

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

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

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    если нужно обрабатывать только один вид документов то его и надо определить в
    Док = создатьОбъект("документ.конкретныйвид");
    а потом уже можно будет искать к примеру по номеру или еще по чему-нибудь, не перебирая все доки. если база на скуле - нужно тогда цикл запросом заменить в котором можно указать необходимое условие

    или же этот человек был неопытным и написал просто как сумел
     
  5. Paume

    Paume Well-Known Member

    Регистрация:
    15 дек 2010
    Сообщения:
    110
    Симпатии:
    0
    Неа. ;)
    Там такая логика описана, что у меня до сих пор голова кругом - не то что реализовать, а просто чтобы придумать такое, нужно быть очень вумным. ;)))
     
  6. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    тогда есть смысл эту логику сюда сообщить чтобы люди подсказывали что-то конкретное, а не тыкали пальцем в небо
     
  7. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Paume! Я хочу придать тебе уверенности, что глядя на написанную дебилом глупость, не надо считать себя неопытным и полагать, что ты не понимаешь чужой "мудрости". "Он же такую большую прогу написал!"


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

    Hryv Гость

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

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


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

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Hryv, ну как же? сразу видно код писал человек, которому бы
    .
     
  10. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Не - криво написано.По сути надо определить есть в базе хоть один документ специальность с выбранной специальностью не помеченный на удаление. Запрос спасет отца русской демократии! хотя слова обратныйпорядок настораживают - сколько же там таких документов? Если дофига тогда проще проводить этот документ, и писать например специальность и документ специальность (измерения) + одинресурсик числовой в отдельный регистр остатков. Отмена проведения или пометка на удаление убивают запись в регистре. Плюсы - там ТОЛЬКО проведенные документы, будет летать.
     
  11. Paume

    Paume Well-Known Member

    Регистрация:
    15 дек 2010
    Сообщения:
    110
    Симпатии:
    0
    Код писал человек умный ;) и ленивый ;)))
    По-моему, одно на второе не влияет, ну и наоборот тоже ;)))

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

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

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

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

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Склероз не изменяет, документ не может быть определенного вида !. А я лоханулся ;)
     
  13. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    не совсем понял смысл данной фразы в контексте моей цитаты
     
  14. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Извиняюсь, твою "пальцем в небо" не совсем правильно понял.
     
Загрузка...

Поделиться этой страницей