Имя: Пароль:
1C
1С v8
Сортировка СрезПоследних()
0 Danish
 
01.10.13
17:16
Использую Функцию ОпределитьСпецификациюПоУмолчанию из модуля Управление Производством УПП 1.3 (1.3.41.1)
Копаюсь в запросе, виртуальная таблица возвращает 3 записи отсортированые по возрастанию и соответственно функция возвращает первую запись,где дата ранняя, а  не последнюю актуальную. Видимо сортировка поменяна. Внести изменение в типовой запрос без проблем, но может есть другое решение или это ошибка конфигурации?
1 Нуф-Нуф
 
01.10.13
17:18
покажи запрос
2 H A D G E H O G s
 
01.10.13
17:18
Постгри, не?
3 Danish
 
01.10.13
17:19
SLQ 2005

Функция ОпределитьСпецификациюПоУмолчанию(Номенклатура, ХарактеристикаНоменклатуры = Неопределено, Момент, Подразделение = Неопределено) Экспорт

    Перем Спецификация;

    Запрос = Новый Запрос(
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
    |    ОсновныеСпецификацииНоменклатуры.СпецификацияНоменклатуры КАК СпецификацияНоменклатуры
    |ИЗ
    |    (ВЫБРАТЬ ПЕРВЫЕ 1
    |        ОсновныеСпецификацииНоменклатурыСрезПоследних.СпецификацияНоменклатуры КАК СпецификацияНоменклатуры,
    |        1 КАК Приоритет
    |    ИЗ
    |        РегистрСведений.ОсновныеСпецификацииНоменклатуры.СрезПоследних(
    |            &Дата,
    |            Номенклатура = &Номенклатура
    |                И ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры
    |                И Подразделение = &Подразделение) КАК ОсновныеСпецификацииНоменклатурыСрезПоследних
    |    
    |    ОБЪЕДИНИТЬ ВСЕ
    |    
    |    ВЫБРАТЬ ПЕРВЫЕ 1
    |        ОсновныеСпецификацииНоменклатурыСрезПоследних.СпецификацияНоменклатуры,
    |        2
    |    ИЗ
    |        РегистрСведений.ОсновныеСпецификацииНоменклатуры.СрезПоследних(
    |            &Дата,
    |            Номенклатура = &Номенклатура
    |                И ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры
    |                И Подразделение = &ПодразделениеПустаяСсылка) КАК ОсновныеСпецификацииНоменклатурыСрезПоследних
    |    
    |    ОБЪЕДИНИТЬ ВСЕ
    |    
    |    ВЫБРАТЬ ПЕРВЫЕ 1
    |        ОсновныеСпецификацииНоменклатурыСрезПоследних.СпецификацияНоменклатуры,
    |        3
    |    ИЗ
    |        РегистрСведений.ОсновныеСпецификацииНоменклатуры.СрезПоследних(
    |            &Дата,
    |            Номенклатура = &Номенклатура
    |                И ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры) КАК ОсновныеСпецификацииНоменклатурыСрезПоследних
    |    
    |    ОБЪЕДИНИТЬ ВСЕ
    |    
    |    ВЫБРАТЬ ПЕРВЫЕ 1
    |        ОсновныеСпецификацииНоменклатурыСрезПоследних.СпецификацияНоменклатуры,
    |        4
    |    ИЗ
    |        РегистрСведений.ОсновныеСпецификацииНоменклатуры.СрезПоследних(
    |            &Дата,
    |            Номенклатура = &Номенклатура
    |                И ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатурыПустаяСсылка) КАК ОсновныеСпецификацииНоменклатурыСрезПоследних
    |    
    |    ОБЪЕДИНИТЬ ВСЕ
    |    
    |    ВЫБРАТЬ ПЕРВЫЕ 1
    |        ОсновныеСпецификацииНоменклатурыСрезПоследних.СпецификацияНоменклатуры,
    |        5
    |    ИЗ
    |        РегистрСведений.ОсновныеСпецификацииНоменклатуры.СрезПоследних(&Дата, Номенклатура = &Номенклатура) КАК ОсновныеСпецификацииНоменклатурыСрезПоследних) КАК ОсновныеСпецификацииНоменклатуры
    |
    |УПОРЯДОЧИТЬ ПО
    |    ОсновныеСпецификацииНоменклатуры.Приоритет");

    Запрос.УстановитьПараметр("Дата", ?(ТипЗнч(Момент) = Тип("Дата"), Момент, ТекущаяДата()));
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    Запрос.УстановитьПараметр("ХарактеристикаНоменклатуры", ?(ХарактеристикаНоменклатуры = Неопределено, Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка(), ХарактеристикаНоменклатуры));
    Запрос.УстановитьПараметр("ХарактеристикаНоменклатурыПустаяСсылка", Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
    Запрос.УстановитьПараметр("Подразделение", ?(Подразделение = Неопределено, Справочники.Подразделения.ПустаяСсылка(), Подразделение));
    Запрос.УстановитьПараметр("ПодразделениеПустаяСсылка", Справочники.Подразделения.ПустаяСсылка());

    Выборка = Запрос.Выполнить().Выбрать();
    
    Если Выборка.Следующий() Тогда
        
        Спецификация = Выборка.СпецификацияНоменклатуры;
        
    КонецЕсли;

    Возврат Спецификация;

КонецФункции // ОпределитьСпецификациюПоУмолчанию()
4 Danish
 
01.10.13
17:21
По условию я попадаю на 5 приоритет
5 Нуф-Нуф
 
01.10.13
17:21
(4) чего?
6 Нуф-Нуф
 
01.10.13
17:22
несколько спецификаций на разные характеристики твоей номенклатуры?
7 Нуф-Нуф
 
01.10.13
17:24
а вообще выполни этот запрос в консоли
8 Euguln
 
01.10.13
17:26
А через ВЫБОР нельзя сделать?
9 Danish
 
01.10.13
17:26
(7) Вбил уже запрос РегистрСведений.ОсновныеСпецификацииНоменклатуры.СрезПоследних(&Дата, Номенклатура = &Номенклатура) КАК ОсновныеСпецификацииНоменклатурыСрезПоследних) КАК ОсновныеСпецификацииНоменклатуры

Дает 3 записи и отсортированные по убыванию, соответственно выход из функции дает не правильную первую запись
10 Нуф-Нуф
 
01.10.13
17:27
(9) характеристики разные?
11 Danish
 
01.10.13
17:27
(7) по возрастанию, сорри
12 Нуф-Нуф
 
01.10.13
17:27
(9) подразделения разные?
13 Danish
 
01.10.13
17:30
(12) вызов функции мОсновнаяСпецификацияНоменклатуры = УправлениеПроизводством.ОпределитьСпецификациюПоУмолчанию(Ссылка, Неопределено, РабочаяДата);
Не используется подразделения и характеристики.
14 Danish
 
01.10.13
17:33
Из-за ошибки, помечается другая основная спецификация во вкладке Спецификации справочника Номенклатура. Хотя раньше такого не наблюдал.
15 Нуф-Нуф
 
01.10.13
17:34
чет ты не договвариваешь
16 Нуф-Нуф
 
01.10.13
17:35
у тебя срез последних по номенклатуре возвращает 3 записи и ты говоришь, что у тебя в спецификациях указана только номенклатура?
17 Danish
 
01.10.13
17:42
(16)
Есть справочник Номенклатура, в нем есть вкладка Спецификации, в табличной части указан перечень спецификации, жирным шрифтом указана основная спецификация на дату. Появилась проблема, что основная спецификация указана не правильно.Соответственно, открываю функцию отвечающую за назначения основной спецификации, в ней выбирается первая запись из регистра, но так как сортировка по возрастанию, она оказывается не правильной.
18 Danish
 
01.10.13
17:45
Вот гадаю, толи это ошибка конфигурации, толи обновление SQL, толи руки шаловливые.
19 Нуф-Нуф
 
01.10.13
17:58
(17) т.е. он тебе в номенклатуре на закладке спецификации неправильно выделяет основную?
20 Danish
 
01.10.13
17:59
(19) Да
21 Serginio1
 
01.10.13
18:00
А не проще
ВЫБРАТЬ последние 1
        ОсновныеСпецификацииНоменклатурыСрезПоследних.СпецификацияНоменклатуры КАК СпецификацияНоменклатуры,
        1 КАК Приоритет
    ИЗ
        РегистрСведений.ОсновныеСпецификацииНоменклатуры.СрезПоследних(
            &Дата,
            Номенклатура = &Номенклатура) как ОсновныеСпецификацииНоменклатуры
УПОРЯДОЧИТЬ ПО
    |    ОсновныеСпецификацииНоменклатуры.ХарактеристикаНоменклатуры ,ОсновныеСпецификацииНоменклатуры.Подразделение
22 Serginio1
 
01.10.13
18:04
(21) Нет прошу прощения. Не о том подумал.
Просто в какая сортировка должна быть в 4 и 5 приоритете?
23 Нуф-Нуф
 
01.10.13
18:10
каким образом 5й подзапрос может вернуть несколько записей и выбрать из них одну первую и не правильно, если у вас не ведется учет по характеристикам и подразделениям?
24 Нуф-Нуф
 
01.10.13
18:10
если у вас заполнено только одно измерение в регистре сведений, то 5й подзапрос должен вернуть только одну запись и без всяких "первые 1"
25 Serginio1
 
01.10.13
18:12
Кстати 4 и 3 запрос могут быть одинаковыми при
?(ХарактеристикаНоменклатуры = Неопределено, Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка(), ХарактеристикаНоменклатуры));
26 Serginio1
 
01.10.13
18:12
24 Может быть несколько Характеристик
27 Danish
 
01.10.13
18:20
(23) я имел введу не используются хар-ки и подразделения при вызове функции УправлениеПроизводством.ОпределитьСпецификациюПоУмолчанию, так хар-ки и подразделения есть.
28 Нуф-Нуф
 
01.10.13
19:10
короче это нормальная работа типового механизма
29 Зойч
 
01.10.13
19:15
(26) если несколько характеристик, то они все актуальные
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.