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


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


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 человек.
Рекламное место пустует