Здравствуйте!
Конфигурация самописная, но вопрос в целом по запросу.
Есть справочник Номенклатура с реквизитом "UIDВоВнешнейСистеме" (строка, длина 36), в итоге как UID.
(самописная конфигурация, 130 баз, на текущий момент я не встречал в практитке количество записей в справочнике Номенклатура более 300, поэтому на скорость выполнения не жалуюсь).
Суть моего запроса в следующем:
Из внешней системы, я получаю запись следующего вида:
Из UID-from1 я могу сделать 3 номенклатуры (UID-to1, UID-to2, UID-to3). Задача увидеть это в виде ТЗ с наименованиями (ссылками со справочника Номенклатура).
Как корректно реализовать запрос:
1) Для каждого UID-а делаем отдельную связь со справочником номенклатуры по
файлUID = Номенклатура.UIDВоВнешнейСистеме;
2) Помещаем во временную таблицу весь справочник номенклатуры; И из неё, для каждого UID-да вытягиваем нужную ссылку;
3) Подготавливаем все нужные UID-ы в СписокUIDов. Помещаем во временную таблицу справочник номенклатуры с отбором В(&СписокUIDов) ; И из неё, для каждого UID-да вытягиваем нужную ссылку;
______________________
Доп. вопрос, к вышесказанному. У номенклатуры есть реквизит, допустим Артикул, который я бы хотел видеть в ТаблицеЗначений на форме, которую я заполняю вышеуказанным запросом.
Как правильно:
1) Получать артикул при помощи запроса
или
2) На форме, просто вытянуть из ссылки номенклатуры Артикул в таблицу?
_______________________
Пожалуйста, дайте развернутый ответ с пояснением, и с пояснением по части SQL. Как выполнять, почему это правильно, и если не затруднит, при пояснении кратко объясните как такие запросы интерпритирует SQL.
_______________________
Спасибо.
Конфигурация самописная, но вопрос в целом по запросу.
Есть справочник Номенклатура с реквизитом "UIDВоВнешнейСистеме" (строка, длина 36), в итоге как UID.
(самописная конфигурация, 130 баз, на текущий момент я не встречал в практитке количество записей в справочнике Номенклатура более 300, поэтому на скорость выполнения не жалуюсь).
Суть моего запроса в следующем:
Из внешней системы, я получаю запись следующего вида:
Из UID-from1 я могу сделать 3 номенклатуры (UID-to1, UID-to2, UID-to3). Задача увидеть это в виде ТЗ с наименованиями (ссылками со справочника Номенклатура).
Как корректно реализовать запрос:
1) Для каждого UID-а делаем отдельную связь со справочником номенклатуры по
файлUID = Номенклатура.UIDВоВнешнейСистеме;
2) Помещаем во временную таблицу весь справочник номенклатуры; И из неё, для каждого UID-да вытягиваем нужную ссылку;
3) Подготавливаем все нужные UID-ы в СписокUIDов. Помещаем во временную таблицу справочник номенклатуры с отбором В(&СписокUIDов) ; И из неё, для каждого UID-да вытягиваем нужную ссылку;
______________________
Доп. вопрос, к вышесказанному. У номенклатуры есть реквизит, допустим Артикул, который я бы хотел видеть в ТаблицеЗначений на форме, которую я заполняю вышеуказанным запросом.
Как правильно:
1) Получать артикул при помощи запроса
или
2) На форме, просто вытянуть из ссылки номенклатуры Артикул в таблицу?
_______________________
Пожалуйста, дайте развернутый ответ с пояснением, и с пояснением по части SQL. Как выполнять, почему это правильно, и если не затруднит, при пояснении кратко объясните как такие запросы интерпритирует SQL.
_______________________
Спасибо.
По теме из базы знаний
- Курсы валют на разные даты в одном запросе. Делаем свой нестандартный срез последних.
- Смотрим запросы 1С через Microsoft SQL Profiler по следам ошибок разработчиков, приводящих к проблемам производительности
- Как читать чужой код? Часть 3. Разбор и доработка запросов
- Генератор текста запроса
- Начните уже использовать хранилище запросов
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Создать программно ТЗ, загрузить в неё "(UID-to1, UID-to2, UID-to3)" в три колонки (либо ТЗ с формы, если удобно и она уже содержит данные).
Составить запрос, в запросе создать временную таблицу из твоей новой ТЗ.
Затем сделать соединения временной таблицы, со справочником Номенклатура, три раза.
Выполнить запрос, по выборке заполнить ТЗ формы.
Артикул отдельно не обязательно получать, его можно и в предыдущем запросе получить.
Пояснять, даже не знаю, снизошло просто, даже сам не пойму, что написал, словно рукой кто-то водил.
С божьей помощью.
Составить запрос, в запросе создать временную таблицу из твоей новой ТЗ.
Затем сделать соединения временной таблицы, со справочником Номенклатура, три раза.
Выполнить запрос, по выборке заполнить ТЗ формы.
Артикул отдельно не обязательно получать, его можно и в предыдущем запросе получить.
Пояснять, даже не знаю, снизошло просто, даже сам не пойму, что написал, словно рукой кто-то водил.
как такие запросы интерпритирует SQL
С божьей помощью.
(4)
Дружище, вопрос не в том как сделать, а как правильно сделать с точки зрения SQL.
На данном этапе реализовал 3 вариантом, т.е. :
Загружаю полученные данные в виртуальную таблицу;
Из загруженных данных получаю отдельную виртуальную таблицу всех Различные UID-ов.
Получаю запросом справочник номенклатуры с отбором В(&СписокUIDов)
Далее соединяю по 4 раза с предыдущей полученной таблей номенклатуры.
____________
У меня вопрос, насколько это правильно, и вообще в целом как это правильно реализовавать.
, со справочником Номенклатура, три раза.
Дружище, вопрос не в том как сделать, а как правильно сделать с точки зрения SQL.
На данном этапе реализовал 3 вариантом, т.е. :
Загружаю полученные данные в виртуальную таблицу;
Из загруженных данных получаю отдельную виртуальную таблицу всех Различные UID-ов.
Получаю запросом справочник номенклатуры с отбором В(&СписокUIDов)
Далее соединяю по 4 раза с предыдущей полученной таблей номенклатуры.
____________
У меня вопрос, насколько это правильно, и вообще в целом как это правильно реализовавать.
(5) Правильность же это вещь относительная, у каждого она своя, правильность. Кому-то скорость чтения подавай, кому-то записи, кому-то консистентность (почему-то подчеркивается, надеюсь правильно написал), кому-то безопасность. Кому-то правильность логики. И тд. И ведь всё это правильно.
Но думаю, для таблицы из 300 элементов вообще без разницы, как это реализовано.
Но думаю, для таблицы из 300 элементов вообще без разницы, как это реализовано.
(8) вот из-за таких как ты токсичных людей с синдромом завышеного чсв, 1с-ников ненавидят в целом, и этот форум в частности.
Нахрена отвечать язвительными ответами, начиная с первого же твоего ответа? Пройди мимо и все? В чем проблема?
И так, еще совеи, перед тем как давать твои "язвительно-умные" советы, пойди вздерьни на себя в зеркале, может чуть полегчает, хотя старт мани не получшь...
Нахрена отвечать язвительными ответами, начиная с первого же твоего ответа? Пройди мимо и все? В чем проблема?
И так, еще совеи, перед тем как давать твои "язвительно-умные" советы, пойди вздерьни на себя в зеркале, может чуть полегчает, хотя старт мани не получшь...
(11) Давай так, по освновной специальности - я не программист 1С, я не из России, и не из русско-славянской страны. Русския язык не мой родной, и не второстепенно родной язык по одному родителю.
По специфике моей деятельности, мне приходиться работать как с 1С, так и с C#/Java/HTML+js+css (не программировать, а читать-понимать код, знать +- основы и принципы).
Соответсвенно, когда мне что-то интересно, я в первую очередь ищу ответы, не найдя их - задаю вопрос.
И это почти-что единственное комьюнити (имею ввиду комьюнити 1С), которое связано с разработкой, где язвительство и фразы "учи мат часть" и подобные в приоритете.
Вот условно, вместо того, что бы писать мне 3 иронично-язвительных ответа, мог бы дать адекватный ответ, не обязательно мне, раз знания в 1С это позволяют.
Рассмотрим текущий кейс, разработчик сделал следующим образом:
1) Для каждого UID-а делаем отдельную связь со справочником номенклатуры по
файлUID = Номенклатура.UIDВоВнешнейСистеме;
____
По моему мнению, он сделал не правильно, я переделал на
3) Подготавливаем все нужные UID-ы в СписокUIDов. Помещаем во временную таблицу справочник номенклатуры с отбором В(&СписокUIDов) ; И из неё, для каждого UID-да вытягиваем нужную ссылку;
Вопрос был в целом, как это правильно делать.
Да, и насчёт курсов, если предлогаете - то хоть ссылку дайте, т.к.7 лет назад когда пришлось изучать 1С - сдал спеца по платформе, но видите какие вопросы задаю ?
По специфике моей деятельности, мне приходиться работать как с 1С, так и с C#/Java/HTML+js+css (не программировать, а читать-понимать код, знать +- основы и принципы).
Соответсвенно, когда мне что-то интересно, я в первую очередь ищу ответы, не найдя их - задаю вопрос.
И это почти-что единственное комьюнити (имею ввиду комьюнити 1С), которое связано с разработкой, где язвительство и фразы "учи мат часть" и подобные в приоритете.
Вот условно, вместо того, что бы писать мне 3 иронично-язвительных ответа, мог бы дать адекватный ответ, не обязательно мне, раз знания в 1С это позволяют.
Рассмотрим текущий кейс, разработчик сделал следующим образом:
1) Для каждого UID-а делаем отдельную связь со справочником номенклатуры по
файлUID = Номенклатура.UIDВоВнешнейСистеме;
____
По моему мнению, он сделал не правильно, я переделал на
3) Подготавливаем все нужные UID-ы в СписокUIDов. Помещаем во временную таблицу справочник номенклатуры с отбором В(&СписокUIDов) ; И из неё, для каждого UID-да вытягиваем нужную ссылку;
Вопрос был в целом, как это правильно делать.
Да, и насчёт курсов, если предлогаете - то хоть ссылку дайте, т.к.7 лет назад когда пришлось изучать 1С - сдал спеца по платформе, но видите какие вопросы задаю ?
(12) Все он правильно сделал.
А ты - нет.
Он сразу организовал левое соединение по индексированному полю с готовой таблицей.
А ты зачем-то сначала сделал отбор по этой таблице, поместил результат-огрызок во временную дисковую таблицу, а потом опять организовал точно такое же соединение, только не с основной таблицей, а с твоим огрызком.
Подумай над тем, что будет, если в "список UID" приедет только 1 элемент? А если 100 тысяч?
А ты - нет.
Он сразу организовал левое соединение по индексированному полю с готовой таблицей.
А ты зачем-то сначала сделал отбор по этой таблице, поместил результат-огрызок во временную дисковую таблицу, а потом опять организовал точно такое же соединение, только не с основной таблицей, а с твоим огрызком.
Подумай над тем, что будет, если в "список UID" приедет только 1 элемент? А если 100 тысяч?
(13)
Я опишу мою логику:
Изначально, я знаю что из внешней системы мне не придёт никогда список из более чем 30 разных UID-ов.
Так же, изначально я тоже знаю, что сам справочник Номенклатуры, с течением времени будет расти, и теоретически будет достигать 5-10-15-20к). Разработчик об этом тоже знал.
Было, сделано разработчиком:
Мы 4 раза получаем всю таблицу Номенклатуры, далее делаем связь "ПО", по реквизиту с типом "строка" с этими 4 целыми таблицами. Реквизит не индексирован.
(Как представляю я это себе: 1С выдёргивает 4 раза весь справочник номенклатуры в оперативную память, далее 4 раза, идёт поиск по всему справочнику по связи "ПО")
Что сделал я:
В справочнике Номенклатуры у реквизита typeTXT с типом "строка" установил признак "индексировать".
Запросом получаю только те ссылки, которые мне нужны делая запрос к БД всего 1 раз (как вы выразились результат-огрызок).
Получаю конечный результать, сравнивая ПО с одной временной таблицей 4 раза, которая состоит только из нужных мне записей.
_______
Я не совсем понимаю, почему я не делаю правильно, если есть возможность, поясните более подробно.
Насчёт 100 тысяч - в данной реальной ситуации такого быть не может, но если бы было так, я бы реализовал чтение по-порциям, фоновым заданием, что-то типа как "многопоточности"
вую таблицу, а потом опять организовал точно такое же соединение, только не с основной таблицей, а с твоим огрызком.
Я опишу мою логику:
Изначально, я знаю что из внешней системы мне не придёт никогда список из более чем 30 разных UID-ов.
Так же, изначально я тоже знаю, что сам справочник Номенклатуры, с течением времени будет расти, и теоретически будет достигать 5-10-15-20к). Разработчик об этом тоже знал.
Было, сделано разработчиком:
Мы 4 раза получаем всю таблицу Номенклатуры, далее делаем связь "ПО", по реквизиту с типом "строка" с этими 4 целыми таблицами. Реквизит не индексирован.
(Как представляю я это себе: 1С выдёргивает 4 раза весь справочник номенклатуры в оперативную память, далее 4 раза, идёт поиск по всему справочнику по связи "ПО")
Что сделал я:
В справочнике Номенклатуры у реквизита typeTXT с типом "строка" установил признак "индексировать".
Запросом получаю только те ссылки, которые мне нужны делая запрос к БД всего 1 раз (как вы выразились результат-огрызок).
Получаю конечный результать, сравнивая ПО с одной временной таблицей 4 раза, которая состоит только из нужных мне записей.
_______
Я не совсем понимаю, почему я не делаю правильно, если есть возможность, поясните более подробно.
Насчёт 100 тысяч - в данной реальной ситуации такого быть не может, но если бы было так, я бы реализовал чтение по-порциям, фоновым заданием, что-то типа как "многопоточности"
Прикрепленные файлы:




(14) Не совсем понятно, к чему создана тема, если разбираешься, как надо делать, тем более известны детали влияющие на способ реализации ("Реквизит не индексирован"). Нам же это не известно. Да и предлагать улучшения довольно трудно исходя из сумбурного описания.
Конкретика вопроса не ясна, по этому и ответы соответствующие.
Опять же тут напрашивается индексирование.
Конкретика вопроса не ясна, по этому и ответы соответствующие.
(Как представляю я это себе: 1С выдёргивает 4 раза весь справочник номенклатуры в оперативную память, далее 4 раза, идёт поиск по всему справочнику по связи "ПО")
Опять же тут напрашивается индексирование.
(14)
(12)
я тоже знаю, что сам справочник Номенклатуры, с течением времени будет расти, и теоретически будет достигать 5-10-15-20к
(1) я не встречал в практитке количество записей в справочнике Номенклатура более 300
Ты б определился, не?
я бы реализовал чтение по-порциям, фоновым заданием
Ну вот куда вы все такие залихватски тупенькие лезете? И откуда, главное?
(12)
если предлогаете - то хоть ссылку дайте
О, вот это вот "дай", это точно по 1сному. Давай продолжим: И это почти-что единственное комьюнити (имею ввиду комьюнити 1С), которое связано с разработкой
Ну ка, ну ка, дай ка ссылку на другие места где ты задавал этот свой вопрос.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот