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

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

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

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

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

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

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

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


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