Вход | Регистрация


Форумы на Кубань.Ру


1С:Предприятие ::

Метки: 

Выборка из справочника - разные результаты

Ø
Я
   Сюзанна
18.11.04 - 09:53
Это выборка контрагентов, у которых есть только один подчиненный элемент справочника договоры, и у этого договора реквизит ПризнакТекущий равен 0.
Так вот - каждый раз я получаю разные результаты: то 78 контрагентов, то 65, то 108, то снова 78.
Где-то в коде ошибка, туплю...
  СпрКонтр=СоздатьОбъект("Справочник.Контрагенты");
  СпрДог=СоздатьОбъект("Справочник.Договоры");
  СпрКонтр.ВыбратьЭлементы();
  Ит=0;
  Пока СпрКонтр.ПолучитьЭлемент()=1 Цикл
    Если СпрКонтр.ЭтоГруппа()=0 Тогда
      СпрДог.ИспользоватьВладельца(СпрКонтр.ТекущийЭлемент());
      СпрДог.ВыбратьЭлементы();
      Сч=0;
      Пока СпрДог.ПолучитьЭлемент()=1 Цикл
        Если СпрДог.ПометкаУдаления()=0 Тогда
          ТекДог=СпрДог.ТекущийЭлемент();
          Сч=Сч+1;
        КонецЕсли;
      КонецЦикла;
      Если Сч=1 Тогда
        Если ТекДог.ПризнакТекущий=0 Тогда
          Ит=Ит+1;
          ПечКод=СпрКонтр.Код;
          ПечКонтрагент=СпрКонтр.ТекущийЭлемент();
          ПечДоговор=ТекДог;
          Таб.ВывестиСекцию("Сформировать");
        КонецЕсли;
      КонецЕсли;
      Сч=0;
      ТекДог="";
    КонецЕсли;
  КонецЦикла;
 
 
   Дяпти
1 - 18.11.04 - 10:09
Ошибки нет. Может данные так лихо меняются?
   Zerg
2 - 18.11.04 - 10:10
Ошибок в коде нет... Может в таблице че не так...
   Сюзанна
3 - 18.11.04 - 10:11
(1) Нет:(
Я проверяю на базе, в которой никто не работает:(
   Дяпти
4 - 18.11.04 - 10:13
Может переиндексировать базу? Это глюк какой то имхо.
   Frog
5 - 18.11.04 - 10:17
А у контрагента в подчинении может быть только один договор?
   Zerg
6 - 18.11.04 - 10:18
(5) С чего это?
   Frog
7 - 18.11.04 - 10:20
Тогда код какой-то корявый.
   Сюзанна
8 - 18.11.04 - 10:20
(5) Нет, видишь же - по договорам цикл и как раз подсчитывается, сколько договоров. Если один - оно мне и нужно...
   Дяпти
9 - 18.11.04 - 10:21
(8) А у любого контрагента есть как минимум один договор?
   Frog
10 - 18.11.04 - 10:22
т.е активным может быть только 1 договор?
 
  Рекламное место пустует
   Zerg
11 - 18.11.04 - 10:22
(7) И че тут корявого?
(9) Может и нет, какая разница?
   Сюзанна
12 - 18.11.04 - 10:24
(7) Тогда скажи как сделать некоряво?
   Frog
13 - 18.11.04 - 10:24
(11) Иди погуляй, пытаюсь выяснить текст задания, что бы альтернатив предложить, а ты на мозг давишь.
   Zerg
14 - 18.11.04 - 10:25
(13) Смотри не роди...
   Митхун Чакраборти
15 - 18.11.04 - 10:25
(12) Переиндексацию уже сделала?
   Frog
16 - 18.11.04 - 10:26
(12) ответь на вопрос
   Сюзанна
17 - 18.11.04 - 10:26
(10) Теоретически нет. Но я _сначала_ ищу контров только с одним договором, и уже потом смотрю чему равен реквизит "ПризнакТекущий".
   Дяпти
18 - 18.11.04 - 10:26
(11) ты прав, никакой :-)
   Frog
19 - 18.11.04 - 10:28
как скажешь
   god44
20 - 18.11.04 - 10:29
Сделай это в запросе
   Сюзанна
21 - 18.11.04 - 10:31
(12) Сейчас попробую, что ж делать...
   Frog
22 - 18.11.04 - 10:32
А если ты просто прогоняешь цикл по контрам их количество одно и тоже?
СпрКонтр=СоздатьОбъект("Справочник.Контрагенты");
СпрКонтр.ВыбратьЭлементы();
Пока СпрКонтр.ПолучитьЭлемент()=1 Цикл
    Если СпрКонтр.ЭтоГруппа()=1 Тогда
        Продолжить;
    КонецЕсли;
    ПечКод=СпрКонтр.Код;
    ПечКонтрагент=СпрКонтр.ТекущийЭлемент();
    Таб.ВывестиСекцию("Строка");
КонецЦикла;
   Сюзанна
23 - 18.11.04 - 10:34
(20) Я бы с удовольствием, но никак не соображу как там подсчитать кол-во договоров, подчиненных одному контрагенту.
   Frog
24 - 18.11.04 - 10:34
Только
ПечКод=СпрКонтр.ТекущийЭлемент().Код;
   Дяпти
25 - 18.11.04 - 10:35
(24) А есть разница?
   Сюзанна
26 - 18.11.04 - 10:36
(12) Переиндексировала. 5 раз результат получился одинаковым... Можно, наверное, считать, что задача решена:)
   Zerg
27 - 18.11.04 - 10:37
(25) Ага, из-за этого и не правильно считает 8-)
   Frog
28 - 18.11.04 - 10:38
Так сто процентов без глюков. А по другому бывает не происходит позиционирование на элементе. В отладчиен смотришь вроде есть значение, а начинаешь с ним, что-нить делать, а он его не видит
   Дяпти
29 - 18.11.04 - 10:38
Как мило девушка говорит сама с собой :-)
(27) Разница есть: выполняется 1 лишний селект :-)))
   Сюзанна
30 - 18.11.04 - 10:42
(24) Вам - в сад, по-моему...
   god44
31 - 18.11.04 - 11:55
  |Обрабатывать НеПомеченныеНаУдаление;
  |Без итогов;
  |Дог = Справочник.Договоры.ТекущийЭлемент;
  |Контр = Справочник.Договоры.Владелец;
  |Функция Счётчик = Счётчик();
  |Группировка Контр без групп;
  ;
  ................
  Пока Запрос.Группировка() = 1 Цикл
      Если Запрос.Счётчик <> 1 Тогда
    Продолжить;
      КонецЕсли;
           //все что хочешь вывести
  КонецЦикла;
   ANik
32 - 18.11.04 - 11:59
+31 добавить функция СуммаПризнакТекущий=Сумма(признакТекущий)
+ Если ((Запрос.Счётчик <> 1)Или(Запрос.СуммаПризнакТекущий<>0)) Тогда
   god44
33 - 18.11.04 - 12:06
(32)
Дальше исходя из собственной конфы.
Это просто типовой пример.
Вобщем сама разберется.
 
 




Список тем форума

Форум Территория 1С

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