8.х Не работает ТабЗнач.Индекс(СтрокаТаблицыЗначения)

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем ave, 14 окт 2009.

  1. TopicStarter Overlay
    ave
    Offline

    ave

    Регистрация:
    3 окт 2009
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Уже голову сломал... Не находится строка таблицы значений по Индекс(). Причем, если искать по Найти(ЛюбоеПоле), то все прекрасно ищется.
    На скриншоте видна вся проблема.

    Вложения:

    • Табло.jpg
      Табло.jpg
      Размер файла:
      24,2 КБ
      Просмотров:
      39
  2. wertklop
    Offline

    wertklop Опытный в 1С

    Регистрация:
    12 май 2008
    Сообщения:
    321
    Симпатии:
    0
    Баллы:
    26
    а методом получить() не пробовал воспользоваться?
  3. TopicStarter Overlay
    ave
    Offline

    ave

    Регистрация:
    3 окт 2009
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Дык Получить() в качестве параметра требует индекс, который-то мне и нужен.
  4. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Показывай весь код - у меня ищеться
  5. TopicStarter Overlay
    ave
    Offline

    ave

    Регистрация:
    3 окт 2009
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Да вроде-ж на скрине всё есть: РеестрОбщ[3] содержит строку таблицы значений с индексом 3;
    Элемент.ТекущиеДанные - тоже содержит строку таблицы значений.
    В Табло эти строки визуально друг от друга не отличаются, а РеестрОбщ.Индекс(Элемент.ТекущиеДанные) возвращает (-1), т.е. строка не найдена.

    Более того, Элемент.ТекущиеДанные это строка из ТЗ, полученной из РеестрОбщ с помощью Копировать().

    Вот тестовый код:
    Код:
    ТЗ1 = Новый ТаблицаЗначений;
    ТЗ2 = Новый ТаблицаЗначений;
    ТЗ1.Колонки.Добавить("Колонка1");
    ТЗ1.Вставить(0);
    ТЗ1.ЗаполнитьЗначения(1);
    ТЗ2 = ТЗ1.Скопировать();
    Сообщить(ТЗ1[0].Колонка1);
    Сообщить(ТЗ2[0].Колонка1);
    Сообщить(ТЗ2.Индекс(ТЗ1[0]));
    
    
  6. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Это две РАЗНЫЕ строки двух РАЗНЫХ таблиц значений.
    Что же вы хотели? :)
  7. TopicStarter Overlay
    ave
    Offline

    ave

    Регистрация:
    3 окт 2009
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    И чем же они (строки) отличаются? Про разницу в таблицах понятно - у них разные имена... ;)
  8. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    У ТаблицыЗначений нет свойства "ТекущиеДанные", а у ЭлементыФормы.ТабличноеПоле - есть.
  9. TopicStarter Overlay
    ave
    Offline

    ave

    Регистрация:
    3 окт 2009
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Скриншот мой смотрели? Там явно написано какой тип у Элемент.ТекущиеДанные.
  10. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Вам же уже сказали, что источники данных разные.

    У вас получается, что вы пытаетесь в объекте ТаблицаЗначений по индексу получить элемент, принадлежащий объекту ЭлементыФормы.ТабличноеПоле. Не находите, что ТаблицаЗначений и ЭлементыФормы.ТабличноеПоле - два разных объекта и значения одного из них, ну никак не могут быть найдены в другом?
  11. TopicStarter Overlay
    ave
    Offline

    ave

    Регистрация:
    3 окт 2009
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    В сообщении #5 есть пример кода, где используются только таблицы значений.
  12. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204

    а ничего, что TЗ1 и ТЗ2 это две разных ТЗ, пусть даже значения и количесвто элементов у них одинаковые?
  13. TopicStarter Overlay
    ave
    Offline

    ave

    Регистрация:
    3 окт 2009
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Оказывается - "чего"... Хотя не понятно, чем их строки отличаются. Да и в Синтакс-помощнике не оговаривается, что нельзя использовать в качестве параметра у Индекс() строку от другой ТЗ.
  14. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Это как бы интуитивно понятно, что нельзя так делать.
    Что есть ТЗ для машины с физической точки зрения? ТЗ - это область памяти, в кот. хранятся значения.

    Вот теперь представь себе, что ты пытался сделать и почему у тебя ничего не получалось.
  15. TopicStarter Overlay
    ave
    Offline

    ave

    Регистрация:
    3 окт 2009
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Ну, интуиция - это такая вещь... :)

    Я не понимаю, что могло помешать разработчикам платформы при реализации метода Индекс() взять значения строки в его параметре, найти соответствие и вернуть индекс найденного? Это риторический вопрос... ;)
  16. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Риторический, дык риторический....
    Если будет не строка, а ссылка?
    Блин, ну как ты не можешь понять, что такое принципиально невозможно?
    Смотри: есть две ТЗ. Для компутера - это две разные области памяти: область памяти А и область памяти В. Представь, что каждая строка ТЗ, это ячейка пямяти, из которых и состоит область. У каждой ячейки памяти как минимум есть уникальный адрес, чтобы не перепутать.

    Ты пытался получить ячейку памяти области А, у которой свой адрес, равную ячейке памяти области B, у которой адрес свой.

    Не находишь абсурдность данного желания?
  17. TopicStarter Overlay
    ave
    Offline

    ave

    Регистрация:
    3 окт 2009
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Пишем в Помощнике: параметр - только строка, ни в коем случае - ссылка...
    Дружище, а что так эмоционально?
    Я ж так и писал: зачем при определении индекса использовать адрес, а не значение? Ведь можно же его найти в два этапа: сначала Найти(значение,колонка), а потом получить Индекс(по полученной строке). И никакие "уникальные адреса" не перепутываются ;)
    Нет, у меня была другая задача.
    Имею право.
  18. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Затем, что можно использовать число(int), а можно ссылку на строку ТЗ - универсальность, епта.
    ну дык тебе 1С передоставляет тебе такую возможность: у ТЗ есть методы НАЙТИ() и ИНДЕКС() - пользуйся....
    твои хотелки идут в разрез с возможностями платформы 1С
    Хотеть - имеешь, больше - вряд ли

Поделиться этой страницей