Имя: Пароль:
1C
1С v8
Количество уровней в плане счетов.
0 Goodvaso
 
14.09.12
09:56
Добрый день!
как определить количество уровней для элемента плана счетов? Например для счета 10 - количество будет 2, а для 76 их будет 3. Есть ли какой то метод или свойство, которым можно узнать?
1 ChAlex
 
14.09.12
10:02
Как для любой иерархической структуры - способов реализации множество (все аналогично как и для справочника например)
2 Goodvaso
 
14.09.12
10:03
Приведи хоть один способ?
3 DrShad
 
14.09.12
10:16
ПланСчетовСсылка.<Имя плана счетов> (ChartOfAccountsRef.<Имя плана счетов>)
Уровень (Level)
Синтаксис:

Уровень()
Возвращаемое значение:

Тип: Число.

Описание:

Получает уровень счета.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Примечание:

Имеет смысл только для многоуровневых планов счетов. Следует учитывать, что уровень элемента может меняться, например, при переносе в другую группу (смене родителя).
Уровень счета начинается начиная с 0. Для элемента, не имеющего родителя, уровень будет равен 0.
Если ссылка пустая, вызов метода вызывает исключение.
4 unregistered
 
14.09.12
10:20
Идиотский вопрос, но задам: Зачем?
5 Goodvaso
 
14.09.12
10:22
Ну и что ты этим получишь?)) конкретный пример:
Счет 90.01. метод Уровень() вернет значение = 1. А количество уровней для этого элемента = 3 (90.01.1 -> 90.01 - > 90). Итого ты получил, только уровень этого элемента в иерархии, а кол-во не определил.
6 DrShad
 
14.09.12
10:24
(5) количество чего? не тупи
7 Goodvaso
 
14.09.12
10:24
(4) Мне нужно обойти все элементы нижнего уровня. А даны элементы с уровнем = 0.
8 mikecool
 
14.09.12
10:25
(7) сходи в метаданные - может там скажут
9 DrShad
 
14.09.12
10:25
(7) зачем?
10 Goodvaso
 
14.09.12
10:25
(6) Не сваливайся не оскорбления. Количество уровней, для данного элемента.
11 DrShad
 
14.09.12
10:26
(10) какого элемента? в плане счетов нет элементов
12 Goodvaso
 
14.09.12
10:26
(8) В методанных могу получить максимальное кол-во уровней для этого объекта методанных.
13 mikecool
 
14.09.12
10:28
(12) вот - "верхняя планка" уже есть, количество итераций определено
14 Goodvaso
 
14.09.12
10:28
(8) Читай пост (1). Там пример, где количество, которое я ищу может быть разным.
15 mikecool
 
14.09.12
10:29
(14) ну, если ты все знаешь - я удаляюсь
16 Goodvaso
 
14.09.12
10:31
(13) У меня может быть счет 10.01 - текущий уровень 1. Макс. количество для плана счетов 3. А для счета 10, созданы только счета 1-ого и 2-ого уровня. Соотвественно уровней для счета будет 2.
17 Goodvaso
 
14.09.12
10:32
(15) Не обижайся, я непретендую на звание "Всезнайки", иначе бы не писал вопрос. Просто указал, на первый пост, потому что там был пример.
18 DrShad
 
14.09.12
10:35
(17) в посте (3) тоже пример (приведи хоть один), но ты успел всем нахамить
19 unregistered
 
14.09.12
10:53
(7) Повторю идиотский вопрос: Зачем?

Если тебе нужны только счета, не являющиеся группой, то для этого в типовых есть реквизит "ЗапретитьИспользоватьВПроводках". У счетов-групп он имеет значение Истина.

И что значит "элементы нижнего уровня"?
Есть структура:
10
10.01
10.01.1
10.01.2
10.02

По твоей логике количество уровней тут 3.
Но как быть со счетом 10.02? Он не имеет подчиненных субсчетов, но уровень у него - 2, а не 3.
20 ChAlex
 
14.09.12
10:57
Ну задача аналогичная нахождению всех родителей элемента справочника: в данном случае нахождение всех дочерних элементов. Хотите через запрос, хотите через выборку. Для получения элементов принадлежащих счету - вообще пустяк

Запрос.Текст="ВЫБРАТЬ Т.Счет ИЗ ПланыСчетов.Хозрасчетный КАК Т ГДЕ Т.Ссылка В ИЕРАРХИИ (&МойСчет) И Т.Родитель=ЗНАЧЕНИЕ(ПланыСчетов.Хозрасчетный.ПустаяСсылка)" -  приблизительно так
21 ChAlex
 
14.09.12
10:59
(7) - и для обхода элементов нижнего уровня нафиг не надо знать уровень (см. пример выше)
22 DrShad
 
14.09.12
11:00
(20) ВЫБРАТЬ
   Хозрасчетный.Ссылка КАК Ссылка
ИЗ
   ПланСчетов.Хозрасчетный КАК Хозрасчетный
ГДЕ
   НЕ Хозрасчетный.ЗапретитьИспользоватьВПроводках

АВТОУПОРЯДОЧИВАНИЕ
23 ChAlex
 
14.09.12
11:03
(20) - ну модификаций уйма. Далеко не всегда есть ЗапретитьИспользоватьВПроводках (не переностите только на типовые) + ко всему данный реквизит может быть не заполнен (или не правильно заполнен) и т.д. Кстати в моем примере (20) -наверное частично ошибка -  Т.Ссылка.Родитель=ЗНАЧЕНИЕ ....  Нк Т.Ссылка КАК Счет  (енто уж извиняйте - привык построителем делать и не запоминаю как отче наш все нюансы конструкции) :)
24 DrShad
 
14.09.12
11:04
(23) он заполняется автоматом на уровне платформы
25 Goodvaso
 
14.09.12
11:05
(19) Хорошая табличка. Так вот  исходные данные счет 10. Нужно выбрать все элементы верхнего уровня (я ошибся, ранее упоминая, элементы верхнего уровня). в итоге должны получить: (10.01.1
10.01.2
10.02) Счета 10 и 10.01 - не попали, т.к. у них есть подчиненые элементы.
26 ChAlex
 
14.09.12
11:05
(24) - какой уровень платформы - вы о чем? Это прибамбас типовой. У меня он вообще отсутствует например - и ничего
27 DrShad
 
14.09.12
11:07
(26) иди читай правила форума
28 unregistered
 
14.09.12
11:08
(25) Ответ на эту постановку: см. запрос в (22)
29 ChAlex
 
14.09.12
11:09
(27) -  ну тогда уже и пункт этих правил - не телепат и что вас не устраивает - не догадываюсь
30 unregistered
 
14.09.12
11:10
+ к (28) естественно в запрос добавить условие для отбора конкретного счета (счета 10).

ВЫБРАТЬ
   Хозрасчетный.Ссылка КАК Ссылка
ИЗ
   ПланСчетов.Хозрасчетный КАК Хозрасчетный
ГДЕ
   НЕ Хозрасчетный.ЗапретитьИспользоватьВПроводках
   И Хозрасчетный.Ссылка в ИЕРАРХИИ(&НужныйМнеСчетГруппа)
31 ChAlex
 
14.09.12
11:11
(25) -  так что вам надо получить? Элементы самого верхнего уровня, элементы самого нижнего уровня или еще какие? Вы внятно то обясните.
32 DrShad
 
14.09.12
11:12
(30) исходя из того что ТС нужно обойти все, то логичнее одним запросом выбрать все и далее играться с результатом
33 ChAlex
 
14.09.12
11:15
(30) - еще раз заострю - завязываться на ЗапретитьИспользоватьВПроводках допустимо при нетором допущении и для данной задачи не совсем корректно. ЗапретитьИспользоватьВПроводках - обычный реквизит плана счетов , добавленный разработчиком, и поддерживается на уровне функциональности конкретной настройки. Никто не запрещает пользователь снять этот флажок для группы счетов и как результат неверный результат для конкреной задачи. Я уже не говорю что его может вообще не быть.
34 DrShad
 
14.09.12
11:18
(33) код из типовой конфы где устанавливается данный реквизит? я такой нашел только при обновлении конфы и более нигде, т.е. ни в подписках, ни в форме элемента, ни в модуле объекта - так где же он устанавливается?
35 ChAlex
 
14.09.12
11:25
(34) - ну то что вы не нашли как он устанавливается - ни о чем не значит. Я в Индии не был - но это не значит что ее не существует. Хотите проверить - откройте план счетов, раскройте ветку реквизиты, грохните реквизит ЗапретитьИспользоватьВПроводках  - запустите конфигурацию и попробуйте сформировать ваш запрос
36 DrShad
 
14.09.12
11:27
(35) код в студию! или запишем что ты слился
37 ChAlex
 
14.09.12
11:32
(36) - какой код в студию? Чего? Того - что ЗапретитьИспользоватьВПроводках  - это обыкновенный реквизит плана счетов?
38 DrShad
 
14.09.12
11:37
(37) что он заполняется на уровне кода
39 ChAlex
 
14.09.12
11:45
(38) - я не использую типовых и мне что больше нечем заняться? Мне это не надо, если вы не верите - я вам предложил способ проверить. Более того : http://itmages.ru/image/view/677169/f42d84a3 - пустая конфигурация с добавленым пуствм планом счетов. Покажите мне где тут "ЗапретитьИспользоватьВПроводках". Если это свойство объекта 1с (и как вы утверждаете поддерживается на уровне платформы) - то покажите мне это свойство в документации. Ну дальше - как хотите: можете верить или нет, ваше право.
40 unregistered
 
14.09.12
11:54
Ваш спор бессмысленен, т.к. автор ветки не в состоянии четко сформулировать ответ на простой вопрос "Зачем ему это надо".

Можно или нельзя ориентироваться на реквизит ЗапретитьИспользоватьВПроводках зависит от того для чего ему это нужно.

Например, если для получения движений по этим счетам, то нельзя, т.к. тот счет, который вчера был обычным и имел проводки, сегодня может стать группой (у него появятся субсчета), но проводки от этого ни куда не денутся - они останутся "висеть" на группе.
41 vmv
 
14.09.12
11:59
(0)

1. реквизит Адд_Уровень Число(2,0)+ в плане счетов
2. Подписка на событие Адд_ПередЗаписьюПланаСчетов()
3. собственно вычисление уровня и запись в подписчике

Итого: простое получение уровня в запросах и пр. без дурацких танцев с В Иерархии и т.д., тем более, что на существующем функционале запросов в 1С - это будут танцы на кастылях.

тонцую пака маладой(с)
42 vmv
 
14.09.12
12:00
(40) для отчетов, для форм подбора/выбора, для СКД и т.д. и т.д. и т.д. - вариантов может быть масса, а узать литерал В Иерархии слишком накладно и бессмысленно для шаблонных алгоритмов
43 vmv
 
14.09.12
12:04
крой топ пока истерички не прибежали с мегаидеями и мегазапросами, иба самое простое решение - самое правильное
44 ChAlex
 
14.09.12
12:05
(40) +100 , именно к этому я клонил говоря о том что не совсем правильно использовать ЗапретитьИспользоватьВПроводках - так как не совсем ясна задача.

(42) - получение самого верхнего уровня - не проблема запросом, получение самого нижнего - тоже можно запросом с иерархических обходом выборки и анализом типа записи - и выудить таки самый последний -  но, да геморно. 41 - да минимальные затраты -  но требуют изменения конфигурации. Дальше взвешивать - что в конкретной ситуации лучше
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.