![]() |
![]() |
![]() |
|
Запрос к таблице документа с упорядочиванием по ссылке | ☑ | ||
---|---|---|---|---|
0
mifrida
09.07.11
✎
15:43
|
есть запрос к табличной части документа, нем есть колонка в которой данные типа ссылка на справочник
если написать в запросе |УПОРЯДОЧИТЬ ПО | Таблица.Наименование.Ссылка УБЫВ"; получу ли я упорядочивание по порядку заполнения документов? вообще что значит упорядочивание по ссылке? |
|||
1
Нуф-Нуф
09.07.11
✎
15:45
|
1. да
2. упорядочивание по порядку заполнения документов |
|||
2
rs_trade
09.07.11
✎
15:50
|
взял бы да проверил. делов на 2 минуты
|
|||
3
AlexNew
09.07.11
✎
15:53
|
(1) Нет, садись, 3.
|
|||
4
AlexNew
09.07.11
✎
15:54
|
(0) Ничего не значит это GUID.
|
|||
5
AlexNew
09.07.11
✎
15:55
|
К (4) в справочнике.
|
|||
6
luckyluke
09.07.11
✎
15:56
|
(0) упорядочивание таблицы по ссылке справочника УБЫВ означает, что те элементы которые были созданы в базе ранее будут вверху таблицы, а те что позже внизу таблицы.
|
|||
7
AlexNew
09.07.11
✎
15:58
|
(6) Правда?
|
|||
8
luckyluke
09.07.11
✎
15:58
|
(6) эм, наоборот, "те элементы которые были созданы в базе ранее будут внизу таблицы, а те что позже вверху таблицы."
|
|||
9
luckyluke
09.07.11
✎
15:59
|
(7) что смущает?
|
|||
10
AlexNew
09.07.11
✎
16:02
|
(9) Абсолютно ничего, кроме той чуши, к-рую ты написал. Почитай как GUID формируется и как строковые поля в SQL сравниваются.
|
|||
11
luckyluke
09.07.11
✎
16:04
|
(10) а, вон оно что, а не подскажешь мне, что такое Момент времени для документа?
|
|||
12
AlexNew
09.07.11
✎
16:05
|
(11) Дата+GUID. Еще вопросы?
|
|||
13
luckyluke
09.07.11
✎
16:06
|
(12) ну и для чего нужен этот момент времени?
|
|||
14
AlexNew
09.07.11
✎
16:09
|
(13) Удачная цифра, даже отвечать скучно.
|
|||
15
luckyluke
09.07.11
✎
16:10
|
(14) давай я тебе помогу:
Свойства: Дата (Date) Ссылка (Ref) Методы: Сравнить (Compare) Конструкторы: На основании даты и ссылки Описание: Предназначен для получения и хранения момента времени для объекта в базе данных. Содержит дату и время, а также ссылку на объект базы данных. Используется в качестве значений свойств и параметров методов других объектов, имеющих тип МоментВремени. Момент времени используется в тех случаях, когда важно различать моменты времени для объектов, имеющих одинаковую дату и время, например для сравнения положений документов на временной оси. "Момент времени используется в тех случаях, когда важно различать моменты времени для объектов, имеющих одинаковую дату и время, например для сравнения положений документов на временной оси." |
|||
16
AlexNew
09.07.11
✎
16:11
|
(13) Я советов стараюсь не давать, но на сей раз - Почитай книжки.
|
|||
17
luckyluke
09.07.11
✎
16:11
|
(16) да что ты говоришь, на читай http://tools.ietf.org/rfc/rfc4122.txt
his specification defines a Uniform Resource Name namespace for UUIDs (Universally Unique IDentifier), also known as GUIDs (Globally Unique IDentifier). A UUID is 128 bits long, and can guarantee uniqueness across space and time. |
|||
18
AlexNew
09.07.11
✎
16:14
|
(17) В отличие от тебя не говорю, так и есть. Хочешь проверить - вперед. Уже проверяли.
|
|||
19
luckyluke
09.07.11
✎
16:22
|
(18) v8: Где взять описание GUID, который в 1С 8?
GUID - ссылка - это тупо 16 байт. Формируется по особому алгоритму, гарантирующему уникальность вновь созданных ПРЕДСТАВЛЯЕТСЯ обычно в виде: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, где X - представлем в шестнадцетиричном видею Важно! GUID 1С-а представленный в 1С, например Сообщить(Строка(Ссылка.УникальныйИдентификатор())); отличается от фактически хранимого в базе на некоторые перемешанные значения Например, в 1С он выглядит как 6F9619FF-8B86-D011-B42D-00CF4FC964FF В базе (фактически) он имеет значение: 6F9619FF-D011-8B86-B42D-00CF4FC964FF (Это тупо пример, там алгоритм перестановки другой, лень споминать) Важно! GUID 1С формирует не по правилам Microsoft, а инкрементно. В начале сеанса формируется стартовый GUID, r примеру 6F9619FF-8B86-D011-B42D-00CF4FC964F0 У каждого последующего, созданного в этом сеансе ссылочного объекта GUID будет на 1 больше, к примеру: 6F9619FF-8B86-D011-B42D-00CF4FC964F1 6F9619FF-8B86-D011-B42D-00CF4FC964F2 6F9619FF-8B86-D011-B42D-00CF4FC964F3 |
|||
20
AlexNew
09.07.11
✎
16:27
|
(19) Уже хорошо, но я этого алгоритма не знаю, о чем и сообщил раньше, а ты спорить начал...
|
|||
21
rs_trade
09.07.11
✎
16:29
|
(19) да. что бы индексы при инсертах минимально перестраивались
|
|||
22
luckyluke
09.07.11
✎
16:31
|
(20) ммм, че? ты сообщил что не знаешь? это в (10) или в (16) ?
|
|||
23
AlexNew
09.07.11
✎
16:31
|
(21) Не понял???
|
|||
24
AlexNew
09.07.11
✎
16:34
|
(22) Ты это нигде не сообщил, а теперь и не надо.
|
|||
25
rs_trade
09.07.11
✎
16:36
|
(23) инкрементный алгоритм генерации гуида для оптимизации работы с индексами при вставке строк в таблицы.
|
|||
26
mifrida
09.07.11
✎
16:38
|
в некоторых строках у меня вставляются данные не из последнего документа ...
передаю в функцию ссылку (Ном) на элемент типа справочник из текущей строки и делаю запрос вот код на всякий случай Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Таблица.Наименование КАК Наименование, | Таблица.ПоголовьеНаКонецМесяца КАК Количество | |ИЗ | | Документ.СведенияОДвиженииОсновногоСтада.Данные КАК Таблица | |ГДЕ | | Таблица.Наименование = &Ном | |Сгруппировать по | | Наименование, | Таблица.ПоголовьеНаКонецМесяца | |УПОРЯДОЧИТЬ ПО | Таблица.Наименование.Ссылка УБЫВ"; Запрос.УстановитьПараметр("Ном",Ном); а еще мне 2 раза приходится делать Выборка.Следующий(); чтобы получить данные... по этому поводу я думаю что это он проходится по заполняемому мной докумено(я его сохранила) или я не права? |
|||
27
AlexNew
09.07.11
✎
16:43
|
(25) Ты "Мурку" сыграй (с)
|
|||
28
БибиГон
09.07.11
✎
16:46
|
(26) а зачем тебе упорядочивание по ссылке?
|
|||
29
AlexNew
09.07.11
✎
16:49
|
(26) СКД отменили? Не учись драться, учись стрелять (с)
|
|||
30
mifrida
09.07.11
✎
17:20
|
чтоб выбирать из последнего документа
|
|||
31
totparen
09.07.11
✎
17:28
|
"Таблица.Наименование" - Ссылка на какой объект метаданных? Документ что ли?
|
|||
32
mifrida
09.07.11
✎
17:30
|
на таблицу документа
|
|||
33
totparen
09.07.11
✎
17:35
|
|УПОРЯДОЧИТЬ ПО
| Таблица.Ссылка.Дата УБЫВ"; Не то? |
|||
34
totparen
09.07.11
✎
17:38
|
Не понятно на кой вообще в таком запросе группировка... наверное можно было бы обойтись РАЗЛИЧНЫЕ.
|
|||
35
totparen
09.07.11
✎
17:55
|
ВЫБРАТЬ РАЗРЕШЕННЫЕ
фыва.Номенклатура, фыва.Количество ИЗ (ВЫБРАТЬ ПЕРВЫЕ 1 РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура, РеализацияТоваровУслугТовары.Количество КАК Количество ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары УПОРЯДОЧИТЬ ПО РеализацияТоваровУслугТовары.Ссылка.Дата УБЫВ) КАК фыва |
|||
36
Snovy
09.07.11
✎
18:10
|
(19) Фигня все это. На моих глазах второй по порядку документ (т.е. его вторым сформировали в 23.59.59) стал РАНЬШЕ, чем уже сформированный и проведенный первый. Чем не мало попортил крови. Так как провелся точно-также, как и предыдущий документ (закрыл те же оплаты во взаиморасчетах).
|
|||
37
acsent
09.07.11
✎
18:12
|
Никакой гарантии что ГУИД будуьт хоть както упорядочены нет. поэтому строить алгоритмы в расчете на это нельзя
|
|||
38
ice777
09.07.11
✎
19:15
|
хе. создали новый док (не было в конфиге до)
что имеем: он при прочих равных реквизитах всегда будет ниже при проведении, чем старый аналогичный. период, если что - день. так вот гуид срет ) |
|||
39
Snovy
09.07.11
✎
19:20
|
(38) Сделали запрос к базе вида "выбрать дата,номер из документ упорядочить по ссылке" за два года. Долго смотрели и думали. Часть документов 2010 года оказались позже документов 2011. А уж внутри по месяцам и датам я вообще молчу... Так что насчет инкремента - может оно и верно, только судя по всему при каждом старте системы стартовый гуид может оказаться как в начале сортировки, так и в любом ином месте на оси гуидов.
|
|||
40
ice777
09.07.11
✎
19:29
|
(39) я не зря упомянул период.
я к тому, что гуид включает в себя и некую составляющую, определяющую создание дока в конфигураторе, причем это впереди всего - иначе как объяснить что 2 в принципе аналогичных дока становятся при проведении в опр порядке. короче, епс.( |
|||
41
ice777
09.07.11
✎
19:31
|
+(40) руки б поотрубал тому, кто тип документа поставил впереди.
|
|||
42
mifrida
09.07.11
✎
19:57
|
вобщем я так поняла незя сортировать по сслке... ибо ссылка не всегда на нужный документ бывает ...
ща попробовала по-разному... иногда подставляет цифры из более позднихдокументов... печально... |
|||
43
mifrida
09.07.11
✎
20:49
|
Процедура ОбходДокумента(ДатаОбъекта) Экспорт
Запрос = Новый запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | Документ.Дата КАК Дата, | Документ.Данные КАК Данные | |ИЗ | | Документ.СведенияОДвиженииОсновногоСтада КАК Документ | |ГДЕ | | Документ.Дата < &ДатаОбъекта |УПОРЯДОЧИТЬ ПО | Документ.Дата УБЫВ"; Запрос.УстановитьПараметр("ДатаОбъекта", ДатаОбъекта); Результат = Запрос.Выполнить(); Если Не Результат.Пустой() Тогда Выборка = Результат.Выбрать(); Выборка.Следующий(); ПоследнийДокумент = Выборка.Данные; Для Каждого СтрТабЧ из Объект.Данные цикл Для Каждого СтрДокумента из ПоследнийДокумент цикл Если СтрДокумента.Наименование = СтрТабЧ.Наименование Тогда СтрТабЧ.ПоголовьеНаКонецМесяца = СтрДокумента.ПоголовьеНаКонецМесяца; КонецЕсли; КонецЦикла; КонецЦикла; Иначе Сообщить("Ошибка"); КонецЕсли; Переделала вот так, теперь пытаюсь найти сначала последний документ, а потом пошариться в его табличной части Простите, я пишу всего лишь неделю на 1с... подскажите как организовать цикл по табличной части результата запроса... мой вариант не прокатывает ... пишет не определен итератор есть идея в запросе взять всего лишь ссылку на табличную часть нужного документа, но как потом к этой табличной части обратиться по ссылке? |
|||
44
mifrida
09.07.11
✎
21:02
|
ау
|
|||
45
hhhh
09.07.11
✎
22:35
|
ВЫБРАТЬ ПЕРВЫЕ 1
| Документ.Дата КАК Дата, | Документ.Ссылка КАК Ссылка | |ИЗ | | Документ.СведенияОДвиженииОсновногоСтада КАК Документ | |ГДЕ | | Документ.Дата < &ДатаОбъекта |УПОРЯДОЧИТЬ ПО | Документ.Дата УБЫВ"; Запрос.УстановитьПараметр("ДатаОбъекта", ДатаОбъекта); Результат = Запрос.Выполнить(); Если Не Результат.Пустой() Тогда Выборка = Результат.Выбрать(); Выборка.Следующий(); ПоследнийДокумент = Выборка.Ссылка.ПолучитьОбъект(); |
|||
46
mifrida
10.07.11
✎
01:27
|
большое спасибо! :))))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |