|
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
|
тьфу ты елы палы.
глРасшифровка и механизм передачи как в типовых отчетах в ТИС и команды как в типовых формах документов в ТИС. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |