Имя: Пароль:
1C
1С v8
Самописный отбор в списке документов
0 Vladislava-smile
 
14.08.15
10:14
Люди помогите, ничего придумать не могу .. (((.
Итак, список документов Заказ покупателя.
При получении данных заполняется еще 2 поля в списке на форме - суммаОплаты и СуммаОтгрузки, их нет в документеСписке отбора. Нужно сделать, чтобы отображались документы, где СуммаОплаты>СуммыОтгрузки. В реквизит эти данные не запихаешь, чтобы сделать стандартный отбор (.

Я думала сначала по кнопке записать в список значений номера документов, где условие выполняется, а потом прописывать программно отбор, но так как список динамический наверно так нельзя сделать, по крайней мере я не нашла ... (. Потом была мысль на форме поставить флаг "Отобрать доки, где оплата>отгрузка" и при олучении данных проверять эту галку и ставить видимость строки = ложь в оформлении, но так тоже говорят не сделаешь, можно скрыть только ячейку ... (( Что делать???



// Выберем суммы оплат и отгрузок
Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)

    МассивЗаказов = Новый Массив;
    Для каждого ОформлениеСтроки из ОформленияСтрок Цикл
        МассивЗаказов.Добавить(ОформлениеСтроки.ДанныеСтроки.Ссылка);
    КонецЦикла;
    
    ЗапросОплатыОтгрузки = Новый Запрос("
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    ЕСТЬNULL(Взаиморасчеты.Сделка, Продажи.ЗаказПокупателя) КАК Заказ,
    |    ЕСТЬNULL(Продажи.СтоимостьОборот, 0) КАК СуммаОтгрузки,
    |    ЕСТЬNULL(Взаиморасчеты.СуммаВзаиморасчетовРасход, 0) КАК СуммаОплаты
    |ИЗ
    |    РегистрНакопления.Продажи.Обороты(,,,ЗаказПокупателя В (&МассивЗаказов)) КАК Продажи
    |    ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(,,,Сделка В (&МассивЗаказов)) КАК Взаиморасчеты
    |    ПО Продажи.ЗаказПокупателя = Взаиморасчеты.Сделка");
    
    ЗапросОплатыОтгрузки.УстановитьПараметр("МассивЗаказов", МассивЗаказов);
    ТаблицаОплатыОтгрузки = ЗапросОплатыОтгрузки.Выполнить().Выгрузить();
    
    Для каждого ОформлениеСтроки из ОформленияСтрок Цикл
        СтрокаОплатыОтгрузки = ТаблицаОплатыОтгрузки.Найти(ОформлениеСтроки.ДанныеСтроки.Ссылка);
        Если СтрокаОплатыОтгрузки = Неопределено Тогда
            СуммаОплаты = 0; СуммаОтгрузки = 0;
        Иначе
            СуммаОплаты = СтрокаОплатыОтгрузки.СуммаОплаты;
            СуммаОтгрузки = СтрокаОплатыОтгрузки.СуммаОтгрузки;
                                  
        КонецЕсли;
        // оплата
        ОформлениеСтроки.Ячейки.СуммаОплаты.Значение = СуммаОплаты;
        

        Если СуммаОплаты = ОформлениеСтроки.ДанныеСтроки.СуммаДокумента или СуммаОплаты = 0 Тогда
            ОформлениеСтроки.Ячейки.СуммаОплаты.ЦветФона = Новый Цвет;
        ИначеЕсли СуммаОплаты < ОформлениеСтроки.ДанныеСтроки.СуммаДокумента Тогда
            ОформлениеСтроки.Ячейки.СуммаОплаты.ЦветФона = Новый Цвет(255, 192, 192);
        Иначе
            ОформлениеСтроки.Ячейки.СуммаОплаты.ЦветФона = Новый Цвет(192, 255, 192);
        КонецЕсли;
        // отгрузки
        ОформлениеСтроки.Ячейки.СуммаОтгрузки.Значение = СуммаОтгрузки;
        Если СуммаОтгрузки = СуммаОплаты Тогда
            ОформлениеСтроки.Ячейки.СуммаОтгрузки.ЦветФона = Новый Цвет;
        ИначеЕсли СуммаОтгрузки > СуммаОплаты Тогда
            ОформлениеСтроки.Ячейки.СуммаОтгрузки.ЦветФона = Новый Цвет(255, 192, 192);
        Иначе
            ОформлениеСтроки.Ячейки.СуммаОтгрузки.ЦветФона = Новый Цвет(192, 255, 192);
        
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры
1 mzelensky
 
14.08.15
10:16
(0) Сделай отчетом и не ипи мозг.

Знаем мы все эти хотелки "сделайте мне в журнале документов". Хотите чтобы нормально работало - не придумывайте сами себе костыли
2 shuhard_серый
 
14.08.15
10:18
(0) нет проблемы с таким отбором, запросом находишь список нужных документов и ставишь отбор в Списке, это если толстый клиент или делаешь отдельную управляемую форму и в ней подкладываешь под список нужный запрос
3 Vladislava-smile
 
14.08.15
10:25
(1) не хотят отчет (((
(2) Запрос делать к динамическому списку?
4 shuhard_серый
 
14.08.15
10:28
(3)[ Запрос делать к динамическому списку?]
динамический список строить на основании произвольного запроса для управляемой формы

у тебя же УТ 10.3 или УПП
делаешь кнопку в журнале/списке заказов и открываешь управляемую форму


если в лом, то делай через отбор в списке - нет красиво, но работает на раз
5 mzelensky
 
14.08.15
10:28
(3) Судя по (0) у тебя обычные формы. Какой динамический список?

или все-таки Управляемые? Но тогда решение будет несколько другое!
6 Леха Дум
 
14.08.15
10:33
Включай в конфе разрешение на управляемые формы и делай новую форму для списка управляемой - это будет намного лучше "хитросделанных" обычных форм
7 shuhard_серый
 
14.08.15
10:35
(4) +1
если через список , то как то так
Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    FIT_ОтветственноеХранениеОстатки.КоличествоОстаток,
        |    FIT_ОтветственноеХранениеОстатки.ДокументОтгрузки КАК Ссылка
        |ИЗ
        |    РегистрНакопления.FIT_ОтветственноеХранение.Остатки() КАК FIT_ОтветственноеХранениеОстатки";
                        
        ТЗ = Запрос.Выполнить().Выгрузить();
        МассивОтв=ТЗ.ВыгрузитьКолонку("ссылка");
        СписокОтв=Новый СписокЗначений;
        СписокОтв.ЗагрузитьЗначения(МассивОтв);
        Если  МассивОтв.Количество()>0 Тогда
            ДокументСписок.Отбор.Ссылка.ВидСравнения=ВидСравнения.ВСписке;
            ДокументСписок.Отбор.Ссылка.Использование=Истина;
            ДокументСписок.Отбор.Ссылка.Значение=СписокОтв;
        КонецЕсли;
8 Vladislava-smile
 
14.08.15
10:36
(4) Обычная форма, УТ 10.3.
Спасибо, попробую и так и так.
9 shuhard_серый
 
14.08.15
10:38
(8) а чё там пробовать - прыгай =)
для списка код в 10 строчек и он на экране
10 Vladislava-smile
 
14.08.15
10:46
(9) - да не прыгается чего-то ... ошибка
{Документ.ЗаказПокупателя.Форма.ФормаСписка.Форма(190)}: Ошибка при вызове метода контекста (Выполнить)
        ТЗ = Запрос.Выполнить().Выгрузить();
по причине:
{(5, 5)}: Таблица не найдена "РегистрНакопления.FIT_ОтветственноеХранение.Остатки"
<<?>>РегистрНакопления.FIT_ОтветственноеХранение.Остатки() КАК FIT_ОтветственноеХранениеОстатки
11 Vladislava-smile
 
14.08.15
10:46
Что за регистр такой?
12 shuhard_серый
 
14.08.15
12:10
(11) мать, а мой Рг тебе зачем ?
ты пишешь свой запрос со своими условиями и получаешь отбор по документам
  |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    ЕСТЬNULL(Взаиморасчеты.Сделка, Продажи.ЗаказПокупателя) КАК Ссылка,
    |    ЕСТЬNULL(Продажи.СтоимостьОборот, 0) КАК СуммаОтгрузки,
    |    ЕСТЬNULL(Взаиморасчеты.СуммаВзаиморасчетовРасход, 0) КАК СуммаОплаты
    |ИЗ
    |    РегистрНакопления.Продажи.Обороты(,,,ЗаказПокупателя В (&МассивЗаказов)) КАК Продажи
    |    ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(,,,Сделка В (&МассивЗаказов)) КАК Взаиморасчеты
    |    ПО Продажи.ЗаказПокупателя = Взаиморасчеты.Сделка");
    
    ЗапросОплатыОтгрузки.УстановитьПараметр("МассивЗаказов", МассивЗаказов);
ТЗ = ЗапросОплатыОтгрузки.Выполнить().Выгрузить();

МассивОтв=ТЗ.ВыгрузитьКолонку("ссылка");
        СписокОтв=Новый СписокЗначений;
        СписокОтв.ЗагрузитьЗначения(МассивОтв);
        Если  МассивОтв.Количество()>0 Тогда
            ДокументСписок.Отбор.Ссылка.ВидСравнения=ВидСравнения.ВСписке;
            ДокументСписок.Отбор.Ссылка.Использование=Истина;
            ДокументСписок.Отбор.Ссылка.Значение=СписокОтв;
        КонецЕсли;
13 Vladislava-smile
 
16.08.15
15:50
(12) - спасибо, сделала и усе заработало.
Тут у меня следом еще вопрос нарисовался - вставить дополнительное поле для отбора в стандартную настройку. Отбор по реквизиту таб части. Форма обычная как писала выше. Добавляю новый объект критерии отбора - там устанавливаю тип и данные. При запуске предприятия этот отбор появляется в списке отборов, но действия неверные выполняет. Куда копать?
14 Vladislava-smile
 
16.08.15
16:01
Тоже запрос надо будет писать, да? И стандартным методом так не сделать?
15 shuhard_серый
 
16.08.15
16:10
(13)
(14)
критерий нормально работает из документа(справочника), который является его параметром, что ты сделал и что за [ействия неверные выполняет] тайна великая
16 shuhard_серый
 
16.08.15
16:19
(15) +1
т.е. если создать критерий по ТЧ и номенклатуре, то в отбор он попадёт в списке/журнале документов , которые вошли в  критерий

в справочнике номенклатуры критерия в отборе не будет, он будет в перейти

так понятно ?
17 Vladislava-smile
 
17.08.15
01:55
(15) Есть реквизит таб части ДефицитНаСкладе тип число, 10, 0. Создаю критерий отбора. Там указываю тип такой число 10, 0 и состав Документ.ЗаказПокупателя.ТабличнаяЧасть.Товары.Реквизит.ДефицитНаСкладе. В отборе появляется этот отбор с типом число, но отбор не выполняется верно. Мне нужно в общем чтобы этот реквизит проверялся у каждого документа в таб части, и если есть хотся бы одна строка, где ДефицитНаСкладе не =0, тогда выводить в список.
(16) - не совсем понятно если честно, при чем тут справочник?
18 Vladislava-smile
 
17.08.15
03:20
У меня подобное по номенклатуре есть уже, работает. Тоже самое делаю, но по другому полю - нет и все. Только при отборе номенклатуры есть еще форма списка в критериях отбора зачем-то, ставлю там точки останова на каждую функцию - при отборе нигде не стопорится. Не понимаю как это работает ((
19 Vladislava-smile
 
17.08.15
04:21
Вопрос снимается, в этот реквизит таб части запись не идет оказывается. А при открытии документа каждый раз при получении данных идет обращение к регистру и заполняется табличное поле. Это жесть конечно.