Создать отчет, обработку

Тема в разделе "1C и всё что с ней связано", создана пользователем nikh848, 30 окт 2008.

  1. nikh848

    nikh848 Гость

    Добрый день, Всем!
    Кто может подсказать мне, новичку?
    У меня есть справочники: Номенклатура (Детали, Узлы, Изделия) и
    подчиненный справочник СоставНоменклатуры
    Узлы состоят из Деталей и Узлов нижнего уровня;
    Изделия состоят из Узлов и Деталей;
    Есть план производства Изделий.
    Как написать отчет, чтобы она рассчитала сколько потребуется Деталей
    для выполнения плана?
    Заранее Большое Спасибо!
     
  2. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Что конкретно у вас не получается?
     
  3. nikh848

    nikh848 Гость

    Написал такую процедуру:

    Процедура Сформировать()
    СпрН = СоздатьОбъект("Справочник.Номенклатура");
    СпрС =СоздатьОбъект("Справочник.Состав");
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Таблица");
    Таб.ВывестиСекцию("Шапка");

    СпрН.ВыбратьЭлементы();
    Пока СпрН.ПолучитьЭлемент()=1 Цикл
    НаимИзд = СпрН.Наименование;
    Таб.ВывестиСекцию("Строка1");
    Вл1 = СпрН.ТекущийЭлемент();
    СпрС.ИспользоватьВладельца(Вл1);
    СпрС.ВыбратьЭлементы();
    Пока СпрС.ПолучитьЭлемент()=1 Цикл
    НаимУзла =СпрС.Состав;
    КвоВИзд = СпрС.Кво;
    Таб.ВывестиСекцию("Строка2")
    КонецЦикла;

    Дальше как то надо повторно сылаться на Справочник.Состав, чтобы она вывела состав состава, т.е детали и узлы следующего поколения.
    Пробовал НайтиПоНаименованию в Спр.Номенклатура и дальше вывести ее состав, но тоже не получилось....
     
  4. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Тз = СоздатьОбъект("ТаблицаЗначений");
    Запрос = СоздатьОбъект("Запрос");
    ВыбНач = '01.01.01';
    ВыбКон = ПолучитьДатуТА(); // ну или как у тебя конечная дата выглядит
    текст = "
    |Период с ВыбНач по ВыбКон;
    |СпрН = Справочник.Номенклатура.ТекущийЭлемент,Справочник.Состав.Владелец;
    |СпрС = Справочник.Состав.ТекущийЭлемент;
    |Группировка Ном;
    |Группировка Сост;"
    ;
    Если Запрос.Выполнить(Текст) = 0 Тогда
    Возврат;
    КонецЕсли;

    Запрос.Выгрузить(ТЗ);

    Тз.выбратьСтроки();
    Пока Тз.ПолучитьСтроку() = 1 Цикл
    Таб.вывестиСекцию("Строка");
    КонецЦикла;

    в таблице у себя заменяешь ссылки на Запрос.СпрН и Спр.С - и усё. Выводит все группы по иерархии - если хочешь без групп, в условиях пишешь Группировка Ном Без Групп; . ещё более наглядно - создай на форме таблицу значений- и в ней посмотри структуру, которая выводится.
     
  5. nikh848

    nikh848 Гость

    Спасибо за текст запроса ,работает.
    А вот как сформировать запрос, чтобы вывела и 3 столбец (СоставСостава)?
    __Изделие__________Состав_________СоставСостава
    ____изд1_____________Узел1______________Дет1
    ________________________________________Дет2
    ________________________________________Дет3
    _____________________Узел2______________Дет1
    ________________________________________Дет4
    ________________________________________Дет5
    _____________________Дет2
    _____________________Дет6
     
  6. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Так он у тебя и должен выводить в таком виде, если Изделия - это группы, а узлы - это элементы справочника.
     
  7. nikh848

    nikh848 Гость

    В том то и дело, что и изделия, и узлы, и детали - все элементы. Справочник номенклатура состоит из 3 групп: изделия, узлы, детали. В каждой группе около 60 элементов
     
  8. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    если у тебя элемент справочника ссылается на другой элемент этого-же справочника, то он у тебя должен по-другому называться(в виде реквизита). Как он у тебя называются узлы и детали? Как ты вообще отслеживаешь, что в состав изделия входят эти узлы и детали?
     
  9. nikh848

    nikh848 Гость

    У меня справочник владелец - Номенклатура
    Подчиненный - Состав
    Подчиненный состоит из реквизитов состав, количество.
    реквизит состав заполняется из элементов справочника номенклатуры методом подстановки,
    а в наименование записывается группа и элемент. Н-р: узел,узел1
    Состав И4:
    узел,узел1
    узел,узел2
    деталь,деталь1
    деталь,деталь2
    деталь,деталь3

    хочу как то написать, что узел,узел1 - это тоже самое что узел1 из спр.номенклатура и он состоит из.....
     
  10. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Мдя. ну тогда что-то вроде

    Тз = СоздатьОбъект("ТаблицаЗначений");
    Спр = СоздатьОбъект("Справочник.Номенклатура");
    Спр.НайтиПоКоду("тут код группы изделия");
    Фильтр = Спр.ТекущийЭлемент();
    Запрос = СоздатьОбъект("Запрос");
    ВыбНач = '01.01.01';
    ВыбКон = ПолучитьДатуТА(); // ну или как у тебя конечная дата выглядит
    текст = "
    |Период с ВыбНач по ВыбКон;
    |СпрН = Справочник.Номенклатура.ТекущийЭлемент,Справочник.Состав.Владелец;
    |СпрНУзел = Справочник.Номенклатура.ТекущийЭлемент, Справочник.Состав.Состав, Справочник.Состав.Владелец;
    |СпрСУзелСостав = Справочник.Состав.ТекущийЭлемент;
    |Группировка СпрН ;
    |Группировка СпрНУзел;
    |Группировка СпрСУзелСостав;
    |Условие (СпрН.Родитель = Фильтр);" // Чтобы не брало узлы - а только группу изделий
    ;
    Если Запрос.Выполнить(Текст) = 0 Тогда
    Возврат;
    КонецЕсли;

    Запрос.Выгрузить(ТЗ);

    Тз.выбратьСтроки();
    Пока Тз.ПолучитьСтроку() = 1 Цикл
    Таб.вывестиСекцию("Строка");
    КонецЦикла;

    ежли не поможет - тогда прямыми запросами.
     
  11. nikh848

    nikh848 Гость

    Спасибо большое! Из двух щас точно должно получиться!
    Вторую мне такую процедуру подсказали:
    //*******************************************
    Процедура Сформировать()
    СпрН = СоздатьОбъект("Справочник.Номенклатура");
    СпрС =СоздатьОбъект("Справочник.Состав");
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Таблица");
    Таб.ВывестиСекцию("Шапка");

    СпрН.ВыбратьЭлементы();
    Пока СпрН.ПолучитьЭлемент()=1 Цикл
    НаимИзд = СпрН.Наименование;
    Таб.ВывестиСекцию("Строка1");
    Вл1 = СпрН.ТекущийЭлемент();
    СпрС.ИспользоватьВладельца(Вл1);
    СпрС.ВыбратьЭлементы();
    Пока СпрС.ПолучитьЭлемент()=1 Цикл
    НаимУзла =СпрС.Состав;
    КвоВИзд = СпрС.Кво;
    Таб.ВывестиСекцию("Строка2");


    СпрС1 =СоздатьОбъект("Справочник.Состав");
    СпрС1.ИспользоватьВладельца(СпрС.текущийЭлемент().Состав);
    СпрС1.ВыбратьЭлементы();
    Пока СпрС1.ПолучитьЭлемент()=1 Цикл
    НаимДет =СпрС1.Состав;
    КвоВУзл = СпрС1.Кво;
    Таб.ВывестиСекцию("Строка3")


    КонецЦикла;


    КонецЦикла;

    КонецЦикла;


    Таб.Опции(0,0,0,0);
    Таб.Показать();
    КонецПроцедуры
     
  12. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    у то-же самое, только не через запрос.Кстати и будет и узлы наравне с изделиями выводить. а что быстрее - только по проверке. через запрос посложнее - мож что в условиях напутал - но идея именно такая.
     
  13. mushita

    mushita Гость

    Тема слишком заброшена ;)
     
Загрузка...

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