Имя: Пароль:
1C
1С v8
Помогите с запросом ☑
0 KENT2007
 
08.07.12
✎
08:42
Есть выборка договоров

ВЫБРАТЬ
   ДоговорыКонтрагентов.Владелец.Родитель.Наименование КАК Группа,
   ДоговорыКонтрагентов.Номер КАК НомерРоллета,
   ДоговорыКонтрагентов.Владелец КАК ФИО,
   ДоговорыКонтрагентов.Наименование КАК НаименованиеУслуги,
   СУММА(ХозрасчетныйОстаткиИОбороты.СуммаОборотДт) КАК СуммаОборотДт,
   СУММА(ХозрасчетныйОстаткиИОбороты.СуммаОборотКт) КАК СуммаОборотКт
ИЗ
   Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&Начало, &Конец, , , Счет В ИЕРАРХИИ (&Счет62), , ) КАК ХозрасчетныйОстаткиИОбороты
       ПО (ХозрасчетныйОстаткиИОбороты.Субконто2 = ДоговорыКонтрагентов.Ссылка)

СГРУППИРОВАТЬ ПО
   ДоговорыКонтрагентов.Владелец.Родитель.Наименование,
   ДоговорыКонтрагентов.Владелец,
   ДоговорыКонтрагентов.Номер,
   ДоговорыКонтрагентов.Наименование

УПОРЯДОЧИТЬ ПО
   Группа,
   НомерРоллета
ИТОГИ
   СУММА(СуммаОборотДт),
   СУММА(СуммаОборотКт)
ПО
   ОБЩИЕ,
   Группа
АВТОУПОРЯДОЧИВАНИЕ
1 KENT2007
 
08.07.12
✎
08:43
как сортировать номера договоров если номер это строка которая содержит симоволы 54-56 ...

ВЫБРАТЬ
   ВЫБОР
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 1, 1) = "1"
           ТОГДА 1
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 1, 1) = "2"
           ТОГДА 2
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 1, 1) = "3"
           ТОГДА 3
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 1, 1) = "4"
           ТОГДА 4
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 1, 1) = "5"
           ТОГДА 5
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 1, 1) = "6"
           ТОГДА 6
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 1, 1) = "7"
           ТОГДА 7
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 1, 1) = "8"
           ТОГДА 8
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 1, 1) = "9"
           ТОГДА 9
       ИНАЧЕ ""
   КОНЕЦ КАК Символ1,
   ВЫБОР
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 2, 1) = "1"
           ТОГДА 1
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 2, 1) = "2"
           ТОГДА 2
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 2, 1) = "3"
           ТОГДА 3
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 2, 1) = "4"
           ТОГДА 4
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 2, 1) = "5"
           ТОГДА 5
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 2, 1) = "6"
           ТОГДА 6
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 2, 1) = "7"
           ТОГДА 7
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 2, 1) = "8"
           ТОГДА 8
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 2, 1) = "9"
           ТОГДА 9
       ИНАЧЕ ""
   КОНЕЦ КАК Символ2,
   ВЫБОР
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 3, 1) = "1"
           ТОГДА 1
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 3, 1) = "2"
           ТОГДА 2
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 3, 1) = "3"
           ТОГДА 3
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 3, 1) = "4"
           ТОГДА 4
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 3, 1) = "5"
           ТОГДА 5
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 3, 1) = "6"
           ТОГДА 6
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 3, 1) = "7"
           ТОГДА 7
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 3, 1) = "8"
           ТОГДА 8
       КОГДА ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 3, 1) = "9"
           ТОГДА 9
       ИНАЧЕ ""
   КОНЕЦ КАК Символ3
ПОМЕСТИТЬ
ИЗ
   Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов;
2 rphosts
 
08.07.12
✎
09:04
>как сортировать номера договоров если номер это строка которая содержит симоволы 54-56

может так: если номер договора - подстрока с 54 по 56 позиции реквизита ДоговорыКонтрагентов.Номер? Или ещё как-то по другому?

Сортировать как? Как строку или как числовое представление строки?
3 KENT2007
 
08.07.12
✎
09:21
как строку не получается
4 KENT2007
 
08.07.12
✎
09:22
ВЫБОР
   КОГДА ДоговорыКонтрагентов.Номер = (ВЫРАЗИТЬ(ДоговорыКонтрагентов.Номер КАК СТРОКА(1)))
       ТОГДА 1
   КОГДА ДоговорыКонтрагентов.Номер = (ВЫРАЗИТЬ(ДоговорыКонтрагентов.Номер КАК СТРОКА(2)))
       ТОГДА 2
   КОГДА ДоговорыКонтрагентов.Номер = (ВЫРАЗИТЬ(ДоговорыКонтрагентов.Номер КАК СТРОКА(3)))
       ТОГДА 3
   КОГДА ДоговорыКонтрагентов.Номер = (ВЫРАЗИТЬ(ДоговорыКонтрагентов.Номер КАК СТРОКА(4)))
       ТОГДА 4
   КОГДА ДоговорыКонтрагентов.Номер = (ВЫРАЗИТЬ(ДоговорыКонтрагентов.Номер КАК СТРОКА(5)))
       ТОГДА 5
   КОГДА ДоговорыКонтрагентов.Номер = (ВЫРАЗИТЬ(ДоговорыКонтрагентов.Номер КАК СТРОКА(6)))
       ТОГДА 6
   КОГДА ДоговорыКонтрагентов.Номер = (ВЫРАЗИТЬ(ДоговорыКонтрагентов.Номер КАК СТРОКА(7)))
       ТОГДА 7
   КОГДА ДоговорыКонтрагентов.Номер = (ВЫРАЗИТЬ(ДоговорыКонтрагентов.Номер КАК СТРОКА(8)))
       ТОГДА 8
   КОГДА ДоговорыКонтрагентов.Номер = (ВЫРАЗИТЬ(ДоговорыКонтрагентов.Номер КАК СТРОКА(9)))
       ТОГДА 9
   КОГДА ДоговорыКонтрагентов.Номер = (ВЫРАЗИТЬ(ДоговорыКонтрагентов.Номер КАК СТРОКА(10)))
       ТОГДА 10
   КОГДА ДоговорыКонтрагентов.Номер = (ВЫРАЗИТЬ(ДоговорыКонтрагентов.Номер КАК СТРОКА(11)))
       ТОГДА 11
   КОГДА ДоговорыКонтрагентов.Номер = (ВЫРАЗИТЬ(ДоговорыКонтрагентов.Номер КАК СТРОКА(12)))
       ТОГДА 12
   КОГДА ДоговорыКонтрагентов.Номер = (ВЫРАЗИТЬ(ДоговорыКонтрагентов.Номер КАК СТРОКА(13)))
       ТОГДА 13
КОНЕЦ
5 rphosts
 
08.07.12
✎
09:30
>как строку не получается
в смысле?
создаёшь вычислимое поле: ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 54, 3) и сортируй по нему... или если у него длина менее 3 символов - дополняй пробелами справа.
6 DrShad
 
08.07.12
✎
09:34
и неплохо было бы ограничить выборку из таблицы остатков одним субконто
7 KENT2007
 
08.07.12
✎
09:38
может попутно с обработкой поможете
нужно выбрать первые 7 символов из наменования договора сделать группу и переместить договор в группу договора
8 DrShad
 
08.07.12
✎
09:41
а че там помогать? что именно у тебя не получается?
9 KENT2007
 
08.07.12
✎
09:45
Процедура КнопкаВыполнитьНажатие(Кнопка)
   ВоборкаСправочников = Справочники.ДоговорыКонтрагентов.Выбрать();
Пока ВоборкаСправочников.Следующий() Цикл
          ИмяДог=строка(ВоборкаСправочников.Наименование,7,1);
         
           
Конеццикла;

КонецПроцедуры
10 KENT2007
 
08.07.12
✎
09:45
строку небось не так отсечь?
11 DrShad
 
08.07.12
✎
09:46
ЛЕВ()
12 KENT2007
 
08.07.12
✎
09:49
Процедура КнопкаВыполнитьНажатие(Кнопка)
   ВоборкаСправочников = Справочники.ДоговорыКонтрагентов.Выбрать();
Пока ВоборкаСправочников.Следующий() Цикл
          ИмяДог=ЛЕВ(ВоборкаСправочников.Наименование,7);
          ГруппаДог=Справочники.ДоговорыКонтрагентов.СоздатьГруппу();
             ГруппаДог.Наименование=ИмяДог;
             
           
Конеццикла;

КонецПроцедуры
13 KENT2007
 
08.07.12
✎
09:50
а как терь переместить договор в эту грппу при условии что могут быть разные договора
14 rphosts
 
08.07.12
✎
09:50
(11) лучше Подстрока() прямо в запросе и сортировать по нему
15 rphosts
 
08.07.12
✎
09:51
>а как терь переместить договор в эту грппу при условии что могут быть разные договора

вам какие-то итоги по группе нужны или сортировка по группе а в группе по договору?
16 DrShad
 
08.07.12
✎
09:52
(14) тогда уж и группировать по нему, а потом обходом по группировке присваивать Родителя
17 KENT2007
 
08.07.12
✎
09:53
(15) итоги по группам договоров с сортировкой по номеру
18 rphosts
 
08.07.12
✎
09:54
(16) есесьно, пусть запрос делает всё что ему возможно перепоручить! Для того язык запросов и придумали!!!
19 KENT2007
 
08.07.12
✎
09:56
может кто напишет обрзаец, опыта программить нет
20 rphosts
 
08.07.12
✎
10:00
(17) вычислимое поле Подстрока(ЧегоТоТам.НомерДоговора,1,7) как ГрупповоеПоле

>итоги по группам договоров
настроить на закладке итоги построителя запросов.

>с сортировкой по номеру

сортировать по ГрупповоеПоле, ЧегоТоТам.НомерДоговора
или вместо ЧегоТоТам.НомерДоговора использовать сортровку по Подстрока(ЧегоТоТам.НомерДоговора,54,3)


и ещё, старайтесь никогда не использовать в качестве имён полей столбцов таблиц и переменных - предопределённые имена (как Группа из (1)).
21 rphosts
 
08.07.12
✎
10:06
(19) ну ты халявщик!

   Запрос = Новый Запрос("ВЫБРАТЬ
                         |    РеализацияТоваров.Ссылка,
                         |    РеализацияТоваров.Контрагент КАК Контрагент,
                         |    РеализацияТоваров.СуммаДокумента КАК СуммаДокумента
                         |ИЗ
                         |    Документ.РеализацияТоваров КАК РеализацияТоваров
                         |ИТОГИ
                         |    СУММА(СуммаДокумента)
                         |ПО
                         |    Контрагент");
                         
   Результат = Запрос.Выполнить();
   ВыборкаКонтрагент = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
   Пока ВыборкаКонтрагент.Следующий() Цикл
   
       Сообщить("ИТОГИ."+ВыборкаКонтрагент.Контрагент.Наименование+" "+ВыборкаКонтрагент.Ссылка+" "+ВыборкаКонтрагент.СуммаДокумента);
       
       ВыборкаДок = ВыборкаКонтрагент.Выбрать();
       Пока ВыборкаДок.Следующий() Цикл
           Сообщить("ДЕТАЛИ.     "+ВыборкаДок.Ссылка+" "+ВыборкаДок.СуммаДокумента);
       КонецЦикла;
   
   КонецЦикла;
22 KENT2007
 
08.07.12
✎
10:09
спасибо  
но что то ошибка {Форма.Форма.Форма(15)}: Ошибка при вызове метода контекста (Выполнить)
   Результат = Запрос.Выполнить();
23 KENT2007
 
08.07.12
✎
10:11
а вот то что я написал
Процедура КнопкаВыполнитьНажатие(Кнопка)
   ВоборкаСправочников = Справочники.ДоговорыКонтрагентов.Выбрать();
Пока ВоборкаСправочников.Следующий() Цикл
          ИмяДог=ЛЕВ(ВоборкаСправочников.Наименование,7);
          ГруппаДог=Справочники.ДоговорыКонтрагентов.СоздатьГруппу();
          ГруппаДог.Наименование=ИмяДог;
          ГруппаДог.Владелец=ВоборкаСправочников.Родитель.Наименование;
          Если   ИмяДог = ГруппаДог тогда
          ГруппаДог.Родитель=  ГруппаДог ;
          иначе
       ГруппаДог.Записать();
       КонецЕсли        
Конеццикла;

КонецПроцедуры

это бред?
24 rphosts
 
08.07.12
✎
10:16
если УФ, то код делится на клиентский (гдеотрабатывают клавиатурномышечные клики) и серверный (со всеми обращениями к ИБ)