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

Не могу рассчитать временные итоги после ТА!

Автор Iven, 11 авг 2010, 16:43

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

Iven

Имеется отчет - оборот товара с возможностью выбора периода времени
Выдает сегодня ошибку, указанную в теме, если указать дату формирования отчета по 10 или по 11(сегодняшнее) нынешнего месяца.

РассчитатьРегистрыНа(начДата);
нс=0;
СпрТ.ВыбратьЭлементы();
Пока СпрТ.ПолучитьЭлемент() = 1 Цикл
Если ВыбТовары.Принадлежит(СпрТ.ТекущийЭлемент())=1 Тогда
Если СпрТ.ЭтоГруппа()=1 Тогда
    продолжить;
КонецЕсли;
ост = Рег.СводныйОстаток(Константа.ОсновнаяФирма, Спрт.ТекущийЭлемент(), , "ОстатокТовара");                       
нс=нс+1;
ТЗ.НоваяСтрока(нс);
ТЗ.УстановитьЗначение(нс,1,Спрт.ТекущийЭлемент());
ТЗ.УстановитьЗначение(нс,2,ост);
ТЗ.УстановитьЗначение(нс,3,0); 
ТЗ.УстановитьЗначение(нс,4,0);
ТЗ.УстановитьЗначение(нс,5,0); 
ТЗ.УстановитьЗначение(нс,6,СпрТ.Родитель);         
// Сообщить(СокрЛП(СпрТ.ТекущийЭлемент()) + "  " + ост);
КонецЕсли;
КонецЦикла;
   

РассчитатьРегистрыПо(конДата);

СпрТ.ВыбратьЭлементы();
Пока СпрТ.ПолучитьЭлемент() = 1 Цикл
Если ВыбТовары.Принадлежит(СпрТ.ТекущийЭлемент())=1 Тогда
Если СпрТ.ЭтоГруппа()=1 Тогда
    продолжить;
КонецЕсли;
ост = Рег.СводныйОстаток(Константа.ОсновнаяФирма, Спрт.ТекущийЭлемент(), , "ОстатокТовара");                       
нс=нс+1;
ТЗ.НоваяСтрока(нс);
ТЗ.УстановитьЗначение(нс,1,Спрт.ТекущийЭлемент());
ТЗ.УстановитьЗначение(нс,2,0); 
ТЗ.УстановитьЗначение(нс,3,0);
ТЗ.УстановитьЗначение(нс,4,0);
ТЗ.УстановитьЗначение(нс,5,ост);
ТЗ.УстановитьЗначение(нс,6,СпрТ.Родитель);         
// Сообщить(СокрЛП(СпрТ.ТекущийЭлемент()) + "  " + ост);
КонецЕсли;
КонецЦикла;


К сожалению, с 1с только знакомлюсь.
По сему прошу помочь и ответить как чайнику.

DDD

После ТА и нельзя получить. Если просто раздражает эта ошибка, когда пользователь задает дату после ТА, то поставьте в код проверку на ТА (используя ПолучитьДатуТА() ) и программа сама скорректирует дату до максимально возможной.

Iven

понятно что после та никто и не пытается - пытаются за сегодня и за вчера
как сделать чтобы можно было применять вчерашнюю и сегодняшнюю даты ?

ПолучитьДатуТА() - будет сегодняшняя ?

тогда проверка что-то вроде

Если конДата > ПолучитьДатуТА() Тогда
конДата = ПолучитьДатуТА()

что-то вроде ?


Процедура Сформировать() 
СпрТ = СоздатьОбъект("Справочник.Номенклатура");
ДокР = СоздатьОБъект("Документ.РасходнаяНакладная");
ДокП = СоздатьОБъект("Документ.ПриходнаяНакладная");
ТЗ = СоздатьОБъект("ТаблицаЗначений");
ТЗ.КоличествоКолонок(6);
Таб = СоздатьОБъект("Таблица");
Рег = СоздатьОбъект("Регистр.ОстаткиТоваров");   
Рег.ВременныйРасчет(1); 

