Имя: Пароль:
1C
1С v8
Подсчет количества документов определенного типа
,
0 bloodnik
 
26.08.13
13:55
Необходимо получить кол-во документов выбранного типа за период. Как реализовать выбор типа на форме и выбор документов этого типа из базы?
1 Чайник Рассела
 
26.08.13
13:57
программным кодом можно
2 Wobland
 
26.08.13
13:58
можно сделать список из строк, дать его выбрать, сделать запрос, показать результат
3 Starhan
 
26.08.13
14:01
Обойти метаданные документы. составить список документов
имя, синоним

вывести пользователю как надо (выбоором из списка или выпадающего списк)

Получить имя документа и подстваить в запрос.
4 ОбычныйЧеловек
 
26.08.13
14:02
5 bloodnik
 
26.08.13
14:06
(2)выводить как без разницы, главное чтобы все возможные варианты типов документов подгружались автоматически(на случай когда новый док может добавиться)
Текст = "... ВЫБРАТЬ ... ИЗ Документ." + ИмяДокумента?
6 bloodnik
 
26.08.13
14:09
(4)нельзя ли кусочек кода или описание принципа получить, у меня пока нет sm )
7 Wobland
 
26.08.13
14:10
(5) направление мысли верное
8 ОбычныйЧеловек
 
26.08.13
14:53
(6) давай я тебе cm перекину - а ты уж скачивай сам, что считаешь нужным.
9 bloodnik
 
26.08.13
15:46
(8) Спасибо, я уже сам сделал )

Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    Если Не ЗначениеЗаполнено(НачПер) Или Не ЗначениеЗаполнено(КонПер) Или НачПер > КонПер Тогда
        Предупреждение("Некорректно заполнен период!");
        Возврат;
    КонецЕсли;
    //Если Не ЗначениеЗаполнено(Организация) Тогда
    //    Предупреждение("Не заполнена организация!");
    //    Возврат;
    //КонецЕсли;
    Если Не ЗначениеЗаполнено(ЭлементыФормы.ТипДокумента.Значение) Тогда
        Предупреждение("Не выбран тип документа!");
        Возврат;
    КонецЕсли;
    
    //|    Документ." + ЭлементыФормы.ТипДокумента.Значение + " КАК Документ
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Документ.Ссылка
    |ИЗ
    |    Документ." + ЭлементыФормы.ТипДокумента.Значение + " КАК Документ
    |ГДЕ
    |    Документ.ПометкаУдаления = ЛОЖЬ
    |    И Документ.Дата > &НачПер
    |    И Документ.Дата <= &КонПер
    |    И ВЫБОР
    |            КОГДА Документ.Фирма ЕСТЬ NULL
    |                ТОГДА ИСТИНА
    |            ИНАЧЕ Документ.Фирма В(&СпсФирм)
    |        КОНЕЦ";
    
    Запрос.УстановитьПараметр("НачПер", НачалоДня(НачПер));
    Запрос.УстановитьПараметр("КонПер", КонецДня(КонПер));
    Запрос.УстановитьПараметр("Фирма", Организация);
    
    Если Не ЗначениеЗаполнено(Организация) Тогда
        Запрос.Текст = СтрЗаменить(Запрос.Текст,
                    "ВЫБОР
                    |            КОГДА Документ.Фирма ЕСТЬ NULL
                    |                ТОГДА ИСТИНА
                    |            ИНАЧЕ Документ.Фирма В(&СпсФирм)
                    |        КОНЕЦ",
                    "1=1");
    Иначе
        Запрос.УстановитьПараметр("СпсФирм", Организация);
    КонецЕсли;
    
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
        КоличествоДокументов = Выборка.Количество();
    Иначе
        КоличествоДокументов = 0;
    КонецЕсли;
    
КонецПроцедуры

ПередОткрытием(Отказ, СтандартнаяОбработка)
    
    ааа = Метаданные.Документы;
        
    СЗ = Новый СписокЗначений;
    Для Каждого Стр Из ааа Цикл
        НовЗапись = СЗ.Добавить();
        НовЗапись.Значение = Стр.Имя;
        НовЗапись.Представление = Стр.Синоним;
    КонецЦикла;
    
    ЭлементыФормы.ТипДокумента.СписокВыбора = СЗ;
    
КонецПроцедуры
10 Wobland
 
26.08.13
15:55
(9) скажешь, КОГДА Документ.Фирма будет являться NULLом?
11 bloodnik
 
26.08.13
16:12
(10) Когда у документа не будет реквизита Фирма )
12 Wobland
 
26.08.13
16:57
ну как вы любите делать то, что нормальному человеку в голову не придёт.. сходил и проверил:
ВЫБРАТЬ
    выбор когда ПриходнаяНакладная.Ссылка20 есть null тогда истина
    конец
ИЗ
    Документ.ПриходнаяНакладная КАК ПриходнаяНакладная

{Обработка.КонсольЗапросов_82.МодульОбъекта(49)}: Ошибка при вызове метода контекста (ВыполнитьПакет): {(2, 33)}: Поле не найдено "ПриходнаяНакладная.Ссылка20"
выбор когда ПриходнаяНакладная.<<?>>Ссылка20 есть null тогда истина
13 bloodnik
 
26.08.13
17:14
(12) блин не фурынькает (((, как тогда проверить наличие реквизита?

P.S.Я еще не волшебник, я только учусь )))
14 Wobland
 
26.08.13
17:20
(13) смотреть в метаданные. зачем это всё?
15 bloodnik
 
26.08.13
17:24
(14) Обработка выводит количество документов выбранного типа и с фильтром по организации и периоду, если в список выбора типа документа попадет документ без реквизита фирма, вывалится с ошибкой (
может попытку воткнуть и сообщение выводить?
16 Aleksey
 
26.08.13
17:26
(15) только попытку до запроса
17 m-serg74
 
26.08.13
17:28
(15) тип документа есть отчего не проверить есть ли в метаданных свойство/реквизит фирма?
18 Wobland
 
26.08.13
17:28
(15) не позволяй юзеры выбирать вид документа без фирмы. или в запросе смотри, можно ли делать фильтр по фирме
19 bloodnik
 
26.08.13
17:32
(18) Мне тоже эта идея пришла про список документов с реквизитом фирма, завтра попробую реализовать
20 m-serg74
 
26.08.13
17:43
(19) а чем (17) плохо?
21 bloodnik
 
27.08.13
08:43
Переделал
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    
    МассивДокументов = Метаданные.Документы;
        
    СЗ = Новый СписокЗначений;
    Для Каждого Стр Из МассивДокументов Цикл
        Если Стр.Реквизиты.Найти("Фирма") <> Неопределено Тогда
            НовЗапись = СЗ.Добавить();
            НовЗапись.Значение = Стр.Имя;
            НовЗапись.Представление = Стр.Синоним;
        КонецЕсли;
    КонецЦикла;
    
    ЭлементыФормы.ТипДокумента.СписокВыбора = СЗ;
    
КонецПроцедуры