![]() |
1 2 3 ► |
1С:Предприятие
:: 1С:Предприятие 8 общая
|
|
| ||
ValeriTim 03.03.21 - 14:48 | Есть куча сформированных документов, у которых дата (вплоть до секунды) одинакова. Формирую запрос по регистру и хочу получить последний сформированный документ. Так вот вопрос в запросе МАКСИМУМ(ИмяРегистра.Регистратор) всегда будет возвращать последний документ? Как вообще работает МАКСИМУМ(Ссылка) ? | ||
ДенисЧ 1 - 03.03.21 - 14:49 | Нет | ||
PR 2 - 03.03.21 - 14:50 | (0) Сначала получаешь максимум по секунде, потом по ссылке, то есть работает максимум по секунда + ссылка | ||
Волшебник 3 - 03.03.21 - 14:51 | Запрос к документам — плохая примета. | ||
ValeriTim 4 - 03.03.21 - 14:52 | |||
Casey1984 5 - 03.03.21 - 14:53 | (2) Момент времени тоже самое не даст? | ||
hhhh 6 - 03.03.21 - 14:54 | (4) ИмяРегистра.Регистратор - это документ | ||
ValeriTim 7 - 03.03.21 - 14:56 | (2) Причем, если я правильно понял, это должен быть подзапрос в подзапросе ... потому как в одном подзапросе МАКСИМУМ сразу по двум полям дает какую то ахинею. | ||
ValeriTim 8 - 03.03.21 - 14:56 | (5) Нельза сделать МАКСИМУМ по моменту времени | ||
ValeriTim 9 - 03.03.21 - 14:57 | (6) Это ссылка на документ | ||
PR 10 - 03.03.21 - 14:58 | (7) Лучше временная таблица, а потом по ней уже вторая, в одном будет ахинея, да | ||
youalex 11 - 03.03.21 - 15:01 | (2) интересно, тип ссылки играет при МАКСИМУМ(Ссылка) ? | ||
Дык ё 12 - 03.03.21 - 15:02 | (8) это не совсем так | ||
ValeriTim 13 - 03.03.21 - 15:03 | (12) обоснуй | ||
ssh2006 14 - 03.03.21 - 15:03 | (0) уид не грантирует хронологическую последовательность. Правильно получать остатки на конец этой секунды вид границы включая | ||
NorthWind 15 - 03.03.21 - 15:04 | (0) мне кажется, сравнивать между собой ссылки глупая идея. Ссылка делает ровно то для чего она создана, т.е. ссылается на документ, а ее поведение в плане "больше-меньше" никак не определено. | ||
NorthWind 16 - 03.03.21 - 15:05 | если нужен последний введенный документ - максимизируйте по Дате и запрещайте юзерам менять ее вручную. | ||
ValeriTim 17 - 03.03.21 - 15:07 | (14) Дело в том, что мне нужны не остатки, а приход (т.е. последнее движение в дате) | ||
Йохохо 18 - 03.03.21 - 15:07 | (15) платформа же гарантирует порядок | ||
ValeriTim 19 - 03.03.21 - 15:08 | (16) Не вариант (запрещать) имеем то, что имеем | ||
acht 20 - 03.03.21 - 15:08 | (11) Технически - да. Логически... Что больше: больничный или приходная накладная? | ||
PR 21 - 03.03.21 - 15:09 | (14) Бред | ||
novichok79 22 - 03.03.21 - 15:10 | в ссылке binary16 вроде бы, будет что-нибудь такоеSELECT MAX(Q_000_T_001.ID),
"Тест для Мисты"
FROM
Document769 Q_000_T_001
будет максимум вот этого набора байт, он не гарантирует, что документ - последний. | ||
PR 23 - 03.03.21 - 15:11 | (15) Когда кажется, крестятся
В рамках секунды документы сортируются именно по гуиду, более того, секунду можно поменять и порядок документов поменяется, а в рамках секунды — нет, если идет сначала гуид 1, а потом гуид 2, то так и только так навсегда | ||
PR 24 - 03.03.21 - 15:11 | (16) Не советуй, если не в теме | ||
PR 25 - 03.03.21 - 15:12 | (20) То, у чего больше гуид | ||
PR 26 - 03.03.21 - 15:14 | (22) Гарантирует
Последний — это у кого в максимальной секунде максимальный гуид, а не тот, который позже всех ввели | ||
Дык ё 27 - 03.03.21 - 15:15 | (13) по моменту времени возможно упорядочивание, а значит возможно и вычисление максимума:
ВЫБРАТЬ ПЕРВЫЕ 1 Док.МоментВремени КАК максимум ИЗ Документ.Документ1 КАК Док УПОРЯДОЧИТЬ ПО максимум УБЫВ | ||
ValeriTim 28 - 03.03.21 - 15:17 | (27) Ну, сделай запрос с МАКСИМУМОМ | ||
Вафель 29 - 03.03.21 - 15:18 | максимум по ссылке конечно будет последним ибо там индекс по ссылке. последний, но не последний введенный | ||
PR 30 - 03.03.21 - 15:20 | Рекламное место пустует | ||
Casey1984 31 - 03.03.21 - 15:22 | (8) Моя жизнь поделилась на до и после. | ||
Почему 1С 32 - 03.03.21 - 15:23 | |||
PR 33 - 03.03.21 - 15:26 | (32) Солидарен с неверным предположением? Бывает | ||
Сисой 34 - 03.03.21 - 15:28 | Можно упорядочивать по МоментВремени DESC.
И - ВЫБРАТЬ ПЕРВЫЕ 1. Или у меня склероз уже? | ||
Почему 1С 35 - 03.03.21 - 15:28 | (33) Что там не верного? Как определены операции больше меньше для ссылок (GUID), есть какие то есть правила? | ||
ValeriTim 36 - 03.03.21 - 15:29 | (32) Он абсолютно прав - я могу создать два документа в одной секунде, а потом у последнего (созданного) поменять дату (02.01.2021 10:00:00) на меньшую (01.01.2021 9:00:00), в итоге МАКСИМУМ(Период + Ссылка) на дату (02.01.2021 10:00:00) выдаст первый созданный документ, а МАКСИМУМ(Ссылка) - второй | ||
PR 37 - 03.03.21 - 15:29 | (32) Рукалицо Еще раз 1. Максимум(Ссылка) в рамках секунды даст последний введенный документ, при условии, что гуид назначался автоматом2. Принудительно сгенерить документу гуид, который в рамках секунды идет раньше другого документа тоже можно 3. Сравнивать гуиды без секунды бесполезно, потому что если я ввел документ, он теперь последний, а потом я поменял у него дату на год назад, то он что, блеать, теперь все-равно самый последний что ли? | ||
ValeriTim 38 - 03.03.21 - 15:30 | (34) Ну если бы мне нужно было это делать только по одной (например) номенклатуре, то да, а вот если мне нужно найти все последние движения по списку, то ... | ||
PR 39 - 03.03.21 - 15:30 | (34) Упорядочивать можно
Не помню, правда, момент времени — это секунда + дата или просто ссылка Надо бы проверить | ||
ValeriTim 40 - 03.03.21 - 15:31 | (39) Момент времени это Период + Ссылка (только посмотрел) | ||
PR 41 - 03.03.21 - 15:31 | (35) Неверно то, что гуиды идут как насрали Они идут по порядку Про сравнение не подскажу, заитээсь | ||
Почему 1С 42 - 03.03.21 - 15:34 | (41) Почему я читаю в посте два противоположных утверждения "Неверно то, что гуиды идут как насрали" "Они идут по порядку" | ||
PR 43 - 03.03.21 - 15:34 | (40) Ну, может тогда и можно упорядочить и выбрать первые 1
Если тебе нужно получить только один последний документ, то может лучше всего так и сделать | ||
PR 44 - 03.03.21 - 15:36 | (42) Для тебя противоположно?
Неверно то, что 2 + 2 может быть = чему угодно Верно то, что 2 + 2 = 4 и только 4 | ||
ValeriTim 45 - 03.03.21 - 15:36 | (43) Да кабы один ... Есть регистр продаж - нужно найти (причем хитро) последние приходы по списку проданных товаров. Если было бы все просто - я бы вопросы не задавал ... :) | ||
PR 46 - 03.03.21 - 15:37 | (45) Рукалицо Учись задавать вопросы Тогда (2) | ||
ValeriTim 47 - 03.03.21 - 15:38 | (46) Не начинай ... я так и делаю :) | ||
VladZ 48 - 03.03.21 - 15:40 | (0) Почему нельзя получить максимум по номеру? | ||
acht 49 - 03.03.21 - 15:42 | (25) Не умничай.
Запрос типа ВЫБРАТЬ МАКСИМУМ(Ссылка) ИЗ ( ВЫБРАТЬ ПЕРВЫЕ 1 Ссылка ИЗ Справочник.Валюты ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 Ссылка ИЗ Справочник.Сотрудники ) Подзапрос Превращается в SELECT SUBSTRING(MAX(T1.Q_001_F_000TRef + T1.Q_001_F_000RRef),1,4), SUBSTRING(MAX(T1.Q_001_F_000TRef + T1.Q_001_F_000RRef),5,16)FROM ( SELECT TOP 1 0x000004F0 AS Q_001_F_000TRef, T2._IDRRef AS Q_001_F_000RRef FROM dbo._Reference1264 T2 UNION ALLSELECT TOP 1 0x00000001 AS IDTRef, T3._IDRRef AS IDRRef FROM dbo._Reference1 T3 ) T1 Ты все утверждаешь, что больше тот, у кого гуид больше? | ||
PR 50 - 03.03.21 - 15:43 | (47)
ВЫБРАТЬ
Продажи.Номенклатура КАК Номенклатура,
МАКСИМУМ(Продажи.Период) КАК Период
ПОМЕСТИТЬ ВТМаксимумПоСекунде
ИЗ
РегистрНакопления.Продажи КАК Продажи
СГРУППИРОВАТЬ ПО
Продажи.Номенклатура
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Продажи.Номенклатура КАК Номенклатура,
МАКСИМУМ(Продажи.Регистратор) КАК Регистратор
ИЗ
РегистрНакопления.Продажи КАК Продажи
ЛЕВОЕ СОЕДИНЕНИЕ ВТМаксимумПоСекунде КАК ВТМаксимумПоСекунде
ПО Продажи.Номенклатура = ВТМаксимумПоСекунде.Номенклатура
И Продажи.Период = ВТМаксимумПоСекунде.Период
СГРУППИРОВАТЬ ПО
Продажи.Номенклатура
| ||
PR 51 - 03.03.21 - 15:43 | (48) Вон из профессии | ||
ValeriTim 52 - 03.03.21 - 15:43 | (51) Опередил ... :) | ||
PR 53 - 03.03.21 - 15:44 | (49) Причем здесь справочники, если мы про документы и сравнение в рамках секунды? | ||
acht 54 - 03.03.21 - 15:48 | (53) Не ерзай. Ты прямо ответил на вопрос "Что больше: больничный или приходная накладная?" фразой "То, у чего больше гуид". Сейчас ты пытаешся приплести сюда уже секунды.
Вот тебе документы: ВЫБРАТЬ МАКСИМУМ(Ссылка) ИЗ ( ВЫБРАТЬ ПЕРВЫЕ 1 Ссылка ИЗ Документ.ВыплатаЗарплаты ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПЕРВЫЕ 1 Ссылка ИЗ Документ.Больничный ) Подзапрос SELECT SUBSTRING(MAX(T1.Q_001_F_000TRef + T1.Q_001_F_000RRef),1,4),SUBSTRING(MAX(T1.Q_001_F_000TRef + T1.Q_001_F_000RRef),5,16) FROM (SELECT TOP 1 0x000012F2 AS Q_001_F_000TRef, T2._IDRRef AS Q_001_F_000RRef FROM dbo._Document4850 T2 UNION ALL SELECT TOP 1 0x000007B5 AS IDTRef, T3._IDRRef AS IDRRef FROM dbo._Document1973 T3) T1 Приходной накладной, извини, не было. | ||
Почему 1С 55 - 03.03.21 - 15:49 | (44) В каком порядке идут GUID? Что для гуид есть порядок , и что он характеризует (временной порядок или какой другой, который может быть использован для чего либо)? | ||
hhhh 56 - 03.03.21 - 15:51 | (53) всё равно никакой гарантии, что будет выбран именно последний документ, нет. Во-первых, они кучкуются по виду документов, если регистраторы разных видов. А во-вторых, если пришли по обмену из другого узла, то тоже всё нарушается. | ||
Йохохо 57 - 03.03.21 - 15:53 | (56) ну по виду они не кучкуются) | ||
PR 58 - 03.03.21 - 15:54 | (54) Да капец
Для таких как ты, даже на упаковке пластилина пишут "Не есть"
Еще раз, ВСЕ сравнения ЛЮБЫХ ссылок на ДОКУМЕНТЫ корректно проводить только в рамках одной и той же секунды
Просто потому, что если ты поменяешь дату документа на год раньше, то он как бы явно станет меньше того, который идет годом позже, а ссылка у него при этом не поменяется, то есть (23) Сравнение же ссылок на что-то другое, на справочники, например — это вообще что-то непонятное, какой смысл их сравнивать? Но вообще, по логике, раз нет даты, то, наверное, последняя введенная ссылка будет максимальной, да В документе порядок очень важен, потому что потом эта шляпа используется в регистрах, где важно, сначала приходная накладная была, а потом расходная или наоборот А в справочниках какова роль порядка ссылок? | ||
Dzenn 59 - 03.03.21 - 15:54 | Для корректного упорядочивания по ссылке есть оператор запроса АВТОУПОРЯДОЧИВАНИЕ. Однако, если мне память не изменяет, его использование отключает получение N первых.
Оператор запроса МАКСИМУМ(Ссылка) лишён смысла. Это точно неверно. | ||
PR 60 - 03.03.21 - 15:54 | Рекламное место пустует | ||
acht 61 - 03.03.21 - 15:57 | (58) Рома. В нашем разговоре речь про то что нельзя сравнивать ссылки разных типов, а не о том, что ты себе вообразил и тут вещаещь на всех. Представь себе, что оба документа оформлены на начало одного и того же дня. | ||
ssh2006 62 - 03.03.21 - 15:57 | (53) подтяни базу. Момент времени - это дата + ссылка. Благодаря этому решаетсмя вопрос однозначного упорядочивания джокументов на оси времени. Но о фактическом моменте содания документа там ничего нет. Более того есть метод УстановитьСсылкуНового которым можно задать ссылку документа | ||
PR 63 - 03.03.21 - 15:58 | (56) Во-первых, возможно кучкуются, не знаю
Во-вторых, с фига ли что нарушается, если дата и ссылка те же? В-третьих, если кувалдой по серверу дать, то там вообще все нарушится, да, но мы же говорим про обычную ситуацию, про то, что дает нам система, без кувалды, замены ссылок и прочего ручного вмешательства | ||
PR 64 - 03.03.21 - 16:02 | (57) Скорее всего не кучкуются, да Наводит на эту мысль две вещиСравнивается же по гуиду, а не по типу документа + гуид И в СКД если расшифровать тот же регистр накопления по регистраторам, что-то я не заметил, что в рамках секунды идут сначала все приходные накладные, а потом расходные или наоборот Вообще, поскольку на каждый тип метаданных выделяется свой пул гуидов, думаю, стоит уточнить, что сравнение не по гуиду, а по части гуида, то есть (49) прав в том, что там сравниваются не гуиды целиком, иначе бы да, сначала всегда бы шли все документы одного типа, потом все документы другого типа и т. д. | ||
youalex 65 - 03.03.21 - 16:03 | для Регистра накопления:
УПОРЯДОЧИТЬ ПО МоментВремени ORDER BY (T1._Period), (T1._RecorderTRef), (T1._RecorderRRef) т.е. по периоду, по типу, по уиду (binary) | ||
PR 66 - 03.03.21 - 16:03 | (59) Его смысл — получить последний документ в рамках секунды | ||
PR 67 - 03.03.21 - 16:04 | (61) Так а как же по твоему тогда быть с журналами документов? А с регистраторами регистров? | ||
PR 68 - 03.03.21 - 16:05 | (62) Ну вот почему, если в ветке больше десяти постов, то после полусотни постов появляются кадры, которые начинают яростно говорить то, что уже было сказано раньше? Читай ветку | ||
PR 69 - 03.03.21 - 16:06 | (65) То есть сначала все ПН, потом все РН, потом все перемещения и т. д.? | ||
PR 70 - 03.03.21 - 16:09 | +(69) Вот насчет этого не уверен, в рамках одной секунды может так и есть, надо проверить | ||
Dzenn 71 - 03.03.21 - 16:10 | (66) Для сортировки в рамках секунды предназначен оператор МоментВремени. Нет разве? | ||
PR 72 - 03.03.21 - 16:11 | |||
Dzenn 73 - 03.03.21 - 16:18 | (72) Максимум(МоментВремени) не работает разве? | ||
PR 74 - 03.03.21 - 16:19 | (73) Ты умеешь читать? | ||
PR 75 - 03.03.21 - 16:23 | Справедливости ради, отчасти (чуть-чуть) я согласен с (31)
Сейчас припоминаю, что раньше я пытался взять максимум по моменту времени, не смог, и даже вроде нашел это на ИТС что ли, но в голове все-равно не отложилось, спросили бы, не сказал бы уверенно, можно или нет | ||
PR 76 - 03.03.21 - 16:29 | +(75) Пытался взять как раз в рамках решения задачи типа задачи ТС, кстати, в итоге пришел к варианту (50), что, помню, дико раздражало своей сложностью, особенно учитывая то, что там все было еще сложнее и не два этапа, а этапов пять что ли, потому что нужно было получить не максимальный документ по номенклатуре, а что-то еще замороченнее | ||
rsv 77 - 03.03.21 - 16:34 | (0) а в чем смысл агрегатных функций для бинарного типа ? | ||
PR 78 - 03.03.21 - 16:37 | (77) Так тут же Всегда ли в запросе МАКСИМУМ(Ссылка) вернет последний документ? уже вроде ответили, в чем | ||
ssh2006 79 - 03.03.21 - 16:42 | " Однако следует учитывать, что значение ссылки генерируется системой без какой-либо гарантии получения неубывающей последовательности. То есть взаимное расположение в хронологической последовательности двух документов имеющих одинаковую дату (включая время) не зависит от порядка создания документов или от чего-то другого. Соответственно не существует возможности изменить порядок расположения двух документов в пределах одной секунды. Таким образом, порядок двух документов с одинаковой датой можно считать неопределенным, но система обеспечивает неизменность этого порядка после записи документов. "
https://its.1c.ru/db/metod8dev/content/2737/hdoc | ||
PR 80 - 03.03.21 - 16:49 | (79) Ну, в целом сказано все то, что и сказано в этой ветке, кроме генерации ссылки
Добавлено про номер строки для регистров, это правда Про генерацию ссылки сказано, что в принципе ссылка может быть сгенерена какой угодно, даже меньшей, чем уже существующая в этой секунде Но при этом, если не вмешиваться в формирование ссылок, то вроде как следующая ссылка всегда больше предыдущей И это не отменяет того, что потом-таки упорядочивается по ссылке | ||
PR 81 - 03.03.21 - 16:50 | (80) "Но при этом, если не вмешиваться в формирование ссылок, то вроде как следующая ссылка всегда больше предыдущей" — это я про собственный опыт, если че | ||
Половинкин 82 - 03.03.21 - 16:54 | (80) А если "ссылки" генерируются в нескольких внешних системах параллельно? | ||
PR 83 - 03.03.21 - 17:04 | (82) Тогда это ручная генерация ссылок, со всеми вытекающими | ||
Половинкин 84 - 03.03.21 - 17:09 | (83) В каком это месте она "ручная"? Например, в ЦБ загружаются ОРП с 1000 магазинов, это у тебя "ручная генерация", что-ли? | ||
PR 85 - 03.03.21 - 17:14 | (84) Да
Не ручная — это когда все ссылки генерит сама база, в которой эти ссылки содержатся А в данном случае ссылки генерятся в других базах и назначаются уже сгенеренные | ||
mikecool 86 - 03.03.21 - 17:48 | зато в Фузине этот вопрос точно решен | ||
mikecool 87 - 03.03.21 - 17:52 | как говорил один товарищ - не надо нагружать сервер излишними операциями, особенно сортировками
хреначьте все на клиенте | ||
hhhh 88 - 03.03.21 - 18:13 | (87) всё движется по спирали, 10 лет все работали в толстом клиента, и нам пели: не нагружайте клиента, переносите операции на сервер. Все перестроились, перешли. Теперь начинаете петь в другую сторону? | ||
Serg_1960 89 - 03.03.21 - 18:27 | У меня РИБ-база, поэтому любой GUID любого объекта - уникальная абстрактная бесполезная информация :( кроме условно-полезной даты создания ссылки :) | ||
Serginio1 90 - 03.03.21 - 20:44 | Насколько я помню в 1С UUID версии 1https://ru.wikipedia.org/wiki/UUID#Версия_1_(время_и_MAC-адрес) Но так как 1С получает гуиды пачками там отличаются по миллисекундам в пачке для каждого типа конфигурации Из гуида можно получить и время. http://catalog.mista.ru/1c/articles/635159/ Но все это прекрасно, если птом не изменить время документа вручную, или GUID внешний Можно конечно использовать GUID версии 6 https://uuid.ramsey.dev/en/latest/nonstandard/version6.html https://github.com/bradleypeabody/gouuidv6/blob/90681a9a92948d6a1ce447622e8591e86386fe7d/gouuidv6.go#L111 Он по сути близок к автоинкременту. | ||
Serginio1 91 - 03.03.21 - 20:54 | |||
mikecool 92 - 03.03.21 - 21:01 | (88) нет, просто надо находить золотую середину
есть операции, которые на скуле более затратные, а при наличии большого кол-ва таких операций могут его загонять в ступор | ||
NorthWind 93 - 03.03.21 - 22:05 | |||
PR 94 - 03.03.21 - 22:16 | |||
2mugik 95 - 04.03.21 - 06:23 | |||
Bigbro 96 - 04.03.21 - 07:04 | эта тема регулярно всплывает на Мисте.
и каждый раз ПР в нее лезет и позорится. и примерно после 50 поста каждый раз вспоминают про МоментВремени, и что это единственный правильный вариант работы с документами в рамках одной секунды. | ||
Волшебник 97 - 04.03.21 - 07:28 | Я же говорил, что запросы к документам — плохая примета. | ||
PR 98 - 04.03.21 - 13:33 | (96) Момент времени и есть дата + ссылка, что в явном виде и написано на ИТС по ссылке в (79)
А максимум по ссылке используется только потому, что максимум по моменту времени брать запрещено — А давайте лупанем по тупым америкосам! — Мы и есть тупые америкосы, сэр! Понаберут дебилов по объявлению Фейспалм | ||
PR 99 - 04.03.21 - 13:51 | (95) Не процитируешь текст, который подтверждает (15)?
Про (29) не говорю, там Вафель на своей волне, говорит что-то лишенное смысла, максимум по ссылке у него конечно же будет последним, но не последним введенным Хм, все понятно, что ничего непонятно Видимо, он пытался сказать, что если взять две произвольные ссылки, то нельзя сказать, что та, которая меньше, ту и введи хронологически раньше Ну так это никто и не утверждал
Дяденька сам пошутил, сам посмеялся | ||
Bigbro 100 - 05.03.21 - 04:31 | (98) "и эти люди учат нас как ковыряться в носу!", пардон учат нас как внедрять ЕРП.
http://catalog.mista.ru/1c/articles/84177/#:~:text=Момент%20времени%3A,ссылку%20на%20объект%20базы%20данных. почитай хотя бы тут. кратко, но достаточно, чтобы человек разумный перестал пороть чушь. |
1 2 3 ► |
Список тем форума
|