Имя: Пароль:
1C
1C 7.7
v7: помогите с поиском по документам
0 bahan
 
01.02.12
10:12
Привет всем.
Помогите пожалуйста с поиском по документам. Нужно найти в разных документах одинаковые ФИО и по ним отобразить за определенный период ДатаДок и Док.Вид. Вобщем есть документ подключение и есть документ отключение. Вот по этим двум видам документа и нужно произвести поиск и засунуть все в отчет.
Что сделал
<code>
Док=СоздатьОбъект("Документ.Подключение");
Док1=СоздатьОбъект("Документ.Отключение");
Док.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода);
Док1.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода);
Док.ВыбратьСтроки();
Док1.ВыбратьСтроки();
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
Таб.ВывестиСекцию("Заголовок");

Пока (Док.ПолучитьДокумент()>0) или (Док1.ПолучитьДокумент()>0)  Цикл
     абонент=Док.ФИО;
     абонент1=Док1.ФИО;
   Дат=Док.ДатаДок;
   Вид=Док.Вид();
   Дат1=Док1.ДатаДок;
   Вид1=Док1.Вид();

Таб.ВывестиСекцию("Строка1");
Таб.Опции(0,0,0,0);
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать","");
</code>

В этом случае все документы с датами и ФИО выводит в отчет. Как теперь сделать что требуется? Помогите пожалуйста по 1с ни бэ ни мэ).
1 1Сергей
 
01.02.12
10:14
Док.ФИО - это строка или чо?
2 bahan
 
01.02.12
10:14
это реквизит
3 Эльниньо
 
01.02.12
10:19
(2) Тип реквизита?
4 1Сергей
 
01.02.12
10:21
(2) спасибо, КЭП :)
5 bahan
 
01.02.12
10:21
свойствах документа посмотрел там написано что тип значения - справочник.клиенты, идентификатор - ФИО
6 Волесвет
 
01.02.12
10:24
в таблицу значений выбираемые данные помещай, сортируй и выводи
7 1Сергей
 
01.02.12
10:24
(5) тогда запрос с группировкой по фио
8 bahan
 
01.02.12
10:33
вот делал запрос вот такой
<code>
       Запрос = СоздатьОбъект("Запрос");
       ТекстЗапроса =
       "//{{ЗАПРОС(Сформировать)    
       |Период с Дата1 по Дата2;
       |ФИО                = Документ.Отключение.ФИО;
       |ДатаДок            = Документ.Отключение.ДатаДок;
           |ФИО1                = Документ.Подключение.ФИО;
       |ДатаДок1            = Документ.Отключение.ДатаДок;
               |Отключение    = Документ.Отключение.ТекущийДокумент;  
       |Подключение    = Документ.Подключение.ТекущийДокумент;
       |Группировка ФИО;
       |Группировка ФИО1;
               |"//}}ЗАПРОС
       ;
       // Если ошибка в запросе, то выход из процедуры
       Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
           Возврат;
       КонецЕсли;
   
   
       Пока Запрос.Группировка(1) = 1 Цикл  
           Пока Запрос.Группировка(2) = 1 Цикл
                       ФИО    = запрос.ФИО;
           ФИО1    = запрос.ФИО1;
                       ДатаДок    = запрос.ДатаДок;
           ДатаДок1= запрос.ДатаДок1;
                       Вид = запрос.Подключение;
                       Вид1 = запрос.Отключение;
</code>
И не работает. Киньте примером пожалуйста. И при таком запросе никаких данных не выдает. И все равно не понимаю как мне в отчет вывести такую конструкцию
ФИО - Дата отключения - Дата подключения
9 Дядя Васька
 
01.02.12
10:35
(8) Хфункцию добавь, заработает...
10 bahan
 
01.02.12
10:36
Енто как)? просто я по книжке пытаюсь что нибудь сделать. Что за функция?
11 1Сергей
 
01.02.12
10:37
(9) не нужна там функция
12 1Сергей
 
01.02.12
10:38
|Период с Дата1 по Дата2;
       |ФИО                 = Документ.Отключение.ФИО, Документ.Подключение.ФИО;
       |Док                 = Документ.Отключение.ТекущийДокумент, Документ.Подключение.ТекущийДокумент;
       |Группировка ФИО;
13 1Сергей
 
01.02.12
10:39
+ Группировка Документ;
14 bahan
 
01.02.12
10:40
Секундочку, щас попробую.
15 bahan
 
01.02.12
10:44
Т.е. мне нужно этот запрос вставить в цикл?
<code>
Пока (Док.ПолучитьДокумент()>0) или (Док1.ПолучитьДокумент()>0)  Цикл
КонецЦикла;
</code>
и в конце запроса вставить?
<code>
Запрос = СоздатьОбъект("Запрос");
       ТекстЗапроса =
       "//{{ЗАПРОС(Сформировать)  
|Период с Дата1 по Дата2;
|ФИО                 = Документ.Отключение.ФИО, Документ.Подключение.ФИО;
|Док                 = Документ.Отключение.ТекущийДокумент, Документ.Подключение.ТекущийДокумент;
|Группировка ФИО;
|Группировка Док;
</code>
16 Эльниньо
 
01.02.12
10:44
Пока (Док.ПолучитьДокумент()>0) или (Док1.ПолучитьДокумент()>0)  Цикл
   Если Док.ФИО = ВыбКлиент Тогда
       Продолжить;
   КонецЕсли;
     абонент=Док.ФИО;
     абонент1=Док1.ФИО;
   Дат=Док.ДатаДок;
17 1Сергей
 
01.02.12
10:49
(15) запрос в цикл не надо. надо двумя циклами перебрать группировки зароса
18 bahan
 
01.02.12
11:10
Почему то при таком раскладе выдает в отчете одну и туже инфу
<code>
Перем ТекДок;
 Перем ТекДок1;
 Перем Дат;
 Перем Дат1;
 Перем ФИО;
 Перем абонент;
 Перем абонент1;
 Перем ВыбКлиент;
 Процедура Сформировать()
Док=СоздатьОбъект("Документ.Подключение");
Док1=СоздатьОбъект("Документ.Отключение");
Док.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода);
Док1.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода);
Док.ВыбратьСтроки();
Док1.ВыбратьСтроки();
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
Таб.ВывестиСекцию("Заголовок");

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

Пока (Док.ПолучитьДокумент()>0) или (Док1.ПолучитьДокумент()>0)  Цикл
Пока Запрос.Группировка(1) = 1 Цикл  
           Пока Запрос.Группировка(2) = 1 Цикл
                       абонент= запрос.ФИО;
                       Дат=запрос.Дат;
           Вид=запрос.Док;
КонецЦикла;
КонецЦикла;
Таб.ВывестиСекцию("Строка1");
Таб.Опции(0,0,0,0);
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать","");
</code>
Т.е. в отчете
ФИО          Дата подкл Вид документа  ФИО          Дата откл. Вид документа
И.И.Иванов    01.03.09   подключение   И.И.Иванов    01.03.09    подключение
19 1Сергей
 
01.02.12
11:14
(18) пилять... ну и каша...

апрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)  

|Период с ВыбНачПериода по ВыбКонПериода;
|ФИО = Документ.Отключение.ФИО, Документ.Подключение.ФИО;
|Док = Документ.Отключение.ТекущийДокумент,Документ.Подключение.ТекущийДокумент;
|Группировка ФИО;
|Группировка Док;
|"//}}ЗАПРОС

;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

Пока Запрос.Группировка(1) = 1 Цикл  
           Пока Запрос.Группировка(2) = 1 Цикл
                       абонент= запрос.ФИО;
                       Дат=запрос.Док.ДатаДок;
                       Вид=запрос.Док;
                       Таб.ВывестиСекцию("Строка1");
           КонецЦикла;
КонецЦикла;
20 bahan
 
01.02.12
11:17
Простите, я только учусь)
21 bahan
 
01.02.12
11:28
Почему не выдает никаких данных
22 bahan
 
01.02.12
11:28
забыл добавить "то"
23 bahan
 
01.02.12
11:35
Сори, забыл в конце вставить
<code>
Таб.Опции(0,0,0,0);
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать","");
</code>
Клево работает запрос.
Только вот почему то все равно выдает в отчете
<code>
ФИО          Дата подкл Вид документа  ФИО          Дата откл. Вид документа
И.И.Иванов    01.03.09   подключение   И.И.Иванов    01.03.09    подключение
</code>
а должен
<code>
ФИО          Дата подкл Вид документа  ФИО          Дата откл. Вид документа
И.И.Иванов    01.03.09   отключение   И.И.Иванов    21.03.09    подключение
</code>
24 bahan
 
01.02.12
11:45
Все, разобрался, туплю жестко)
25 bahan
 
01.02.12
11:45
Копипастить нужно с умом)
26 palpetrovich
 
01.02.12
11:49
(16) это что? это как, где такое?   :)
27 bahan
 
01.02.12
11:54
это в отчете выдавало
28 bahan
 
01.02.12
12:31
Огромное спасибо ребят что откликнулись.
Но отчет все таки не работает как хотелось бы при таком раскладе.
<code>
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)  


|Период с ВыбНачПериода по ВыбКонПериода;
|ФИО = Документ.Отключение.ФИО, Документ.Подключение.ФИО;
|Док = Документ.Отключение.ТекущийДокумент,Документ.Подключение.ТекущийДокумент;
|Группировка ФИО;
|Группировка Док;
|"//}}ЗАПРОС


;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

Пока Запрос.Группировка(1) = 1 Цикл  
           Пока Запрос.Группировка(2) = 1 Цикл
                       абонент= запрос.ФИО;
                       Дат=запрос.Док.ДатаДок;
                       Вид=запрос.Док;
                       Таб.ВывестиСекцию("Строка1");
           КонецЦикла;
КонецЦикла;
</code>
группировка работает по фамилии, но в отчете в полях
выводит вот так
ФИО          Дата откл Вид документа  ФИО          Дата подкл. Вид документа
И.И.Иванов    01.03.09   подключение   И.И.Иванов    01.03.09    подключение
а должен
ФИО          Дата откл. Вид документа  ФИО          Дата подкл. Вид документа
И.И.Иванов    01.03.09   отключение   И.И.Иванов    21.03.09    подключение
29 Cthulhu
 
01.02.12
12:55
Почему-то сильно кажется, что графа отбора "ПодклОтклФИО" типа "Справочник.Клиенты", включающая в свой состав реквизиты "ФИО" документов "Подключение" и "Отключение" - будет весьма не лишней. Тогда решение и этой задачи, и многих других - сильно упростятся.
30 bahan
 
01.02.12
12:59
а где эту графу отбора нужно создать?
31 bahan
 
01.02.12
13:47
Ну ребят, помогите пожалуйста!
32 Ёпрст
 
01.02.12
13:51
(30) она тебе не нужна, если что, запрос в том виде в каком ты хочешь табличку тебе не выведет - только либо докм обоих видов в перемежку по позиции документа, или отсортированные по виду документа (если в тексте запроса попросишь).

А так, проще прямой запрос и full join или извращаться с тем что есть, с помощью ТЗ, например
33 Cthulhu
 
01.02.12
13:53
(30): в конфигураторе.
(32): либо две выборки в ТЗ с проходом по одной и поиском по другой.
либо два запроса с проходом по одному и попыткой "брать" из результата выполнения второго
либо - да! - прямой запрос с джойном.
34 bahan
 
01.02.12
13:55
а прямой запрос с джойном это как?
35 Ёпрст
 
01.02.12
14:01
либо..2 чорных запроса (по каждому виду документов - отдельно)
+ общий цикл +

ПечДок1="";
Если Запрос1.Группировка()=1 Тогда
 ПечДок1 = Запрос1.Док;
КонецЕсли;
Таб.ВывестиСекцию("Документ|Док1");

ПечДок1="";
Если Запрос1.Группировка()=1 Тогда
 ПечДок1 = Запрос1.Док;
КонецЕсли;
Таб.ВывестиСекцию("Документ|Док1");

ПечДок2="";
Если Запрос2.Группировка()=1 Тогда
 ПечДок2 = Запрос2.Док;
КонецЕсли;
Таб.ПрисоединитьСекцию("Документ|Док2");
36 bahan
 
01.02.12
15:11
уф, все равно не могу понять. Неужели я такой тупой(
Ёпрст4, что означает общий цикл?
Это в общий цикл занести нужно?
И что такое ПечДок1 и ПечДок2?
37 bahan
 
01.02.12
15:12
в смысле перед циклами группировки?
38 Ёпрст
 
01.02.12
15:20
да любой цикл, пока хотя бы одна из выборок что-то возвращает.
39 bahan
 
01.02.12
15:25
а, понятно. Т.е. я должен сейчас создать два запроса, один например на вид документа подключение, другой на вид документа отключение? И через циклы группировок выбирать от туда данные?
40 Ёпрст
 
01.02.12
15:29
(39) какой догадливый однако :)
41 bahan
 
01.02.12
15:30
)
43 bahan
 
01.02.12
15:35
крутая помощи однако)))
Епрст4 получилась вот такая вот херня. Выдает только ФИО, Дату и документ отключение. Документ подключение не отдает и что с ним связано.
<code>
Процедура Сформировать()
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
Таб.ВывестиСекцию("Заголовок");

Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)  
|Период с ВыбНачПериода по ВыбКонПериода;
|ФИО = Документ.Отключение.ФИО;
|Док = Документ.Отключение.ТекущийДокумент;
|Группировка ФИО;
|Группировка Док;
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Запрос1 = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС1(Сформировать)  
|Период с ВыбНачПериода по ВыбКонПериода;
|ФИО1 = Документ.Подключение.ФИО;
|Док1 = Документ.Подключение.ТекущийДокумент;
|Группировка ФИО1;
|Группировка Док1;
|"//}}ЗАПРОС
;
Если Запрос1.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Пока Запрос.Группировка(1) = 1 Цикл  
       Пока Запрос.Группировка(2) = 1 Цикл
           абонент1= запрос.ФИО;
           Дат1=запрос.Док.ДатаДок;
           Вид1=запрос.Док;
Таб.ВывестиСекцию("Строка1");
КонецЦикла;
КонецЦикла;
Пока Запрос1.Группировка(1) = 1 Цикл  
       Пока Запрос1.Группировка(2) = 1 Цикл
           абонент= запрос.ФИО;
           Дат=запрос.Док.ДатаДок;
           Вид=запрос.Док;
Таб.ВывестиСекцию("Строка1");
КонецЦикла;
КонецЦикла;
Таб.Опции(0,0,0,0);
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать","");
КонецПроцедуры
</code>
44 Ёпрст
 
01.02.12
15:36
(43) не угадал
:(
45 bahan
 
01.02.12
16:30
Что то со сложными запросами нифига не получается(
46 bahan
 
01.02.12
17:14
а почему когда в запросе ставишь условие запрос не вытаскивает данные? 1С что тупо пробегает с верху вниз по данным что ли?
ФИО=Документ.Отключение.ФИО
ФИО1=Документ.Подключение.ФИО
Условие ФИО=ФИО1
47 Ёпрст
 
01.02.12
17:26
(46) он просто не умеет ругаться матом на такой текст запроса - тупо обижается и ничего не возвращает
48 viktor_vv
 
01.02.12
17:28
Пока Запрос1.Группировка(1) = 1 Цикл  
       Пока Запрос1.Группировка(2) = 1 Цикл
            абонент= запрос1.ФИО;
            Дат=запрос1.Док1.ДатаДок;
            Вид=запрос1.Док1;
Таб.ВывестиСекцию("Строка1");
КонецЦикла;
КонецЦикла;

Копипаст зло :).
49 viktor_vv
 
01.02.12
17:29
(48)* абонент= запрос1.ФИО1;

Вообще-то должен был долго и нудно ругаться при выводе.
50 viktor_vv
 
01.02.12
17:31
(49)+ А вижу, ругаться не должен был.
51 bahan
 
01.02.12
17:34
да я уже тупею на глазах, уже скопипастить не могу правильно)
52 Босечка
 
01.02.12
17:42
(0) Если не хочешь черный запрос,
создаешь 2 таблицы значений
Док=СоздатьОбъект("Документ");
Док.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода);
ПОка Док.ПолучитьДокумент()=1 цикл
Если Док.Вид()="Подключение" тогда
Т1.НоваяСтрока();
Т1.ФИО=Док.ФИО;
Т1.Докум=Док;
иначеЕсли Док.Вид()="Отключение" тогда
Т2.НоваяСтрока();
Т2.ФИО=Док.ФИО;
Т2.Докум=Док;
Конецесли;

Конеццикла;

Потом обходишь одну из них и ищешь Т1.ФИО и т.д.
53 palpetrovich
 
01.02.12
17:48
(16) сорьки, в (16) - это стеб оказывается :)
(51) на один док "Подключение" может быть один док "Отключение"  и его надо найти для однго и того-же ФИО?
54 bahan
 
01.02.12
18:17
ага
55 Cthulhu
 
01.02.12
18:25
// как-то так ещё можно попробовать... навскидку...
...=;
|Период с ВыбНачПериода по ВыбКонПериода;
|ДокВкл=Документ.Подключение; ФиоВкл=Документ.Подключение.ФИО;
|ДокОткл=Документ.Отключение; ФиоОткл=Документ.Отключение.ФИО;
|Группировка ДокВкл; Группировка ДокОткл; Условие(ФиоВкл=ФиоОткл);";
56 viktor_vv
 
01.02.12
18:37
Скорее так.

...=;
|Период с ВыбНачПериода по ВыбКонПериода;
|Док=Документ.Подключение.ТекущийДокумент,Документ.Отключение.ТекущийДокумент;
|ФИО=Документ.Подключение.ФИО,Документ.Отключение.ФИО;
|Группировка ФИО;
|Группировка Док; ";
57 Trushc
 
01.02.12
18:44
Если у тебя ситуация, при которой дата подключения и дата отключения равны - добавь группировку по датаДок первой, и уже от нее пляши;
Если же у тебя одному подключению соответствует одно отключение, тогда первая группировка вид документа, вторая дата.
58 bahan
 
01.02.12
19:35
у меня дата подключения и дата отключения может не совпадать, документы совпадают только по ФИО, ну и может существовать ситуация при которой есть только подключение, а отключения еще не было.
59 bahan
 
01.02.12
20:01
при таком запросе
|Период с ВыбНачПериода по ВыбКонПериода;
|Док=Документ.Подключение.ТекущийДокумент,Документ.Отключение.ТекущийДокумент;
|ФИО=Документ.Подключение.ФИО,Документ.Отключение.ФИО;
|Группировка ФИО;
|Группировка Док; ";
получается вот так
ФИО          Дата откл Вид документа  ФИО          Дата подкл. Вид документа
И.И.Иванов    01.03.09   подключение   И.И.Иванов    01.03.09    подключение
И.И.Иванов    01.03.09   подключение   И.И.Иванов    01.03.09    подключение


а при таком раскладе
Перем ДокВкл, ДокОткл;
Процедура Сформировать()

Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
Таб.ВывестиСекцию("Заголовок");

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

Пока Запрос.Группировка(1) = 1 Цикл  
   Пока Запрос.Группировка(2) = 1 Цикл
       Сообщить(Строка(Запрос.ДокВкл));
       Сообщить(Строка(Запрос.ДокОткл));
       Сообщить(Строка(Запрос.ФиоВкл));
       Сообщить(Строка(Запрос.ФиоОткл));
КонецЦикла;
   КонецЦикла;
Таб.Опции(0,0,0,0);
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать","");
КонецПроцедуры

Ошибка
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{Отчет.ВновьПодкл.Форма.Модуль(36)}: ДокВкл=Документ.Подключение <<?>> ;
Запрос[3] : Переменную описывают различные типы данных
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{Отчет.ВновьПодкл.Форма.Модуль(36)}: ДокОткл=Документ.Отключение <<?>> ;
Запрос[5] : Переменную описывают различные типы данных
60 bahan
 
02.02.12
08:52
начитавшись про возможности 1с 8 версии лучше походу дела переходить на нее, все равно конфигурашка самописная. Или все таки есть выход, весь вечер вчера мучался с этим запросами. с табличными значениями как то не получается. А не подскажет кто нибудь, как данные полученные запросом поместить в таблицу значений и потом вытащить из таблицы значений значения? И что лучше, список значений или таблица значений?
61 Mikeware
 
02.02.12
09:09
(60) Тебе - лучше всего нанять программиста...
62 bahan
 
02.02.12
09:14
Спасибо большое, мне от твоего ответа как то легче стало.......
63 Ёпрст
 
02.02.12
09:14
(60) база дбф ?
64 Ёпрст
 
02.02.12
09:15
ФИО - реквизит какого типа?
65 viktor_vv
 
02.02.12
09:15
(59) Как выводишь при первом запросе ?

Пока Запрос.Группировка(1) = 1 Цикл  
    ПеременнаяИзТаблицыФИО = Запрос.ФИО ;

         ПеременнаяИзТаблицыПодключениеДата = "" ;
         ПеременнаяИзТаблицыПодключениеВид = "" ;        
         ПеременнаяИзТаблицыОтключениеДата = "" ;
         ПеременнаяИзТаблицыОтключениеВид = "" ;        
   
   Пока Запрос.Группировка(2) = 1 Цикл
       Если Запрос.Док.Вид() = "Подключение" Тогда
         ПеременнаяИзТаблицыПодключениеДата = Запрос.Док.ДатаДок ;
         ПеременнаяИзТаблицыПодключениеВид = Запрос.Док.Вид() ;        
       Иначе
         ПеременнаяИзТаблицыОтключениеДата = Запрос.Док.ДатаДок ;
         ПеременнаяИзТаблицыОтключениеВид = Запрос.Док.Вид() ;        
       КонецЕсли ;
   КонецЦикла ;
   
   Таб.ВывестиСекцию("Строка") ;
КонецЦикла ;
66 bahan
 
02.02.12
09:16
dbf
67 bahan
 
02.02.12
09:25
Открываю конфигуратор, открываю документ подключение, выбираю реквизит ФИО, нажимаю изменить, появляются свойства реквизита ФИО, написано тип значения - Справочник.Клиенты. Тоже самое у документа Отключение.
68 bahan
 
02.02.12
09:26
viktorr_vv щас попробую так как ты говоришь, я во0бще с какими то колонками мучался
69 Ёпрст
 
02.02.12
10:15
На вот, развлекайся:
http://zalil.ru/32627137

предварительно скачай это
http://snegopat.ru/downloads/1sqlite/1sqlite_1025.zip
и кинь в папку \bin, где у тебя установлина 1с-ина..или в каталог с ИБ
70 bahan
 
02.02.12
10:25
Блин viktor_vv работает, ОФИГЕТЬ))))))
71 bahan
 
02.02.12
10:25
СПАСИБО
72 bahan
 
02.02.12
10:27
я без таблицы обошелся, просто в циклах с использование если и без дублей, кароче что уж тут говорить, вот
<code>
Процедура Сформировать()

Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
Таб.ВывестиСекцию("Заголовок");

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

Пока Запрос.Группировка(1) = 1 Цикл  
        абонент=Запрос.ФИО;
        Дат="";
        Вид="";
        Дат1="";
        Вид1="";
        Пока Запрос.Группировка(2) = 1 Цикл
           Если Запрос.Док.Вид()="Подключение" Тогда
               Дат=Запрос.Док.ДатаДок;
               Вид=Запрос.Док.Вид();
           Иначе
               Дат1=Запрос.Док.ДатаДок;
               Вид1=Запрос.Док.Вид();
           КонецЕсли;
       
       //Если Запрос.Док.Вид()="Подключение" Тогда
       //Сообщить(Строка("Подключение найдено"));
       //КонецЕсли;
       //Если Запрос.Док.Вид()="Октлючение" Тогда
       //Иначе    
       //    Сообщить(Строка("Отключение найдено"));
           //КонецЕсли;
       //    абонент= запрос.ФИО;
           //Дат=запрос.Док.ДатаДок;
           //Вид=запрос.Док;
         //Таб.ВывестиСекцию("Строка1");
    КонецЦикла;
    Таб.ВывестиСекцию("Строка1");
КонецЦикла;
Таб.Опции(0,0,0,0);
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать","");
КонецПроцедуры
</code>
73 Ёпрст
 
02.02.12
10:30
(72) при таком подходе, ты видишь "лесенку" всегда.
И результата как в (0) не получишь
74 bahan
 
02.02.12
10:31
там где закоментированно, это я вчера пытался отловить потключение и отключение.

Теперь осталось сделать так, чтобы те кто небыли отключены за данный период или вообще еще никогда не были отключены, чтобы не выводились.
75 viktor_vv
 
02.02.12
10:38
(73) Да не, там ВывестиСекцию() во внешнем цикле, во внутреннем только формирует данные для строки. Это если на один документ подключение, один документ отключение.
76 Ёпрст
 
02.02.12
10:43
(75) да я вижу уже, что в (65) полный ПЭ написан..

Т.е, абсолютно НЕ рабочий код.
77 Ёпрст
 
02.02.12
10:45
+76
если у васи было 10 Подключений и 2 Отключений, твой код выдаст только последнее подключение и последние отключение..
78 bahan
 
02.02.12
10:48
Епрст4, извини, но мне нужно вывести только последние подключения и отключения. Пока задача стоит вывести не все подключения и отключения по ФИО, а только последние и спрятать те ФИО, которые были подключены и небыли отключены за конкретный промежуток времени.
79 viktor_vv
 
02.02.12
10:51
(77) Это я знаю, просто (78) описывалось где-то выше, на него и опирался.
80 bahan
 
02.02.12
11:23
viktor_vv, а цикл мне получается нужно писать отдельный после всех циклов группировок и создавать для полученных в этих циклах данных промежуточные переменные?
Т.е.
Пока группировка(1)....
Пока группировка(2)....
КонецЦикла;
КонецЦикла;
а потом типа
Видвр=Запрос.Док.Вид()
Пока  (Видвр="Поключение") и ПустоеЗначение(Видвр)<>0 Цикл
Таб.ВывестиСекцию(Строка1)
КонецЦикла;
81 viktor_vv
 
02.02.12
11:27
(80) Ниче не понял. В (75) у тебя же вроде получилось, как ты хотел.
82 bahan
 
02.02.12
11:48
да получилось
Просто есть ФИО, которые никогда не отключались, вот их он выводит и есть кто отключился и больше никогда не подключался, отчет тоже их вывод. А так отчет красиво показывает тех кто отключился и через несколько дней потключился, типа временные отключения.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn