8.х Сравнить 2 "Таблицы значений"

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

  1. TopicStarter Overlay
    НиколайН
    Offline

    НиколайН Опытный в 1С

    Регистрация:
    14 фев 2014
    Сообщения:
    246
    Симпатии:
    0
    Баллы:
    26
    Добрый день! Есть 2 таблицы значений, у обоих по 2 колонки "Номенклатура" и "Количество". Нужно сравнить их сравнить. Например в 1-й таблице "Товар 1" кол-во - 20 шт., во 2-й таблицы "Товар 1" кол-во 30 шт. Если Товар 1 из 1-й таблицы < Товар 1 из 2-й таблицы, тогда вывести какой-то результат. Надеюсь Вы поняли меня!!!))) Как это можно сделать?))
  2. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Двумя циклами.
  3. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    запросом :)
  4. TopicStarter Overlay
    НиколайН
    Offline

    НиколайН Опытный в 1С

    Регистрация:
    14 фев 2014
    Сообщения:
    246
    Симпатии:
    0
    Баллы:
    26
    А не могли бы небольшой пример скинуть, никогда просто этого не делал :)
    Последнее редактирование: 23 окт 2014
  5. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Курите в синтаксис помошнике Найти() у таблицы значение

    Делаете цикл по первой таблице и каждую строку ищите во второй.

    Ну правильнее было бы запросом. Т.к вам придется второй цикл делать то же самое по второй таблице т.к в первой может быть товар 1,2,3, а во второй 1,2,4, и цикл только по первой даст вам что товара 3 нет.

    По этому делайте запросом.
    передавате эти обе ТЗ как параметры, объединяйте и вперед
  6. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Я бы циклом сделал.
    Задача пустяковая, выборки данных из ИБ не требуется, смысл скуль этой задачей загружать?
  7. Svb
    Offline

    Svb Опытный в 1С Команда форума

    Регистрация:
    12 янв 2011
    Сообщения:
    980
    Симпатии:
    19
    Баллы:
    29
    Если делать запросом через УстановитьПараметр("Таблица1", ТаблицаЗначений.Выгрузить()), а потом в запросе их соединить - SQL будет загружаться или нет?
  8. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Думаю не будет, т.к. файловая база умеет сама к себе скульные запросы обрабатывать.
  9. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.429
    Симпатии:
    372
    Баллы:
    104
    зачем городить запрос для сверки двух ТЗ?

    в цикле обход первой ТЗ по циклу второй ТЗ

    и если в ТЗ гарантирована позиция однократно - после нахождения позиции из первой во второй прерывать второй цикл, для ускорения работы

    PS
    а уж если ТЗ одинаковы по кол-ву строк и отличны только полем "Количество", то колонку из второй добавить в первую и в один цикл обойти первую ТЗ на сравнение данных двух колонок
  10. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    это все хорошо, но что будет если строк в ТЧ по миллиону в каждой? :)
  11. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Сам не проверял.
    А есть гарантия что скуль отработает быстрее?
  12. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    пардон, количество может быть одинаквое, а вот начинка разная, или в разном порядке, просто так колонку не перекинешь - опять же цикл..
    --- Объединение сообщений, 23 окт 2014 ---
    если логично прерывания циклов сделать - то нормально прокатит - и при чем скуль. если таблицы (ТЗ) локальные?
  13. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Эксперимент специально не ставил, но пока почему-то уверен, что запрос будет быстрее....на порядок(-ки).....
  14. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    nomad, если база файловая, то запрос может и дольше отработать - был эксперимент такой не на млн записей, но все же
  15. TopicStarter Overlay
    НиколайН
    Offline

    НиколайН Опытный в 1С

    Регистрация:
    14 фев 2014
    Сообщения:
    246
    Симпатии:
    0
    Баллы:
    26
    Спасибо большое за советы и дискуссию! Вариант у нас клиент-серверный, количество строк в ТЗ разное, попробую сделать запросом, там посмотрим!
  16. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Не поленился, накидал на коленке обработину.
    Лично у меня, на не самой современной машине результаты следующие:

    Время, затраченное на формирование 500к записей в ТЗ1: 01.01.0001 0:00:54
    Время, затраченное на формирование 500к записей в ТЗ2: 01.01.0001 0:00:49
    Время выполнения запроса: 01.01.0001 0:00:38, количество строк: 500 000

    Запускал 2 раза.

    И это, заметьте, без поиска по ТЗ. База файловая.

    Вложения:

  17. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Ну я тоже не поленился.
    Накидал обработку.
    Если нигде не ошибся, кароче скуль у меня отстает. На 100 тыс. элементах раза в два.. Я конечно понимаю, не оптимальный запрос и все дела.
    Но если там ошибок у меня нет, то все-таки утверждение
    может быть верным. )

    Вложения:

  18. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    запрос не соответствует условиям задачи :)
    Необходимо сравнить количество в обоих ТЗ, а не отобрать строки с бОльшим/меньшим значением.
    Соединение, тем более ВНУТРЕННЕЕ естественно будет работать в таком случае ОЧЕНЬ медленно.
  19. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    о_О
    Здесь не сказано что что-то надо делать, если условие не выполняется. Итоговый набор строк в которых "Товар 1 из 1-й таблицы < Товар 1 из 2-й таблицы" присутствует? Чем же тогда запрос не соответствует условию?
    Ну ок. Кому не нравится, может убрать соединение по неравенству, и потом делать это в обходе выборки. Только тогда еще больший вопрос - для чего там вообще запрос то нужен.. :)
  20. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Посмотрите, как реализовано в моей обработке, именно такое решение имеет задача, судя по описанию.

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