Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/10: Рейтинг темы: голосов - 10, средняя оценка - 4.80
S89
0 / 0 / 0
Регистрация: 15.10.2013
Сообщений: 89
1

Подсчитать количество

03.07.2014, 11:37. Просмотров 1961. Ответов 11
Метки нет (Все метки)

Есть запрос:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Запрос.Текст = "ВЫБРАТЬ
                   |    ДХМ_ЗаявкаНаИспытаниеМатериалов.Номенклатура КАК Марка,
                   |    СУММА(ДХМ_ЗаявкаНаИспытаниеМатериалов.Количество) КАК Количество,
                   |    ДХМ_ЗаявкаНаИспытаниеМатериалов.ХимИспытание КАК Хим,
                   |    ДХМ_ЗаявкаНаИспытаниеМатериалов.МехИспытания КАК Мех
                   |ИЗ
                   |    РегистрНакопления.ДХМ_ЗаявкаНаИспытаниеМатериалов КАК ДХМ_ЗаявкаНаИспытаниеМатериалов
                   |ГДЕ
                   |    ДХМ_ЗаявкаНаИспытаниеМатериалов.Период МЕЖДУ &Дата1 И &Дата2
                   |
                   |СГРУППИРОВАТЬ ПО
                   |    ДХМ_ЗаявкаНаИспытаниеМатериалов.Номенклатура,
                   |    ДХМ_ЗаявкаНаИспытаниеМатериалов.ХимИспытание,
                   |    ДХМ_ЗаявкаНаИспытаниеМатериалов.МехИспытания";
                                    
    
    Запрос.УстановитьПараметр("Дата1", НачПериода);
    Запрос.УстановитьПараметр("Дата2", КонПериода);
Реквезит ДХМ_ЗаявкаНаИспытаниеМатериалов.Номенклатура у всех документов содержит строку такого типа: Круг 45-В-II ГОСТ 2590-88//Сталь 20ХН3А ГОСТ 4543-71||45
Мне нужно выбрать нолько номер идущий после "Сталь" я делаю так:
1C
1
2
Буфер = СтрЗаменить(Выборка.Марка, " ", Символы.ПС);
Строка = СтрПолучитьСтроку(Буфер, 5); //здесь нужный номер
А дальше мне надо подсчитать и вывести количество документов в номенклатуре которых есть этот номер. Я же пока могу подсчитать лишь количество одинаковых номенклатур. Как можно это сделать?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2014, 11:37
Ответы с готовыми решениями:

подсчитать количество в запросе
ВЫБРАТЬ ЗамещенияСЛишними.Клиент, ЗамещенияСЛишними.Начало, ЗамещенияСЛишними.Окончание,...

Вводится предложение. Подсчитать количество слов и подсчитать количество букв в самом длинном слове
Неправильно считает количество букв в наибольшем слове. #include <iostream> #include <cstdio>...

Дан текст, в котором слова разделены одним пробелом. а) Подсчитать количество слов в данной строке. б) Подсчитать количество букв а в последнем слове
Дан текст, в котором слова разделены одним пробелом. а) Подсчитать количество слов в данной строке....

Подсчитать количество слов в данной строке, подсчитать количество букв а в последнем слове
Дан текст. а) Подсчитать количество слов в данной строке. б) Подсчитать количество букв а в...

Дана строка. Подсчитать количество подсчитать количество содержащихся в ней цифр
1)Дана строка. Подсчитать количество подсчитать количество содержащихся в ней цифр(Эту задачу нужно...

11
duk337
2951 / 1763 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
03.07.2014, 12:59 2
в запросе есть подстрока(), но позиция должна быть жёсткой. Посему, кроме как в тексте модуля, не решить.
Либо до, либо после запроса.
0
S89
0 / 0 / 0
Регистрация: 15.10.2013
Сообщений: 89
03.07.2014, 13:44  [ТС] 3
ну хоть примерно как это сделать после запроса. я наприме пишу так
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 Выборка = Запрос.Выполнить().Выбрать();
     Счет=0;
     
 Если ВидИспытания="Химическое"  Тогда
     Пока Выборка.Следующий() Цикл
    
        Если Выборка.Хим = Истина   Тогда 
        Счет = Счет+1;
ОбластьСтрока.Параметры.Счет = Счет;
        
Буфер = СтрЗаменить(Выборка.Марка, " ", Символы.ПС);
Строка = СтрПолучитьСтроку(Буфер, 5);
ОбластьСтрока.Параметры.Марка = Строка; 
//ОбластьСтрока.Параметры.Марка = Выборка.Марка;
ОбластьСтрока.Параметры.Кол = Выборка.Количество;
                 
ТабДок.Вывести(ОбластьСтрока);
подсчитывает полные наз номенклатур, а как подсчитать только по одинаковым номерам в них никак не пойму
0
duk337
2951 / 1763 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
03.07.2014, 14:06 4
1.Выгружаете в тз
2.+2 колонки: "счетчик" и "ПятыйЭлемент".
3. Заполняете в цикле Счетчик=1,ПятыйЭлемент=СтрПолучитьСтроку(Буфер, 5);
4. тз.Свернуть("ПятыйЭлемент","Счетчик")
0
S89
0 / 0 / 0
Регистрация: 15.10.2013
Сообщений: 89
04.07.2014, 08:36  [ТС] 5
а можете хоть какой-нибудь пример, а то я с этим никогда еще не работал не знаю что куда, вот делаю так:
1C
1
2
3
4
5
6
7
8
9
10
11
12
ТЗ = Новый ТаблицаЗначений;
Тз.Колонки.Добавить("Счетчик");
ТЗ.Колонки.Добавить("Элемент");
 
Пока Выборка.Следующий() Цикл
 Буфер = СтрЗаменить(Выборка.Марка, " ", Символы.ПС); 
                  
НоваяСтрока = Тз.Добавить();
НоваяСтрока.Счетчик = Счет+1;
 Новаястрока.Элемент =  СтрПолучитьСтроку(Буфер,5);
                 
 ТЗ.Свернуть("Элемент", "Счетчик");
дальше не знаю что делать, как вывести это все в макет? пробую так:
1C
1
2
3
Для Каждого Колонка ИЗ ТЗ.Колонки Цикл
ОбластьСтрока.Параметры.Счет = Колонка.Имя;
КонецЦикла;
но мне просто выводит надпись "элемент" и все.
0
SonicQ
283 / 183 / 18
Регистрация: 20.02.2012
Сообщений: 918
04.07.2014, 09:28 6
в гугле много всяких примеров вывода в макет с ТЗ... неужели трудно заглянуть туда? все тривиально, и сто раз тут обсуждалось
0
S89
0 / 0 / 0
Регистрация: 15.10.2013
Сообщений: 89
04.07.2014, 09:50  [ТС] 7
сделал через ТЗ и никакой разницы
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Выборка = Запрос.Выполнить().Выбрать();
     
     ТЗ = Новый ТаблицаЗначений;
     //Тз.Колонки.Добавить("Счетчик");
     ТЗ.Колонки.Добавить("Элемент");
     ТЗ.Колонки.Добавить("Количество");
     
     Счет=0;
     Строка1="";
    Элемент="";   
      Если ВидИспытания="Химическое" Тогда
          
        Пока Выборка.Следующий() Цикл             
              Если Выборка.Хим = Истина Тогда
                  
                 Буфер = СтрЗаменить(Выборка.Марка, " ", Символы.ПС); 
                 Счет = Счет+1;
                 ОбластьСтрока.Параметры.Счет = Счет;
                 НоваяСтрока = Тз.Добавить();
                 //НоваяСтрока.Счетчик = Счет+1;
                 Новаястрока.Элемент =  СтрПолучитьСтроку(Буфер,5);
                 НоваяСтрока.Количество = Выборка.Количество;
                // ТЗ.ЗаполнитьЗначения(НоваяСтрока.Счетчик, "Счетчик");
                 //ТЗ.ЗаполнитьЗначения(НоваяСтрока.Элемент, "Элемент");
                 ТЗ.Свернуть("Элемент", "Количество");
                 
                 Для    каждого колонка из ТЗ Цикл
                     //ОбластьСтрока.Параметры.Счет = колонка.Счетчик;
                     ОбластьСтрока.Параметры.Марка = колонка.Элемент;
                     ОбластьСтрока.Параметры.Кол = колонка.количество;
                     КонецЦикла;
                  
                 ТабДок.Вывести(ОбластьСтрока);
                  
                  
                  КонецЕсли;
              
              
              КонецЦикла;
что мне переделать чтобы выводило номер марки и ее количество?
0
duk337
2951 / 1763 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
04.07.2014, 11:02 8
S89, здесь правильно, чуть-чуть дотянуть:

ТЗ = Новый ТаблицаЗначений;
Тз.Колонки.Добавить("Ссылка");
Тз.Колонки.Добавить("Счетчик");
ТЗ.Колонки.Добавить("Элемент");
Пока Выборка.Следующий() Цикл
Буфер = СтрЗаменить(Выборка.Марка, " ", Символы.ПС);
НоваяСтрока = Тз.Добавить();
НоваяСтрока.Счетчик = 1;
НоваяСтрока.Ссылка = Выборка.Сссылка;

Новаястрока.Элемент = СтрПолучитьСтроку(Буфер,5);
КонецЦикла;
ТЗ.Свернуть("Элемент,Ссылка", "Счетчик");
...
Ик=ТЗ.Найти(СсылкаИзЗапроса,"Ссылка");
Количество=Ик.Счетчик;
1
S89
0 / 0 / 0
Регистрация: 15.10.2013
Сообщений: 89
04.07.2014, 11:15  [ТС] 9
Спасибо, но ИК и СсылкаИзЗапроса это от куда?

Добавлено через 8 минут
да и это строка не понятна НоваяСтрока.Ссылка = Выборка.Сссылка;
вроде у меня в Выборка никакой "Сссылка" нет
0
duk337
2951 / 1763 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
04.07.2014, 11:31 10
Я знаю уже, что у Вас таки за выборка?
Ик - это СтараяСтрока.
Вам надо получить из тз количество для элемента, я показал как. Ссылка - это элемент справочника, который выводится в отчет.
0
S89
0 / 0 / 0
Регистрация: 15.10.2013
Сообщений: 89
04.07.2014, 12:40  [ТС] 11
Вот код целиком

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Запрос = новый Запрос;
    
    Запрос.Текст = "ВЫБРАТЬ
                   |    ДХМ_ЗаявкаНаИспытаниеМатериалов.Номенклатура КАК Марка,
                  
                   |    СУММА(ДХМ_ЗаявкаНаИспытаниеМатериалов.Количество) КАК Количество,
                   |    ДХМ_ЗаявкаНаИспытаниеМатериалов.ХимИспытание КАК Хим,
                   |    ДХМ_ЗаявкаНаИспытаниеМатериалов.МехИспытания КАК Мех
                   |ИЗ
                   |    РегистрНакопления.ДХМ_ЗаявкаНаИспытаниеМатериалов КАК ДХМ_ЗаявкаНаИспытаниеМатериалов
                   |ГДЕ
                   |    ДХМ_ЗаявкаНаИспытаниеМатериалов.Период МЕЖДУ &Дата1 И &Дата2
                   |
                   |СГРУППИРОВАТЬ ПО
                   |    ДХМ_ЗаявкаНаИспытаниеМатериалов.Номенклатура,
                   |    ДХМ_ЗаявкаНаИспытаниеМатериалов.ХимИспытание,
                   |    ДХМ_ЗаявкаНаИспытаниеМатериалов.МехИспытания";
                                    
    
    Запрос.УстановитьПараметр("Дата1", НачПериода);
    Запрос.УстановитьПараметр("Дата2", КонПериода);
    //Запрос.УстановитьПараметр("Сссылка", ЭтотОбъект.Сс
     Выборка = Запрос.Выполнить().Выбрать();
     
     ТЗ = Новый ТаблицаЗначений;
     ТЗ.Колонки.Добавить("Ссылка");
     Тз.Колонки.Добавить("Счетчик");
     ТЗ.Колонки.Добавить("Элемент");
         
     Счет=0;
     Строка1="";
    Элемент="";   
      Если ВидИспытания="Химическое" Тогда
        
        Пока Выборка.Следующий() Цикл             
              //Если Выборка.Хим = Истина Тогда
                  
                Буфер = СтрЗаменить(Выборка.Марка, " ", Символы.ПС);
              НоваяСтрока = Тз.Добавить();   
              НоваяСтрока.Счетчик = 1;
              //НоваяСтрока.Ссылка = Выборка.Сссылка;
                НоваяСтрока.Ссылка = Выборка.Марка;
              НоваяСтрока.Элемент = СтрПолучитьСтроку(Буфер,5);
                                      
                 // КонецЕсли;
                 
                 
                 ТЗ.Свернуть("Элемент,Ссылка", "Счетчик");
             Ик=ТЗ.Найти(Выборка.Марка,"Ссылка");
             
           Количество=Ик.Счетчик; 
           ОбластьСтрока.Параметры.Кол = Количество;
ТабДок.Вывести(ОбластьСтрока);
 
              
              
             КонецЦикла;
и вывод мне см картинку. а надо чтобы в столбец "наименование марки" выводило марку а в столб "количество" - сколько раз эта марка встречается. Я пробывал так :
1C
1
2
3
4
5
6
7
8
9
10
11
ТЗ.Свернуть("Элемент,Ссылка", "Счетчик");
            Ик=ТЗ.Найти(Выборка.Марка,"Ссылка");
             
           Количество=Ик.Счетчик; 
           ОбластьСтрока.Параметры.Кол = Количество;
           
             
            [B] ТЗ.Свернуть("Ссылка, Счетчик", "Элемент");
             ик2 = Тз.Найти(Выборка.Марка, "Ссылка");
             Марка = ик2.Элемент;
             ОбластьСтрока.Параметры.Марка = Марка;[/B]
но ничего не выходит. никак не выводит как надо.
0
Миниатюры
Подсчитать количество  
duk337
2951 / 1763 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
04.07.2014, 14:09 12
1. откуда выйдет, если в качестве номенклатурины текст?
2. Надо два цикла: Один - заполняешь тз, потом сворачиваешь. Второй - уже достаёшь количества и выводишь на печать.
1
04.07.2014, 14:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.07.2014, 14:09

Подсчитать в строке, содержащей арифметическое выражение, количество используемых цифр и букв, заменить "+" на "-", подсчитать количество действий
Ввести строку А с клавиатуры, содержащую арифметическое выражение. Подсчитать количество...

Подсчитать количество букв, количество слов и количество символов в тексте
Дан текст, который состоит из слов. Слова в тексте отделяются одно от другого символом *....

Подсчитать количество всех строк, а потом - количество слов в каждой строке
Программа считает количество строк в файле add.txt выводит на экран и записывает в новый указанный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru