8.х Отчет по отбору в регистре сведений

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем DrBlack, 8 янв 2010.

  1. TopicStarter Overlay
    DrBlack
    Offline

    DrBlack Опытный в 1С

    Регистрация:
    8 янв 2010
    Сообщения:
    79
    Симпатии:
    1
    Баллы:
    29
    версия: 1С Предприятие 8.1
    При создании документа "поступление", в регистр сведения заносятся данные о поставщике и продажной цене, мне нужно распечатать все что осталось после отбора в регистре накопления. В данном примере своего кода, печатается от корки до корки. Подскажите как можно реализовать печать именно по выполненному отбору в форме списка регистра накопления.

    Код:
    Процедура Печать(Элемент)
    ТабДок = Новый ТабличныйДокумент;
    Макет = РегистрыСведений.МоиЦены.ПолучитьМакет("Печать");
    //Шапка
    Шапка = Макет.ПолучитьОбласть("Шапка");
    Шапка.Параметры.Поставщик = ЭлементыФормы.РегистрСведенийСписок.ТекущаяСтрока.Поставщик;
    ТабДок.Вывести(Шапка);
    //СписокШапка
    Область = Макет.ПолучитьОбласть("СписокШапка");
    ТабДок.Вывести(Область);
    //Список
    ОбластьСписок = Макет.ПолучитьОбласть("Список");
    рег = РегистрыСведений.МоиЦены.Выбрать();
    Пока рег.Следующий() Цикл
    ОбластьСписок.Параметры.Товар = рег.Товар;
    ОбластьСписок.Параметры.Цена = рег.ПроЦена;		
    ТабДок.Вывести(ОбластьСписок);
    КонецЦикла;
    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.Защита = Ложь;
    ТабДок.ТолькоПросмотр = Ложь;
    ТабДок.ОтображатьЗаголовки = Ложь;
    ТабДок.Показать();
    КонецПроцедуры
    
  2. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    так а зачем вы обращаетесь к самому регистру?
    Код:
    рег = РегистрыСведений.МоиЦены.Выбрать();
    
    вы же данные в шапку берете вот так
    Код:
    Шапка.Параметры.Поставщик = ЭлементыФормы.РегистрСведенийСписок.ТекущаяСтрока.Поставщик;
    
    перебирайте строки списка и всё
  3. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    В форме регистра сведений нельзя выбрать все строки, только текущую.

    Взять из Отбор все установленные отборы и установить их.
  4. TopicStarter Overlay
    DrBlack
    Offline

    DrBlack Опытный в 1С

    Регистрация:
    8 янв 2010
    Сообщения:
    79
    Симпатии:
    1
    Баллы:
    29
    Я бы с радостью так и сделал, только я не знаю как переходить по строкам, объясните пожалуйста...
    А как это сделать, желательно с примером.
    Заранее благодарен всем за помощь!
  5. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Код:
     
    Для Каждого ТекОтбор ИЗ Отбор Цикл
    здесь смотришь установлен ли "Использование" у ТекОтбор и устанавливаешь 
    такой же в запросе, через прямую выборку вряд ли получится, т.к. могут 
    использовать отборы типа "Содержит" или "В списке"
    КонецЦикла;
    
    
    
  6. TopicStarter Overlay
    DrBlack
    Offline

    DrBlack Опытный в 1С

    Регистрация:
    8 янв 2010
    Сообщения:
    79
    Симпатии:
    1
    Баллы:
    29
    Я попробовал так, но здесь получается перебор по столбцам, а мне требуется перейти по каждой строчке в РегистреСведений с учетом установленного отбора пользователем.
    Т.е. после того как пользователь сделал отбор и нажал кнопку отчет, программа должна пробежаться по каждой строчке таблицы и взять требуемые значения.
    Подскажите как перейти на следующую строчку программно, естественно с учетом отбора пользователя?
  7. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Здесь перебор идет не по столбцам, а по отборам. Дальше строишь запрос и запросом выбираешь данные.
    Код:
    ВЫБРАТЬ
    *
    ИЗ
    РегистрСведений.СчетаУчетаНоменклатуры КАК СчетаУчетаНоменклатуры
    ГДЕ
    //Здесь указываешь как условия установленные отборы
    
  8. TopicStarter Overlay
    DrBlack
    Offline

    DrBlack Опытный в 1С

    Регистрация:
    8 янв 2010
    Сообщения:
    79
    Симпатии:
    1
    Баллы:
    29
    В общем вот что у меня получилось с вашими рекомендациями:

    Код:
    ТабДок = Новый ТабличныйДокумент;
    Макет = РегистрыСведений.МоиЦены.ПолучитьМакет("Печать");
    //Шапка
    Шапка = Макет.ПолучитьОбласть("Шапка");
    Шапка.Параметры.Поставщик = ЭлементыФормы.РегистрСведенийСписок.ТекущаяСтрока.Поставщик;
    ТабДок.Вывести(Шапка);
    //СписокШапка
    Область = Макет.ПолучитьОбласть("СписокШапка");
    ТабДок.Вывести(Область);
    //Список
    ОбластьСписок = Макет.ПолучитьОбласть("Список");
    
    ЗапросОтбор = Новый Запрос();
    ЗапросОтбор.Текст = 
    "ВЫБРАТЬ
    |    МоиЦены.Поставщик КАК Поставщик,
    |    ПРЕДСТАВЛЕНИЕ(МоиЦены.Поставщик),
    |    МоиЦены.Товар,
    |    ПРЕДСТАВЛЕНИЕ(МоиЦены.Товар),
    |    МоиЦены.ЗакЦена,
    |    МоиЦены.ПроЦена,
    |    МоиЦены.Количество,
    |    МоиЦены.Дата
    |ИЗ
    |    РегистрСведений.МоиЦены КАК МоиЦены
    |ГДЕ";
    Для Каждого ТекОтбор из Отбор Цикл
    Если ТекОтбор.Использование=Истина Тогда
    ЗапросОтбор.Текст=ЗапросОтбор.Текст+"
    |    "+ТекОтбор;
    КонецЕсли;
    КонецЦикла;    
    РезультатОтбора = ЗапросОтбор.Выполнить();
    
    рег = РезультатОтбора.Выбрать();
    Пока рег.Следующий() Цикл
    ОбластьСписок.Параметры.Товар = ТекОтбор.ТипЗначения.ПривестиЗначение("Товар");
    ОбластьСписок.Параметры.Цена = ТекОтбор.ТипЗначения.ПривестиЗначение("ПроЦена");
    ТабДок.Вывести(ОбластьСписок);
    КонецЦикла;
    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.Защита = Ложь;
    ТабДок.ТолькоПросмотр = Ложь;
    ТабДок.ОтображатьЗаголовки = Ложь;
    ТабДок.Показать();
    
    
    
    Самое интересное, что ошибок при запуске не выдает (да и вообще при работе этой процедуры), а в отчет ни каких данных не поступает... В чем может быть проблема?
  9. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Так посмотри, какой текст запроса формируется :)
    У тебя "волшебное" условие ГДЕ получается.
  10. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
  11. TopicStarter Overlay
    DrBlack
    Offline

    DrBlack Опытный в 1С

    Регистрация:
    8 янв 2010
    Сообщения:
    79
    Симпатии:
    1
    Баллы:
    29
    Огромное спасибо gosn1ck, с помощью данной ссылки я нашел исчерпывающую информацию, однако что-то пошло не так, всмысле как надо не работало но после удения кода настройки отбора получилось лучше... :)

    Код:
    ТабДок = Новый ТабличныйДокумент;
    Макет = РегистрыСведений.МоиЦены.ПолучитьМакет("Печать");
    //Шапка
    Шапка = Макет.ПолучитьОбласть("Шапка");
    Шапка.Параметры.Поставщик = рег.Поставщик;
    ТабДок.Вывести(Шапка);
    //СписокШапка
    Область = Макет.ПолучитьОбласть("СписокШапка");
    ТабДок.Вывести(Область);
    //Список
    ОбластьСписок = Макет.ПолучитьОбласть("Список");
    
    ОтборСтрок = РегистрСведенийСписок.Отбор;
    ПостроительЗапроса = Новый ПостроительЗапроса; 
    ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(РегистрСведенийСписок);   
    Результат = ПостроительЗапроса.Результат;
    
    рег = Результат.Выбрать();
    Пока рег.Следующий() Цикл
    ОбластьСписок.Параметры.Товар = рег.Товар;
    ОбластьСписок.Параметры.Цена = рег.ПроЦена;
    ТабДок.Вывести(ОбластьСписок);
    КонецЦикла;
    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.Защита = Ложь;
    ТабДок.ТолькоПросмотр = Ложь;
    ТабДок.ОтображатьЗаголовки = Ложь;
    ТабДок.Показать();
    
    
    Получается как я понял следующее, в регистре сведений нельзя перемещаться по строкам, а в данном случае мы по отобранным записям присваеваем построителю источник данных (текущее состояние с отбором) и уже в нем осуществляем переходы по списку. В общем как-то так, извините за неграмотность, программирую в основном на Delphi, можно сказать что тока сел за 1С. Тема закрыта, процедура работает корректно!

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