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

Получить субконто за период.

Автор Clight, 18 апр 2013, 01:25

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

Clight

1C Предприятие 7.7 (7.70.027), Бухгалтерский учёт, редакция 4.5

Доброго времени суток. Только начинаю программировать, поэтому сорри за нубские вопросы.
Пытаюсь подправить отчёт "ОС все реквизиты". В диалоге формы указывается дата и формируется отчёт с указанием ОС на эту дату. Встал вопрос, формировать отчёт не на дату, а за период + указывать в отчёте только движимые ОС. С "только движимые" проблем вроде нет, примерно знаю как сделать, а вот с периодом как то застопорился.

Ит.ВыбратьСубконто(ВидыСубконто.ОсновныеСредства);
Пока Ит.ПолучитьСубконто(ВидыСубконто.ОсновныеСредства) = 1 Цикл
Т.НоваяСтрока();
Т.Подразделение = Ит.Субконто().Подразделение.Получить.(Дата1)


"Дата1" вводится в форме. Я подредактировал форму и сделал, чтобы можно было указать две даты "С "ДатаНач" по "ДатаКон"". Думал передать эти два значения в Подразделение.Получить, но пишет ошибку - "много параметров передаётся".  :dfbsdfbsdf:


Mitay_D

Сделай конструктором, если не хочешь, то тогда вот что пишет синтаксис-помощник: 
ВыполнитьЗапрос(<?>,,,,,,,)
Синтаксис:
ВыполнитьЗапрос(<НачалоПериода>,<КонецПериода>,<Счет>,<КоррСчет>,<Валюта>,<ТипИтогов>,<Периодичность>,<ТипСуммы>)
Назначение:
Выполнить отбор и расчет итогов по параметрам.
Возвращает число 1 -  запрос выполнен; 0 -  запрос не выполнен.
Параметры:
<НачалоПериода> - дата, документ или позиция начала периода запроса.
<КонецПериода> - дата, документ или позиция конца периода запроса.
<Счет> - необязательный параметр. Счета, для которых будут отбираться итоги в запросе. Задается значением типа ''Счет'' или объектом типа ''СписокЗначений'', содержащим значения типа ''Счет'',  либо строкой содержащей список кодов счетов, разделенных символом '','' или '';''. Если параметр не указан, отбор будет выполняться по всем счетам.
<КоррСчет> - необязательный параметр. Значение типа ''Счет'' - корреспондирующий счет, в корреспонденции с которым будут отбираться итоги счета, указанного в параметре <Счет>. Задается значением типа ''Счет'' или объектом типа ''СписокЗначений'', содержащим значения типа ''Счет'',  либо строкой содержащей список кодов счетов, разделенных символом '','' или '';''. Если параметр не указан, будут отбираться итоги в корреспонденции со всеми счетами.
<Валюта> - зачение типа ''Справочник.Валюты''. Если параметр не указан итоги выдаются без учета валюты.
<ТипИтогов> - число - тип отбираемых итогов. Может принимать следующие значения: 1 - остатки и обороты по счету в целом; 2 - обороты между счетами; 3 - первое и второе вместе. По умолчанию: 1.
<Периодичность> - число или символьная строка (см. документацию).Позволяет получить дополнительный разрез итогов по периодам.  По умолчанию периодичность не задана.
<ТипСуммы> - число или строка - тип рассчитываемых итогов. Может принимать следующие значения (в скобках указаны строковые синонимы):
1 (''C'', ''S'') рассчитывать суммы;
2 (''В'', ''C'') рассчитывать валютные суммы;
4 (''К'', ''A'') рассчитывать количество.
Если требуется одновременно рассчитывать разные суммы, значение параметра получается путем сложения допустимых значений, например: 5 (1+4) - рассчитывать суммы и количество.
При указании параметра строкой в ней указываються все символы, которые обозначают типы сумм, которые нужно рассчитывать. По умолчанию рассчитываются все типы сумм.
Замечание:
Подробнее см. в документации в гл. ''Работа с бухгалтерскими итогами''

Herby

Цитата: Clight от 18 апр 2013, 01:25Дата1" вводится в форме. Я подредактировал форму и сделал, чтобы можно было указать две даты "С "ДатаНач" по "ДатаКон"". Думал передать эти два значения в Подразделение.Получить, но пишет ошибку - "много параметров передаётся".  :dfbsdfbsdf:


метод получить() вам не поможет, это метод возвращает значение на конкретную дату, историю он не выводит.

вам нужно вывести все значения реквизита "Подразделение", я правильно понял?

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

Clight

Цитата: Herby от 18 апр 2013, 12:04
Цитата: Clight от 18 апр 2013, 01:25Дата1" вводится в форме. Я подредактировал форму и сделал, чтобы можно было указать две даты "С "ДатаНач" по "ДатаКон"". Думал передать эти два значения в Подразделение.Получить, но пишет ошибку - "много параметров передаётся".  :dfbsdfbsdf:


метод получить() вам не поможет, это метод возвращает значение на конкретную дату, историю он не выводит.

вам нужно вывести все значения реквизита "Подразделение", я правильно понял?

это периодический реквизит, для вывода истории значений по этом реквизиту, нужно использовать объект "Периодический". Прочитайте в справке как работать с объектом "Периодический".
Если не поймете - пишите.
Походу я начинаю понимать. Только вот всё ещё не могу написать логику. Вот полный код обработки:
Процедура Сформировать() 

Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Таб.ВывестиСекцию("Шапка");

Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Ит.ИспользоватьСубконто(ВидыСубконто.ОсновныеСредства);


//Если Дата(Дата1) > КонецРассчитанногоПериодаБИ() Тогда
// Предупреждение("За данный период бухгалтерские итоги не рассчитаны!");
// Возврат;
//КонецЕсли;

Если Ит.ВыполнитьЗапрос(Дата1,Дата1,"01.1,02.1") = 0 Тогда   
Предупреждение("Не удается выполнить запрос к бухгалтерским итогам!");
Возврат;
КонецЕсли;

Т = СоздатьОбъект("ТаблицаЗначений");
Т.НоваяКолонка("Код");
Т.НоваяКолонка("Наименование");
Т.НоваяКолонка("Группа");
Т.НоваяКолонка("Подразделение");
Т.НоваяКолонка("ДатаВ");
Т.НоваяКолонка("МОЛ");
Т.НоваяКолонка("ПСт");
Т.НоваяКолонка("Срок");
Т.НоваяКолонка("Ст");
Т.НоваяКолонка("Аморт");
Т.НоваяКолонка("Ост");
Т.НоваяКолонка("Счет");
Т.НоваяКолонка("Суб1");
Т.НоваяКолонка("Суб2");
Т.НоваяКолонка("Суб3");
Т.НоваяКолонка("АмГр");
Т.НоваяКолонка("Сост");


Ит.ВыбратьСубконто(ВидыСубконто.ОсновныеСредства);
Пока Ит.ПолучитьСубконто(ВидыСубконто.ОсновныеСредства) = 1 Цикл
Т.НоваяСтрока();
Т.Код = Ит.Субконто().Код;
Т.Наименование = Ит.Субконто().Наименование;
Т.Группа = Ит.Субконто().Группа;
Т.Подразделение = Ит.Субконто().Подразделение.Получить(Дата1);
Т.ДатаВ = Ит.Субконто().ДатаВводаВЭксплуатацию;
Т.МОЛ = Ит.Субконто().МОЛ.Получить(Дата1);
Т.ПСт = Ит.Субконто().ПервоначальнаяСтоимость.Получить(Дата1);
Т.Срок = Ит.Субконто().СрокПолезногоИспользования.Получить(Дата1);

Т.Ст = 0;
Т.Аморт = 0;
Если Ит.ПолучитьСчет(1,"01.1") = 1 Тогда
Т.Ст = Ит.СКД();
КонецЕсли;
Если Ит.ПолучитьСчет(1,"02.1") = 1 Тогда
Т.Аморт = Ит.СКК();
КонецЕсли;

Т.Ост = Т.Ст - Т.Аморт;

Если ПустоеЗначение(Ит.Субконто().СчетЗатрат.Получить(Дата1)) = 1 Тогда
Т.Счет = "---";
Иначе
Т.Счет = Ит.Субконто().СчетЗатрат.Получить(Дата1);
КонецЕсли;

Если (Т.Счет = СчетПоКоду("20")) или (Т.Счет = СчетПоКоду("25")) Тогда
Т.Суб1 = Ит.Субконто().Субконто1.Получить(Дата1);
Т.Суб2 = Ит.Субконто().Субконто2.Получить(Дата1);
Т.Суб3 = Ит.Субконто().Субконто3.Получить(Дата1);
ИначеЕсли  Т.Счет = СчетПоКоду("23") Тогда
Т.Суб1 = Ит.Субконто().Субконто2.Получить(Дата1);
Т.Суб2 = Ит.Субконто().Субконто1.Получить(Дата1);
Т.Суб3 = Ит.Субконто().Субконто3.Получить(Дата1);
ИначеЕсли  Т.Счет = СчетПоКоду("26") Тогда
Т.Суб1 = "---";
Т.Суб2 = Ит.Субконто().Субконто2.Получить(Дата1);
Т.Суб3 = Ит.Субконто().Субконто1.Получить(Дата1);
ИначеЕсли  Т.Счет = СчетПоКоду("79.2") Тогда
Т.Суб1 = "---";
Т.Суб2 = "---";
Т.Суб3 = Ит.Субконто().Субконто1.Получить(Дата1);
Иначе
Т.Суб1 = "---";
Т.Суб2 = "---";
Т.Суб3 = "---";
КонецЕсли;

Т.АмГр = Ит.Субконто().АмортизационнаяГруппа;
Т.Сост = Ит.Субконто().Состояние.Получить(Дата1);

КонецЦикла;


Т.ВыбратьСтроки();
Пока Т.ПолучитьСтроку() = 1 Цикл
Таб.ВывестиСекцию("Строка");
КонецЦикла;

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


Допустим, можно создать
ПерОс = СоздатьОбъект("Периодический");
Также нужно использовать методы ИспользоватьОбъект и ВыбратьЗначения. Но тут становится не понятно. Всё завязано в этом коде на БухгалтерскиеИтоги и всё берется оттуда. Не понимаю, каким образом можно использовать этот объект с его методами - не "ломая" ИТ. Или надо полностью весь код переписывать?

Herby

Цитата: Clight от 19 апр 2013, 03:17Также нужно использовать методы ИспользоватьОбъект и ВыбратьЗначения. Но тут становится не понятно. Всё завязано в этом коде на БухгалтерскиеИтоги и всё берется оттуда.

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

Цитировать
Не понимаю, каким образом можно использовать этот объект с его методами - не "ломая" ИТ. Или надо полностью весь код переписывать?

если вам нужна история значений реквизита "подразделение", то вот пример:


Пер = СоздатьОбъект("Периодический");
Пер.ИспользоватьОбъект("Подразделение", Ит.Субконто());
Пер.ВыбратьЗначения(дата1,дата2);
Пока Пер.ПолучитьЗначение() = 1 Цикл
    ДатаЗн = Пер.ДатаЗнач;
    Подразделение = Пер.Значение; // это ваши значения подразделений
КонецЦикла;


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

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

Clight

Цитата: Herby от 19 апр 2013, 09:23
Цитата: Clight от 19 апр 2013, 03:17Также нужно использовать методы ИспользоватьОбъект и ВыбратьЗначения. Но тут становится не понятно. Всё завязано в этом коде на БухгалтерскиеИтоги и всё берется оттуда.

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

Цитировать
Не понимаю, каким образом можно использовать этот объект с его методами - не "ломая" ИТ. Или надо полностью весь код переписывать?

если вам нужна история значений реквизита "подразделение", то вот пример:


Пер = СоздатьОбъект("Периодический");
Пер.ИспользоватьОбъект("Подразделение", Ит.Субконто());
Пер.ВыбратьЗначения(дата1,дата2);
Пока Пер.ПолучитьЗначение() = 1 Цикл
    ДатаЗн = Пер.ДатаЗнач;
    Подразделение = Пер.Значение; // это ваши значения подразделений
КонецЦикла;


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

может быть если вы скажете, что вам нужно увидеть в отчете, то это прояснит ситуацию.
Да, мне нужна история значений реквизита. Спасибо за пример, теперь есть от чего отталкиваться. В отчёте мне нужно увидеть значение всех реквизитов(точнее тех, которые указаны в коде) за конкретный период времени. А именно:
Т = СоздатьОбъект("ТаблицаЗначений");
Т.НоваяКолонка("Код");
Т.НоваяКолонка("Наименование");
Т.НоваяКолонка("Группа");
Т.НоваяКолонка("Подразделение");
Т.НоваяКолонка("ДатаВ");
Т.НоваяКолонка("МОЛ");
Т.НоваяКолонка("ПСт");
Т.НоваяКолонка("Срок");
Т.НоваяКолонка("Ст");
Т.НоваяКолонка("Аморт");
Т.НоваяКолонка("Ост");
Т.НоваяКолонка("Счет");
Т.НоваяКолонка("Суб1");
Т.НоваяКолонка("Суб2");
Т.НоваяКолонка("Суб3");
Т.НоваяКолонка("АмГр");
Т.НоваяКолонка("Сост")

Добавлено: 22 апр 2013, 04:02


Решил переписать код и подвязать всё на период, по аналогии с вашим примером. Получалось так:
Процедура Сформировать() 

Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Таб.ВывестиСекцию("Шапка");

Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Ит.ИспользоватьСубконто(ВидыСубконто.ОсновныеСредства);

Пер = СоздатьОбъект("Периодический");


//Если Дата(Дата1) > КонецРассчитанногоПериодаБИ() Тогда
// Предупреждение("За данный период бухгалтерские итоги не рассчитаны!");
// Возврат;
//КонецЕсли;

Если Ит.ВыполнитьЗапрос(Дата1,Дата2,"01.1,02.1") = 0 Тогда   
Предупреждение("Не удается выполнить запрос к бухгалтерским итогам!");
Возврат;
КонецЕсли;

Т = СоздатьОбъект("ТаблицаЗначений");
Т.НоваяКолонка("Код");
Т.НоваяКолонка("Наименование");
Т.НоваяКолонка("Группа");
Т.НоваяКолонка("Подразделение");
Т.НоваяКолонка("ДатаВ");
Т.НоваяКолонка("МОЛ");
Т.НоваяКолонка("ПСт");
Т.НоваяКолонка("Срок");
Т.НоваяКолонка("Ст");
Т.НоваяКолонка("Аморт");
Т.НоваяКолонка("Ост");
Т.НоваяКолонка("Счет");
Т.НоваяКолонка("Суб1");
Т.НоваяКолонка("Суб2");
Т.НоваяКолонка("Суб3");
Т.НоваяКолонка("АмГр");
Т.НоваяКолонка("Сост");


Ит.ВыбратьСубконто(ВидыСубконто.ОсновныеСредства);
Пока Ит.ПолучитьСубконто(ВидыСубконто.ОсновныеСредства) = 1 Цикл
   
//Т.НоваяСтрока();
//ОС = Ит.Субконто();
//Т.Код = ОС.Код;
//Т.Наименование = ОС.Наименование;
//Т.Группа = ОС.Группа;
//
// Т.Подразделение = Ит.Субконто().Подразделение.Получить(Дата1);
// Т.ДатаВ = Ит.Субконто().ДатаВводаВЭксплуатацию;
// Т.МОЛ = Ит.Субконто().МОЛ.Получить(Дата1);
// Т.ПСт = Ит.Субконто().ПервоначальнаяСтоимость.Получить(Дата1);
// Т.Срок = Ит.Субконто().СрокПолезногоИспользования.Получить(Дата1);
//
//Т.Ст = 0;
//Т.Аморт = 0;
//Если Ит.ПолучитьСчет(1,"01.1") = 1 Тогда
// Т.Ст = Ит.СКД();
//КонецЕсли;
//Если Ит.ПолучитьСчет(1,"02.1") = 1 Тогда
// Т.Аморт = Ит.СКК();
//КонецЕсли;
//
//Т.Ост = Т.Ст - Т.Аморт;
//
// Если ПустоеЗначение(Ит.Субконто().СчетЗатрат.Получить(Дата1)) = 1 Тогда
// Т.Счет = "---";
// Иначе
// Т.Счет = Ит.Субконто().СчетЗатрат.Получить(Дата1);
// КонецЕсли;
//
//Если (Т.Счет = СчетПоКоду("20")) или (Т.Счет = СчетПоКоду("25")) Тогда
// Т.Суб1 = Ит.Субконто().Субконто1.Получить(Дата1);
// Т.Суб2 = Ит.Субконто().Субконто2.Получить(Дата1);
// Т.Суб3 = Ит.Субконто().Субконто3.Получить(Дата1);
//ИначеЕсли  Т.Счет = СчетПоКоду("23") Тогда
// Т.Суб1 = Ит.Субконто().Субконто2.Получить(Дата1);
// Т.Суб2 = Ит.Субконто().Субконто1.Получить(Дата1);
// Т.Суб3 = Ит.Субконто().Субконто3.Получить(Дата1);
//ИначеЕсли  Т.Счет = СчетПоКоду("26") Тогда
// Т.Суб1 = "---";
// Т.Суб2 = Ит.Субконто().Субконто2.Получить(Дата1);
// Т.Суб3 = Ит.Субконто().Субконто1.Получить(Дата1);
//ИначеЕсли  Т.Счет = СчетПоКоду("79.2") Тогда
// Т.Суб1 = "---";
// Т.Суб2 = "---";
// Т.Суб3 = Ит.Субконто().Субконто1.Получить(Дата1);
//Иначе
// Т.Суб1 = "---";
// Т.Суб2 = "---";
// Т.Суб3 = "---";
//КонецЕсли;
//
//Т.АмГр = Ит.Субконто().АмортизационнаяГруппа;
//Т.Сост = Ит.Субконто().Состояние.Получить(Дата1);


Т.НоваяСтрока();
ОС = Ит.Субконто();
Т.Код = ОС.Код;
Т.Наименование = ОС.Наименование;
Т.Группа = ОС.Группа;

Пер.ИспользоватьОбъект("Подразделение", ОС);
     Пер.ВыбратьЗначения(Дата1,Дата2);
       Пока Пер.ПолучитьЗначение() = 1 Цикл
    ДатаЗн = Пер.ДатаЗнач;
    Т.Подразделение = Пер.Значение;
       КонецЦикла;
               

Т.ДатаВ = ОС.ДатаВводаВЭксплуатацию;

Пер.ИспользоватьОбъект("МОЛ", ОС);
     Пер.ВыбратьЗначения(Дата1,Дата2);
       Пока Пер.ПолучитьЗначение() = 1 Цикл
    ДатаЗн = Пер.ДатаЗнач;
    Т.МОЛ = Пер.Значение;
       КонецЦикла;
   
   
Пер.ИспользоватьОбъект("ПервоначальнаяСтоимость", ОС);
     Пер.ВыбратьЗначения(Дата1,Дата2);
       Пока Пер.ПолучитьЗначение() = 1 Цикл
    ДатаЗн = Пер.ДатаЗнач;
    Т.ПСт = Пер.Значение;
       КонецЦикла;


    Пер.ИспользоватьОбъект("СрокПолезногоИспользования", ОС);
     Пер.ВыбратьЗначения(Дата1,Дата2);
       Пока Пер.ПолучитьЗначение() = 1 Цикл
    ДатаЗн = Пер.ДатаЗнач;
    Т.Срок = Пер.Значение;
       КонецЦикла;


        Т.Ст = 0;
        Т.Аморт = 0;
Если Ит.ПолучитьСчет(1,"01.1") = 1 Тогда
Т.Ст = Ит.СКД();
КонецЕсли;
Если Ит.ПолучитьСчет(1,"02.1") = 1 Тогда
Т.Аморт = Ит.СКК();
КонецЕсли;

Т.Ост = Т.Ст - Т.Аморт;

   
   
Пер.ИспользоватьОбъект("СчетЗатрат", ОС);
     Пер.ВыбратьЗначения(Дата1,Дата2);
       Пока Пер.ПолучитьЗначение() = 1 Цикл
    ДатаЗн = Пер.ДатаЗнач;
Т.Счет = Пер.Значение;
Если ПустоеЗначение(Пер.Значение) = 1 Тогда
Т.Счет = "---";
       Иначе
     Т.Счет = Пер.Значение;
    КонецЕсли

       КонецЦикла;   
   
   
   
Пер.ИспользоватьОбъект("Субконто1", ОС);
Пер.ИспользоватьОбъект("Субконто2", ОС);
Пер.ИспользоватьОбъект("Субконто3", ОС);
     Пер.ВыбратьЗначения(Дата1,Дата2);
       Пока Пер.ПолучитьЗначение() = 1 Цикл
    ДатаЗн = Пер.ДатаЗнач;
Т.Суб1 = Пер.Значение;
Т.Суб2 = Пер.Значение;
Т.Суб3 = Пер.Значение;
Если (Т.Счет = СчетПоКоду("20")) или (Т.Счет = СчетПоКоду("25")) Тогда
  Т.Суб1 = Ит.Субконто().Субконто1.Получить(Дата1);
Т.Суб2 = Пер.Значение;;
Т.Суб3 = Пер.Значение;;
ИначеЕсли  Т.Счет = СчетПоКоду("23") Тогда
Т.Суб1 = Пер.Значение;;
Т.Суб2 = Пер.Значение;;
Т.Суб3 = Пер.Значение;;
ИначеЕсли  Т.Счет = СчетПоКоду("26") Тогда
Т.Суб1 = "---";
Т.Суб2 = Пер.Значение;;
Т.Суб3 = Пер.Значение;;
ИначеЕсли  Т.Счет = СчетПоКоду("79.2") Тогда
Т.Суб1 = "---";
Т.Суб2 = "---";
Т.Суб3 = Пер.Значение;;
Иначе
Т.Суб1 = "---";
Т.Суб2 = "---";
Т.Суб3 = "---";
КонецЕсли;
       КонецЦикла;   
   
Т.АмГр = ОС.АмортизационнаяГруппа;

Пер.ИспользоватьОбъект("Состояние", ОС);
     Пер.ВыбратьЗначения(Дата1,Дата2);
       Пока Пер.ПолучитьЗначение() = 1 Цикл
    ДатаЗн = Пер.ДатаЗнач;
    Т.Сост = Пер.Значение;
       КонецЦикла;

КонецЦикла;


Т.ВыбратьСтроки();
Пока Т.ПолучитьСтроку() = 1 Цикл
Таб.ВывестиСекцию("Строка");
КонецЦикла;

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


Процедура ПриОткрытии()
Дата1 = '01.01.13';
Дата2 = '01.04.13';
КонецПроцедуры


Чувствую, нагородил какую то хрень. Ошибок нет, но отчёт странный получается. Решил, чтобы было нагляднее, приложить скрины и вдобавок саму обработку(там можно посмотреть, как таблица построена). На скринах можно увидеть, что наименование повторяется, но инвентарный номер разный, что странно. Ещё странно, что где то берёт все значения субконто, а где вообще ничего. Чувствую, что уже близко решение:) Надеюсь на вашу помощь.

Herby

странный потому что у вас выводятся только последние значения из историй. Вы по всей истории пробегаетесь, но в вашу результирующую таблицу записывается только последнее значение цикла.

Clight

Цитата: Herby от 22 апр 2013, 13:12
странный потому что у вас выводятся только последние значения из историй. Вы по всей истории пробегаетесь, но в вашу результирующую таблицу записывается только последнее значение цикла.
Честно сказать, пока в голову ничего не приходит :dfbsdfbsdf:

Herby

Цитата: Clight от 23 апр 2013, 01:29Честно сказать, пока в голову ничего не приходит

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

вот пример:


Пер = СоздатьОбъект("Периодический");
Пер.ИспользоватьОбъект("Подразделение", Ит.Субконто());
Пер.ВыбратьЗначения(дата1,дата2);
Пока Пер.ПолучитьЗначение() = 1 Цикл
    ДатаЗн = Пер.ДатаЗнач;
    Подразделение = Пер.Значение;
    Таб.ВывестиСекцию("НазваниеВашейСекцииСПодразделениями"); // !!!!!!!!!!!!!!!!!!!!!!!!!
КонецЦикла;


Clight

Как я понимаю, вывод строк реализуется вот здесь:
Т.ВыбратьСтроки();
Пока Т.ПолучитьСтроку() = 1 Цикл
Таб.ВывестиСекцию("Строка");
КонецЦикла;

В старом коде логика вывода строк была проста - получаем значение на дату, и потом в конце выводим все строки всех субконто. Здесь, как я понимаю, нужно для каждого субконто сделать свой вывод строк?
Поэкспериментировал и вроде получилось:
Пер.ИспользоватьОбъект("Подразделение", ОС);
     Пер.ВыбратьЗначения(Дата1,Дата2);
       Пока Пер.ПолучитьЗначение() = 1 Цикл
    ДатаЗн = Пер.ДатаЗнач;
    Т.Подразделение = Пер.Значение;
Т.ВыбратьСтроки();
Если Т.ПолучитьСтроку() = 1 Тогда
Таб.ВывестиСекцию("Строка")
КонецЕсли;
       КонецЦикла;

Только теперь не понятно, как вывести не периодические субконто, то есть:
                ОС = Ит.Субконто();
Т.Код = ОС.Код;
Т.Наименование = ОС.Наименование;
Т.Группа = ОС.Группа;

И ещё я никак не могу понять, как в итоге это всё соотносится друг с другом. Например, как он соотносит Наименование с остальными субконто, если идёт тупо выборка. Как в итоге узнаётся, что данное основное средство было добавлено тогда то, и после этого включается в итоговую таблицу? Притом, что наименование не зависит от даты, в коде же это не указывается. Как то логика в голове не укладывается. Вроде кода мало, и уже 100500 раз смотрю на него, но до сих пор отдельные моменты не понятно. :xfbnsdfb:

Теги:

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

Рейтинг@Mail.ru

Поиск