7.7 Как сделать выборку по номенклатуре?

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем pin123, 8 сен 2011.

  1. TopicStarter Overlay
    pin123
    Offline

    pin123

    Регистрация:
    7 сен 2011
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Привет-привет.
    Нужно сделать отчет, но в программировании я не очень.

    Есть отчет, показывающий кол-во созданных документов и общее кол-во строк в этих документах для каждого оператора с фильтром по контрагенту.

    Нужно прикрутить фильтр по номенклатуре. Пытался своими силами - не вышло. Задача тривиально. просто не силен в 1с.

    Код:
    //*******************************************
    Процедура Сформировать()
    
    //Перем НомСтр, ТекКол, ТЗ;
    
    ТЗ=СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("Автор", "Справочник.Пользователи");
    ТЗ.НоваяКолонка("Колстрок", "Число", 15);
    ТЗ.НоваяКолонка("Колдок", "Число", 15);
    ТЗ.НоваяКолонка("Среднее", "Число", 15, 2);
    ТЗ.НоваяКолонка("ОбщаяСумма", "Число", 15, 2);
    ТЗ.НоваяКолонка("СредняяСумма", "Число", 15, 2);
    
    Таб=СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Таблица");
    Таб.ВывестиСекцию("Шапка");
    
    //Обходим все документы реализации за период и в таблицу записываем данные из документов:
    Док = СоздатьОбъект("Документ.Реализация");
    Док.ВыбратьДокументы(НачДата, КонДата);
    Пока Док.ПолучитьДокумент() = 1 Цикл //получаем документы из выборки
    ТекДок = Док.ТекущийДокумент();
    НомСтр = 0;
    //контрагент  допилено
    Если ТекДок.Контрагент = Контрагент Тогда 
    
    Если ТЗ.НайтиЗначение(ТекДок.Автор, НомСтр,"Автор") = 1 тогда
    //добавить в найденную строку
    ТекКол = ТЗ.ПолучитьЗначение(НомСтр, "КолСтрок");
    ТЗ.УстановитьЗначение(НомСтр,"КолСтрок", ТекКол+ТекДок.КоличествоСтрок());
    ТекКол = ТЗ.ПолучитьЗначение(НомСтр, "КолДок");
    ТЗ.УстановитьЗначение(НомСтр,"КолДок", ТекКол+1);      
    ТекСумма = ТЗ.ПолучитьЗначение(НомСтр, "ОбщаяСумма");
    ТЗ.УстановитьЗначение(НомСтр,"ОбщаяСумма", ТекСумма+(ТекДок.Итог("Сумма")+?(ТекДок.СуммаВклНП=1,0,ТекДок.Итог("СуммаНП"))+?(ТекДок.СуммаВклНДС=1,0,ТекДок.Итог("СуммаНДС"))));
    Иначе                           
    //добавить строку с автором
    ТЗ.НоваяСтрока();
    ТЗ.Автор=ТекДок.Автор;
    ТЗ.КолСтрок=ТекДок.КоличествоСтрок();
    ТЗ.КолДок=1;              
    ТЗ.ОбщаяСумма=(ТекДок.Итог("Сумма")+?(ТекДок.СуммаВклНП=1,0,ТекДок.Итог("СуммаНП"))+?(ТекДок.СуммаВклНДС=1,0,ТекДок.Итог("СуммаНДС")));
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    Док = 0;
    //Обходим все документы реализации за период и в таблицу записываем данные из документов:
    Док = СоздатьОбъект("Документ.ЗаявкаПокупателя");
    Док.ВыбратьДокументы(НачДата, КонДата);
    Пока Док.ПолучитьДокумент() = 1 Цикл //получаем документы из выборки
    ТекДок = Док.ТекущийДокумент();
    НомСтр = 0;
    //контрагент
    Если ТекДок.Контрагент = Контрагент Тогда 
    Если ТЗ.НайтиЗначение(ТекДок.Автор, НомСтр,"Автор") = 1 тогда
    //добавить в найденную строку
    ТекКол = ТЗ.ПолучитьЗначение(НомСтр, "КолСтрок");
    ТЗ.УстановитьЗначение(НомСтр,"КолСтрок", ТекКол+ТекДок.КоличествоСтрок());
    ТекКол = ТЗ.ПолучитьЗначение(НомСтр, "КолДок");
    ТЗ.УстановитьЗначение(НомСтр,"КолДок", ТекКол+1);      
    ТекСумма = ТЗ.ПолучитьЗначение(НомСтр, "ОбщаяСумма");
    ТЗ.УстановитьЗначение(НомСтр,"ОбщаяСумма", ТекСумма+(ТекДок.Итог("Сумма")+?(ТекДок.СуммаВклНП=1,0,ТекДок.Итог("СуммаНП"))+?(ТекДок.СуммаВклНДС=1,0,ТекДок.Итог("СуммаНДС"))));
    Иначе                           
    //добавить строку с автором
    ТЗ.НоваяСтрока();
    ТЗ.Автор=ТекДок.Автор;
    ТЗ.КолСтрок=ТекДок.КоличествоСтрок();
    ТЗ.КолДок=1;              
    ТЗ.ОбщаяСумма=(ТекДок.Итог("Сумма")+?(ТекДок.СуммаВклНП=1,0,ТекДок.Итог("СуммаНП"))+?(ТекДок.СуммаВклНДС=1,0,ТекДок.Итог("СуммаНДС")));
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку()=1 Цикл
    ТЗ.Среднее=ТЗ.КолСтрок/ТЗ.КолДок;
    ТЗ.СредняяСумма=ТЗ.ОбщаяСумма/ТЗ.КолДок;
    Таб.ВывестиСекцию("Строка");
    КонецЦикла;
    
    Таб.ВывестиСекцию("Подвал");
    Таб.ТолькоПросмотр(1);
    Таб.Показать();
    КонецПроцедуры 
    
    //******************************************************************************
    
    Процедура ПриОткрытии()
    КонДата = НачМесяца(РабочаяДата()) - 1;
    НачДата = НачМесяца(КонДата);
    КонецПроцедуры
    
    
    
    
    вот вместо выбора по контрагенту нужно сделать выбор по номенклатуре. как это сделать?
    я пробовал так
    Код:
    ЕстьТакойТМЦ = ТЗ.НайтиЗначение(ТекДок.Номенклатура,,"Номенклатура");
    Если ЕстьТакойТМЦ = 1 Тогда 
    
    не вышло

    Вложения:

  2. TopicStarter Overlay
    pin123
    Offline

    pin123

    Регистрация:
    7 сен 2011
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    переделал на это
    верна ли такая проверка???
    Код:
    //*******************************************
    Процедура Сформировать()
    
    //Перем НомСтр, ТекКол, ТЗ;
    Если Номенклатура.Выбран()=0 Тогда
    Предупреждение("Не выбрана номенклатура!",60);
    Возврат;
    КонецЕсли;
    
    ТЗ=СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("Автор", "Справочник.Пользователи");
    ТЗ.НоваяКолонка("Колстрок", "Число", 15);
    ТЗ.НоваяКолонка("Колдок", "Число", 15);
    ТЗ.НоваяКолонка("Среднее", "Число", 15, 2);
    ТЗ.НоваяКолонка("ОбщаяСумма", "Число", 15, 2);
    ТЗ.НоваяКолонка("СредняяСумма", "Число", 15, 2);
    
    Таб=СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Таблица");
    Таб.ВывестиСекцию("Шапка");
    
    //Обходим все документы реализации за период и в таблицу записываем данные из документов:
    Док = СоздатьОбъект("Документ.Реализация");
    Док.ВыбратьДокументы(НачДата, КонДата);
    Пока Док.ПолучитьДокумент() = 1 Цикл //получаем документы из выборки
    ТекДок = Док.ТекущийДокумент();
    НомСтр = 0;
    //Номенклатура  
    ТабДок	= СоздатьОбъект("ТаблицаЗначений");
    ТекДок.ВыгрузитьТабличнуюЧасть(ТабДок, "Номенклатура, Количество, Единица, Коэффициент");
    ТабДок.ВыбратьСтроки();
    КолНом = 0;
    Пока ТабДок.ПолучитьСтроку() = 1 Цикл
    Если ТабДок.Номенклатура = Номенклатура Тогда
    КолНом = КолНом + 1; 
    КонецЕсли;
    КонецЦикла;
    
    Если КолНом > 0 Тогда 
    
    Если ТЗ.НайтиЗначение(ТекДок.Автор, НомСтр,"Автор") = 1 тогда
    //добавить в найденную строку
    ТекКол = ТЗ.ПолучитьЗначение(НомСтр, "КолСтрок");
    ТЗ.УстановитьЗначение(НомСтр,"КолСтрок", ТекКол+ТекДок.КоличествоСтрок());
    ТекКол = ТЗ.ПолучитьЗначение(НомСтр, "КолДок");
    ТЗ.УстановитьЗначение(НомСтр,"КолДок", ТекКол+1);      
    ТекСумма = ТЗ.ПолучитьЗначение(НомСтр, "ОбщаяСумма");
    ТЗ.УстановитьЗначение(НомСтр,"ОбщаяСумма", ТекСумма+(ТекДок.Итог("Сумма")+?(ТекДок.СуммаВклНП=1,0,ТекДок.Итог("СуммаНП"))+?(ТекДок.СуммаВклНДС=1,0,ТекДок.Итог("СуммаНДС"))));
    Иначе                           
    //добавить строку с автором
    ТЗ.НоваяСтрока();
    ТЗ.Автор=ТекДок.Автор;
    ТЗ.КолСтрок=ТекДок.КоличествоСтрок();
    ТЗ.КолДок=1;              
    ТЗ.ОбщаяСумма=(ТекДок.Итог("Сумма")+?(ТекДок.СуммаВклНП=1,0,ТекДок.Итог("СуммаНП"))+?(ТекДок.СуммаВклНДС=1,0,ТекДок.Итог("СуммаНДС")));
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    
    Док = 0;
    //Обходим все документы реализации за период и в таблицу записываем данные из документов:
    Док = СоздатьОбъект("Документ.ЗаявкаПокупателя");
    Док.ВыбратьДокументы(НачДата, КонДата);
    Пока Док.ПолучитьДокумент() = 1 Цикл //получаем документы из выборки
    ТекДок = Док.ТекущийДокумент();
    НомСтр = 0;
    //Номенклатура  
    ТабДок	= СоздатьОбъект("ТаблицаЗначений");
    ТекДок.ВыгрузитьТабличнуюЧасть(ТабДок, "Номенклатура, Количество, Единица, Коэффициент");
    ТабДок.ВыбратьСтроки();
    КолНом = 0;
    Пока ТабДок.ПолучитьСтроку() = 1 Цикл
    Если ТабДок.Номенклатура = Номенклатура Тогда
    КолНом = КолНом + 1; 
    КонецЕсли;
    КонецЦикла;
    
    Если КолНом > 0 Тогда  
    Если ТЗ.НайтиЗначение(ТекДок.Автор, НомСтр,"Автор") = 1 тогда
    //добавить в найденную строку
    ТекКол = ТЗ.ПолучитьЗначение(НомСтр, "КолСтрок");
    ТЗ.УстановитьЗначение(НомСтр,"КолСтрок", ТекКол+ТекДок.КоличествоСтрок());
    ТекКол = ТЗ.ПолучитьЗначение(НомСтр, "КолДок");
    ТЗ.УстановитьЗначение(НомСтр,"КолДок", ТекКол+1);      
    ТекСумма = ТЗ.ПолучитьЗначение(НомСтр, "ОбщаяСумма");
    ТЗ.УстановитьЗначение(НомСтр,"ОбщаяСумма", ТекСумма+(ТекДок.Итог("Сумма")+?(ТекДок.СуммаВклНП=1,0,ТекДок.Итог("СуммаНП"))+?(ТекДок.СуммаВклНДС=1,0,ТекДок.Итог("СуммаНДС"))));
    Иначе                           
    //добавить строку с автором
    ТЗ.НоваяСтрока();
    ТЗ.Автор=ТекДок.Автор;
    ТЗ.КолСтрок=ТекДок.КоличествоСтрок();
    ТЗ.КолДок=1;              
    ТЗ.ОбщаяСумма=(ТекДок.Итог("Сумма")+?(ТекДок.СуммаВклНП=1,0,ТекДок.Итог("СуммаНП"))+?(ТекДок.СуммаВклНДС=1,0,ТекДок.Итог("СуммаНДС")));
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку()=1 Цикл
    ТЗ.Среднее=ТЗ.КолСтрок/ТЗ.КолДок;
    ТЗ.СредняяСумма=ТЗ.ОбщаяСумма/ТЗ.КолДок;
    Таб.ВывестиСекцию("Строка");
    КонецЦикла;
    
    Таб.ВывестиСекцию("Подвал");
    Таб.ТолькоПросмотр(1);
    Таб.Показать();
    КонецПроцедуры 
    
    //******************************************************************************
    
    Процедура ПриОткрытии()
    КонДата = НачМесяца(РабочаяДата()) - 1;
    НачДата = НачМесяца(КонДата);
    КонецПроцедуры
    
    
    

    Вложения:

  3. Dmitriy_76
    Offline

    Dmitriy_76 Опытный в 1С Команда форума

    Регистрация:
    26 мар 2011
    Сообщения:
    2.175
    Симпатии:
    13
    Баллы:
    29
    после Пока Док.ПолучитьДокумент() = 1 Цикл //получаем документы из выборки

    обходи табличную часть выбранного дока..если номенклатура в есть в неком списке(в заданном тебе списке) ... тогда выводи..нет - иди в след док
  4. TopicStarter Overlay
    pin123
    Offline

    pin123

    Регистрация:
    7 сен 2011
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    вот сделал цикл по строкам документа.
    Считаю в цикле сколько строк с нужной номенклатурой. Потом прибавляю в табличную часть отчета.
    Также считаю кол-во документов с нужной номенклатурой.
    Вроде бы всё верно?
    одного только не пойму - почему делается прогон по документам "Документ.Реализация" и "Документ.ЗаявкаПокупателя"?
    Код:
    Док = СоздатьОбъект("Документ.ЗаявкаПокупателя");
    Док.ВыбратьДокументы(НачДата, КонДата);
    Пока Док.ПолучитьДокумент() = 1 Цикл //получаем документы из выборки
    ТекДок = Док.ТекущийДокумент();
    НомСтр = 0;
    //Номенклатура  
    ТабДок	= СоздатьОбъект("ТаблицаЗначений");
    ТекДок.ВыгрузитьТабличнуюЧасть(ТабДок, "Номенклатура, Количество, Единица, Коэффициент");
    ТабДок.ВыбратьСтроки();
    КолНом = 0;
    Пока ТабДок.ПолучитьСтроку() = 1 Цикл
    Если ТабДок.Номенклатура = ВыбНоменклатура Тогда
    КолНом = КолНом + 1; 
    КонецЕсли;
    КонецЦикла;
    
    Если КолНом > 0 Тогда
    Сообщить (КолНом);
    Если ТЗ.НайтиЗначение(ТекДок.Автор, НомСтр,"Автор") = 1 тогда
    //добавить в найденную строку
    ТекКол = ТЗ.ПолучитьЗначение(НомСтр, "КолСтрок");
    //ТЗ.УстановитьЗначение(НомСтр,"КолСтрок", ТекКол+ТекДок.КоличествоСтрок());
    ТЗ.УстановитьЗначение(НомСтр,"КолСтрок", ТекКол+КолНом);
    ТекКол = ТЗ.ПолучитьЗначение(НомСтр, "КолДок");
    ТЗ.УстановитьЗначение(НомСтр,"КолДок", ТекКол+1);      
    ТекСумма = ТЗ.ПолучитьЗначение(НомСтр, "ОбщаяСумма");
    ТЗ.УстановитьЗначение(НомСтр,"ОбщаяСумма", ТекСумма+(ТекДок.Итог("Сумма")+?(ТекДок.СуммаВклНП=1,0,ТекДок.Итог("СуммаНП"))+?(ТекДок.СуммаВклНДС=1,0,ТекДок.Итог("СуммаНДС"))));
    Иначе                           
    //добавить строку с автором
    ТЗ.НоваяСтрока();
    ТЗ.Автор=ТекДок.Автор;
    ТЗ.КолСтрок=ТекДок.КоличествоСтрок();
    ТЗ.КолДок=1;              
    ТЗ.ОбщаяСумма=(ТекДок.Итог("Сумма")+?(ТекДок.СуммаВклНП=1,0,ТекДок.Итог("СуммаНП"))+?(ТекДок.СуммаВклНДС=1,0,ТекДок.Итог("СуммаНДС")));
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    
  5. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Ваш алгоритм ВОЗМОЖНО не совсем верен. По документам Реализация вести статистику нужно не по всем (т.к. рализация вводится на основании Заявки. Т.е на ее проведение можно сказать время не тратится (3 клика мышки)), а только по тем у которых нет документа основания. Не знаю вашей специфики ввода документов, возможно таковых и нет.

Поделиться этой страницей