Имя: Пароль:
1C
1С v8
Обрезание результата полей
,
0 zzzLEXzzz
 
26.12.12
10:32
Привет всем, люди ну помогите новичку, вот код отчёта
Процедура ОтчетЭфесРус(ТабДок, ДатаКонец, ДатаНачало, Контрагент, Номенклатура) Экспорт
   //{{КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ(ОтчетЭфесРус)
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

   Макет = ОтчетОбъект.ПолучитьМакет("ОтчетЭфесРус");
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    РеализацияТоваровУслуг.Дата,
   |    РеализацияТоваровУслуг.Номер,
   |    РеализацияТоваровУслуг.Комментарий,
   |    РеализацияТоваровУслуг.Ссылка,
   |    РеализацияТоваровУслуг.Представление,
   |    РеализацияТоваровУслуг.Товары.(
   |        Номенклатура.Артикул,
   |        Номенклатура.Наименование,
   |        РеализацияТоваровУслуг.Товары.Количество * РеализацияТоваровУслуг.Товары.Коэффициент * РеализацияТоваровУслуг.Товары.Номенклатура.КолЛвШТ КАК Количество,
   |        Коэффициент,
   |        Номенклатура.КолЛвШТ
   |    ),
   |    РеализацияТоваровУслуг.Контрагент.Код,
   |    РеализацияТоваровУслуг.Контрагент.Наименование,
   |    РеализацияТоваровУслуг.Контрагент.Родитель.Код
   |ИЗ
   |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
   |ГДЕ
   |    РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачало И &ДатаКонец
   |    И РеализацияТоваровУслуг.Товары.Номенклатура В ИЕРАРХИИ(&Номенклатура)
   |    И РеализацияТоваровУслуг.Контрагент В ИЕРАРХИИ(&Контрагент)";

   Запрос.УстановитьПараметр("ДатаКонец", ДатаКонец);
   Запрос.УстановитьПараметр("ДатаНачало", ДатаНачало);
   Запрос.УстановитьПараметр("Контрагент", Контрагент);
   Запрос.УстановитьПараметр("Номенклатура", Номенклатура);

   Результат = Запрос.Выполнить();

   ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
   ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
   ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
   ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
   ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
   ТоварыОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ТоварыШапкаТаблицы");
   ТоварыОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ТоварыПодвалТаблицы");
   ТоварыОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("ТоварыДетали");

   ТабДок.Очистить();
   ТабДок.Вывести(ОбластьЗаголовок);
   ТабДок.НачатьАвтогруппировкуСтрок();

   ВыборкаДетальныеЗаписи = Результат.Выбрать();
       ТабДок.Вывести(ТоварыОбластьШапкаТаблицы);

   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
       ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
       ТоварыВыборкаДетальныеЗаписи = ВыборкаДетальныеЗаписи.Товары.Выбрать();

       Пока ТоварыВыборкаДетальныеЗаписи.Следующий() Цикл
           ТоварыОбластьДетальныхЗаписей.Параметры.Заполнить(ТоварыВыборкаДетальныеЗаписи);
           
           ТоварыОбластьДетальныхЗаписей.Параметры.Дата = ВыборкаДетальныеЗаписи.Дата;
           ТоварыОбластьДетальныхЗаписей.Параметры.Номер = ВыборкаДетальныеЗаписи.Номер;
           ТоварыОбластьДетальныхЗаписей.Параметры.Комментарий = ВыборкаДетальныеЗаписи.Комментарий;
           ТоварыОбластьДетальныхЗаписей.Параметры.КонтрагентКод = ВыборкаДетальныеЗаписи.КонтрагентКод;
           ТоварыОбластьДетальныхЗаписей.Параметры.КонтрагентНаименование = ВыборкаДетальныеЗаписи.КонтрагентНаименование;            
           ТоварыОбластьДетальныхЗаписей.Параметры.КонтрагентРодительКод = ВыборкаДетальныеЗаписи.КонтрагентРодительКод;
           ТоварыОбластьДетальныхЗаписей.Параметры.Представление = ВыборкаДетальныеЗаписи.Представление;
           ТабДок.Вывести(ТоварыОбластьДетальныхЗаписей, ТоварыВыборкаДетальныеЗаписи.Уровень());
       КонецЦикла;

       ТабДок.ЗакончитьАвтогруппировкуСтрок();
   КонецЦикла;

   ТабДок.ЗакончитьАвтогруппировкуСтрок();
   ТабДок.Вывести(ОбластьПодвалТаблицы);
   ТабДок.Вывести(ОбластьПодвал);

   //}}КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ
КонецПроцедуры


Поля куда попадает "комментарий" и "представление" надо сократить, т.е сейчас попадает в "комментарий" например это значение"[523829584]-перебить" а нужно чтобы попадало только это "523829584" чисто цифры, с "представление" похоже, но на примере "комментарий" я думаю смогу сам сделать, подскажите пожалуйста как это сделать.
1 Ёпрст
 
26.12.12
10:53
(0) обрежь его в самом запросе через
выразить как строка
2 lEvGl
 
гуру
26.12.12
10:55
(1) ну это если фикс количество надо, а если Только цифры, то наверно только при переборе результата
3 zzzLEXzzz
 
26.12.12
10:56
тут нужно первую квадратную скобку вырезать и всё что после цифр
4 andreymongol82
 
26.12.12
10:59
(3) Сказали же. Перебором результата запроса
5 Галахад
 
гуру
26.12.12
11:01
Найти, Сред и другие функции работы с строками...
6 Buster007
 
26.12.12
11:03
СтрЗаменить
7 Buster007
 
26.12.12
11:03
+(6) не, не пойдет) я думал там только скобочки)
8 GANR
 
26.12.12
11:07
(5)(6) В языке ЗАПРОСОВ этого нет. Нужно раздробить строку на символы и конкатенировать цифры.

Для этого понадобятся 2 вещи:
1. Поздапрос, генерирующий последовательность чисел (номеров символов строки).
2. Получить каждый символ строки вот таким образом ПОДСТРОКА(Комментарий, Подзапрос1.ОчередноеЧисло, 1)

Пример подобного запроса здесь v8: Запрос в сообщении № 14. Мозгодробильно, но это единственный способ в рамках 1С-запросов.
9 GANR
 
26.12.12
11:10
+(8)(0) Ну, а если не принципиально именно запросом делать - сойдет (5) и (6)
10 НЕА123
 
26.12.12
11:11
ВЫБОР КОГДА ПОДСТРОКА(Комментарий,1,1) МЕЖДУ "0" и "9"
Тогда ПОДСТРОКА(Комментарий,1,1)
Иначе ""
Конец +
ВЫБОР КОГДА ПОДСТРОКА(Комментарий,2,1) МЕЖДУ "0" и "9"
Тогда ПОДСТРОКА(Комментарий,2,1)
Иначе ""
Конец +
ВЫБОР КОГДА ПОДСТРОКА(Комментарий,3,1) МЕЖДУ "0" и "9"
Тогда ПОДСТРОКА(Комментарий,3,1)
Иначе ""
Конец +

и т.д.
типа так...
11 GANR
 
26.12.12
11:11
(7) Почему же? Перебрать символы строки, и заменить множество символов, не являющихся цифрами пустой стрококй - и всё.
12 GANR
 
26.12.12
11:12
(10) Лобовое решение, быстро работает, но текст запроса будет громоздок.
13 НЕА123
 
26.12.12
11:13
а вообще
(2)(4)(5)(6)(8) + 1
14 Бледно Золотистый
 
26.12.12
11:15
Зачем пугать ТСа, ведь он уже перебирает результат при выводе. Делай как в (2).
15 zzzLEXzzz
 
26.12.12
11:16
Извиняюсь за свою глупость, HEA12 скажите в какое место в коде я должен это вставить?
16 sapphire
 
26.12.12
11:16
... а после сабж поля становятся взрослее? :)))
17 andreymongol82
 
26.12.12
11:19
(16) И могут есть кошерную пищу
18 GANR
 
26.12.12
11:19
(15) В тексте запроса, взамен фразы РеализацияТоваровУслуг.Комментарий, но ты уверен, что длина комментария и позиция последней цифры не очень большая? Если да - то только (8).
19 GANR
 
26.12.12
11:20
+(18) >Если да - то только (8).
В смысле, если длина большая
20 zzzLEXzzz
 
26.12.12
11:22
(18) да, там всегда будет только 9 цифр, спасибо огромное за решение, щас буду пробовать
21 GANR
 
26.12.12
11:24
(20) Значит (12)
22 zzzLEXzzz
 
26.12.12
11:33
(20) так?
Процедура ОтчетЭфесРус(ТабДок, ДатаКонец, ДатаНачало, Контрагент, Номенклатура) Экспорт
   //{{КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ(ОтчетЭфесРус)
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

   Макет = ОтчетОбъект.ПолучитьМакет("ОтчетЭфесРус");
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    РеализацияТоваровУслуг.Дата,
   |    РеализацияТоваровУслуг.Номер,
   |ВЫБОР КОГДА ПОДСТРОКА(Комментарий,1,1) МЕЖДУ "0" и "9"
   |Тогда ПОДСТРОКА(Комментарий,1,1)
   |Иначе ""
   |Конец +
   |ВЫБОР КОГДА ПОДСТРОКА(Комментарий,2,1) МЕЖДУ "0" и "9"
   |Тогда ПОДСТРОКА(Комментарий,2,1)
   |Иначе ""
   |Конец +
   |ВЫБОР КОГДА ПОДСТРОКА(Комментарий,3,1) МЕЖДУ "0" и "9"
   |Тогда ПОДСТРОКА(Комментарий,3,1)
   |Иначе ""
   |Конец
   |    РеализацияТоваровУслуг.Ссылка,
   |    РеализацияТоваровУслуг.Представление,
   |    РеализацияТоваровУслуг.Товары.(
   |        Номенклатура.Артикул,
   |        Номенклатура.Наименование,
   |        РеализацияТоваровУслуг.Товары.Количество * РеализацияТоваровУслуг.Товары.Коэффициент * РеализацияТоваровУслуг.Товары.Номенклатура.КолЛвШТ КАК Количество,
   |        Коэффициент,
   |        Номенклатура.КолЛвШТ
   |    ),
   |    РеализацияТоваровУслуг.Контрагент.Код,
   |    РеализацияТоваровУслуг.Контрагент.Наименование,
   |    РеализацияТоваровУслуг.Контрагент.Родитель.Код
   |ИЗ
   |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
   |ГДЕ
   |    РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачало И &ДатаКонец
   |    И РеализацияТоваровУслуг.Товары.Номенклатура В ИЕРАРХИИ(&Номенклатура)
   |    И РеализацияТоваровУслуг.Контрагент В ИЕРАРХИИ(&Контрагент)";

   Запрос.УстановитьПараметр("ДатаКонец", ДатаКонец);
   Запрос.УстановитьПараметр("ДатаНачало", ДатаНачало);
   Запрос.УстановитьПараметр("Контрагент", Контрагент);
   Запрос.УстановитьПараметр("Номенклатура", Номенклатура);

   Результат = Запрос.Выполнить();

   ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
   ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
   ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
   ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
   ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
   ТоварыОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ТоварыШапкаТаблицы");
   ТоварыОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ТоварыПодвалТаблицы");
   ТоварыОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("ТоварыДетали");

   ТабДок.Очистить();
   ТабДок.Вывести(ОбластьЗаголовок);
   ТабДок.НачатьАвтогруппировкуСтрок();

   ВыборкаДетальныеЗаписи = Результат.Выбрать();
       ТабДок.Вывести(ТоварыОбластьШапкаТаблицы);

   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
       ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
       ТоварыВыборкаДетальныеЗаписи = ВыборкаДетальныеЗаписи.Товары.Выбрать();

       Пока ТоварыВыборкаДетальныеЗаписи.Следующий() Цикл
           ТоварыОбластьДетальныхЗаписей.Параметры.Заполнить(ТоварыВыборкаДетальныеЗаписи);
           
           ТоварыОбластьДетальныхЗаписей.Параметры.Дата = ВыборкаДетальныеЗаписи.Дата;
           ТоварыОбластьДетальныхЗаписей.Параметры.Номер = ВыборкаДетальныеЗаписи.Номер;
           ТоварыОбластьДетальныхЗаписей.Параметры.Комментарий = ВыборкаДетальныеЗаписи.Комментарий;
           ТоварыОбластьДетальныхЗаписей.Параметры.КонтрагентКод = ВыборкаДетальныеЗаписи.КонтрагентКод;
           ТоварыОбластьДетальныхЗаписей.Параметры.КонтрагентНаименование = ВыборкаДетальныеЗаписи.КонтрагентНаименование;            
           ТоварыОбластьДетальныхЗаписей.Параметры.КонтрагентРодительКод = ВыборкаДетальныеЗаписи.КонтрагентРодительКод;
           ТоварыОбластьДетальныхЗаписей.Параметры.Представление = ВыборкаДетальныеЗаписи.Представление;
           ТабДок.Вывести(ТоварыОбластьДетальныхЗаписей, ТоварыВыборкаДетальныеЗаписи.Уровень());
       КонецЦикла;

       ТабДок.ЗакончитьАвтогруппировкуСтрок();
   КонецЦикла;

   ТабДок.ЗакончитьАвтогруппировкуСтрок();
   ТабДок.Вывести(ОбластьПодвалТаблицы);
   ТабДок.Вывести(ОбластьПодвал);

   //}}КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ
КонецПроцедуры
23 GANR
 
26.12.12
11:50
(22) только не 3 символа, а 9
24 zzzLEXzzz
 
26.12.12
12:01
(23) Извини за назойливость, вот смотри я вот так сделал, но он почему-то выдает ошибку


Макет = ОтчетОбъект.ПолучитьМакет("ОтчетЭфесРус");
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    РеализацияТоваровУслуг.Дата,
   |    РеализацияТоваровУслуг.Номер,
   |ВЫБОР КОГДА ПОДСТРОКА(Комментарий,1,1) МЕЖДУ "0" и "9"
   |Тогда ПОДСТРОКА(Комментарий,1,1)
   |Иначе ""
   |Конец +
   |ВЫБОР КОГДА ПОДСТРОКА(Комментарий,2,1) МЕЖДУ "0" и "9"
   |Тогда ПОДСТРОКА(Комментарий,2,1)
   |Иначе ""
   |Конец +
   |ВЫБОР КОГДА ПОДСТРОКА(Комментарий,3,1) МЕЖДУ "0" и "9"
   |Тогда ПОДСТРОКА(Комментарий,3,1)
   |Иначе ""
   |Конец +
   |ВЫБОР КОГДА ПОДСТРОКА(Комментарий,4,1) МЕЖДУ "0" и "9"
   |Тогда ПОДСТРОКА(Комментарий,4,1)
   |Иначе ""
   |Конец +
   |ВЫБОР КОГДА ПОДСТРОКА(Комментарий,5,1) МЕЖДУ "0" и "9"
   |Тогда ПОДСТРОКА(Комментарий,5,1)
   |Иначе ""
   |Конец +
   |ВЫБОР КОГДА ПОДСТРОКА(Комментарий,6,1) МЕЖДУ "0" и "9"
   |Тогда ПОДСТРОКА(Комментарий,6,1)
   |Иначе ""
   |Конец +
   |ВЫБОР КОГДА ПОДСТРОКА(Комментарий,7,1) МЕЖДУ "0" и "9"
   |Тогда ПОДСТРОКА(Комментарий,7,1)
   |Иначе ""
   |Конец +
   |ВЫБОР КОГДА ПОДСТРОКА(Комментарий,8,1) МЕЖДУ "0" и "9"
   |Тогда ПОДСТРОКА(Комментарий,8,1)
   |Иначе ""
   |Конец +
   |ВЫБОР КОГДА ПОДСТРОКА(Комментарий,9,1) МЕЖДУ "0" и "9"
   |Тогда ПОДСТРОКА(Комментарий,9,1)
   |Иначе ""
   |Конец
   |    РеализацияТоваровУслуг.Ссылка,
   |    РеализацияТоваровУслуг.Представление,
   |    РеализацияТоваровУслуг.Товары.(
   |        Номенклатура.Артикул,
   |        Номенклатура.Наименование,
   |        РеализацияТоваровУслуг.Товары.Количество * РеализацияТоваровУслуг.Товары.Коэффициент * РеализацияТоваровУслуг.Товары.Номенклатура.КолЛвШТ КАК Количество,
   |        Коэффициент,
   |        Номенклатура.КолЛвШТ
   |    ),
   |    РеализацияТоваровУслуг.Контрагент.Код,
   |    РеализацияТоваровУслуг.Контрагент.Наименование,
   |    РеализацияТоваровУслуг.Контрагент.Родитель.Код
   |ИЗ
   |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
   |ГДЕ
   |    РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачало И &ДатаКонец
   |    И РеализацияТоваровУслуг.Товары.Номенклатура В ИЕРАРХИИ(&Номенклатура)
   |    И РеализацияТоваровУслуг.Контрагент В ИЕРАРХИИ(&Контрагент)";

   Запрос.УстановитьПараметр("ДатаКонец", ДатаКонец);
   Запрос.УстановитьПараметр("ДатаНачало", ДатаНачало);
   Запрос.УстановитьПараметр("Контрагент", Контрагент);
   Запрос.УстановитьПараметр("Номенклатура", Номенклатура);

   Результат = Запрос.Выполнить();






{Форма.ОтчетЭфесРус.Форма(32,49)}: Неопознанный оператор
   |ВЫБОР КОГДА ПОДСТРОКА(Комментарий,1,1) МЕЖДУ "<<?>>0" и "9"  (Проверка: Толстый клиент (обычное приложение))
{Форма.ОтчетЭфесРус.Форма(92,31)}: Ошибка в выражении
   Результат = Запрос.Выполнить(<<?>>); (Проверка: Толстый клиент (обычное приложение))
{Форма.ОтчетЭфесРус.Форма(132,32)}: Обнаружено логическое завершение исходного текста модуля
   ТабДок.Вывести(ОбластьПодвал);<<?>> (Проверка: Толстый клиент (обычное приложение))
25 НЕА123
 
26.12.12
12:20
В запросе все двойные кавычки должны быть задублированы.
типа ""0"", пустая строка """"
26 НЕА123
 
26.12.12
12:22
и почему так не любят конструктор запросов?
27 zzzLEXzzz
 
26.12.12
12:51
(25) Огромное спасибо всё получилось, вообще супер )))