формирование отчета в 1С 8.0

Тема в разделе "1C и всё что с ней связано", создана пользователем staff, 21 июл 2009.

  1. staff

    staff Гость

    с нуля разработал конфигуратор (1С Предприятие 8 ) суть заключается в чем, есть элеватор семян по нему надо производить движения семян, сейчас у меня стоит загвоздка по формированию отчета, у меня не суммируются и не отнимаются значения по определенной позиции, подскажите что делать (делал обыкновенный запрос все нормально выводится, а когда делаю сложный отчет выводится все по отдельности)
    При необходимости могу выслать файл конфигуратор и базу.
     
  2. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Выложите код отчета.
     
  3. staff

    staff Гость

    код отчета:
    Процедура КнопкаСформироватьНажатие(Кнопка)
    // Вставить содержимое обработчика.
    Запрос = новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    | ОборотнаяВедомостьОстаткиИОбороты.Транспортер КАК Транспортер,
    | ОборотнаяВедомостьОстаткиИОбороты.Банки КАК Банки,
    | ОборотнаяВедомостьОстаткиИОбороты.ВидСемян КАК ВидСемян,
    | ОборотнаяВедомостьОстаткиИОбороты.Регистратор КАК Регистратор,
    | СУММА(ОборотнаяВедомостьОстаткиИОбороты.СуммаНачальныйОстаток) КАК НачОст,
    | СУММА(ОборотнаяВедомостьОстаткиИОбороты.СуммаПриход) КАК Приход,
    | СУММА(ОборотнаяВедомостьОстаткиИОбороты.СуммаРасход) КАК Расход,
    | СУММА(ОборотнаяВедомостьОстаткиИОбороты.СуммаКонечныйОстаток) КАК КонОст
    |ИЗ
    | РегистрНакопления.ОборотнаяВедомость.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Регистратор, ДвиженияИГраницыПериода, ) КАК ОборотнаяВедомостьОстаткиИОбороты";
    Флаг1=0;
    если не ВыбТранспортер.Пустая() тогда
    Запрос.Текст=Запрос.Текст+"ГДЕ ОборотнаяВедомость.Транспортер=&ПТранспортер ";
    Флаг=1;
    конецЕсли;
    Если не ВыбБанки.Пустая() тогда
    Если флаг1=0 тогда
    Запрос.Текст=Запрос.Текст+"ГДЕ ОборотнаяВедомость.Банки=&ПБанки ";
    Флаг1=1;
    иначе
    Запрос.Текст=Запрос.Текст+"И ОборотнаяВедомость.Банки=&ПБанки ";
    конецесли;
    конецесли;
    если ПечБанки тогда
    Если флаг1=0 тогда
    Запрос.Текст=Запрос.Текст+"ГДЕ ОборотнаяВедомость.Банки.ВыводПриПечати ";
    Иначе
    Запрос.Текст=Запрос.Текст+"И ОборотнаяВедомость.Банки.ВыводПриПечати";
    конецесли;
    конецесли;
    Запрос.Текст=Запрос.Текст+" СГРУППИРОВАТЬ ПО
    | ОборотнаяВедомостьОстаткиИОбороты.Транспортер,
    | ОборотнаяВедомостьОстаткиИОбороты.Банки,
    | ОборотнаяВедомостьОстаткиИОбороты.ВидСемян,
    | ОборотнаяВедомостьОстаткиИОбороты.Регистратор
    |
    |УПОРЯДОЧИТЬ ПО
    | Транспортер,
    | Банки,
    | ВидСемян,
    | Регистратор
    |ИТОГИ
    | СУММА(НачОст),
    | СУММА(Приход),
    | СУММА(Расход),
    | СУММА(КонОст)
    |ПО
    | Транспортер,
    | Банки,
    | ВидСемян,
    | Регистратор
    |АВТОУПОРЯДОЧИВАНИЕ";
    Запрос.УстановитьПараметр("НачалоПериода", НачПериода);
    Запрос.УстановитьПараметр("КонецПериода", КонПериода);
    Если не ВыбТранспортер.Пустая() тогда
    Запрос.УстановитьПараметр("ПТранспортер", ВыбТранспортер);
    конецесли;
    Если не ВыбБанки.Пустая() тогда
    Запрос.УстановитьПараметр("ПБанки", ВыбБанки);
    конецесли;
    Результат=Запрос.Выполнить();
    Выборка=Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    темп = новый ТабличныйДокумент;
    ТабДок=ПолучитьМакет("Макет");
    ОбластьПериод=ТабДок.ПолучитьОбласть("Период");
    ОбластьПериод.Параметры.Период=" Период с "+НачПериода+" по "+КонПериода;
    Темп.Вывести(ОбластьПериод);
    ОбластьШапка=ТабДок.ПолучитьОбласть("Шапка");
    Темп.Вывести(ОбластьШапка);
    Пока Выборка.Следующий() цикл
    ОбластьТранспортер=ТабДок.ПолучитьОбласть("Транспортер");
    ОбластьТранспортер.Параметры.Транспортер="Транспортер "+Выборка.Транспортер;
    Темп.Вывести(ОбластьТранспортер);
    ВыборкаБанки=Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока выборкаБанки.Следующий() цикл
    ФлагБанки=0;
    ВыборкаВидСемян=ВыборкаБанки.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока выборкаВидСемян.Следующий() цикл
    если выборкаВидСемян.ВидСемян.Пустая() тогда
    продолжить
    конецесли;
    Если ФлагБанки=0 тогда
    ОбластьБанки=ТабДок.ПолучитьОбласть("Банки");
    ОбластьБанки.Параметры.Банки="Банки " + ВыборкаБанки.Банки;
    Темп.Вывести(ОбластьБанки);
    ФлагБанки=1;
    конецесли;
    ОбластьВидСемян=ТабДок.ПолучитьОбласть("ВидСемян");
    ОбластьВидСемян.Параметры.ВидСемян=ВыборкаВидСемян.ВидСемян;
    Если ВыборкаВидСемян.НачОст>0 тогда
    ОбластьВидСемян.Параметры.НачальныйОстатокПриход=ВыборкаВидСемян.НачОст;
    иначе
    ОбластьВидСемян.Параметры.НачальныйОстатокРасход=-ВыборкаВидСемян.НачОст
    конецесли;
    Темп.Вывести(ОбластьВидСемян);
    ВыборкаРегистратор=ВыборкаВидСемян.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам
    );
    Пока ВыборкаРегистратор.Следующий() цикл
    Если ВыборкаРегистратор.Регистратор<>Неопределено тогда
    ОбластьРегистратор=ТабДок.ПолучитьОбласть("Регистратор");
    Если ВыборкаРегистратор.Приход>0 тогда
    ОбластьРегистратор.Параметры.Контрагент=ВыборкаРегистратор.Регистратор;
    конецесли;
    Если ВыборкаРегистратор.Расход>0 тогда
    ОбластьРегистратор.Параметры.Контрагент=ВыборкаРегистратор.Регистратор;
    конецесли;
    ОбластьРегистратор.Параметры.Приход=ВыборкаРегистратор.Приход;
    ОбластьРегистратор.Параметры.Расход=ВыборкаРегистратор.Расход;
    ОбластьРегистратор.Параметры.Дата=ВыборкаРегистратор.Регистратор.дата;
    Темп.Вывести(ОбластьРегистратор);
    конецесли;
    конеццикла;
    ОбластьИтогоВидСемян=ТабДок.ПолучитьОбласть("ИтогоВидСемян");
    Если ВыборкаВидСемян.КонОст>0 тогда
    ОбластьИтогоВидСемян.Параметры.КонечныйОстатокПриход=ВыборкаВидСемян.КонОст;
    Иначе
    ОбластьИтогоВидСемян.Параметры.КонечныйОстатокРасход=-ВыборкаВидСемян.КонОст
    конецесли;
    Темп.Вывести(ОбластьИтогоВидСемян);
    конеццикла;
    конеццикла;
    конеццикла;
    ТабФорма=Отчеты.ОтчетПоСеменам.ПолучитьФорму("ФормаТаблицы");
    ТабФорма.Открыть();
    ТабФорма.ЭлементыФормы.Результат.Вывести(Темп);
    конецпроцедуры

    Процедура ВыбПериодНажатие(Элемент)
    НастройкаПериода = Новый НастройкаПериода;
    НастройкаПериода.УстановитьПериод(НачПериода, ?(КонПериода='0001-01-01', КонПериода, КонецДня(КонПериода)));
    НастройкаПериода.РедактироватьКакИнтервал = Истина;
    НастройкаПериода.РедактироватьКакПериод = Истина;
    НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;
    Если НастройкаПериода.Редактировать() Тогда
    НачПериода = НастройкаПериода.ПолучитьДатуНачала();
    КонПериода = НастройкаПериода.ПолучитьДатуОкончания();
    КонецЕсли;
    КонецПроцедуры

    а тут сама проблема:
    само дело в чем, когда составляю складской документ выбираю отдельно процедуру (загрузка или отгрузка), вид семян которую мы используем, дальше транспортер (то по чем происходит загрузка или отгрузка в банки) и сама банка где хранится семена, банка одна и таже тока изменяются транспортреры (загружаем в банку по одному транспортеру или же выгружаем из банки по другому транспортеру).
    когда ставлю загрузку по транспортеру (например 12) и банку (111) и вид семян (подсолнух) делаю проводку в отчете создается позиция, когда делаю отгрузку по транспортеру (12) и банку (111) и вид семян (подсолнух) то происходит отнимание и в ИтогоВидСемян отобразается остаток, но когда ставлю отгрузку по транспортеру (14) и банку (111) и вид семян (подсолнух) то происходит создание другой позиции в отчете где из банки (111) ничего не отнимается.
    пробовал убрать группировки по регистратору у меня нечего не выводит
     
  4. tanat

    tanat Well-Known Member

    Регистрация:
    2 мар 2007
    Сообщения:
    265
    Симпатии:
    0
    Вам надо структуру регистра менять, так как уникальность записи в этом случае задается 3мя измерениями : банк, транспортер, вид семян. Если оставить банк и вид семян, а транспортер ввести в качестве реквизита - то регистр будет "работать" так, как вам нужно, т.е. делать приход-расход без учета транспортера.
     
  5. staff

    staff Гость

    сделал как вы написали, у меня теперь в макете отчета кроме даты больше ничего не выводится
     
  6. tanat

    tanat Well-Known Member

    Регистрация:
    2 мар 2007
    Сообщения:
    265
    Симпатии:
    0
    перепроведите все документы - первое, из условий уберите "ГДЕ ОборотнаяВедомость.Транспортер=&ПТранспортер " в запросе. Вы структуру поменяли, а условия отбора - нет.
     
  7. staff

    staff Гость

    а сможете поисправлять в самом коде который я выслал, а то всякими способами пробую но ничего не выводит
     
  8. tanat

    tanat Well-Known Member

    Регистрация:
    2 мар 2007
    Сообщения:
    265
    Симпатии:
    0
    Запрос.Текст = "ВЫБРАТЬ
    | ОборотнаяВедомостьОстаткиИОбороты.Транспортер КАК Транспортер,
    | ОборотнаяВедомостьОстаткиИОбороты.Банки КАК Банки,
    | ОборотнаяВедомостьОстаткиИОбороты.ВидСемян КАК ВидСемян,
    | ОборотнаяВедомостьОстаткиИОбороты.Регистратор КАК Регистратор,
    | СУММА(ОборотнаяВедомостьОстаткиИОбороты.СуммаНачальныйОстаток) КАК НачОст,
    | СУММА(ОборотнаяВедомостьОстаткиИОбороты.СуммаПриход) КАК Приход,
    | СУММА(ОборотнаяВедомостьОстаткиИОбороты.СуммаРасход) КАК Расход,
    | СУММА(ОборотнаяВедомостьОстаткиИОбороты.СуммаКонечныйОстаток) КАК КонОст
    |ИЗ
    | РегистрНакопления.ОборотнаяВедомость.ОстаткиИОбороты(&НачалоПериода, &КонецПериода,, ДвиженияИГраницыПериода, ) КАК ОборотнаяВедомостьОстаткиИОбороты";
    //Флаг1=0;
    //если не ВыбТранспортер.Пустая() тогда
    //Запрос.Текст=Запрос.Текст+"ГДЕ ОборотнаяВедомость.Транспортер=&ПТранспортер ";
    //Флаг=1;
    //конецЕсли;
    Если не ВыбБанки.Пустая() тогда
    Если флаг1=0 тогда
    Запрос.Текст=Запрос.Текст+"ГДЕ ОборотнаяВедомость.Банки=&ПБанки ";
    Флаг1=1;
    иначе
    Запрос.Текст=Запрос.Текст+"И ОборотнаяВедомость.Банки=&ПБанки ";
    конецесли;
    конецесли;
    если ПечБанки тогда
    Если флаг1=0 тогда
    Запрос.Текст=Запрос.Текст+"ГДЕ ОборотнаяВедомость.Банки.ВыводПриПечати ";
    Иначе
    Запрос.Текст=Запрос.Текст+"И ОборотнаяВедомость.Банки.ВыводПриПечати";
    конецесли;
    конецесли;
    Запрос.Текст=Запрос.Текст+" СГРУППИРОВАТЬ ПО
    | ОборотнаяВедомостьОстаткиИОбороты.Транспортер,
    | ОборотнаяВедомостьОстаткиИОбороты.Банки,
    | ОборотнаяВедомостьОстаткиИОбороты.ВидСемян,
    | ОборотнаяВедомостьОстаткиИОбороты.Регистратор
    |
    |УПОРЯДОЧИТЬ ПО
    | Транспортер,
    | Банки,
    | ВидСемян,
    | Регистратор
    |ИТОГИ
    | СУММА(НачОст),
    | СУММА(Приход),
    | СУММА(Расход),
    | СУММА(КонОст)
    |ПО
    | Транспортер,
    | Банки,
    | ВидСемян,
    | Регистратор
    |АВТОУПОРЯДОЧИВАНИЕ";

    вот както так,я думаю
     
  9. staff

    staff Гость

    а сам код программы?
     
  10. tanat

    tanat Well-Known Member

    Регистрация:
    2 мар 2007
    Сообщения:
    265
    Симпатии:
    0
    а все остальное безызмено. дело то в запросе и в кусочке его дополнения.
     
  11. staff

    staff Гость

    теперь пишет кучу ошибок и инфу в отчете не выводит
     
  12. tanat

    tanat Well-Known Member

    Регистрация:
    2 мар 2007
    Сообщения:
    265
    Симпатии:
    0
    флаг=0; разкоментируйте.

    Ошибки какого характера? запрос выполняется? отладчиком пользоваться умеете? на каком этапе возникает ошибка?

    Переменные все определены?
     
Загрузка...

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