7.7 отбор по значению субконто в отчете

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем nickvv, 24 май 2012.

  1. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    280
    Симпатии:
    0
    Баллы:
    26
    В самописной конфигурации "Учет ТМЦ" есть отчет, который выводит данные об использовании спецодежды (выдача и возврат) за период отчета
    Счет 10.11.1 - спецодежда в эксплуатации
    субконто 1 - ТМЦ (справочник)
    Стоит задача исключить из отчета определенную номенклатурную группу справочника ТМЦ ("Смывающие и обезвреживающие средства") и все входящие в нее элементы .
    Что-то я никак не соображу, где и какое условие надо добавить: сразу же перед строкой "БИ.ИспользоватьСубконто(Сч10.ВидСубконто(1),,1,1);" или же в цикле перед выводом строки. Подскажите,пожалуйста!
    К циклу по субконто 2 (места хранения) вопросов нет.

    Код:
     БИ=СоздатьОбъект("БухгалтерскиеИтоги");
    Сч10=СоздатьОбъект("Счет");
    Сч10.НайтиПоКоду("10.11.1");
    БИ.ИспользоватьСубконто(Сч10.ВидСубконто(1),,1,1);
    БИ.ИспользоватьСубконто(Сч10.ВидСубконто(2),ВыбПодразделение);//
    БИ.ИспользоватьСубконто(Сч10.ВидСубконто(3),);
    БИ.ИспользоватьСубконто(Сч10.ВидСубконто(4),ВыбСотрудник);
    БИ.ВыполнитьЗапрос(НачДата,КонДата,"10.11.1,10.11.2",,,3,,5);
    БИ.ВыбратьСубконто(1);
    Таб=СоздатьОбъект("Таблица");
    Таб.ВывестиСекцию("Шапка");
    Таб.НоваяСтраница();
    Таб.ВывестиСекцию("Шапка2");
    Пока БИ.ПолучитьСубконто(1)=1 Цикл
    СИЗ=БИ.Субконто(1);
    Таб.ВывестиСекцию("Строка");
    БИ.ВыбратьСубконто(2);
    Пока БИ.ПолучитьСубконто(2)=1 Цикл
    Если БИ.КО("К")>0 Тогда
    Таб.ВывестиСекцию("Строка2");
    КонецЕсли;
    Если БИ.СКД("К")>0 Тогда
    Таб.ВывестиСекцию("Строка1");
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    
  2. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код:
    БИ.ИспользоватьСубконто(Сч10.ВидСубконто(1),СписокМатериалов,1,1);
    //СписокМатериалов типа СписокЗначений
    
  3. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    280
    Симпатии:
    0
    Баллы:
    26
    А как организовать этот СписокМатериалов?
    СписокМатериалов = СоздатьОбъект("СписокЗначений");
    И цикл по справочнику ТМЦ - ДобавитьЗначение, пропуская ту группу, которая не нужна?
  4. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Совершенно верно
  5. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    280
    Симпатии:
    0
    Баллы:
    26
    Принцип-то понятен. А можно пример кода привести?
    И так-то асом в семёрке не был, а теперь, когда восьмёрка в голове, тем более сложно
  6. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    280
    Симпатии:
    0
    Баллы:
    26
    Подскажите, пожалуйста, где ошибка:
    Код:
     СписокМатериалов = СоздатьОбъект("СписокЗначений");
    Пока СписокМатериалов.ПолучитьЭлемент(********А тут что надо указывать?*******)=1 Цикл
    ТекКод = СписокМатериалов.ТекущийЭлемент.Код;
    Если ТекКод = "М0475" Тогда
    Продолжить;
    ИначеЕсли СписокМатериалов.ТекущийЭлемент.ПринадлежитГруппе("Смывающие и обезвреживающие средства")=1 Тогда
    Продолжить;
    Иначе СписокМатериалов.ДобавитьЗначение(СписокМатериалов.ТекущийЭлемент);
    КонецЕсли;
    КонецЦикла;
    
  7. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    280
    Симпатии:
    0
    Баллы:
    26
    Как привязать СписокМатериалов к справочнику ТМЦ? Или он уже по контексту автоматически привязывается, раз указан в субконто?
  8. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    Пустая выборка, м.б. нужно сначала заполнить этот список? В субконто не может быть указан "СписокЗначений"
  9. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    280
    Симпатии:
    0
    Баллы:
    26
    А как?
  10. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    Ну, например:
    [code1C]Спр = СоздатьОбъект("Справочник.Номенклатура");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
    СписокМатериалов.ДобавитьЗначение(Спр.ТекущийЭлемент());
    КонецЦикла[/code1C]
  11. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код:
    СписокМатериалов = СоздатьОбъект("СписокЗначений");
    Спр = СоздатьОбъект("Справочник.Материалы"); //уточните название справочника
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент()=1 Цикл
    Если СокрЛп(Спр.Код) = "М0475" Тогда
    Продолжить;
    ИначеЕсли Спр.ПринадлежитГруппе("Смывающие и обезвреживающие средства")=1 Тогда
    //ПринадлежитГруппе д.б. передано не название, а элемент справочника (группа)
    Продолжить;
    Иначе
    СписокМатериалов.ДобавитьЗначение(Спр.ТекущийЭлемент());
    КонецЕсли;
    КонецЦикла;
    
  12. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    Код:
    СписокМатериалов = СоздатьОбъект("СписокЗначений");
    Номенклатура = СоздатьОбъект("Справочник.Номенклатура");
    Номенклатура.НайтиПоНаименованию("Смывающие и обезвреживающие средства",0,1);
    Смыв = Номенклатура.ТекущийЭлемент();
    Номенклатура.ИспользоватьРодителя(Смыв);
    Номенклатура.ВыбратьЭлементы(1);
    Пока Номенклатура.ПолучитьЭлемент(1)=1 Цикл
    Если СокрЛП(Номенклатура.Код) = "М0475" Тогда
    Продолжить;
    Иначе
    СписокМатериалов.ДобавитьЗначение(Номенклатура.ТекущийЭлемент());
    КонецЕсли;
    КонецЦикла;[/code1C]
    
    [url="http://www.1c-pro.ru/user/21129-%d0%b1%d1%83%d1%85%d0%b3%d0%b0%d0%bb%d1%82%d0%b5%d1%80%d1%81%d0%ba%d0%b8%d0%b9-%d1%83%d0%b3%d0%be%d0%b4%d0%bd%d0%b8%d0%ba/"]Бухгалтерский угодник[/url] опередил, за это плюс ему :)
  13. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Спасибо)) Но группу нужно было исключить..... Тогда уж так.

    Код:
    СписокМатериалов = СоздатьОбъект("СписокЗначений");
    Спр = СоздатьОбъект("Справочник.Материалы"); //уточните название справочника
    Номенклатура = СоздатьОбъект("Справочник.Метериалы");
    Номенклатура.НайтиПоНаименованию("Смывающие и обезвреживающие средства",0,1);
    Смыв = Номенклатура.ТекущийЭлемент();
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент()=1 Цикл
    Если СокрЛп(Спр.Код) = "М0475" Тогда
    Продолжить;
    ИначеЕсли Спр.ПринадлежитГруппе(Смыв)=1 Тогда
    Продолжить;
    Иначе
    СписокМатериалов.ДобавитьЗначение(Спр.ТекущийЭлемент());
    КонецЕсли;
    КонецЦикла;
    
  14. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    Не совсем :)
    "Номенклатура.ИспользоватьРодителя(Смыв);
    Номенклатура.ВыбратьЭлементы(1);"
  15. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    как то так)
  16. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    [off] точно, невнимательность - недостаток многих программистов [/off]
  17. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    280
    Симпатии:
    0
    Баллы:
    26
    Спасибо огромное!
  18. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    В сообщении №13 приведен полнофункциональный код отбора.
  19. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    280
    Симпатии:
    0
    Баллы:
    26
    Посмотреть вложение 11206
    Именно этот код (с уточнением названия справочника - называется "ТМЦ") вставил в модуль.
    Всё красиво, но не работает. Выводит в таблицу и "Смывающие и обезвреживающие средства", и все входящие в неё элементы, и в итоговые строчки родительских групп все данные по этой группе включает.
    Прилагаю сам отчет полностью.
    Что в нём всё-таки не так?

    Вложения:

  20. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Думаю не срабатывает условие
    Код:
       ИначеЕсли Спр.ПринадлежитГруппе(Смыв)=1 Тогда
    Продолжить;
    
    Попробуйте изменить позиционирование на элемент группы вот таким образом
    Код:
      
    
    Если Номенклатура.НайтиПоНаименованию("Смывающие и обезвреживающие средства",0,1)=0 Тогда
    Предупреждение("Не нашли по наименованию!!!");
    КонецЕсли;
    

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