Запрос по таблице значений.... #283944


#0 by Evrik
Подскажите пожалуйста как запросом можно сделать выборку из таблицы значений?:(
#1 by Drx211
В 8.0 - никак
#2 by чувак
К сожалению никак, потому что ТЗ не объект конфигурации
#3 by Evrik
Блин...плохо...очень плохо...
#4 by Drx211
По моему 8.1 может помочь
#5 by PR
, Построителем отчета
#6 by selenat
хрен ты ее еспользовать в таком случае сможешь (например соединить с чем-нить)...
#7 by Vozhd
+ Или построителем запроса...
#8 by Vozhd
Такого условия использования ТЗ в не заявлено, читайте внимательнее
#9 by selenat
по опыту, именно это обычно и надо. А вам лишь бы сказать - какие все вокруг дураки...
#10 by VictorB
и хоть по 10 ТЗ выборку делай с любыми объединениями :) (читайте мануалы)
#11 by VictorB
+ и учите язык запросов
#12 by selenat
с этого места подробнее пожалуйста. Может, пример приведешь? Код рабочий?
#13 by Vozhd
По опыту обычно этого и не надо...
#14 by selenat
значит, ты просто не сталкивался с такими ситуациями...
#15 by Vozhd
Логично, блин!
#16 by Dionisious
Конструктор запроса вроде как работает либо только с ТЗ либо с данными из БД. Но!!! В каком то релизе была ошибка (12 или 13) и платформа позволяла выполнять запросы: ВЫБРАТЬ ИЗ &ТЗ Потом исправили. В 8.1 можно пользовать временные таблицы.
#17 by selenat
обычная ситуация - ТЗ формируется в обработке (например на ее форме) и надо эти данные соединить с какими-то данными в таблицах БД... Это было баг в древнем релизе. Так что не принимается как ответ на . Хотелось бы услышать, что имел в виду ВикторБ...
#18 by Vozhd
Так и передавайте колонки Вашей ТЗ как условия отборов в запрос. Зачем соединять не соединяемое?
#19 by selenat
Потому что одной колонки недостаточно. Из ТЗ нужны предположим связки Номенлатура+Количество...
#20 by selenat
+19 сплошь и рядом в конфе есть запросы, где используются такие конструкции для записанных доков (есть в БД таблицы, откуда можно эти данные брать в связке). А из ТЗ хрен ты такое возьмешь...
#21 by Vozhd
соединять таблицы по полю количество? очень интересно узнать, что за задача решается...
#22 by selenat
предположим, нам надо контролировать остаток товара не при проведении документа, а на стадии его создания из обработки РабочееМестоМенеджера... Да мало ли еще вариантов...
#23 by Vozhd
"нам надо контролировать остаток товара не при проведении документа, а на стадии его создания" ну так и контроллируйте на стадии создания. зачем джойнить ТЗ с таблицей из базы для этого?
#24 by selenat
Да потому что проще эти данные получать непосредственно в запросе, если это возможно, а не потом обходить и проверять. Не говоря о том, что КонтрольОстатков для такой структуры уже написан в типовой (если данные берутся из базы). Я хочу сказать, что обойтись то конечно можно как правило, но иногда вместо прямого получения нужных данных в запросе, приходится в запросе получать избыточную инфу и потом мучительно ее обрабатывать...
#25 by Vozhd
Так храните данные в правильном месте. Мне кажется, что Вы сами себе создаете проблемы, чтобы потом их "героически" преодолевать...
#26 by Vozhd
Так храните данные в правильном местеи проблем не будет. Мне кажется, что Вы сами себе создаете проблемы, чтобы потом их "героически" преодолевать...
#27 by selenat
(25,26) т.е. ты предлагаешь при использовании обработки записывать эти вспомогательные данные в БД? Не красиво это...
#28 by Vozhd
Я предлагаю при проектировании обработки подумать о том, как будете читать данные
#29 by selenat
ну предложи пример. Как можно спректировать обработку, чтоб удобно решить эту проблему?
#30 by selenat
+29 итак?
#31 by selenat
а в ответ тишина...
#32 by Vozhd
Храните данные в одном месте, а не в куче разных. Например, храните все в памяти или в БД, или в файле...
#33 by Vozhd
Извините, что не отпрасился у Вас в туалет...
#34 by selenat
Одна ТЗ - это куча разных мест? Ты предлагаешь чисто вспомогательный инструмент сделать хранимым? Уж лучше тогда получать в запросе избыточные данные и потом их обрабатывать ИМХО...
#35 by Vozhd
Если все данные лежат в одной ТЗ, то необходимости соединения ее с таблицами не возникает...
#36 by selenat
как это не возникает? я тебе пример привел...
#37 by Vozhd
Да, Вы привели хороший пример неудачного планирования структуры данных.
#38 by selenat
я не увидел у тебя предложения - как спланировать удачно. Для данного конкретного случая предложи.
#39 by Vozhd
Так опишите конкретный случай и конкретный ожидаемый результат.
#40 by selenat
есть обработка, в форме которой по некоторому принципу отбирается товар, его количество и возможно какие-то еще данные. Затем по нажатию на кнопку автоматически формируется документ продажи, если этого товара хватает.
#41 by Vozhd
А если товара не хватает, то что?
#42 by selenat
есть варианты. В простейшем случае говорим - чего не хватает и посылаем. Можно вариант с заменой на аналог предложить (если его хватает)...
#43 by Vozhd
Если остатков товара хватает, то что делаем с документом продажи? Проводим, записываем, показываем, печатаем?
#44 by selenat
создаем и показываем. У пользователя есть произвол - записывать его или нет...
#45 by Vozhd
Если я правильно понял, у нас есть: - Остатки товаров, лежащие на сервере, где-то далеко в сети - Список товаров в памяти пользовательского компутера и желаемое количество списания по каждой позиции Хочется: - В памяти пользовательского компа создать документ продажи, заполенный выбранным товаром и указанным количеством по каждой номенклатурной позиции - Если запрашиваемое количество какой-то позиции превышает остатки на складе, то выдаем ошибку "Обратитесь к системному администратору" и кладем систему - После заполнения документа, открываем его форму Возможное решение: Получаем запросом остатки нужных нам номенклатурных позиций. Перебираем результат запроса и для каждой строки проверяем соответствие количеству табличной части обработки. Если проверка не проходит, то выводим сообщение об ошибки и кладем систему. Открываем форму документа.
#46 by selenat
я тебе уже написал об этом в . Понятно, что все это можно сделать. Но если бы была возможность работать с ТЗ в запросе, то решение было бы проще и по написанию кода и по скорости исполнения...
#47 by Vozhd
Такое решение не было бы проще. Оно было бы таким же трудоемким пока 1С использует SQL сервера сторонних производителей...
#48 by France
ставим 11 релиз - в нем можно было использовать таблицу значений... или переходим на 8.1
#49 by selenat
тут спорить не буду. Вопрос о производительности еще смотреть надо. Но написание кода было бы на порядок легче...
#50 by selenat
т.е. можно бежать впереди паровоза в надежде что не задавит или прицепиться к нему сзади в надежде, что не свернем шею.:)))
#51 by Vozhd
Написание кода было бы ровно тем же по трудоемкости, ибо перед выполнение хитрого запроса надо все данные "свалить" в одно место (например в одну БД). Процедуру для этого "сваливания" надо писать. Не могу понять, почему эту простейшую процедуру Вы не можете написать сами и почему ее должны писать обязательно в 1С...
#52 by selenat
в смысле? какие данные куда свалить? Мне пришлось делать как в . Если бы я мог в запросе использовать ТЗ, то я бы получил нехватающие позиции сразу в запросе.
#53 by Vozhd
Не могли бы Вы подробнее объяснить как SQL сервер будет в запросе использовать данные, находящиеся в памяти стороннего приложения, где-то далеко в сети?
#54 by selenat
а как это делается с временными таблицами в 8.1?
#55 by Vozhd
Там есть промежуточные операции: создания временной таблицы и заливки в нее данных. В предложенном мною решении, подобных операций нет. Поэтому не вижу принципиальной разницы в данном конкретном примере...
#56 by selenat
Не видишь принципиальной разницы в производительности или в написании кода? Временная таблица для использования ее в запросе создается в коде как? Одним оператором? Ты не видишь разницы между этим и отсеиванием после запроса всего лишнего?
#57 by Vozhd
Так и в 8.0 я могу в своем коде вызвать процедуру, которая зальет мою ТЗ, в какой-нибудь регистр сведений (это уж если потянуло на извраты). На читабельность кода это не повлияет, а производительность зависит от слишком многих факторов, неоговариваемых в нашем примере...
#58 by selenat
заливать эти данные в хранимые - это действительно изврат, поэтому решение выглядит лучше. Но если бы на уровне платформы была такая возможность, как в 8.1, то было бы еще проще. Поэтому и говорю, что, хоть выход и есть всегда, но бывает, что он либо трудоемкий, либо извращенный. А ты говоришь, что не всречался с ситуациями, где эта возможность могла бы пригодиться...
#59 by Vozhd
Да какая разница на каком уровне(платформа или конфигурация) сделано это решение? Доступ к процедуре будет одним и тем же. До сих пор не могу вспомнить случая, где такая возможность была необходима, ведь даже в Вашем примере проверку остатка можно поставить в момент подбора номенклатуры и тогда вообще никаких связей между таблицами не понадобиться...
#60 by selenat
умгу. И вместо 1 запроса использовать 100...
#61 by Vozhd
Ну если учитывать все обращения к базе, то запрос будет явно не один. А если для заполенния ТЗ использовать форму подбора с остатками, то количество запросов к базе будет не велико.
#62 by selenat
в смысле не один? Имеешь в виду, что обращения будут идти к нескольким источникам? Ну и что? Если контроль на стадии заполнения использовать, то количество запросов увеличится в (количество позиций номенклатуры) раз. Разве нет?
#63 by Vozhd
При желании, количество запросов можно сократить до 1-ого. Но тогда придется писать свою обработку подбора.
#64 by selenat
Форму подбора с уже заполненными остатками? Можно. Но мы снова пришли к увеличению трудоемкости. Разве нет? Еще раз говорю, что все это можно при желании обойти. Но вопрос удобства в таких ситуациях...
#65 by Vozhd
Какая еще трудоемкость? Делается за 5 минут, т.е. много быстрее, чем мы тут это обсуждаем.
#66 by selenat
кстати, в форму подбора та придется заполнять остатки по всей номенклатуре, а не только выбранной... Или я понял тебя не так?
#67 by Vozhd
остатки только по выбранной номенклатуре в форме подбора - это сильно сказано! это 5!
#68 by selenat
выбранной - относится к случаю, когда я сначала выбираю номенклатуру, а потом для нее проверяю наличие остатка. Т.е. я сравниваю твой вариант формой подбора и предыдущие обсуждаемые варианты. По-моему все нормально написал...
#69 by Vozhd
"сначала выбираю номенклатуру, а потом для нее проверяю наличие остатка" - это не столько лишние запросы к базе, сколько лишние действия для пользователя, а значит больше возможности для внесения ошибок в данные, и большие требования к защите от дурака. Поэтому я бы подобную задачу решал через форму подбора с остатками - это и не привело бы к лишним запросам, сразу бы информировало пользователя, а не задним числом, и не потребовало бы лишних соединений ТЗ с БД.
#70 by Vozhd
Но раз Вам принципиально именно возможность свзи ТЗ с БД, то на решении я не настаиваю...
#71 by selenat
думаю, запрос на остатки по всей номенклатуре все-таки не всегда приятная вещь. Ладно, закрыли тему. Надоело. Остаюсь при своем мнении, что есть ситуации, когда удобно использовать ТЗ в запросе...
#72 by selenat
Вот кстати еще мысль пришла. Предположим, в той же задаче надо осатки иметь не просто по номенклатуре, а по связке измерений Номенклатура+Характеристика. В ТЗ обработки предположим 100 строк с указанными комбинациями номенклатуры и характеристики. Без возможности использьования ТЗ в запросе ты получишь выборку 10000 строк (все комбинации указанных номенклатур и характеристик), из которых тебе потом придется найти по составному ключу 100 нужных. Даже с учетом времени загруки исходной ТЗ во временную таблицу запрос с ТЗ будет работать на порядок быстрее, чем такой алгоритм. Критикуй...
#73 by selenat
Куда оппппонент делся? Ау! :))
#74 by Vozhd
Ок. Критикую. На мой взгляд выделять проверку в отдельный шаг - это плохо. Пусть проверка будет совмещена с моментом выбора номенклатуры. Сделай подбор номенклатуры с характеристиками и остатками и проверяй количество при подборе. И опять не нужно будет лепить запрос по ТЗ соединенной с БД. P.S. Если Вы еще и про остатки по складам вдруг вспомните, то я скажу, что и склад можно добавить в подбор. Если же Вы дальше продолжите развивать тему добавления полей в обработку, то супер-подбор номенклатуры органически соединится с этой самой обработкой... Оппонент иногда спит...
#75 by selenat
и опять скатываемся либо к большому количеству запросов, либо к одному, но с немеренным количеством лишней инфы. Кроме того, бывают еще навороты, связанные с автоматической заменой товара на его аналог в случае нехватки. Поэтому отсутствие нужного количества товара в форме подбора еще ни о чем не говорит...
#76 by Vozhd
Не будет большого количества запросов, если не писать лишние запросы. И откуда возьмется лишняя инфа? "бывают еще навороты, связанные с автоматической заменой товара на его аналог в случае нехватки. Поэтому отсутствие нужного количества товара в форме подбора еще ни о чем не говорит" - а если при проверке остатков номенклатура в списке начнет сама заменятся на другую, то это будет хорошо? Как пользователь, я бы расчленил автора такой программы...
#77 by selenat
это как раз требования пользователей. И система с такой заменой в формируемых документах нормально работает...
#78 by Vozhd
Таких требований раньше не заявлялось. Начнем проектирование сначала. Объявите новый список текущих требований.
#79 by selenat
раньше не заявлялось. Но пользователи тоже постепенно добавляют все новые и новые требования. В случае, если у тебя уже есть работающий вариант и пользователи в какой-то момент захотели работать с аналогами и попросили доработать, ты будешь перепроектировать все с нуля?
#80 by Vozhd
Нет, я буду сразу проектировать с учетом возможных вариантов развития ситуации. А добавить возможность использования заменителей в форму подбора никаких проблем не представляет. Мало того, при этом у пользователя окажется возможность управлять использованием заменителей, а в Вашем варианте такой возможности не видно...
#81 by selenat
А ты мог предугадать при той постановке задачи, которая была, что будет такой вариант развития ситуации? Сильно сомневаюсь. Все варианты предугадать в любом случае невозможно. А насчет управлять использованием - по требованию клиента его не должно быть. Обработка должна иметь как можно меньше управляемых моментов, поскольку расчитана на не очень квалифицированный персонал (должна быть простая как молоток)...
#82 by Vozhd
Возможность управлять - это не означает, что обработка будет сложной. Рано или поздно возникнет ситуация, когда квалифицированному сотруднику понадобится возможность управления. Система не должна встать в такой момент. Да и отключить для отдельных категорий пользователей функционал очень легко. А вот срочно добавить функционал - обычно трудно... Да и все варианты предугадывать не зачем, достаточно предугадать 90%, а это легко.
#83 by selenat
Можно. При желании все можно. Т.е. ты сразу на стадии начальной задачи вместо того, чтобы сделать 1 инструмент, будешь ваять трансформер с возможностью работы в 100 разных режимах... Ну чтож, вперед и с песней...
#84 by Vozhd
Эххх... ведь уже неоднократно рассказывал, что ваять я, если и начну, то на самой последней стадии, а не на начальной. И мой код после моего ухода продолжает работать, не смотря на изменения режимов...
#85 by selenat
Ладно, опять скатились к спору ни о чем...
#86 by Vozhd
Да какой тут спор? Есть инструмент, можно его использовать, можно не использовать. Можно валить на него свои сложности, можно не валить. Каждый для себя выбирает свой путь и способ...
#87 by selenat
ладно. Попробуем придумать другую ситуацию. Предположим, есть некоторый документ, у которого есть к примеру в ТЧ те же Номенклатура и Характеристика. Создаем строки, указываем в них Н и Х. Потом жмем на кнопку "Заполнить", которая для введенных Номенклатур и Характеристик выбирает данные из некоторого регистра и заполняет еще какое-то поле ТЧ (например количество). Хотим, чтобы это работало для новых доков с возможностью НЕ ЗАПИСЫВАТЬ документ в базу. Как будешь решать?
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С