Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: ПорядокКодов и ВыбратьЭлеменыПоРеквизиту

v7: ПорядокКодов и ВыбратьЭлеменыПоРеквизиту
Я
   SiMBa_R38
 
02.12.20 - 09:40
Здравствуйте.
Имею справочник НомераСФ, в нем отключено наименование, код числовой, нумерация кодов в пределах подчинения.
Реквизиты:
Ссылка на документ
Дата СФ

Создаю папку 2020 в ней
Код, Документ, НомерСФ
1, ТТН 10 (10.01.20), 10.01.20
....
115632, ТТН 120365 (30.11.20), 02.12.20

Хотел сделать выборку крайних значений через
СпрСФ.ПорядокКодов();
СпрСФ.ВыбратьЭлементыПоРеквизиту("ДатаСФ", ДатаСФ, 1, 0);
СпрСФ.ПолучитьЭлемент();
первый = СпрСФ.Код;

СпрСФ.ПорядокКодов();
СпрСФ.ОбратныйПорядок(1);
СпрСФ.ВыбратьЭлементыПоРеквизиту("ДатаСФ", ДатаСФ, 1, 0);
СпрСФ.ПолучитьЭлемент();
последний = СпрСФ.Код;

Но, выяснилось что возвращается в каком-то ином порядке...

Пришлось делать через такой костыль
        СпрСФ.ПорядокКодов();
        СпрСФ.ВыбратьЭлементыПоРеквизиту("ДатаСФ", ДатаСФ, 1, 0);
        первый = 0;
        последний = 0;
        Пока СпрСФ.ПолучитьЭлемент() = 1 Цикл
            Если первый = 0 Тогда
                первый = Число(СпрСФ.Код);
            Иначе
                Если первый > Число(СпрСФ.Код) Тогда
                    Сообщить("Первый не первый " + первый + " " + Число(СпрСФ.Код));
                КонецЕсли;
                
                первый = Мин(первый,Число(СпрСФ.Код));
            КонецЕсли;
            последний = Макс(последний, Число(СпрСФ.Код));
        КонецЦикла;

Может кто-нибудь разъяснить ЧЯДНТ?

СпрСФ.ПорядокКодов();
СпрСФ.ОбратныйПорядок(1);
местами менял, не помогает.
Возможно дело в OrdNoChk.prm?
   SiMBa_R38
 
1 - 02.12.20 - 10:29
При этом 
СпрСФ.ПорядокКодов();
СпрСФ.ОбратныйПорядок(1);
СпрСФ.ВыбратьЭлементы();
Пока СпрСФ.ПолучитьЭлемент() = 1 Цикл
    Если естьБольше < Число(СпрСФ.Код) Тогда
        Если естьБольше <> 0 Тогда
            Сообщить("Есть больше " + естьБольше + " и " + Число(СпрСФ.Код));
            естьБольше = Число(СпрСФ.Код);
        КонецЕсли;
    КонецЕсли;
КонецЦикла;
// отрабатывает нормально..., все коды по порядку убывания
   Mikeware
 
2 - 02.12.20 - 10:54
ПорядокКодов(); и ВыбратьЭлементыПоРеквизиту(); - это по сути выбор индекса таблицы.
   SiMBa_R38
 
3 - 02.12.20 - 11:12
(2) Понял, значит смысла нет искать в рамках текущих данных.
Благо время < секунды, можно позволить.
   Mikeware
 
4 - 02.12.20 - 11:36
(3) сделай прямым запросом. "удобно и всерьез"™
   SiMBa_R38
 
5 - 02.12.20 - 11:43
(4) До сих пор расширения не использовались, а так да, как много чего переделать можно.
Просто в голове не укладывалось, вроде ж делаю порядоккодов, почему возвращает не по порядку.
   Mikeware
 
6 - 02.12.20 - 12:24
(5)  "До сих пор расширения не использовались" - а зря. 1с++ и формекс уже по факту джентльменский набор.  Если до сих пор на клюшках - значил, есль на то причины, значит, есть причины повысить удобство.
даже не за скорость разговор.
"вроде ж делаю порядоккодов, почему возвращает не по порядку." - просто полезно знать, что происходит, когда делаешь то или другое
   SiMBa_R38
 
7 - 02.12.20 - 12:58
(6) "просто полезно знать, что происходит, когда делаешь то или другое" согласен, поэтому и задал вопрос.

1С++ в обработке обмена ЭДО использую, и то только для объекта "Структура" потому что Свойство("Поставщик") = 1, удобнее предст = ""; Получить("Поставщик", предст);
xml весь на MSXML, формекс до сих пор не пригодился раскрашивать таблички документов не часто возникает желание, а вот ловить самопроизвольные падения (был опыт в другом проекте с FormEx) не очень хочется. События формы все корректно ловлю, экспортом пару раз хотелось воспользоваться, но потом открыл для себя

Процедура ДействиеПриОткрытии()
 Если ТипЗначенияСтр(Форма.Параметр) = "СписокЗначений" Тогда

И как кто всё штатными. А ну openconf стоит конечно, так что не совсем ванила.
   Злопчинский
 
8 - 02.12.20 - 13:06
(7) ДействиеПриОткрытии - это откуда и что? из 1С++?
   Cthulhu
 
9 - 02.12.20 - 13:16
чонеясно. при установленной сортировке по коду(или наименованию) выборка без учета иерархии сортирует по полному коду(или полному наименованию).
   SiMBa_R38
 
10 - 03.12.20 - 04:10
(8) Закидываем в шаблоны, и пользуемся, сейчас любой отчет с этого начинаю.

// в форме заводится метод

Процедура Метод()
    Сообщение("Метод запустился")
КонецПроцедуры

Процедура ДействиеПриОткрытии()
    Если ТипЗначенияСтр(Форма.Параметр) = "СписокЗначений" Тогда
        // заполнение переменных формы

        НачДата = Форма.Параметр.Получить("НачДата");
        
        // флаги запуска

        ЗапуститьМетод = Форма.Параметр.Получить("ЗапуститьМетод");
        ЗакрытьФорму = Форма.Параметр.Получить("ЗакрытьФорму");
        Если ЗапуститьМетод = 1 Тогда
            Метод();
        КонеЕсли;
        
        Если ЗапуститьМетод = 1 Тогда
            Форма.Закрыть(0);
        КонеЕсли;
    КонецЕсли;
КонецПроцедуры

Процедура ПриОткрытии()
    ДействиеПриОткрытии();
КонецПроцедуры

Процедура ПриПовторномОткрытии()
    // если это отчет имеет смысл, а вот в документах не стоит

    ДействиеПриОткрытии();
КонецПроцедуры


// в форме откуда надо вызвыать или в расшифровке ТЗ

Процедура ВызватьОтчетСМетодом()
    Парам = СоздатьОбъект("СписокЗначений");
    Парам.Установить("НачДата", НачДата);
    Парам.Установить("ЗапуститьМетод", 1);
    Парам.Установить("ЗакрытьФорму", 1);
    ОткрытьФорму("Отчет.ОтчетСМетодом", Парам);
КонецПроцедуры
   SiMBa_R38
 
11 - 03.12.20 - 04:13
(9) упустил в коде, делаю конечно же ИспользоватьРодителя(папкаГода.ТекущийЭлемент())
Уже объяснили в (2)
(10) С помарками, не копипастите
   Злопчинский
 
12 - 03.12.20 - 16:21
тьфу ты елы палы.
глРасшифровка и механизм передачи как в типовых отчетах в ТИС и команды как в типовых формах документов в ТИС.

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