Имя: Пароль:
1C
1C 7.7
v7: Выборка элементов справочника
,
0 Wefast
 
05.05.16
15:08
Семерка для меня совсем темный лес.
Есть сотрудники. Мне нужно выгрузить всех сотрудников у кого указано образование.
Что то вида
Сотрудник  | Образование

Образование строка не ограниченной длины.

Воспользовался конструктором(который надо сказать вообще не понятный)

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

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

Мне бы в условие поставить <> "", но оно тогда не работает.
Мне бы туда еще добавить |Образование = Справочники.Сотрудники.Образование
Но ругается на не возможность использования строки неограниченной длины.
1 Mikeware
 
05.05.16
15:17
Ну сделай не запросом, а перебором.
Спр.ВыбратьЭлементы()
пока Спр.ПОлучитьЭлемент()=1 цикл
...
2 Господин ПЖ
 
05.05.16
15:19
забудь про запросы в 7.7
3 Господин ПЖ
 
05.05.16
15:19
+ для таких целей
4 Mikeware
 
05.05.16
15:20
(2) про чорные.
прямыми - нормально :-)
5 пипец
 
05.05.16
15:41
(2) все работает не гони
(0) через реквизит и переменную а не ручными скобочками
6 пипец
 
05.05.16
15:42
+ можно еще внешнюю функцию
7 пипец
 
05.05.16
15:43
+ про неограниченную строку да - таки будет ругаться )))
8 Ясный перец
 
05.05.16
15:47
(0) >>Мне бы в условие поставить <> "",

А что? ПустоеЗначение() уже отменили?
9 Wefast
 
05.05.16
15:49
Этим запросом конструктор сам создал макет. И все в него классно вывел.

Решил я тут перебором все сделать

    Таб = СоздатьОбъект("ТаблицаЗначений");
    Таб.НоваяКолонка("Сотрудник");
    Таб.НоваяКолонка("Родитель");
    Таб.НоваяКолонка("Образование");
    
    Спр = СоздатьОбЪект("Справочник.Сотрудники");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
        Если Спр.Образование <> "" Тогда
            Таб.новаяСтрока();
            Таб.Сотрудник = Спр.ТекущийЭлемент();
            Таб.Родитель = Спр.Родитель;
            Таб.Образование = Спр.Образование;
        КонецЕсли;
    КонецЦикла;

И как мне теперь эту классную таблицу куда то вывести макетом к примеру или сразу сохранить в файл
10 Wefast
 
05.05.16
15:49
(8) нет наверное, но тут главное что строку неограниченной длины я не могу вывести в запросе. А все ради нее и затевается.
11 Ясный перец
 
05.05.16
15:51
(9) СоздатьОбъект("Таблица") и в него выводить значения из Таб
12 Mikeware
 
05.05.16
15:51
(9) создай конструктором макет отчета, и им...
13 ptiz
 
05.05.16
15:55
+100 к перебору, здесь вам не восьмерка.
14 Wefast
 
05.05.16
15:59
(11) каким образом?
Табб = СоздатьОбъект("Таблица");
А дальше что?
15 Mikeware
 
05.05.16
16:00
(14) см (12)
16 Wefast
 
05.05.16
16:04
(15)
    Таб = СоздатьОбъект("ТаблицаЗначений");
    Таб.НоваяКолонка("Сотрудник");
    Таб.НоваяКолонка("Родитель");
    Таб.НоваяКолонка("Образование");
    
    Таб2= СоздатьОбъект("Таблица");
    Таб2.ИсходнаяТаблица("Отчет");
    Таб2.ВывестиСекцию("Шапка");
    Таб2.Опции(0,0,Таб.ВысотаТаблицы(),0);
    
    Спр = СоздатьОбЪект("Справочник.Сотрудники");
//    Спр.ИспользоватьРодителя(ЭлементРодитель);
    Спр.ВыбратьЭлементы();


    Пока Спр.ПолучитьЭлемент() = 1 Цикл
        Если Спр.Образование <> "" Тогда
            Таб.новаяСтрока();
            Таб.Сотрудник = Спр.ТекущийЭлемент();
            Таб.Родитель = Спр.Родитель;
            Таб.Образование = Спр.Образование;
            Таб2.ВывестиСекцию("Строка_1");
        КонецЕсли
                         
        
    КонецЦикла;
    Таб2.ВывестиСекцию("Подвал");
    Таб2.ТолькоПросмотр(1);
    Таб2.Показать("Отчет","");

Я же так понимаю на макете нужно сделать параметры и как то их заполнить? Как их заполнить?
17 Злопчинский
 
