Кросс отчет
Добрый День! Подскажите делаю внешний отчет, немного запутался не могу сообразить как сделать обход Контрагентов в документах!
Для Каждого СтрТов ИЗ Выборка.Товары Цикл
ОбластьШапка = Макет.ПолучитьОбласть("Шапка|Колонка");
ОбластьШапка.Параметры.Номенклатура = СтрТов.Номенклатура;
ТабДок.Присоединить(ОбластьШапка);
КонецЦикла;
КонецЦикла;
Пока Выборка.Следующий() Цикл---------вот в этом цикле не могу обойти контрагентов для вывода в отчет!
ОбластьСтрока = Макет.ПолучитьОбласть("Строка|Начало");
ОбластьСтрока.Параметры.Контрагент = Выборка.Контрагент;
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
ПоказатьПо теме из базы знаний
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
Добрый день! Кто нибудь знает каким путем можно вывести Параметр Количество, т е Контрагент Номенклатура, Номенклатура
Контрагент Количество Количество
Контрагент Количество Количество
Номенклатуру и Контрагента вывел, а вот количество правильно не могу вывести, то пишу ТабДок присоединить и он мне присоед сбоку как и номенклатуру, то если написать ТабДок вывести, то тогда мне количество выводится под Контрагентом.?
Контрагент Количество Количество
Контрагент Количество Количество
Номенклатуру и Контрагента вывел, а вот количество правильно не могу вывести, то пишу ТабДок присоединить и он мне присоед сбоку как и номенклатуру, то если написать ТабДок вывести, то тогда мне количество выводится под Контрагентом.?
(6) эм, так и не понятно, что именно надо. Сбоку не нужно, снизу не нужно. А где нужно?
Если нужно вида
К | Н | Кол
к1 | Н1 | 10
к2 | Н2 | 15
То выводишь по строчкам: сначала шапку, потом строчка за строчкой
выводишь контрагента, присоединяешь номенклатуру, присоедишяешь количество
повторить пока не надоест.
Т.е. смысл в том, что если не извращаться с позиционирование по ячейкам, то выводить надо построчно, каждый раз обходя все колонки.
Если нужно вида
К | Н | Кол
к1 | Н1 | 10
к2 | Н2 | 15
То выводишь по строчкам: сначала шапку, потом строчка за строчкой
выводишь контрагента, присоединяешь номенклатуру, присоедишяешь количество
повторить пока не надоест.
Т.е. смысл в том, что если не извращаться с позиционирование по ячейкам, то выводить надо построчно, каждый раз обходя все колонки.
Спасибо что ответили, мне нужно вывести таким образом: Контрагент Товар1,Товар2,Товар3 итд.
Контрагент Кол-во, Кол-во, Кол-во
Контрагент Кол-во, Кол-во, Кол-во
Контрагент Кол-во, Кол-во, Кол-во
а у меня почему то получается при обходе параметра Кол во при ТабДок.Присоединить, вот так
Контрагент Товар1,Товар2,Товар3
Контрагент
Контрагент
Контрагент Кол-во, Кол-во, Кол-во----почему то Кол-во выводится
только в последнюю строку, а если написать ТабДок.Вывести, то тогда получается, вот так
Контрагент Товар1,Товар2,Товар3
Контрагент
Контрагент
Контрагент
Кол-во
Кол-во
Кол-во
Посмотрите пожалуйста во вложении мой отчет. чтобы вам было более понятно
Контрагент Кол-во, Кол-во, Кол-во
Контрагент Кол-во, Кол-во, Кол-во
Контрагент Кол-во, Кол-во, Кол-во
а у меня почему то получается при обходе параметра Кол во при ТабДок.Присоединить, вот так
Контрагент Товар1,Товар2,Товар3
Контрагент
Контрагент
Контрагент Кол-во, Кол-во, Кол-во----почему то Кол-во выводится
только в последнюю строку, а если написать ТабДок.Вывести, то тогда получается, вот так
Контрагент Товар1,Товар2,Товар3
Контрагент
Контрагент
Контрагент
Кол-во
Кол-во
Кол-во
Посмотрите пожалуйста во вложении мой отчет. чтобы вам было более понятно
Прикрепленные файлы:
ДинамическийОтчет.erf
(8) Ну так наверное стоит сесть и подумать, что в каком порядке нужно выводить. И как тогда должны быть устроены циклы. Какой цикл куда вложен. Сейчас там, мягко говоря, бардак. Как с логикой, так и с производительностью.
1. Сначала выводится в одну строку (т.к. "присоединить") список всех товаров из всех реализаций за период. Т.е. номенклатура в строке явно будет повторяться.
2. Затем все контрагенты из этих же реализаций выводятся, каждый в новую строку, так как "Вывести".
3. Затем опять берутся все реализации, и "Количество" из товаров выводится в новую строку, так как "Вывести".
Определись с тем, что тебе нужно, получи все данные запросом, потом выводи.
Либо СКД, там тупо мышкой всё натыкать можно. В чём причина отказа от СКД? Если это тестовое задание на работу, то, боюсь, на работу ещё рано.
1. Сначала выводится в одну строку (т.к. "присоединить") список всех товаров из всех реализаций за период. Т.е. номенклатура в строке явно будет повторяться.
2. Затем все контрагенты из этих же реализаций выводятся, каждый в новую строку, так как "Вывести".
3. Затем опять берутся все реализации, и "Количество" из товаров выводится в новую строку, так как "Вывести".
Определись с тем, что тебе нужно, получи все данные запросом, потом выводи.
Либо СКД, там тупо мышкой всё натыкать можно. В чём причина отказа от СКД? Если это тестовое задание на работу, то, боюсь, на работу ещё рано.
Я пишу
Для Каждого СтрКол ИЗ ВыборкаКол.Товары Цикл
ОбластьСтрока = Макет.ПолучитьОбласть("Строка|Колонка");
ОбластьСтрока.Параметры.Количество = СтрКол.Количество;
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
а он мне выводит почему то под Контрагентом как будто я написал вместо(Строка|Колонка),(Строка|Начало) что то не въеду?
Для Каждого СтрКол ИЗ ВыборкаКол.Товары Цикл
ОбластьСтрока = Макет.ПолучитьОбласть("Строка|Колонка");
ОбластьСтрока.Параметры.Количество = СтрКол.Количество;
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
а он мне выводит почему то под Контрагентом как будто я написал вместо(Строка|Колонка),(Строка|Начало) что то не въеду?
Не могу разобраться с циклами, немного оптимизировал, но результата нужного нет. Подскажите пожалуйста в коде по циклу, буду рад любому совету!
Выборка = Документы.РеализацияТоваровУслуг.Выбрать(ПериодНачало,ПериодКонец);
Пока Выборка.Следующий() Цикл
Если Выборка.Проведен = Ложь Тогда
Продолжить;
КонецЕсли;
Для Каждого СтрТов ИЗ Выборка.Товары Цикл
ОбластьШапка = Макет.ПолучитьОбласть("Шапка|Колонка");
ОбластьШапка.Параметры.Номенклатура = СтрТов.Номенклатура;
ТабДок.Присоединить(ОбластьШапка);
КонецЦикла;
//КонецЦикла;
ОбластьСтрока = Макет.ПолучитьОбласть("Строка|Начало");
ОбластьСтрока.Параметры.Контрагент = Выборка.Контрагент;
ТабДок.Вывести(ОбластьСтрока);
Для Каждого СтрКол ИЗ Выборка.Товары Цикл
ОбластьСтрока = Макет.ПолучитьОбласть("Строка|Колонка");
ОбластьСтрока.Параметры.Количество = СтрКол.Количество;
ТабДок.Присоединить(ОбластьСтрока);
КонецЦикла;
КонецЦикла;
Возврат ТабДок;
Показать
Получается следующее : Контрагент Товар1
Контрагент Кол-во Товар2
Контрагент Кол-во Товар3
Контрагент Кол-во Товар4 разные варианты пробовал, т е менял циклы и соответственно все по разному меняется, но не так как надо! Подскажите пожалуйста по циклу, не пойму пока никак как правильно его сделать!
Контрагент Кол-во Товар2
Контрагент Кол-во Товар3
Контрагент Кол-во Товар4 разные варианты пробовал, т е менял циклы и соответственно все по разному меняется, но не так как надо! Подскажите пожалуйста по циклу, не пойму пока никак как правильно его сделать!
1) ВЫВЕСТИ "Шапка|Начало"
2) В цикле по товарам ПРИСОЕДЕНИТЬ "Шапка|Колонка"
3) Цикл по выборке (здесь должен начаться цикл Пока Выборка.Следующий())
3.а) ВЫВЕСТИ "Строка|Начало"
3.б) В цикле по товарам ПРИСОЕДЕНИТЬ "Строка|Колонка"
2) В цикле по товарам ПРИСОЕДЕНИТЬ "Шапка|Колонка"
3) Цикл по выборке (здесь должен начаться цикл Пока Выборка.Следующий())
3.а) ВЫВЕСТИ "Строка|Начало"
3.б) В цикле по товарам ПРИСОЕДЕНИТЬ "Строка|Колонка"
Пожалуйста помогите мне вывести правильно отчет или пожалуйста просто расставьте правильно циклы, я уже всяко разно пробовал и подпишите по позможности комментарии возле кода что и для чего.Во вложении есть рисунок как должно получиться и часть кода, чтобы не писать с нуля, отчет должен быть без СКД. За вознаграждение 1$(стартмани)
Прикрепленные файлы:
ДинамическийОтчет.erf
(19)
Отсюда как бы идет отсыл к школьной программе:
Цикл 1 для строк
Цикл 2 для колонок
Исходные данные при таком подходе должны быть в виде таблиц со строками для каждого контрагента, номенклатуры, месяца и ресурса. Номенклатуры в таблице должны быть или все, или придется проверять и выводить отдельно пустые колонки для каждой пропущенной позиции.
В итоге для полностью заполненной таблицы нужно вывести первую строку - шапку - для каждого уникального элемента номенклатуры. Таблица должна быть отсортирована по "Контрагент, Номенклатура".
Дальше для каждой строки выводим контрагента (для итератора, равного "1"), после чего прикрепляем к нему элемент для каждой номенклатуры с ресурсом (просто следующая строка таблицы). Ну и счетчик на количество номенклатуры, по окончании которого рвем внутренний цикл брейком..
Если не понятно пишите
Да всем пофиг, собсно. Задача решается элементарно на СКД. Если нужно решить не на СКД, то это говорит о том, что задача практической пользы не несет и нужна для проверки квалификации.
Отсюда как бы идет отсыл к школьной программе:
Цикл 1 для строк
Цикл 2 для колонок
Исходные данные при таком подходе должны быть в виде таблиц со строками для каждого контрагента, номенклатуры, месяца и ресурса. Номенклатуры в таблице должны быть или все, или придется проверять и выводить отдельно пустые колонки для каждой пропущенной позиции.
В итоге для полностью заполненной таблицы нужно вывести первую строку - шапку - для каждого уникального элемента номенклатуры. Таблица должна быть отсортирована по "Контрагент, Номенклатура".
Дальше для каждой строки выводим контрагента (для итератора, равного "1"), после чего прикрепляем к нему элемент для каждой номенклатуры с ресурсом (просто следующая строка таблицы). Ну и счетчик на количество номенклатуры, по окончании которого рвем внутренний цикл брейком..
(20)До меня трудно немного доходит правильно ли я понял сперва я вывожу шапку, т е контрагент к нему присоединяю шапку номенклатуру и все это я делаю во вложенном цикле. Потом опять пишу
Выборка = Документы.РеализацияТоваровУслуг.Выбрать(ПериодНачало,ПериодКонец);
После этого вывожу контрагентов и к ним прикрепляю количество?
Выборка = Документы.РеализацияТоваровУслуг.Выбрать(ПериодНачало,ПериодКонец);
После этого вывожу контрагентов и к ним прикрепляю количество?
Пока Выборка.Следующий() Цикл
Если Выборка.Проведен = Ложь Тогда
Продолжить;
КонецЕсли;
Для Каждого СтрТов ИЗ Выборка.Товары Цикл
ОбластьШапка = Макет.ПолучитьОбласть("Шапка|Колонка");
ОбластьШапка.Параметры.Номенклатура = СтрТов.Номенклатура;
ТабДок.Присоединить(ОбластьШапка);
КонецЦикла;
//КонецЦикла;
ОбластьСтрока = Макет.ПолучитьОбласть("Строка|Начало");----------не могу понять как в цикле вывести Контрагента?
ОбластьСтрока.Параметры.Контрагент = Выборка.Контрагент;
ТабДок.Вывести(ОбластьСтрока);
Для Каждого СтрКол ИЗ Выборка.Товары Цикл
ОбластьСтрока = Макет.ПолучитьОбласть("Строка|Колонка");
ОбластьСтрока.Параметры.Количество = СтрКол.Количество;
ТабДок.Присоединить(ОбластьСтрока);
КонецЦикла;
Показать
Интересно что когда пишу вывести мне контрагента и присоединяю к контрагенту количество, количество выводится, но выводится друг под другом а не под товаром к которому соответствует, кто нибудь может мне написать проверку для вывода количества ну чтоб оно выводилось под нужным товаром а не просто друг под другом!
Если кто- то что- то может мне подсказать то во вложении можетке посмотреть!Пожалуйста в моем коде может кто-нибудь сделать исправление, хотя бы комментариями напротив, ну очень надо!
Прикрепленные файлы:
ДинамическийОтчет.erf
Писатели, блин. Вы давайте сначала почитаете что-нибудь. Литературу какую-нибудь. А потом писать начинайте.
Прикрепленные файлы:
ДинамическийОтчет.erf
Спасибо за совет Павел, сейчас буду разбираться как его делать! Я этот отчет делал через документ, потому что меня попросили не пользоваться запросом, хотят научить делать отчет без запроса, чтобы я имел предстпвление что и откуда берется! И с запросом у меня не примут задание. но вы в принципе много интересных действий мне показали, так что спасибо, буду дальше разбираться! А так если без запроса делать, то это надо все таки выборкой делать или Выборкой по регистру?
Правильнее делать выборкой по регистру. Это парадигма работы 1С. Документ при проведении раскладывается по плоским таблицам. И отчеты должны работать с плоскими таблицами, а не с документами.
Полученные данные в любом случае необходимо свернуть до измерений отчета. Можете создать таблицу значений, заполнить её из документов в объектной модели, ну и свернуть, так же как сворачиваются измерения строк и столбцов.
Я сомневаюсь, что есть какой-нибудь смысл научиться делать отчёты без запроса. Потому как запросом всегда работает быстрее, и в реальной жизни выборки по объектной модели используют очень редко.
Полученные данные в любом случае необходимо свернуть до измерений отчета. Можете создать таблицу значений, заполнить её из документов в объектной модели, ну и свернуть, так же как сворачиваются измерения строк и столбцов.
Я сомневаюсь, что есть какой-нибудь смысл научиться делать отчёты без запроса. Потому как запросом всегда работает быстрее, и в реальной жизни выборки по объектной модели используют очень редко.
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)