Если ПустоеЗначение(начДата) = 1 Тогда
        Предупреждение("НЕ указана дата начала отчета !", 30);
        Возврат;
    ИначеЕсли начДата > конДата Тогда
        Предупреждение("Дата начала отчета больше чем дата окончания !", 30);
        Возврат;
    ИначеЕсли конДата > ПолучитьДатуТА() Тогда
        конДата = ПолучитьДатуТА();
    КонецЕсли;

РассчитатьРегистрыНа(начДата);
нс=0;
СпрТ.ВыбратьЭлементы();
Пока СпрТ.ПолучитьЭлемент() = 1 Цикл
Если ВыбТовары.Принадлежит(СпрТ.ТекущийЭлемент())=1 Тогда
Если СпрТ.ЭтоГруппа()=1 Тогда
    продолжить;
КонецЕсли;
ост = Рег.СводныйОстаток(Константа.ОсновнаяФирма, Спрт.ТекущийЭлемент(), , "ОстатокТовара");                       
нс=нс+1;
ТЗ.НоваяСтрока(нс);
ТЗ.УстановитьЗначение(нс,1,Спрт.ТекущийЭлемент());
ТЗ.УстановитьЗначение(нс,2,ост);
ТЗ.УстановитьЗначение(нс,3,0); 
ТЗ.УстановитьЗначение(нс,4,0);
ТЗ.УстановитьЗначение(нс,5,0); 
ТЗ.УстановитьЗначение(нс,6,СпрТ.Родитель);         
// Сообщить(СокрЛП(СпрТ.ТекущийЭлемент()) + "  " + ост);
КонецЕсли;
КонецЦикла;
   

РассчитатьРегистрыПо(конДата);

СпрТ.ВыбратьЭлементы();
Пока СпрТ.ПолучитьЭлемент() = 1 Цикл
Если ВыбТовары.Принадлежит(СпрТ.ТекущийЭлемент())=1 Тогда
Если СпрТ.ЭтоГруппа()=1 Тогда
    продолжить;
КонецЕсли;
ост = Рег.СводныйОстаток(Константа.ОсновнаяФирма, Спрт.ТекущийЭлемент(), , "ОстатокТовара");                       
нс=нс+1;
ТЗ.НоваяСтрока(нс);
ТЗ.УстановитьЗначение(нс,1,Спрт.ТекущийЭлемент());
ТЗ.УстановитьЗначение(нс,2,0); 
ТЗ.УстановитьЗначение(нс,3,0);
ТЗ.УстановитьЗначение(нс,4,0);
ТЗ.УстановитьЗначение(нс,5,ост);
ТЗ.УстановитьЗначение(нс,6,СпрТ.Родитель);         
// Сообщить(СокрЛП(СпрТ.ТекущийЭлемент()) + "  " + ост);
КонецЕсли;
КонецЦикла;


этот самопал не хочет всеравно работать

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

просил же - для чайника ответ )

вот почему оно не хочет за 10 число делать ? и почему нельзя по сегодняшнее 11 число ? почему ПолучитьДатуТА() равна 10 числу ?

DDD

А у вас чему вообще ТА равна? 10? Зайдите монопольно и посмотрите в Операции - Управление оперативными итогами И поменяйте там. Можно установить равной концу текущего месяца.

Iven

c проблемой вчерашнего дня разобрались - действительно провтыкал этот момент - там стояло 10 а не 11 число
теперь за 10 число считает
а как сделать так чтобы считало за сегодняшнее 11 число ? если я его указываю то продолжает выкидывать ошибку


Iven

а можно пару слов о самих Управление оперативными итогами ?
там если ставить дату выше установленной выскакивают две колонки - по привычке все галочки я там конечно же ставлю ) - вот если бы кто еще объяснил что это такое и надо ли там ставить эти самые галочки ?

если я там выставлю 12 число то полагаю за сегодняшнее 11 отчет будет формироваться, но это по идее не верное решение - нужно понять почему не формируется отчет по дате ПолучитьДатуТА()

Теги:

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

Рейтинг@Mail.ru

Поиск