Имя: Пароль:
1C
 
Запрос к таблице документа с упорядочиванием по ссылке
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
большое спасибо! :))))