Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Отфильтровать шт и кг в запросе          
Misjkakend Подменю пользователя
сообщение 03.07.15, 13:24
Сообщение #1

Молчаливый
*
Группа: Пользователи
Сообщений: 2
Спасибо сказали: 0 раз
Рейтинг: 0

Написал вот такой код

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

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


проблема в том что данный кусок
Если Запрос.ЕдВес<>"шт."
                    Тогда    ОбщВес = ОбщВес + Запрос.КоличествоСумма;    
                    Иначе    ОбщВесШт = ОбщВесШт + Запрос.КоличествоСумма;

не работает. Он все суммирует как кг. А мне надо что отделально кг а отдельно шт. Кто скажет где ошибка?

Домовик Подменю пользователя
сообщение 03.07.15, 14:50
Сообщение #2

Ветеран
Иконка группы
Группа: Местный
Сообщений: 975
Из: Киев
Спасибо сказали: 168 раз
Рейтинг: 0

а группировка по ЕдВес, пробовали?..
|Группировка ЕдВес;



второй вариант , можно использовать оператор Когда в функции, но это если единиц одна две три...
  |Функция КоличествоСуммаШт = Сумма(Количество) когда (ЕдВес=НужнаяЕдВес);




1Cv77 Подменю пользователя
сообщение 03.07.15, 18:05
Сообщение #3

Завсегдатай
****
Группа: Пользователи
Сообщений: 195
Из: Украина, Мелитополь
Спасибо сказали: 61 раз
Рейтинг: 0

Доброго времени суток

|ЕдВес = Документ.НедостачаТовара.Единица; - это разве строчная величина?

Там скорее всего ссылка на Спр или перечисление.....

вот тут и "собака" закопана

Соответственно и условие Если Запрос.ЕдВес<>"шт." нужно проверить

Сообщение отредактировал 1Cv77 - 03.07.15, 18:09

Misjkakend Подменю пользователя
сообщение 04.07.15, 14:36
Сообщение #4

Молчаливый
*
Группа: Пользователи
Сообщений: 2
Спасибо сказали: 0 раз
Рейтинг: 0

все решилось гораздо проще

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

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

1Cv77 Подменю пользователя
сообщение 05.07.15, 16:10
Сообщение #5

Завсегдатай
****
Группа: Пользователи
Сообщений: 195
Из: Украина, Мелитополь
Спасибо сказали: 61 раз
Рейтинг: 0

Извиняюсь за развитие можно сказать "закрытой" темы

Советую заменить Пернестат = СокрЛП(Запрос.ЕдВес);
на Пернестат = СокрЛП(НРег(Запрос.ЕдВес));

а то бывают шутки типа "Шт." или "ШТ." .....

mister-x Подменю пользователя
сообщение 07.07.15, 21:21
Сообщение #6

...
Иконка группы
Модератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 3477
Из: Тернопіль
Спасибо сказали: 1417 раз
Рейтинг: 0

так, це було б універсально, можливість передбачити помилки користувачів наперед, але порівняння із стрічкою містить підводні камені, - знову ж таки можлива ситуація "шт" і похідні від неї

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 19.04.24, 22:01
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!