Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
19 апр 2024, 12:04

Создание и обработка отчетов

Автор warshadow, 23 мар 2011, 19:44

0 Пользователей и 1 гость просматривают эту тему.

warshadow

Добрался я все-таки до главы отчеты. У меня существует 3 документа. Реализация,списания,поступление, также хотелось реализовать: выписку требования-накладной;Книгу покупок;
и Карточки складского учета. Вроде хватит для такой базы данных столько отчетов я считаю.
Начал реализовать первый отчет - поступление товаров услуг.
Через конструктор выбрал:
-ПоступлениеКниг.Ссылка (документ поступление общий)
-ПоступлениеРеализацияСписаниеКнигОбороты.НаименованиеКниги (регистр накопления)
-ПоступлениеРеализацияСписаниеКнигОбороты.КоличествоПриход (регистр накопления)

Сделал условие по ВидПоступления, чтобы можно было выбирать какой он - отИздательства или отЧитателей
Вроде бы все хорошо, все работает.
Начал отладку методом белого-ящика, т.е запустил программу и начал штудировать отчет, сразу при выводе ВидаПоступления отИздательства выдал 3 документа:
1 - Отиздательства
2- ОтЧитателей
3- ОтЧитателей
Ну и ладно...решил теперь сделать ВидПоступления ОтЧитателей,  там я и ахнул...
Выдал вообще все документы...
Подумал...ага)) забыл указать связи, но  тут я подумал все просто..
Сделал 2 связи:
1) НаименованиеКниги (документ ТЧОтИздательства с РегистрНакопленияОбороты)
2) НаименованиеКниги (документ ТЧОтЧитаталей с РегистрНакопленияОбороты)
Запускаю...пробую..и выдает мне ошибку,связанную с SQL,
З.Ы:Если одна какая-то связь стоит, то идеально выдает по одному ВидуПоступления, а по второму как ему ввздумается...
Собственно потому и решил реализовать не 1 документ с 2 ТЧ,а  2 доументы с 1 ТЧ.








warshadow

В общем надо связать как-то 1  документ с 2-я ТЧ с регистром накопления.
у меня только получается связать 1 документ с 1 ТЧ с регистром.

cska-fanat-kz

В ОбработкеПроведения:

1. Сперва условие по ВидуОперации
2. Внутри условие на Количество() (строк) нужной ТЧ
3. Внутри цикл по строкам нужной ТЧ - делаем движения по регистру
4. То же самое в ветке ИНАЧЕ...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Klyacksa

warshadow, Вам же cska-fanat-kz дал рекомендации. У Вас получилось? :)
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

warshadow

Цитата: Klyacksa от 24 мар 2011, 21:23
warshadow, Вам же cska-fanat-kz дал рекомендации. У Вас получилось? :)
я так понимаю, что связи делать не надо, требуется только пока:
Через конструктор выбрать:
-ПоступлениеКниг.Ссылка (документ поступление общий)
-ПоступлениеРеализацияСписаниеКнигОбороты.НаименованиеКниги (регистр накопления)
-ПоступлениеРеализацияСписаниеКнигОбороты.КоличествоПриход (регистр накопления)
-Условие по ВидПоступления, а потом уже:
Цитата: cska-fanat-kz от 24 мар 2011, 04:51
В ОбработкеПроведения:

1. Сперва условие по ВидуОперации
2. Внутри условие на Количество() (строк) нужной ТЧ
3. Внутри цикл по строкам нужной ТЧ - делаем движения по регистру
4. То же самое в ветке ИНАЧЕ...
так?


cska-fanat-kz

Инструкция была про ПРОВЕДЕНИЕ ДОКУМЕНТА РЕАЛИЗАЦИЯ,
которая у вас с двумя ТЧ, а не про то, как отчет собирать!

И давайте будем одной темы придерживаться - отчеты так отчеты...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

warshadow

Так,вот что получилось:

Процедура ОбработкаПроведения(Отказ, Режим)
         ПроверкаРеквизитов(Отказ, Режим);
               
         Для Каждого ТекСтрокаТблПоступлОтиздат Из ТблПоступлОтиздат Цикл
            Если ВидОперации=Перечисления.ВидыОпераций.ОтИздательства Тогда
              Если  ТблПоступлОтиздат.Количество() Тогда   

      // регистр ПоступлениеРеализацияСписаниеКниг Приход
      Движение = Движения.ПоступлениеРеализацияСписаниеКниг.Добавить();
      Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
      Движение.Период = Дата;
      Движение.НаименованиеКниги = ТекСтрокаТблПоступлОтиздат.НаименованиеКниги;
      Движение.ВидПоступления = ВидОперации;
      Движение.Количество = ТекСтрокаТблПоступлОтиздат.Количество;
      Движение.Цена = ТекСтрокаТблПоступлОтиздат.Цена;
   КонецЕсли;
    КонецЕсли;
   КонецЦикла;


   Для Каждого ТекСтрокаТблПоступлДарЧитат Из ТблПоступлДарЧитат Цикл
      Если ВидОперации=Перечисления.ВидыОпераций.ОтЧитателей Тогда
       Если  ТблПоступлДарЧитат.Количество()  Тогда    
      // регистр ПоступлениеРеализацияСписаниеКниг Приход
      Движение = Движения.ПоступлениеРеализацияСписаниеКниг.Добавить();
      Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
      Движение.Период = Дата;
      Движение.НаименованиеКниги = ТекСтрокаТблПоступлДарЧитат.НаименованиеКниги;
      Движение.ВидПоступления = ВидОперации;
      Движение.Количество = ТекСтрокаТблПоступлДарЧитат.Количество;
      Движение.Цена = 0;
   КонецЕсли;
    КонецЕсли;
   
   КонецЦикла;
          
КонецПроцедуры

warshadow

Так разобрался,программа определяет количество строк в ТЧ (заданной ).
Далее какие действия должны быть?

cska-fanat-kz

Мою инструкцию внимательно читайте!

У вас вместо моих пунктов 1,2,3 - 3,1,2!!

Повторяю. Сперва условие на вид операции, затем проверка на количество строк.

Кстати, условие не

Если  ТблПоступлДарЧитат.Количество()  Тогда

а

Если  ТблПоступлДарЧитат.Количество()>0  Тогда

Затем цикл по строкам Для каждого  Из...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

warshadow

Извините...
Прочитал внимательно! исправил!

Процедура ОбработкаПроведения(Отказ, Режим)
         ПроверкаРеквизитов(Отказ, Режим);
               
         Если ВидОперации=Перечисления.ВидыОпераций.ОтИздательства Тогда
         Если  ТблПоступлОтиздат.Количество()>0 Тогда
         Для Каждого ТекСтрокаТблПоступлОтиздат Из ТблПоступлОтиздат Цикл
                          
      // регистр ПоступлениеРеализацияСписаниеКниг Приход
      Движение = Движения.ПоступлениеРеализацияСписаниеКниг.Добавить();
      Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
      Движение.Период = Дата;
      Движение.НаименованиеКниги = ТекСтрокаТблПоступлОтиздат.НаименованиеКниги;
      Движение.ВидПоступления = ВидОперации;
      Движение.Количество = ТекСтрокаТблПоступлОтиздат.Количество;
      Движение.Цена = ТекСтрокаТблПоступлОтиздат.Цена;
   КонецЦикла;
   
       
                                  
        ИначеЕсли ВидОперации=Перечисления.ВидыОпераций.ОтЧитателей Тогда
      ИначеЕсли  ТблПоступлДарЧитат.Количество()>0  Тогда
   Для Каждого ТекСтрокаТблПоступлДарЧитат Из ТблПоступлДарЧитат Цикл
       
      // регистр ПоступлениеРеализацияСписаниеКниг Приход
      Движение = Движения.ПоступлениеРеализацияСписаниеКниг.Добавить();
      Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
      Движение.Период = Дата;
      Движение.НаименованиеКниги = ТекСтрокаТблПоступлДарЧитат.НаименованиеКниги;
      Движение.ВидПоступления = ВидОперации;
      Движение.Количество = ТекСтрокаТблПоступлДарЧитат.Количество;
      Движение.Цена = 0;
    КонецЦикла;
    КонецЕсли;
     КонецЕсли;
                     
КонецПроцедуры

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск