...

Перестали выгружаться корректные данные из Контрагентов

Тема в разделе "Проблемы/ошибки", создана пользователем Mary, 9 авг 2017.

  1. Mary

    Mary New Member

    Перестало работать корректно отображение данных контрагентов разными скриптами. Отображение даже просто в отдельную форму не работает корректно - например меняем любые данные в контрагентах вручную, сохраняем, а отображение скриптом идет старых данных, тип данных не зависит - меняли строки, целые числа, даты. Будто там какой-то кэш, который сохраняется и из него читает. Перезагрузка сервера не помогает. Как думаете, в чем может быть проблема, если раньше все работало нормально?


    Пример кода считывания:
    var put_data = EntityManager<Contractor>.Instance.Find (p => p.Name == context.Administraciya.ToString ());
    foreach (var str in put_data)
    {
    context.StatusAyti = Convert.ToString(str.SdelkaAyTi);
    context.StatusVeb = Convert.ToString(str.SdelkaVEB);
    context.StatusKons = Convert.ToString(str.SdelkaKons);
    context.DataZakrytoyZadachi = str.DataZakrZadachiAyti;
    context.DataZakrytoyZadachi = str.DataZakrZadachiAyti;
    context.DataPoslOtkrZadachi = str.DataPoslOtkrZadachiAyti;
    }

    В коде проблем точно не должно быть, так как месяц назад все работало корректно. Возможно проблема в базе данных PostgreSQL и кто знает как перезагрузить именно базу данных? Проблема встала остро, повисла вся работа и дальнейшая разработка не имеет смысла, если все так будет работать.
     
  2. arkarimov

    arkarimov Member

    Очень непонятно написано, но давайте попробую догадаться: есть контрагент в котором вы что-то меняете, и есть форма в которую скриптом должны загружаться данные.
    При этом в коде вы получаете коллекцию, и в цикле из этой коллекции записываете данные в контекст (а форма всего лишь показывает контекстные переменные).
    Исходя из кода, в контекст будут записаны данные последнего контрагента коллекции подходящего под условия поиска.
    Если меняете данные, а скрипт отображает старые данные, значит вы меняете одного а их два или более.
    Чтобы проверить, перед циклом вставьте Console.WriteLine (put_data.Count); и посмотрите вывод в эмуляторе сценариев (если комм версия)
    Или просто получите единственного контрагента, условия отбора зависят от задачи.
    Код:
    var str = EntityManager<Contractor>.Instance.Find (p => p.Name == context.Administraciya.ToString ()).Single();
    context.StatusAyti = Convert.ToString(str.SdelkaAyTi);
    context.StatusVeb = Convert.ToString(str.SdelkaVEB);
    context.StatusKons = Convert.ToString(str.SdelkaKons);
    context.DataZakrytoyZadachi = str.DataZakrZadachiAyti;
    context.DataZakrytoyZadachi = str.DataZakrZadachiAyti;
    context.DataPoslOtkrZadachi = str.DataPoslOtkrZadachiAyti;
    
    Тогда если я прав и контрагент с таким именем не один - выбросится исключение в процессе.
     
  3. lyashek.s

    lyashek.s New Member

    О какой версии и редакции системы идет речь?
     
    1 это нравится
  4. Mary

    Mary New Member

    Elma Community Edition 3.10.7
     
  5. Mary

    Mary New Member

    Вы правильно меня поняли. НО. Все контрагенты с уникальными именами, причем в имени контрагента используется еще и уникальный номер, выглядит это как "Адм Золотухинский с.с. (Ахтубинс; Астрахан).00517", совпадения исключены.

    put_data.Count выводит для каждого контрагента свое число, непонятно что она там считает, у кого-то 31, у кого-то 4.

    Насчет строки var put_data = EntityManager<Contractor>.Instance.Find(p => p.Name == context.Administraciya.ToString()).Single(); С ней вообще ничего не выводит и функция First() и FirstOrDefault() тоже ничего не выводят, не понятно что случилось, месяц назад все работало.
     
    Последнее редактирование: 9 авг 2017
  6. arkarimov

    arkarimov Member

    Это ключевой момент, если в коллекции возвращается больше одного контрагента, значит у вас N контрагентов заведено с одинаковым "уникальным" именем. Раз считаете его уникальным тут вариантов три: либо в условии что-то не так задали (context.Administraciya.ToString () к неуникальному контрагенту обращается), либо вы вот это уникальное наименование не в поле Name прописываете, либо есть какой то сценарий который делает дубли контрагентов, и у вас в базе есть множество одинаковых контрагентов.
     
  7. lyashek.s

    lyashek.s New Member

    Если можете подключиться к БД выполните запрос:
    SELECT *
    FROM public.contractor
    WHERE
    contractor."Name" = 'Адм Золотухинский с.с. (Ахтубинс; Астрахан).00517';
     
    2 это нравится
  8. Mary

    Mary New Member

    Да, к БД подключились в postgre, там все отлично записывается. Проблема в чтении из базы.

    Обновленная новость - все вдруг стало корректно считываться, хотя ничего не меняли, я так предполагаю, что завтра опять все сломается, потому что баги и глюки совершенно хаотичны (месяц работает, месяц не работает). Всем спасибо за участие.
     

Поделиться: