Версия для печати темы (https://pro1c.org.ua/index.php?s=ad2e471491cd6fafd1538d17f572fb4b&showtopic=53906)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Как создать отчет с суммой по отдельной позиции табличной части расходных накладных в 1С 7.70.003 торговля склад для Украины

Автор: ZUBR 01.09.19, 15:53

Здравствуйте. Нужна подсказка. Есть определенное количество проведенных расходных накладных с различным товаром. Кроме того, есть еще услуги, которые также отображаются в табличной части. Я, например, хочу знать, на какую общую сумму были оказаны услуги, скажем, за месяц. Услуга в справочнике имеет название "Ремонт". В некоторых расходных накладных она присутствует, в некоторых нет. Каким методом лучше всего произвести выборку и просуммировать услугу Ремонт по всем расходным накладным за указанный период и присвоить значение результата какой-то переменной? Можно ли сделать это путем создания отчета, не изменяя сам модуль документа РасходнаяНакладная? Трудность в том, что услуга Ремонт - не идентификатор табличной части документа, а элемент справочника. Не могу ничего придумать...
Спасибо большое!

Автор: Pepe 01.09.19, 16:14

Перебором документов за период или копайте в сторону запрса.

Автор: ZUBR 01.09.19, 23:25

Pepe @ Вчера, 17:14 * ,
Пробовал через запрос. Пока не получается никак. Слишком сложно. Может, эту задачу проще решить на этапе создания документов через регистры?

Автор: volodya1122 02.09.19, 9:52

ZUBR @ Сегодня, 0:25 * ,

Крім слова "Ремонт"в навзві, в карточці товару є ще поле "ВидТовару" . Ви проставляєте там вид "товар" або "Услуга"?

Автор: mut 02.09.19, 10:39

Конечно запросом, что тут думать?! Запрос по документам за период с отбором по номенклатуре, отбор нужно делать по элементу справочника, а не по названию. Если покажете структуру документа, могу подсказать пример запроса smile.gif

Автор: ZUBR 02.09.19, 18:55

mut @ Сегодня, 11:39 * , структура документа - обычная штатная расходная накладная. Я заполняю ее табличную часть данными из справочника, имеющими вид товара "Товар" и в конце вношу некоторые элементы справочника, имеющие вид товара "Услуга" К таковым относится, например, "Ремонт". Мне нужно просуммировать численные значения "Ремонт" по всем расходным накладным за указанный период с тем, чтобы потом вычислять определенный процент из этой суммы, сравнивать с другими данными и т.п. Короче, мне нужно по всем расходным накладным, например, за месяц, просуммировать "Ремонт" , который идет, как товар, прописанный в справочнике с численным значением и видом товара "Услуга". Если подскажете пример запроса, буду весьма признателен. Спасибо!


volodya1122 @ Сегодня, 10:52 * , звичайно, проставляю. Товар має вид "Товар", а "Ремонт", "Чистка" та інші види робіт мають вид "Услуга".

Автор: mut 02.09.19, 20:03

Цитата(ZUBR @ 02.09.19, 19:55) *
Если подскажете пример запроса


ТекстЗапроса = 
    "
    |Период с НачДата по КонДата;
    |ОбрабатыватьДокументы Проведенные;
    |Товар = Документ.РасходнаяНакладная.Товар;
    |СуммаСНДС = Документ.РасходнаяНакладная.СуммаСНДС;
    |Функция Сум = Сумма(СуммаСНДС);
    |Группировка Товар Без Групп;
    |Условие (Товар = НужныйТовар);";
    Запрос.Выполнить(ТекстЗапроса);
    Пока Запрос.Группировка(1) = 1 Цикл
        СуммаУслуг = Запрос.Сум;
    КонецЦикла;


ваши параметры - НачДата, КонДата, НужныйТовар (это элемент справочника, услуга, по которой нужно отобрать)

результат в переменной СуммаУслуг

Автор: volodya1122 02.09.19, 21:29

mut @ Сегодня, 21:03 * ,
Немного не то. Человеку нужно выбрать по всех товарах название которых начинается с "Ремонт". Незнаю, есть ли в семёрочных запросах функция "Подобно". В данном случае она бы очень подошла. А так убрать из запроса условие, и перебором пройтись и проверять на ЛЕВ(Товар,6)="Ремонт".

Автор: ZUBR 02.09.19, 22:25

volodya1122 @ Сегодня, 22:29 * , нет, мне как раз нужна сумма по конкретной позиции. То есть, конкретно по "Ремонт". Ну, и по некоторым другим. Но это будет другая сумма. Мне главное понять суть написания запроса. А дальше дело техники. Спасибо за участие!)


mut @ Сегодня, 21:03 * ,

Процедура Сформировать()
    
    Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
    "
    |Период с НачДата по КонДата;
    |ОбрабатыватьДокументы Проведенные;
    |Товар = Документ.РасходнаяНакладная.Товар;
    |СуммаСНДС = Документ.РасходнаяНакладная.СуммаСНДС;
    |Функция Сум = Сумма(СуммаСНДС);
    |Группировка Товар Без Групп;
    |Условие (Товар = Ремонт);";
    Запрос.Выполнить(ТекстЗапроса);
    Пока Запрос.Группировка(1) = 1 Цикл
        СуммаУслуг = Запрос.Сум;
        
    КонецЦикла;
Сообщить("Сумма:"+СуммаУслуг);


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


Вот так я сделал, чтобы проверить работу. Программа выдает ошибку, что переменная Ремонт не определена. Почему она воспринимает Ремонт, как переменную? Что я пропустил? Не могу же я объявить Ремонт, как переменную! Услуга Ремонт в справочнике и в табличной части документов присутствует. Вместо Ремонт пробовал прописывать другой товар. Все равно воспринимает как переменную. В чем моя ошибка?

Автор: Макс1С 02.09.19, 22:41

ZUBR @ Сегодня, 23:25 * ,
переменную "ремонт" нужно определить до запроса.

Ремонт = СоздатьОбъект("Справочник.ТМЦ");
   Ремонт.НайтиПоНаименованию("Ремонт");


только в торговле по-моему справочник "Товары"

Автор: ZUBR 02.09.19, 22:55

Макс1С @ Сегодня, 23:41 * , я уже это понял и сделал.

Процедура Сформировать()   
    НужныйТовар = Константа.НужныйТовар;
    
    Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
    "
    |Период с НачДата по КонДата;
    |ОбрабатыватьДокументы Проведенные;
    |Товар = Документ.РасходнаяНакладная.Товар;
    |СуммаСНДС = Документ.РасходнаяНакладная.СуммаСНДС;
    |Функция Сум = Сумма(СуммаСНДС);
    |Группировка Товар Без Групп;
    |Условие (Товар = НужныйТовар);";
    Запрос.Выполнить(ТекстЗапроса);
    Пока Запрос.Группировка(1) = 1 Цикл
        СуммаУслуг = Запрос.Сум;
        
    КонецЦикла;
Сообщить("Сумма:"+СуммаУслуг);


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


После этого заработало. Поспешил с вопросом))

Автор: volodya1122 02.09.19, 22:58

Макс1С @ Сегодня, 23:41 * ,

Або краще на форму звіту вставити поле введення (реквизит диалога) з типом справочник.Номенклатура І ідентифікатор для нього прописати "нужныйТовар"

Автор: ZUBR 02.09.19, 22:59

Думаю, через константу будет лучше. Пользователь сможет сам определять товар. Можно даже сделать несколько нужных констант. Потому что если зашить это в код, то пользователь будет вынужден использовать только определенные слова для названия товара.)))

Автор: volodya1122 02.09.19, 23:04

ZUBR @ Вчера, 23:59 * ,

На формі звіту користувач вибипає потрібний товар, і формує звіт по ттому товару що йому потрібно. Непотрібно плодити констант, це погана ідея

Автор: ZUBR 02.09.19, 23:12

volodya1122 @ Вчера, 23:58 * , так, как Вы предлагаете, еще лучше, чем через константу. А константу тоже можно использовать. В ней можно задать услугу или товар, наиболее часто используемый для запросов и отчетов, и сделать его по умолчанию).
П.С. Я просто не встиг прочитати вашу відповідь. Різниця в часі менше хвилини, тому це не було відповіддю Вашому повідомленню.

Автор: Макс1С 02.09.19, 23:21

Цитата(volodya1122 @ 02.09.19, 23:58) *
Або краще на форму звіту вставити поле введення (реквизит диалога) з типом справочник.Номенклатура І ідентифікатор для нього прописати "нужныйТовар"

Да, это оптимальное решение

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua