Отчет по кредиту 51го счета

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

  1. ge4r

    ge4r Гость

    Задача следующая:
    есть отчет "Обороты счета",там задаем период,номер счета(51)...выводится "обороты по счету 51",тыкаем на расшифровку ячейки 51 го счета,выводится "журнал проводок по 51 счету"...опять же тыкаем на расшифровку,получаем "операция(Выписка)"
    вот отсюда мне нужно выудить вид договора,контрагента,сумму,дату и тд...
    какие нужно использовать функции\процедуры,и как узнать идентификаторы ячеек этой операции?
    если непонятно объясняю,могу сделать скрины иль базу скинуть
     
  2. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    ну ты к примеру можешь получить все операции в которых фигурирует указанный счет за определенный период, а потом уже перебирать каждую и получать оттуда данные
     
  3. thinkfast

    thinkfast Гость

    Правой кнопкой по ячейке "Свойства" - узнаешь имя ячейки, но лучше знать имя области.
    Смотри Запрос который формирует "отчет Выписка", поидее он выбирает все необходимые значения
    Далее обработкой легко выберешь то, что тебе надо.
     
  4. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    thinkfast, кстати тоже хороший вариант предложил!
     
  5. ge4r

    ge4r Гость

    спасибо,попробую
     
  6. ge4r

    ge4r Гость

    пытаюсь делать с помощью ВыбратьДокументы

    Код (Text):
    Процедура Сформировать()
    Перем Опер;
    Проверить_Дату();
    Опер = СоздатьОбъект("Операция");
    Опер.ВыбратьДокументы(НачДата,КонДата);
    как далее выбрать те документы где фигурирует кредит 51го?
    я так понимаю цикл Пока Опер.ПолучитьДокументы()<>0 цикл... а вот что в цикле?
     
  7. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Используй как внешний цикл ВыбратьОперацииСпроводками, а как внутренний - перебор проводок (Пока Операция.ПолучитьПроводку)
     
  8. ge4r

    ge4r Гость

    Код (Text):
    Процедура Сформировать()
    Перем Опер, Таб;
    Проверить_Дату();
    Таб = СоздатьОбъект("Таблица");
    Таб.ВывестиСекцию ("Шапка");
    Опер = СоздатьОбъект("Операция");
    Опер.ВыбрратьОперацииСПроводками (НачДата,КонДата,"*,51",,,);
    Пока Опер.ПолучитьПроводку() = 1 Цикл
    Таб.ВывестиСекцию("Строка");  
    КонецЦикла;
    КонецПроцедуры
    тоесть вот так получается? но что указывать в таблице,как выковырить идентификаторы из этих проводок?
     
  9. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    через соответствующие субконто

    Но только чуть не так :
    Опер.ВыбратьОперацииСПроводками (НачДата,КонДата,"*,51",,,);
    Пока Опер.ПолучитьОперацию() = 1 Цикл
    Опер.ВыбратьПроводки();
    Пока Опер.ПолучитьПроводку() = 1 Цикл
    С1 = Опер.Субконто(1);
    С2 = Опер.Субконто(2);
    Таб.ВывестиСекцию("Строка");
    КонецЦикла;
    КонецЦикла;
    // примерно так - синтаксис уточни сам
     
  10. ge4r

    ge4r Гость

    понял,то есть в С1 и С2 мы вытащили договор,и подраздел договора...а остальное? пробывал субконто(3-5) ,нет таких
     
  11. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    У каждого счета столько видов субконто (точнее, не более максимального), сколько предусмотрено конфигурацией (см. план счетов).
    И ЕЩЕ УТОЧНЕНИЕ
    Правильно так :
    Д1 = Опер.Д*цензура*.Субконто(1);
    К1 = Опер.Кредит.Субконто(1);
    Соответственно, Д1 и К1 будут иметь тот же тип, что и вид Субконто1
    В общем, в ЖКК или синтакс-помощник загляни
     
  12. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    И, наверное, лучше через бухгалтерский запрос с периодом "проводка" в плане производительности...
     
  13. ge4r

    ge4r Гость

    Вот что написал

    Код (Text):
    Процедура Сформировать()
    Перем Опер, Таб, Сумма, Заголовок;
    Проверить_Дату();
    Заголовок = "Отчет по движению денежных средств за период "+ ПериодСтр(НачДата,КонДата);
    Таб = СоздатьОбъект("Таблица");
    Таб.ВывестиСекцию ("Шапка");


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


    Договор = Док.ПервичныйДокумент.Договор;
    Сумма = Док.Расход;
    НомПП = Док.НомерДокВходящий;
    ДатаПП = Док.ДатаДокВходящий;
    ДатаВыписки = Док.ДатаДок;
    Таб.ВывестиСекцию("Строка");
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;

    КонецЦикла;

    Таб.ТолькоПросмотр(1);
    Таб.Опции(0,0,0,0);
    Таб.ПараметрыСтраницы(2,,,,,,,,,1);
    Таб.Показать();
    КонецПроцедуры
    Теперь нужно сделать отбор по контрагенту и виду договора
    как это лучше реализовать,у меня только вариант с кучей Если...есть ли более рациональный способ?

    и еще,если в группе встречается 68 счет,то в поле контрагент нужно вывести наименование счета,подскажите функцию,которая возвращает наименование...
    Если Док.КоррСчет.ПринадлежитГруппе(СчетПоКоду("68")) = 1 Тогда
     
  14. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    А просто ОСВ по счету 51 чем не устраивает ?
    Если не совсем - проще ее доработать

    У счета есть атрибут "Наименование"
     
  15. ge4r

    ge4r Гость

    а в чем разница,этот код работает,осталось его немного доработать.
     
  16. ge4r

    ge4r Гость

    ну вот,как бы отчет выглядит так
    Код (Text):
    Процедура Проверить_Дату() //Проверка заданного периода
    Если НачДата>КонДата Тогда
    Предупреждение("Неправильно задан период формирования отчета!"+РазделительСтрок+
    "Дата начала больше даты окончания периода.");
    КонецЕсли;
    КонецПроцедуры

    Процедура Сформировать()
    Перем Опер, Таб, Сумма, Заголовок;
    Проверить_Дату();
    Заголовок = "Отчет по движению денежных средств за период "+ ПериодСтр(НачДата,КонДата);
    Таб = СоздатьОбъект("Таблица");
    Таб.ВывестиСекцию ("Шапка");


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

    Если ((ВыбКонтрагент = Контрагент) и (ВыбВидДоговора = ВидДоговора)) или ((ВыбКонтрагент = Контрагент) и (ВыбВидДоговора.Выбран()=0))
    или ((ВыбКонтрагент.Выбран()=0) и (ВыбВидДоговора=ВидДоговора)) или ((ВыбКонтрагент.Выбран()=0) и (ВыбВидДоговора.Выбран()=0)) Тогда
    Договор = Док.ПервичныйДокумент.Договор;
    Сумма = Док.Расход;
    НомПП = Док.НомерДокВходящий;
    ДатаПП = Док.ДатаДокВходящий;
    ДатаВыписки = Док.ДатаДок;
    Таб.ВывестиСекцию("Строка");
    КонецЕсли;

    КонецЕсли;
    КонецЕсли;
    КонецЦикла;

    КонецЦикла;

    Таб.ТолькоПросмотр(1);
    Таб.Опции(0,0,0,0);
    Таб.ПараметрыСтраницы(2,,,,,,,,,1);
    Таб.Показать();
    КонецПроцедуры
    с удовольствием выслушаю критику)
     
  17. ge4r

    ge4r Гость

    подскажите,как сделать разделитель разрядов в таблице отчета? то есть чтобы выводилось 12 145.12 а не 12145.12
     
  18. thinkfast

    thinkfast Гость

    Формат("Твое число", "ЧГ=3,0");

    Пример:
    Область.Параметры.СуммаНДС = Формат(текСтрока.СуммаНДС, "ЧГ=3,0");

    З.Ы. если число передается строкой, эффекта не будет.

    Придется так :
    Область.Параметры.СуммаНДС = Формат(Число(текСтрока.СуммаНДС), "ЧГ=3,0");
     
  19. ge4r

    ge4r Гость

    все оказалось проще, в ячейке послевыражения и #N15.2 просто добавил ". " где 1ый символ разделитель целой и дробной части,а второй разделитель разрядов

    У меня еще вопрос...как можно отсортировать таблицу отчета по столбцу? с таблицей значений все ясно таб.Сортировать("ВидДДС+"), а вот про таблицу отчета чтот вообще нигде ничего не могу найти...
     
  20. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Сам справился и работает - уже хорошо. Но как-то перебор документов для получения оборотов по бухитогам смотрится вяленько.
    В смысле оптимального и быстрого кода, разумеется. Теперь осваивай работу с объектом "БухгалтерскиеИтоги"
     
Загрузка...

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