7.7 Вывод в печ.форму два вида документов по датам

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем sebastyan123, 13 июн 2012.

  1. TopicStarter Overlay
    sebastyan123
    Offline

    sebastyan123

    Регистрация:
    13 июн 2012
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    Добрый день!
    Подскажите, какой может быть путь решения такой задачи:

    Необходимо вывести за определенный период приходные и расходные кассовые документы.

    Прих.док-т Сумма Расх.док-т Сумма
    дата номер дата номер

    Если на какую-то дату есть и прих. и расх.док-ты, то выводим в одну строку, если же на эту дату больше, например, приходных документов, тогда ячейки для расх.документа остаются пустыми.

    Пытаюсь это сделать с помощью запроса и двух тз.
    вот код:


    Код:
     Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с НачДата по КонДата;
    |ОбрабатыватьДокументы Проведенные;
    |Фирма_=Документ.ПриходныйКассовый.Фирма,
    |	   Документ.РасходныйКассовый.Фирма;
    |Док=Документ.ПриходныйКассовый.ТекущийДокумент,
    |    Документ.РасходныйКассовый.ТекущийДокумент;
    |РСчет_=Документ.ПриходныйКассовый.РСчет,
    |	   Документ.РасходныйКассовый.РСчет;
    |Дата_Прих=Документ.ПриходныйКассовый.ДатаДок;
    |Дата_Расх=Документ.РасходныйКассовый.ДатаДок;
    |Номер_Прих=Документ.ПриходныйКассовый.НомерПО;
    |Сумма_Прих=Документ.ПриходныйКассовый.СуммаВал;
    |Номер_Расх=Документ.РасходныйКассовый.НомерРО;
    |Сумма_Расх=Документ.РасходныйКассовый.СуммаВал;
    |Условие (Касса в РСчет_);
    |Группировка Док;
    |
    |";
    Если ПустоеЗначение(Фирма)=0 Тогда
    ТекстЗапроса=ТекстЗапроса+"
    |Условие (Фирма_ = Фирма);
    |";
    КонецЕсли;
    
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("СформироватьПрихРасх");
    Запрос=СоздатьОбъект("Запрос");
    Если Запрос.Выполнить(ТекстЗапроса)=0 тогда
    Предупреждение("Запрос не выполнился!");
    Возврат;
    КонецЕсли;
    Таб.ВывестиСекцию("Шапка1");
    Таб.ВывестиСекцию("Шапка2");
    
    ТЗ=СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("Док","Документ");
    ТЗ.НоваяКолонка("Дата_ПО","Дата");
    ТЗ.НоваяКолонка("Номер_ПО","Число",10);
    ТЗ.НоваяКолонка("Сумма_вал_ПО","Число");
    ТЗ.НоваяКолонка("Основание_ПО","Строка");
    
    ТЗ2=СоздатьОбъект("ТаблицаЗначений");
    ТЗ2.НоваяКолонка("Дата_РО","Дата");
    ТЗ2.НоваяКолонка("Номер_РО","Число",10);
    ТЗ2.НоваяКолонка("Сумма_вал_РО","Число");
    ТЗ2.НоваяКолонка("Основание_РО","Строка");
    //ТЗ.НоваяКолонка("Ном","Число");
    Пока Запрос.Группировка(1)=1 Цикл
    Если Запрос.Док.Вид()="ПриходныйКассовый" Тогда
    ТЗ.НоваяСтрока();
    ТЗ.Номер_ПО=Запрос.Номер_Прих;
    ТЗ.Дата_ПО=Запрос.Дата_Прих;
    ТЗ.Сумма_вал_ПО=Запрос.Сумма_Прих;
    ТЗ.Основание_ПО=Запрос.Док.Основание;
    ИначеЕсли Запрос.Док.Вид()="РасходныйКассовый" Тогда
    ТЗ2.НоваяСтрока();
    ТЗ2.Номер_РО=Запрос.Номер_Расх;
    ТЗ2.Дата_РО=Запрос.Дата_Расх;
    ТЗ2.Сумма_вал_РО=Запрос.Сумма_Расх;
    ТЗ2.Основание_РО=Запрос.Док.Основание;
    КонецЕсли;
    КонецЦикла;
    флаг=0;
    флаг2=0;
    нн=0;
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку()=1 Цикл
    ТЗ2.ВыбратьСтроки();
    Пока ТЗ2.ПолучитьСтроку()=1 Цикл
    Если ТЗ.Дата_ПО=ТЗ2.Дата_РО Тогда
    Таб.ВывестиСекцию("Строка");
    Прервать;
    Иначе
    Если ТЗ.Дата_ПО>ТЗ2.Дата_РО Тогда
    Если флаг=0 Тогда
    номдок=ТЗ2.Номер_РО;
    сум=ТЗ2.Сумма_вал_РО;
    флаг=1;
    ИначеЕсли номдок<>ТЗ2.Номер_РО Тогда
    Таб.ВывестиСекцию("Строка2");
    КонецЕсли;
    Иначе
    Таб.ВывестиСекцию("Строка3");
    Прервать;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    
    в одной колонке прих.докт (дата.номер), в другой- расходный(дата,номер)
    P/S заранее спасибо всем откликнувшимся....

    этот код некорректно выводит расх.док-ты..
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Я бы делал иначе
    1) Не нужно в запросе брать переменные. Их можно взять при выводе в макет. Берите просто документы
    2) Почему бы вам не использовать группировку по дате документа в запросе? Намного проще
    3) Не нужны 2 временные таблицы. Нужна одна и 3 колонки
    Дата, Приход, Расход

    где:
    Дата - дата документа
    Приход - список или таблица значений содержащая ПКО
    Расход - список или таблица значений содержащая РКО

    Заполняем ТЗ. Затем в цикле по ТЗ внутренний цикл (от 1 до максимума строк приход/расход) выводим.
    Млжно даже не использовать ПрисоединитьСекцию в макете
  3. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    зачем 2 тз
    чем не устраивает в тз сумма_прих и сумма_расх
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Не взлетит... По хронологии м.б. 2 ПКО подряд а затем РКО... Как я понял нужен реестр в 2 колонки...
  5. TopicStarter Overlay
    sebastyan123
    Offline

    sebastyan123

    Регистрация:
    13 июн 2012
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    да, реестр в две колонки по двум видам док-ов.

    Супер-модератор, а как при создании колонок ТЗ Приход, Расход можно Тз прихода/расхода указать?
  6. TopicStarter Overlay
    sebastyan123
    Offline

    sebastyan123

    Регистрация:
    13 июн 2012
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    Бухгалтерский угодник, как я понял, нужны 3 таблицы значений...
  7. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Вот примерный код

    Код:
    //тута запрос
    ТЗ=СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("Дата","Дата");
    ТЗ.НоваяКолонка("Приход"); //неопределенного вида
    ТЗ.НоваяКолонка("Расход");
    
    //тут цикл по результатам запроса в котором...
    а=0;
    Если ТЗ.НайтиЗначение(Запрос.Дата,а,"Дата")=0 Тогда
    ТЗ.НоваяСтрока();
    ТЗ.Дата=Запрос.Дата;
    ТЗ.Приход=СоздатьОбъект("СписокЗначений");
    ТЗ.Расход=СоздатьОбъект("СписокЗначений");
    Иначе
    ТЗ.ПолучитьСтрокуПоНомеру(а);
    КонецЕсли;
    
    
    Если ТЗ.Документ.Вид()="ПКО" Тогда
    Тз.Приход.ДобавитьЗначение(Запрос.Документ);
    Иначе
    Тз.Расход.ДобавитьЗначение(Запрос.Документ);
    КонецЕсли;
    //закончили цикл запроса
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку()=1 Цикл
    ДатаМакета=ТЗ.Дата;
    Таб.ВывестиСекцию("Дата");
    Для к=1 По Макс(ТЗ.Приход.РазмерСписка(),ТЗ.Расход.РазмерСписка()) Цикл
    Если к<=ТЗ.Приход.РазмерСписка() Тогда
    ДокПриход=ТЗ.Приход.ПолучитьЗначение(к);
    Иначе
    ДокПриход="";
    КонецЕсли;
    
    
    Если к<=ТЗ.Расход.РазмерСписка() Тогда
    ДокРасход=ТЗ.Расход.ПолучитьЗначение(к);
    Иначе
    ДокРасход="";
    КонецЕсли;
    Таб.ВывестиСекцию("Док")
    КонецЦикла;
    КонецЦикла;
    
    Набросал схематически. Идея думаю ясна
  8. TopicStarter Overlay
    sebastyan123
    Offline

    sebastyan123

    Регистрация:
    13 июн 2012
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    Спасибо большое!
  9. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Не за что. Надеюсь поможет. Что не понятно - спрашивайте
  10. TopicStarter Overlay
    sebastyan123
    Offline

    sebastyan123

    Регистрация:
    13 июн 2012
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    почему-то выводит только по одному документу на дату, хотя док-ов может быть несколько..
    дату нужно выводить с одной строке с документом. и если на эту дату есть и ПКО и РКО, то в одной строке их выводить..не пойму в чем дело.
  11. TopicStarter Overlay
    sebastyan123
    Offline

    sebastyan123

    Регистрация:
    13 июн 2012
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    Код:
      Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с НачДата по КонДата;
    |ОбрабатыватьДокументы Проведенные;
    |Фирма_=Документ.ПриходныйКассовый.Фирма,
    |	   Документ.РасходныйКассовый.Фирма;
    |Док=Документ.ПриходныйКассовый.ТекущийДокумент,
    |    Документ.РасходныйКассовый.ТекущийДокумент;
    |РСчет_=Документ.ПриходныйКассовый.РСчет,
    |	   Документ.РасходныйКассовый.РСчет;
    |Дата_док=Документ.ПриходныйКассовый.ДатаДок,
    |		 Документ.РасходныйКассовый.ДатаДок;
    //|Дата_Прих=Документ.ПриходныйКассовый.ДатаДок;
    //|Дата_Расх=Документ.РасходныйКассовый.ДатаДок;
    |Номер_Прих=Документ.ПриходныйКассовый.НомерПО;
    |Сумма_Прих=Документ.ПриходныйКассовый.СуммаВал;
    |Номер_Расх=Документ.РасходныйКассовый.НомерРО;
    |Сумма_Расх=Документ.РасходныйКассовый.СуммаВал;
    |Условие (Касса в РСчет_);
    |Группировка Дата_док;
    |";
    Если ПустоеЗначение(Фирма)=0 Тогда
    ТекстЗапроса=ТекстЗапроса+"
    |Условие (Фирма_ = Фирма);
    |";
    КонецЕсли;
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("ТТТТ");
    Запрос=СоздатьОбъект("Запрос");
    Если Запрос.Выполнить(ТекстЗапроса)=0 тогда
    Предупреждение("Запрос не выполнился!");
    Возврат;
    КонецЕсли;
    Таб.ВывестиСекцию("Шапка1");
    Таб.ВывестиСекцию("Шапка2");
    
    
    
    
    ТЗ=СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("Дата","Дата");
    ТЗ.НоваяКолонка("Док","Документ");
    ТЗ.НоваяКолонка("Приход"); //неопределенного вида
    ТЗ.НоваяКолонка("Расход");
    
    Пока Запрос.Группировка(1)=1 Цикл
    //тут цикл по результатам запроса в котором...
    а=0;
    Если ТЗ.НайтиЗначение(Запрос.Дата_док,а,"Дата")=0 Тогда
    ТЗ.НоваяСтрока();
    ТЗ.Дата=Запрос.Дата_док;
    ТЗ.Док=Запрос.Док;
    ТЗ.Приход=СоздатьОбъект("СписокЗначений");
    ТЗ.Расход=СоздатьОбъект("СписокЗначений");
    Иначе
    ТЗ.ПолучитьСтрокуПоНомеру(а);
    КонецЕсли;
    
    
    Если ТЗ.Док.Вид()="ПриходныйКассовый" Тогда
    Тз.Приход.ДобавитьЗначение(Запрос.Док.НомерПО);
    Иначе
    Тз.Расход.ДобавитьЗначение(Запрос.Док.НомерРО);
    КонецЕсли;
    КонецЦикла;
    //закончили цикл запроса
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку()=1 Цикл
    ДатаМакета=ТЗ.Дата;
    //Таб.ВывестиСекцию("Дата");
    
    Для к=1 По Макс(ТЗ.Приход.РазмерСписка(),ТЗ.Расход.РазмерСписка()) Цикл
    
    
    
    Если к<=ТЗ.Приход.РазмерСписка() Тогда
    ДокПриход=ТЗ.Приход.ПолучитьЗначение(к);
    Иначе
    ДокПриход="";
    КонецЕсли;
    
    
    Если к<=ТЗ.Расход.РазмерСписка() Тогда
    ДокРасход=ТЗ.Расход.ПолучитьЗначение(к);
    Иначе
    ДокРасход="";
    КонецЕсли;
    Таб.ВывестиСекцию("Строка")
    КонецЦикла;
    КонецЦикла;
    
  12. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    выложите сам отчет (не просто текст)
  13. TopicStarter Overlay
    sebastyan123
    Offline

    sebastyan123

    Регистрация:
    13 июн 2012
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    не пойму как тут прикрепить файл...
  14. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    В форме ответа внизу есть кнопка "расширенная форма" (рядом с отправить). Жмакни на нее - получишь результат
  15. TopicStarter Overlay
    sebastyan123
    Offline

    sebastyan123

    Регистрация:
    13 июн 2012
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    кнопка Журнл регистрции КО-3а

    вот, нашел, )

    Вложения:

  16. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    вы не внимательно читали пример
    Код:
     ТЗ=СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("Дата","Дата");
    ТЗ.НоваяКолонка("Приход");
    ТЗ.НоваяКолонка("Расход");
    
    Пока Запрос.Группировка(1)=1 Цикл
    
    а=0;
    Если ТЗ.НайтиЗначение(Запрос.Дата_док,а,"Дата")=0 Тогда
    ТЗ.НоваяСтрока();
    ТЗ.Дата=Запрос.Дата_док;
    ТЗ.Приход=СоздатьОбъект("СписокЗначений");
    ТЗ.Расход=СоздатьОбъект("СписокЗначений");
    Иначе
    ТЗ.ПолучитьСтрокуПоНомеру(а);
    КонецЕсли;
    
    
    Если ТЗ.Док.Вид()="ПриходныйКассовый" Тогда
    Тз.Приход.ДобавитьЗначение(Запрос.Док);
    Иначе
    Тз.Расход.ДобавитьЗначение(Запрос.Док);
    КонецЕсли;
    КонецЦикла;
    
    вот так надо
  17. TopicStarter Overlay
    sebastyan123
    Offline

    sebastyan123

    Регистрация:
    13 июн 2012
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    делаю так...но все равно выводит на опредленную дату по одному документу...(и в основном, это расходные накладные, только )
  18. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Удаленно подключится есть возможность?
  19. TopicStarter Overlay
    sebastyan123
    Offline

    sebastyan123

    Регистрация:
    13 июн 2012
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    не получится..
  20. TopicStarter Overlay
    sebastyan123
    Offline

    sebastyan123

    Регистрация:
    13 июн 2012
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    еще не пойму..как в условии мы пишем ТЗ.Док.Вид(), если в Тз не создаем колонку Док...

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