| 
    
        
     
     | 
    
  | 
Создание отчета на основании табличного документа | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        Иванов Иван Иваныч    
     18.07.19 
            ✎
    07:34 
 | 
         
        Доброго всем дня! Подскажите пожалуйста, а то я в этом вообще не шарю) Получается создаю отчет на основании табдока. https://ibb.co/LtrHhxk (сам табдок) и https://ibb.co/HHqbbF8 (ТЗ). МесяцГод это период отчета (например с 1 по 31 мая 2019 или просто май 2019), Контрагент должен быть в столбик, Заявлено - кол-во товара из док-та СчетНаОплатуПокупателю, Отпущено - кол-во товара из док-та РеализацияТоваровУслуг, где основанием является СчетНаОплатуПокупателю, ну и НомерСтроки - соответственно номер строки. Пока в форме отчета я имею такой код:
 
        &НаСервере Процедура СформироватьОтчетНаСервере() ТабДок = Новый ТабличныйДокумент; Макет = ПолучитьМакетНаСервере(); ОбластьШапка = Макет.ПолучитьОбласть("Шапка"); ОбластьТаблица = Макет.ПолучитьОбласть("Таблица"); ОбластьКонтрагент = Макет.ПолучитьОбласть("Контрагент"); ТабДок.Очистить(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СчетНаОплатуПокупателю.Товары.( | Номенклатура КАК Номенклатура, | Количество КАК Количество | ) КАК Товары, | РеализацияТоваровУслуг.Товары.( | Номенклатура КАК Номенклатура, | Количество КАК Количество | ) КАК Товары1, | СчетНаОплатуПокупателю.Контрагент КАК Контрагент |ИЗ | Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг | ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю | ПО РеализацияТоваровУслуг.ДокументОснование = СчетНаОплатуПокупателю.Ссылка" ; Выборка = Запрос.Выполнить().Выгрузить(); КонецПроцедуры &НаСервере Функция ПолучитьМакетНаСервере() ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); Макет = ОтчетОбъект.ПолучитьМакет("Макет"); Возврат Макет; КонецФункции &НаКлиенте Процедура СформироватьОтчет(Команда) СформироватьОтчетНаСервере(); КонецПроцедуры Правильно ли я делаю и как дальше правильно прописать циклы для выгрузки данных в макет?  | 
|||
| 
    1
    
        Лефмихалыч    
     18.07.19 
            ✎
    07:46 
 | 
         
        тут нечем помогать     
         | 
|||
| 
    2
    
        Иванов Иван Иваныч    
     18.07.19 
            ✎
    07:55 
 | 
         
        (1) сарказм?     
         | 
|||
| 
    3
    
        НичегоНе Понятно    
     18.07.19 
            ✎
    08:07 
 | 
         
        (2)Нет. Просто неправильно вообще все. 
 
        1. Запрос вернет вообще все счета. Без ограничений по дате, также туда попадут проведенные и не проведенные. 2. В Товары и Товары1 у тебя будет таблица с табличной частью этих документов, это бессмысленно в данном случае. >>Правильно ли я делаю нет >>и как дальше правильно прописать циклы для выгрузки данных в макет? Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий Цикл //здесь установить параметры макета КонецЦикла;  | 
|||
| 
    4
    
        Иванов Иван Иваныч    
     18.07.19 
            ✎
    08:23 
 | 
         
        (3) счет в условии не задается, выборка идет с табличной части "Товары", т.е. все что там, должно быть и в результате, как сделать ограничение периодом пока не разобрался, а второй пункт не понял, можете объяснить?     
         | 
|||
| 
    5
    
        catena    
     18.07.19 
            ✎
    08:38 
 | 
         
        "все что там, должно быть и в результате" - со всех документов за все время существования базы?
 
        "как сделать ограничение периодом пока не разобрался" - судя по .Товары.( вы запрос собираете конструктором, там есть закладка, которая так и называется: "Условия". "второй пункт не понял" - конструкция .Товары.( вернет таблицу значений. Т.е., в результате запроса будет таблица в таблице. Если в задании у вас выбирать из табличной части, то и нужно выбирать из табличной части "Выбрать * из Документ.РеализацияТоваровУслуг.Товары"  | 
|||
| 
    6
    
        craxx    
     18.07.19 
            ✎
    08:45 
 | 
         
        (0) позовите программиста     
         | 
|||
| 
    7
    
        dezss    
     18.07.19 
            ✎
    09:02 
 | 
         
        На заре освоения 1с тоже так тупил.
 
        Таб. часть - это отдельная таблица и к ней надо обращаться отдельно, а не из самого документа.  | 
|||
| 
    8
    
        Джо-джо    
     18.07.19 
            ✎
    09:06 
 | 
         
        (0) Нет, не правильно. Создание отчета на основании табличного документа это моветон     
         | 
|||
| 
    9
    
        bootini    
     18.07.19 
            ✎
    09:14 
 | 
         
        Как то так, но вряд ли это вас спасет ))    
 
        //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаказКлиентаТовары.Ссылка.Партнер КАК Партнер, | ЗаказКлиентаТовары.Номенклатура КАК Номенклатура, | ЗаказКлиентаТовары.Количество КАК КоличествоЗаказ, | РеализацияТоваровУслугТовары.Количество КАК КоличествоРеализация |ИЗ | Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары | ПО ЗаказКлиентаТовары.Ссылка = РеализацияТоваровУслугТовары.ЗаказКлиента | И ЗаказКлиентаТовары.Номенклатура = РеализацияТоваровУслугТовары.Номенклатура |ГДЕ | ЗаказКлиентаТовары.Ссылка МЕЖДУ &ДатаНачала И &ДатаОкончания | И ЗаказКлиентаТовары.Ссылка.Партнер = &Партнер"; Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); Запрос.УстановитьПараметр("Партнер", Партнер); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Партнер = ВыборкаДетальныеЗаписи.Партнер; Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура; и т.д. КонецЦикла; //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА  | 
|||
| 
    10
    
        НичегоНе Понятно    
     18.07.19 
            ✎
    09:38 
 | 
         
        (8) +1, но куда деваться, это бы освоить     
         | 
|||
| 
    11
    
        СтоКатов    
     18.07.19 
            ✎
    09:39 
 | 
         
        (10) Лучше осваивать всё-таки с методической литературой, а не методом проб и ошибок, натыкаясь на всевозможные грабли. Возьмите книгу Хрусталёвой, освойте язык запросов и потренируйтесь на кошках, взяв за пример несколько готовых несложных отчётов из типовых конф.     
         | 
|||
| 
    12
    
        Джо-джо    
     18.07.19 
            ✎
    09:41 
 | 
         
        (10) Накуа это осваивать? Намного проще подтянуть данные из регистров и не париться над тем проведён ли документ, отменены ли эти строки и вообще в каком он статусе: надо всем этим уже подумал вендор при проведении документа     
         | 
|||
| 
    13
    
        СтоКатов    
     18.07.19 
            ✎
    09:49 
 | 
         
        (12) ТС явно ещё до регистров не дошёл.     
         | 
|||
| 
    14
    
        Бишбармак    
     18.07.19 
            ✎
    10:28 
 | 
         
        ВЫБРАТЬ
 
        0 КАК Заявлено, РеализацияТоваровУслугТовары.Количество КАК Отпущено, РеализацияТоваровУслугТовары.Ссылка.Контрагент, РеализацияТоваровУслугТовары.Номенклатура КАК Продукция ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ СчетНаОплатуПокупателюТовары.Количество, 0, СчетНаОплатуПокупателюТовары.Ссылка.Контрагент, СчетНаОплатуПокупателюТовары.Номенклатура ИЗ Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары  | 
|||
| 
    15
    
        НичегоНе Понятно    
     18.07.19 
            ✎
    18:50 
 | 
         
        (11)(12)Это все понятно. Но человеку отчет нужен здесь и сейчас. А СКД будет позже.     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |