Имя: Пароль:
1C
1C 7.7
v7: Цена номенклатуры из Документа поступление МПЗ прочее
,
0 Нечай
 
09.03.17
11:42
Есть обработка, которая формирует таблицу номенклатуры, вид, где она находится и остаток.
Задача в том, чтобы подтянуть еще цену этой номенклатуры из именно последнего документа ПоступлениеМПЗПрочее. В 7 вообще не разбираюсь, помогите пожалуйста.


//*******************************************
// Процедура генерации запроса Сформировать.
//
Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Обрабатывать НеПомеченныеНаУдаление;
    |МПЗ = Регистр.МестаХранения.МПЗ;
    |ВидМПЗ = Регистр.МестаХранения.ВидМПЗ;
    |МестоХранения = Регистр.МестаХранения.МестоХранения;
    |Количество = Регистр.МестаХранения.Количество;
    |ИспользоватьВЗаказахСклад = Регистр.МестаХранения.МестоХранения.ИспользоватьВЗаказахСклад;
    |Функция КоличествоКонОст = КонОст(Количество);
    |Группировка МПЗ без упорядочивания;
    |Группировка МестоХранения;
    |Группировка ВидМПЗ;
    |Условие(ИспользоватьВЗаказахСклад = 1);
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка(1) = 1 Цикл
        // Заполнение полей МестоХранения  
        Если Запрос.МПЗ.ЭтоГруппа()=1 Тогда  
            Таб.ВывестиСекцию("ГруппаМПЗ");
        Иначе  
            Таб.ВывестиСекцию("МПЗ");
        КонецЕсли;    
        Пока Запрос.Группировка(2) = 1 Цикл
            // Заполнение полей ВидМПЗ
            Пока Запрос.Группировка(3) = 1 Цикл
                // Заполнение полей МПЗ
                Таб.ВывестиСекцию("МестоХранения");
            КонецЦикла;
        КонецЦикла;
    КонецЦикла;
    // Заполнение полей "Итого"
    Таб.ВывестиСекцию("Итого");
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
КонецПроцедуры
1 Злопчинский
 
09.03.17
16:58
(0) если в регистре нет учета остатков в разрезе партий и в партиях нет ссылки на партиеобразующий документ - то будет (_._) - придется дербанить список документов.
вдобавок какую цену брать если ВДРУГ в доекументе поступления один и тот же МПА с двумя разными ценами (в особо извращенных случаях) и такое бывает...
ну то, что ты умеешь тыкать галочки в конфигураторе - мы увидели.
2 Нечай
 
27.03.17
14:45
Возвращаюсь к теме,
Написал запрос, цену вытягиваю, но мне нужно сделать сортировка по дате документа. Тоесть вытянуть цену из самого последнего документа. Подскажите как сделать, эта сортировка не работает.
    
Запрос2 = СоздатьОбъект("Запрос");
    ТекстЗапроса2 =
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Обрабатывать НеПомеченныеНаУдаление;    
    |ДатаД = Документ.ПоступлениеМПЗПрочее.ДатаДок;
    |Ном = Документ.ПоступлениеМПЗПрочее.МПЗ;
    |Цена = Документ.ПоступлениеМПЗПрочее.Цена;
    //|Группировка ДатаД;
        //|Группировка Цена Упорядочить по ДатаД Возр;
    |Условие(Ном = ТекНом);
    |"//}}ЗАПРОС
3 Nuobu
 
27.03.17
14:46
Извините за оффтоп
Вот это:
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

Это что такое? Зачем оно?
4 Нечай
 
27.03.17
14:49
Не знаю) это не я писал.
5 Нечай
 
27.03.17
14:53
Без этого не работает вообще.
6 Нечай
 
27.03.17
14:55
Пробовал сортировать по номеру документа, все равно ошибка аналогичная.
Группировка Цена Упорядочить по  <<?>> ДатаД Возр;
Запрос[7] : Ожидается конкретизация переменной 'Цена'
7 Nuobu
 
27.03.17
14:55
(5) Я не о том, что без него не работает.
Без него - работает.
Не работает без:
Запрос.Выполнить(ТекстЗапроса);

Я про проверку на правильность запроса. Я, просто, восьмёрочник и мне эта проверка непонятна.
8 пипец
 
27.03.17
14:59
чтобы при ошибке в запросе ошибался )))) а не молчал
9 Nuobu
 
27.03.17
15:00
(8) А он обычно молчит?
10 Нечай
 
27.03.17
15:02
Ребят все круто) но как группировку то сделать, подскажите.
11 Нечай
 
27.03.17
15:31
Ну что тут гуру 7 нет?
12 Salimbek
 
27.03.17
15:55
(11) Я стандартными запросами 7-ки давно уже не пользуюсь. Или через 1SQLite или через 1С++ (в зависимости от типа базы) инфу собираю.
13 Salimbek
 
27.03.17
15:57
А так - посмотри движения по регистрам у твоего документа. Вдруг он там сам пишет куда-нибудь типа "Цены закупочные". Тогда вместо всей этой фигни можешь просто брать последнее значение из этого регистра.
14 dedmoroz777
 
27.03.17
16:08
Просто |Группировка Документ;
Они будут уже отсортированы по дате. Получай последний и проверяй на цену<>0
15 Нечай
 
27.03.17
16:17
Какую бы я группировку не делал все равно пишет аналогичную ошибку.
16 Нечай
 
27.03.17
16:19
Вот весь код, может в чем-то другом косяк...
Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Запрос2, ТекстЗапроса2, Таб;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Обрабатывать НеПомеченныеНаУдаление;
    |МПЗ = Регистр.МестаХранения.МПЗ;
    |ВидМПЗ = Регистр.МестаХранения.ВидМПЗ;
    |МестоХранения = Регистр.МестаХранения.МестоХранения;
    |Количество = Регистр.МестаХранения.Количество;
    |ИспользоватьВЗаказахСклад = Регистр.МестаХранения.МестоХранения.ИспользоватьВЗаказахСклад;
    |Функция КоличествоКонОст = КонОст(Количество);
    |Группировка МПЗ без упорядочивания;
    |Группировка МестоХранения;
    |Группировка ВидМПЗ;
    |Условие(ИспользоватьВЗаказахСклад = 1);
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;


    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка(1) = 1 Цикл
    

    ТекНом = Запрос.МПЗ;
        
    Запрос2 = СоздатьОбъект("Запрос");
    ТекстЗапроса2 =
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Обрабатывать НеПомеченныеНаУдаление;    
    |ДатаД = Документ.ПоступлениеМПЗПрочее.ДатаДок;
    |Ном = Документ.ПоступлениеМПЗПрочее.МПЗ;
    |Цена = Документ.ПоступлениеМПЗПрочее.Цена;
    //|Группировка ДатаД;
    //|Группировка Цена Упорядочить по ДатаД Возр;
    |Условие(Ном = ТекНом);
    |"//}}ЗАПРОС
    ;        
    
    Запрос2.Выполнить(ТекстЗапроса2);

        // Заполнение полей МестоХранения  
        Если Запрос.МПЗ.ЭтоГруппа()=1 Тогда  
            Таб.ВывестиСекцию("ГруппаМПЗ");
        Иначе  
            Таб.ВывестиСекцию("МПЗ");
        КонецЕсли;    
    
        
        Пока Запрос.Группировка(2) = 1 Цикл
            // Заполнение полей ВидМПЗ
            Пока Запрос.Группировка(3) = 1 Цикл
                // Заполнение полей МПЗ
                Таб.ВывестиСекцию("МестоХранения");
            КонецЦикла;
        КонецЦикла;  
        
    КонецЦикла;
    // Заполнение полей "Итого"
    Таб.ВывестиСекцию("Итого");
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
        

КонецПроцедуры
17 Нечай
 
27.03.17
16:28
По движениям пишет в "Партии", количество и сумму. Закупочных цен нет, впринципе и не было у них. У них бардак полный, оч много документов где просто цена даже не стоит.
18 Злопчинский
 
27.03.17
16:37
выкинь нахрен тонны гуано, которые ты сюда вываливаешь.
приведи ОДИН ВАРИАНТ КОДА и приведи ошибку, которая вываливается в этом коде.
всё.
разбираться в тоннах навоза - рабство отменили давно.
19 пипец
 
27.03.17
17:03
(17) делай аналогично
//*******************************************
// Процедура генерации запроса Сформировать.
//
Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Обрабатывать НеПомеченныеНаУдаление;
    |ПриходныйОрдер = Документ.ПриходныйОрдер.ТекущийДокумент;
    |Сумма = Документ.ПриходныйОрдер.Сумма;
    |Функция СуммаСумма = Сумма(Сумма);
    |Группировка ПриходныйОрдер;
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка(1) = 1 Цикл
        // Заполнение полей ПриходныйОрдер
        Таб.ВывестиСекцию("ПриходныйОрдер");
    КонецЦикла;
    // Заполнение полей "Итого"
    Таб.ВывестиСекцию("Итого");
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
КонецПроцедуры