05.05.16
16:06
Восьмерочники смишные.. как дети...
http://caricatura.ru/parad/samoilov/pic/2190.jpg
18 пипец
 
05.05.16
16:07
...гыгы я напишу запросом этот отчет за 5-ть минут ...
...а я за 4-ре )))
... пишите
19 Злопчинский
 
05.05.16
16:08
(16)  макет состоит из секций
Секция это набор ячеек
Ячека может содержать либо текст, либо шаблон, либо выражение
Это задается в свойстваях ячеки
В выражении допустимы переменные
20 Злопчинский
 
05.05.16
16:09
(18)  ну согласись, прикольные же они...
21 пипец
 
05.05.16
16:11
(20) угу , это они по  6.0 экзамен не сдавали ))) а ля книгу  покупок по оплате ))))
22 Mikeware
 
05.05.16
16:12
(21) жестокий ты...
23 Wefast
 
05.05.16
16:16
(19) все это чудесно но что там писать.

Т.е. в макете у поля секции что в цикле выводится указать Выражение. И что там написать?
Спр.Образование не работает.
24 пипец
 
05.05.16
16:17
+ если про 7.7 есть еще таблица в режиме ввода данных )))
, а есть еще пост заполнение через области, аля как в финпланировании во всех практически отчетах - итоги наверх выводятся постфактум )))
(22) ненуачо 6.0 между прочим клиент серверной была и работала без множества релизов ))))
25 пипец
 
05.05.16
16:20
Таб.новаяСтрока();
            Таб.Сотрудник = Спр.ТекущийЭлемент();
            Таб.Родитель = Спр.Родитель;
            Таб.Образование = Спр.Образование;
            Таб2.ВывестиСекцию("Строка_1");

это жесть
открой любой отчет и посмотри как там выводится
26 Господин ПЖ
 
05.05.16
16:23
нормальный человеческий запрос в 6 строк и вывод по сути через ЗаполнитьЗначенияСвойств()... а то и вообще в консоли или скд нарисовать

но клюшечники продолжают чесать ЧСВ
27 Wefast
 
05.05.16
16:23
(25) т.е. ты не знаешь?)
ну ок
28 пипец
 
05.05.16
16:26
Функция Есть(Док)
            
    
    
        Если СокрЛП(Док.Образование)="" тогда
              Возврат 0;              
        
        Иначе
        
        
            Возврат 1;          
        КонецЕсли;    
        
    
КонецФункции    


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

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


в таблице то что в таблице
ЗЫ в конструктор так же как в 8-ке можно вставить запрос - таблицу он сам нарисует
29 пипец
 
05.05.16
16:29
(26) ой ой ой )))

(27) вставь в конструкторе в ТЕКСТ запроса
Сотрудники = Справочник.Сотрудники.ТекущийЭлемент;
Функция Счётчик = Счётчик();
Группировка Сотрудники без групп;
Условие(Есть(Сотрудники)=1);


и функцию из (28)
30 Wefast
 
05.05.16
16:29
(28) я не понимаю чем это отличается от того что я показывал в  (0)
В запрос не удается вставить строку не ограниченной длины.

Сделал так:
            Родитель = Спр.Родитель;
            Образование = Спр.Образование;
            Таб2.ВывестиСекцию("Строка_1");

и назвал в макете параметры Родитель и Образование
31 пипец
 
05.05.16
16:30
написано , за 3-ри минуты )))
32 пипец
 
05.05.16
16:31
(30) внимательно прочитай (29) и посмотри (28) и пойми чем отличается )))
33 пипец
 
05.05.16
16:32
(30) в твоем случае в строке (в обединенной секции) должно быть поле с типом выражение и с значением Спр.Образование
34 Wefast
 
05.05.16
16:36
(32) какая то фун-я Счетчик и странное условие что мне не нужно. Мне же нужно вывести Сотрудника, Родителя, и Образование(Строка не ограниченной длины)

Вот эту строку в запрос поместить не удается. ВСе остальное в твоем коде создается через конструктор и у меня.

(33) что то я так пробовал, не вышло, может ; надо было поставить. Но сейчас выводит и ладно
35 Господин ПЖ
 
05.05.16
16:37
>какая то фун-я Счетчик и странное условие что мне не нужно.

запросы в клюшках мозгом не воспринимать лучше. просто "голосуй сердцем"
36 пипец
 
05.05.16
16:40
http://picslife.ru/wp-content/uploads/2013/02/Fragment-turkmenskogo-meteorita.jpg
вот такой камень упал с душИ , рад, что получилось )))
37 Злопчинский
 
05.05.16
18:45
(28)  справочник в запросе и без функции отработает
А если в запрос вывести
Без итогов;

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