8.х Помогите! не работает отбор по подразделению

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем DimaZagaynov, 9 ноя 2010.

  1. TopicStarter Overlay
    DimaZagaynov
    Offline

    DimaZagaynov Опытный в 1С

    Регистрация:
    9 ноя 2010
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    26
    во внешнем отчете не работает отбор по подразделению. то есть когда в самой 1С Предприятие выбираешь какое-нибудь подразделение, он должен выводить отчет только по выбранному подразделению, а выводит все равно по всем.
    вот код в конфигурации (Прикрепленный файл 1С)

    Вложения:

    • 1С.txt
      Размер файла:
      12,7 КБ
      Просмотров:
      50
  2. KoD
    Offline

    KoD

    Регистрация:
    23 сен 2010
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    через отладчик прогани и посмотри с какого момента прога выбирает все подразделения
  3. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Отладчик не работает во внешних отчетах/обработках.
  4. UnNone
    Offline

    UnNone Опытный в 1С

    Регистрация:
    21 мар 2007
    Сообщения:
    148
    Симпатии:
    0
    Баллы:
    26
    С чего вы взяли, что не работает? Все отлично работает.
  5. UnNone
    Offline

    UnNone Опытный в 1С

    Регистрация:
    21 мар 2007
    Сообщения:
    148
    Симпатии:
    0
    Баллы:
    26
    У вас в самом начале имеет кусок кода:
    Код:
    	струслном="";
    Если ЗначениеЗаполнено(ВыбКонтрагент) Тогда
    Если ТипЗнч(ВыбКонтрагент) = Тип("СписокЗначений") Тогда
    струслном = "Субконто1 В (&ВыбКонтрагент)";
    ИначеЕсли ВыбКонтрагент.ЭтоГруппа Тогда
    струслном = "Субконто1 В ИЕРАРХИИ (&ВыбКонтрагент)";
    Иначе
    струслном = "Субконто1 = &ВыбКонтрагент";			
    КонецЕсли;
    КонецЕсли;	
    струсл = "";
    Если ЗначениеЗаполнено(ВыбПодразделение) Тогда
    Если струсл="" Тогда
    струсл = "Субконто2.Подразделение = &ВыбПодразделение";
    Иначе
    струсл = струсл+  "И Субконто2.Подразделение = &ВыбПодразделение";
    КонецЕсли;	
    КонецЕсли;
    
    Я так понимаю, тут вы формируете строку условия для запроса.
    Но вот только дальше созданные переменные струслном и струсл нигде не используются.
  6. TopicStarter Overlay
    DimaZagaynov
    Offline

    DimaZagaynov Опытный в 1С

    Регистрация:
    9 ноя 2010
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    26
    как и куда эти переменные добавляются? Это в тексте запроса что то добавлять нужно?
  7. TopicStarter Overlay
    DimaZagaynov
    Offline

    DimaZagaynov Опытный в 1С

    Регистрация:
    9 ноя 2010
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    26
    Если не сложно приведите пример исправления. Я еще мало знаком с 1С :)
  8. TopicStarter Overlay
    DimaZagaynov
    Offline

    DimaZagaynov Опытный в 1С

    Регистрация:
    9 ноя 2010
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    26
    на мой взгляд здесь не хватает цикла, который бы отфильтровывал ненужные подразделения
  9. UnNone
    Offline

    UnNone Опытный в 1С

    Регистрация:
    21 мар 2007
    Сообщения:
    148
    Симпатии:
    0
    Баллы:
    26
    Можно конечно через цикл, но гораздо правильнее и целесообразно, средствами запроса отсееть не нужные значения.
    Смотря на код отчета, создается такое впечатление, что его собирали по кускам или начали писать и бросили на половине.
    Как вариант можно попробовать так:
    Код:
    	струслном="";
    Если ЗначениеЗаполнено(ВыбКонтрагент) Тогда
    Если ТипЗнч(ВыбКонтрагент) = Тип("СписокЗначений") Тогда
    струслном = "ГДЕ ХозрасчетныйОстатки.Субконто1 В (&ВыбКонтрагент)";
    ИначеЕсли ВыбКонтрагент.ЭтоГруппа Тогда
    струслном = "ГДЕ ХозрасчетныйОстатки.Субконто1 В ИЕРАРХИИ (&ВыбКонтрагент)";
    Иначе
    струслном = "ГДЕ ХозрасчетныйОстатки.Субконто1 = &ВыбКонтрагент";			
    КонецЕсли;
    КонецЕсли;	
    Если ЗначениеЗаполнено(ВыбПодразделение) Тогда
    Если струслном="" Тогда
    струслном = "ГДЕ ХозрасчетныйОстатки.Субконто2.Подразделение = &ВыбПодразделение";
    Иначе
    струслном = струслном+  "
    |И ХозрасчетныйОстатки.Субконто2.Подразделение = &ВыбПодразделение";
    КонецЕсли;	
    КонецЕсли;	
    
    Запрос = Новый Запрос("ВЫБРАТЬ
    |	ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
    |	МАКСИМУМ(ЕстьNULL(ХозрасчетныйОстатки.Субконто3.Дата,&ПустаяДата)) КАК ДатаВозникновенияДолга,
    |	СУММА(ХозрасчетныйОстатки.СуммаОстаток) КАК СуммаОстаток,
    |	ВЫБОР
    |		КОГДА ХозрасчетныйОстатки.Субконто2 ССЫЛКА Справочник.ДоговорыКонтрагентов
    |			ТОГДА ВЫБОР
    |					КОГДА ХозрасчетныйОстатки.Субконто2 = &ПустойДоговор
    |						ТОГДА &ПустоеПодр
    |					ИНАЧЕ ХозрасчетныйОстатки.Субконто2.Подразделение
    |				КОНЕЦ
    |		ИНАЧЕ &Бухгалтерия
    |	КОНЕЦ КАК Субконто2Подразделение,
    |	ХозрасчетныйОстатки.Счет
    |ИЗ
    |	РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаКон, Счет В ИЕРАРХИИ (&СписокСчетов), , ) КАК ХозрасчетныйОстатки
    |"+струслном+"
    |СГРУППИРОВАТЬ ПО
    |	ХозрасчетныйОстатки.Субконто1,
    |	ХозрасчетныйОстатки.Счет,
    |	ВЫБОР
    |		КОГДА ХозрасчетныйОстатки.Субконто2 ССЫЛКА Справочник.ДоговорыКонтрагентов
    |			ТОГДА ВЫБОР
    |					КОГДА ХозрасчетныйОстатки.Субконто2 = &ПустойДоговор
    |						ТОГДА &ПустоеПодр
    |					ИНАЧЕ ХозрасчетныйОстатки.Субконто2.Подразделение
    |				КОНЕЦ
    |		ИНАЧЕ &Бухгалтерия
    |	КОНЕЦ
    |
    |УПОРЯДОЧИТЬ ПО
    |	Субконто2Подразделение,
    |	Контрагент,
    |	ДатаВозникновенияДолга
    |ИТОГИ
    |	СУММА(СуммаОстаток)
    |ПО
    |	Субконто2Подразделение,
    |	Контрагент");
    
    Заменяете в свое процедуре соответствующий кусок(с начала процедуры, до конца первого текста запроса), этим куском и попробуйте.
  10. TopicStarter Overlay
    DimaZagaynov
    Offline

    DimaZagaynov Опытный в 1С

    Регистрация:
    9 ноя 2010
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    26
    :angry: :D спасибо большое!!! Работает

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