Имя: Пароль:
1C
1C 7.7
v7: Как обращаться к Группам справочника в методе ПринадлежитГруппе()?
0 MathaiShung
 
25.02.16
17:14
Есть процедура создания Прайс-Листа:        
Процедура Сформировать()
        Тов=СоздатьОбъект("Справочник.Номенклатура");
    Тов.ИспользоватьДату(РабочаяДата());
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    Таб.ВывестиСекцию("Шапка");
    Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
    Тов.ВыбратьЭлементы();
    Пока Тов.ПолучитьЭлемент() >0 Цикл
      Если Тов.ПринадлежитГруппе("яяя")=0 Тогда
        Если Тов.ПометкаУдаления()=0 Тогда
          Если Тов.ЭтоГруппа()=1 Тогда
              Таб.ВывестиСекцию("Группа")
          Иначе            
                  ПечКод=Тов.Код;
              ПечТовар=Тов.Наименование;
              ПечРозн=Формат(Тов.РозничнаяЦена,"Ч9.2, ");
          Таб.ВывестиСекцию("Строка_1");
          КонецЕсли;
        КонецЕсли;
      КонецЕсли;
    КонецЦикла;
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Прайс-Лист","");
КонецПроцедуры

Нужно чтобы в прайс попадали только элементы справочника номенклатуры не входящие в группу яяя. Сейчас, метод Тов.ПринадлежитГруппе("яяя") не определяет никакую группу (если поставить в условии =1, тогда формируется пустой прайс). Может я неправильно ввожу параметр <Группа> ? Или в чём дело?
1 ДенисЧ
 
25.02.16
17:15
"яяя" это не группа. Это строка
2 MathaiShung
 
25.02.16
17:17
А как тогда вызвать группу?
3 Злопчинский
 
25.02.16
18:11
(2) тем или иным образом спозиционироваться на нуэном элементе-группе справочника.
Ссылку на этот элемент использовать в данном операторе
4 MathaiShung
 
25.02.16
18:17
Не подскажете каким, например, способом можно на этом элементе спозиционироваться?
5 Злопчинский
 
25.02.16
18:23
Наилучшим способом будет задание предопределенной настройки, например завести константу и в нее выбрать эту "предопределенную" группу.

второй - быдлокодерский вариант - найти данный элемент по наименованию или по коду - см. синтакс-помощник, методы для справочника НайтиПоКоду и НайтиПоНаименованию - следует понимать, если данную группу переименуют в "ююю" или не дай бог другую нужную группу поименуют "яяя" - то случится большая (_о_)
6 MathaiShung
 
25.02.16
18:34
Спасибо. Наверное сделаю с константой. Пробовал делать НайтиПоНаименованию - выдаёт ошибку "Не выбран элемент"
7 palpetrovich
 
25.02.16
18:37
(0) "Есть процедура создания Прайс-Листа" - она где есть? если на какой-то форме, то заведи на ней-же реквизит ВыбГруппа и его и выбирай.
И еще, не надо тебе этого "      Если Тов.ПринадлежитГруппе("яяя")=0 Тогда
"
делай так
...
Тов.ИспользоватьРодителя(ВыбГруппа);
Тов.ВыбратьЭлементы();
    Пока Тов.ПолучитьЭлемент() >0 Цикл
...
8 palpetrovich
 
25.02.16
18:41
+ (7)  хотя, судя по коду в (0), группу "яяя" надо исключить из резултатат ...если в (0) нет ошибки конечно :)
9 MathaiShung
 
25.02.16
20:27
Всё правильно, мне как раз надо исключить эту группу - я написал об этом в пояснении под кодом. Поэтому реквизит добавлять нет смысла. А вот почему при использовании НайтиПоНаименованию получается ошибка?
10 MishaD
 
25.02.16
20:35
(5) Советник, а ведь придется еще обработку писать, чтобы эту группу в константу запихнуть.
11 Это_mike
 
25.02.16
21:10
(10) хорошо, что пока не требуется написать обработку, чтоб написать обработку...
12 HawkEye
 
25.02.16
21:45
(10) ну обычно в типовых, обработка для заполнения констант уже есть, надо просто разрешить выбирать там группу...
13 MathaiShung
 
25.02.16
21:46
(10)Да, действительно с константой какая-то беда получается - я не знаю как в семёрке добавить в неё группу. Может кто-нибудь всё-таки подскажет как мне решить проблему с исключением данной группы из перебора с помощью метода НайтиПоНаименованию? Сейчас возвращает ошибку (6)
Делаю так:

Тов=СоздатьОбъект("Справочник.Номенклатура");
Тов.ВыбратьЭлементы();
ГруппаИскл=Тов.НайтиПоНаименованию("яяя",0,1);
Пока Тов.ПолучитьЭлемент() >0 Цикл
Если Тов.ПринадлежитГруппе(ГруппаИскл)=0 Тогда
Если Тов.ПометкаУдаления()=0 Тогда
Если Тов.ЭтоГруппа()=1 Тогда
Таб.ВывестиСекцию("Группа")

и т.д.... как в (0)
Если НайтиПоНаименованию ставлю перед ВыбратьЭлементы - ошибка: "Не выбран элемент", если после - ошибки нет, но и группу из прайса не исключает.
14 MathaiShung
 
25.02.16
21:47
(13) и элементы это группы тоже не исключаются
15 HawkEye
 
25.02.16
21:48
(13) для группы используй другую переменную...
16 MishaD
 
25.02.16
21:49
Ты синтакс помошник то посмотри, если мне память не изменяет, то найтиПоНаименованию возвращает 0 или 1. То есть найдена группа, или нет.
17 marvak
 
25.02.16
21:52
В (16) правильно написано
Если Тов.НайтиПоНаименованию("яяя",0,0) = 1 Тогда
ГруппаИскл = Тов.ТекущийЭлемент();
....
18 marvak
 
25.02.16
21:53
(14)
Вы бы поизучали что ли материал для начала, прежде чем код писать.
)))
19 HawkEye
 
25.02.16
21:53
(13) как-то так:

Тов=СоздатьОбъект("Справочник.Номенклатура";
гр=СоздатьОбъект("Справочник.Номенклатура");
Если гр.НайтиПоНаименованию("яяя",0,1) = 1 Тогда
Тов.ВыбратьЭлементы();
Пока Тов.ПолучитьЭлемент() >0 Цикл
Если Тов.ПринадлежитГруппе(Гр.ТекущийЭлемент())=0 Тогда
Если Тов.ПометкаУдаления()=0 Тогда
Если Тов.ЭтоГруппа()=1 Тогда
.....
20 MathaiShung
 
25.02.16
21:53
(16) Да, я смотрел, но посоветовали же (5). Вот я и думаю как мне с её помощь ссулку на эту группу получить.
21 MathaiShung
 
25.02.16
21:56
(18) Если бы в материале было всё понятно я бы сюда наверное не обращался
22 HawkEye
 
25.02.16
21:58
(21) ну так-то в СП по русски написано, что возвращает НайтиПоНаименованию... и что надо передать в ПринадлежитГруппе...
23 marvak
 
25.02.16
21:58
(21)
Я намекаю на ошибку в  ГруппаИскл=Тов.НайтиПоНаименованию("яяя",0,1)
24 Это_mike
 
25.02.16
22:00
(22) так он учился читать сп для 8. А чтение сп для 7.7 сильно отличается...
25 MathaiShung
 
25.02.16
22:04
(22) То что там написано я и сам знаю. Мне непонятно было как с помощью этого ссылку на саму группу получить.
26 mishaPH
 
модератор
25.02.16
22:08
(0) принадлежит группе "ЯЯЯ" это не верно. ЯЯЯ у тебя строка а должна быть группа спр. в (19) верно. сначала найди группу, а потом смотри ей принадлежность

а вообще лучше в запросе делать а не перебором справочника.
27 mishaPH
 
модератор
25.02.16
22:09
(25) твоя ошибка в том, что ты выясняешь принадлежность к группе неверно. Группа должна быть элемент справочника а не тестовая строка
28 HawkEye
 
25.02.16
22:09
(25) не может человек, который знает что написано в СП родить код из (13)
29 MathaiShung
 
25.02.16
22:10
(24) Ты чё поумничать сюда зашёл что ли?! Если по делу сказать нечего - не засерай тему!
30 mishaPH
 
модератор
25.02.16
22:11
Процедура Сформировать()
    Тов=СоздатьОбъект("Справочник.Номенклатура");
    Тов.НайтиПоНаименованию("яяя",0,1);
    ГруппаА = Тов.ТекущийЭлемент();

    Тов.ИспользоватьДату(РабочаяДата());
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    Таб.ВывестиСекцию("Шапка");
    Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
    Тов.ВыбратьЭлементы();
    Пока Тов.ПолучитьЭлемент() >0 Цикл
      Если Тов.ПринадлежитГруппе(ГруппаА )=0 Тогда
        Если Тов.ПометкаУдаления()=0 Тогда
          Если Тов.ЭтоГруппа()=1 Тогда
              Таб.ВывестиСекцию("Группа")
          Иначе            
                  ПечКод=Тов.Код;
              ПечТовар=Тов.Наименование;
              ПечРозн=Формат(Тов.РозничнаяЦена,"Ч9.2, ");
          Таб.ВывестиСекцию("Строка_1");
          КонецЕсли;
        КонецЕсли;
      КонецЕсли;
    КонецЦикла;
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Прайс-Лист","");
КонецПроцедуры
31 Провинциальный 1сник
 
25.02.16
22:11
(25) См. (17).
В 7.7 метод НайтиПоНаименованию не возвращает ссылку. Он возвращает признак успешности поиска и позиционируется на нужном элементе(группе). Соответственно, надо после успешного поиска получать ТекущийЭлемент() - это и будет ссылка.
32 HawkEye
 
25.02.16
22:15
(29) тебе по делу все уже сказали, ничего нового, кардинально отличающегося от сказанного не будет....
33 MathaiShung
 
25.02.16
22:44
(28) (32) Да я в общем-то и понял уже после (19) в чём была ошибка. Спасибо за разъяснения. А что касается неверного применения вышеуказанного метода - тут путаница произошла из-за того, что в СП написано одно, а на некоторых интернет-ресурсах совершенно другие примеры его применения.
2 + 2 = 3.9999999999999999999999999999999...