Имя: Пароль:
1C
1C 7.7
v7: Запрос. Выбрать номенклатуру с остатком или не помеченную на удаление
,
0 Midzgun
 
03.12.13
20:38
Друзья, добрый вечер!

Конфигурация ТиС 9.2. Задача у меня такая: нужно выбрать запросом номенклатуру, которая есть на остатках и которая без остатка, но не помечена на удаление. Пишу следующий запрос

Период с ДатаНач по ДатаНач;
Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
Количество = Регистр.ОстаткиТМЦ.Количество;
Функция КоличествоНом = КонОст(Количество);
Группировка Номенклатура без групп все;
Условие( (Номенклатура.ПометкаУдаления()=0) или (Запрос.КоличествоНом<>0));

условие не отрабатывает, подскажите где я накосячил?
1 ДенисЧ
 
03.12.13
20:39
и не сработает.
Фильтруй при выводе
2 v4442
 
03.12.13
20:41
МОЖЕТ ТАК
Период с ДатаНач по ДатаНач;
Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
Количество = Регистр.ОстаткиТМЦ.Количество;
Функция КоличествоНом = КонОст(Количество);
Группировка Номенклатура без групп все;
Условие( (Номенклатура.ПометкаУдаления()=0) и (Запрос.КоличествоНом<>0));
3 Midzgun
 
03.12.13
20:43
(2) так смысл, чтобы или нет на остатке, но без пометки или есть на остатке и на пометку пофигу. Так что тут "и" логически неверно
4 v4442
 
03.12.13
20:43
возможно так ))

Период с ДатаНач по ДатаНач;
Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
Количество = Регистр.ОстаткиТМЦ.Количество;
Функция КоличествоНом = КонОст(Количество);
Группировка Номенклатура без групп все;
Условие Номенклатура.ПометкаУдаления()=0;
5 Midzgun
 
03.12.13
20:44
(1) т.е. если пишу в группировке "все", то там уже условия в запросе не пашут?
6 Midzgun
 
03.12.13
20:45
(4) так бы было супер, но есть номенклатура с пометкой на удалении и остатком. как это не было бы печально )
7 v4442
 
03.12.13
20:47
(6) точно
пиво после виски )))
8 Ork
 
03.12.13
20:49
(0) Выбирать нужно по справочнику. А не по регистру. Там можно фильтровать помеченные/непомеченные.
9 Midzgun
 
03.12.13
20:52
(8) т.е. нужно Номеклатура = Справочник.Номенклатура, Регистр.ОстаткиТМЦ.Номенклатура ???
10 v4442
 
03.12.13
20:52
надо попробовать в условие затолкать количество,может что и получится

Период с ДатаНач по ДатаНач;
Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
Количество = Регистр.ОстаткиТМЦ.Количество;
Функция КоличествоНом = КонОст(Количество);
Группировка Номенклатура без групп все;
Условие(((Номенклатура.ПометкаУдаления()=0) и КонОст(Количество)>0) или (Запрос.КоличествоНом<>0));
11 Midzgun
 
03.12.13
20:58
(10) это ты пошутил, да?
12 v4442
 
03.12.13
21:09
|Период с ВыбНачПериода по ВыбКонПериода;
    |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
    |Количество = Регистр.ОстаткиТМЦ.Количество;
    |НомерСтроки = Регистр.ОстаткиТМЦ.НомерСтроки;
    |Функция КоличествоНачОст = НачОст(Количество);
    |Функция НомерСтрокиСумма = Сумма(НомерСтроки) когда(Номенклатура.ПометкаУдаления()=1);
    |Группировка Номенклатура без групп все;
13 v4442
 
03.12.13
21:10
Но самое простое решение в (1)
14 Холст
 
03.12.13
21:29
спр Номенклатура левый джойн Остатки ))

блин, тут 1Совский запрос надо... тогда можно условие вынести в функцию, правда работать медленно будет
15 v4442
 
03.12.13
21:47
Вот на кодил что-то
Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Номенклатура = Справочник.Номенклатура.ТекущийЭлемент, Регистр.ОстаткиТМЦ.Номенклатура.ТекущийЭлемент;
    |Количество = Регистр.ОстаткиТМЦ.Количество;
    |Функция КоличествоКонОст = КонОст(Количество);
    |Группировка Номенклатура без групп все;
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;
          
    Спр=СоздатьОБъект("Справочник.Номенклатура");
    
    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка(1) = 1 Цикл
        Помнаудал=0;
        ттт =Запрос.Номенклатура;
        Если Спр.НайтиЭлемент(ттт)=1 Тогда
            Помнаудал=ттт.ПометкаУдаления();
        КонецЕсли;    
       Если (Помнаудал=1) или (Запрос.КоличествоКонОст<>0) Тогда    
        Таб.ВывестиСекцию("Номенклатура");
      КонецЕсли;    
    КонецЦикла;
    // Заполнение полей "Итого"
    Таб.ВывестиСекцию("Итого");
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
КонецПроцедуры
16 hhhh
 
03.12.13
22:56
(11) ну это, снять пометку удаления не судьба?