8.х Почему в запросе часть параметров выходит нулевой?

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем maritime, 6 июн 2011.

  1. TopicStarter Overlay
    maritime
    Offline

    maritime

    Регистрация:
    22 апр 2011
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    В результате запроса часть параметров по объекту при первом шаге цикла заполняется а часть присваиваются нули. Почему??? не могу понять что не так?
    Во втором круге цикла заполняется параметр БалансоваяСтоимостьОсновногоОС,а в третьем СуммаИЗносаОсновногоОС при этом Балансовая обнуляется.

    Код:
    Функция ПолучитьСрокСПИ(ОсновноеСредство, ОсновноеСредство_ОсновноеМодернизируемое, ДатаНачалаВеденияУчетаПоМСФОвНЕФАЗ, ДатаУстановкиОсновногоОС)
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ПериодКонец",ПериодКонец);
    
    Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |	Софт_ОсновныеСредстваМеждународныйУчетСрезПоследних.СчетУчета Как Ссылка
    |ИЗ
    |	РегистрСведений.Софт_ОсновныеСредстваМеждународныйУчет.СрезПоследних(&ПериодКонец, ) КАК Софт_ОсновныеСредстваМеждународныйУчетСрезПоследних
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    |	Софт_ОсновныеСредстваМеждународныйУчетСрезПоследних.СчетНачисленияАмортизации Как Ссылка
    |ИЗ
    |	РегистрСведений.Софт_ОсновныеСредстваМеждународныйУчет.СрезПоследних(&ПериодКонец, ) КАК Софт_ОсновныеСредстваМеждународныйУчетСрезПоследних";
    Результат = Запрос.ВыполнитьПакет();
    СчетаМСФО_01 = Результат[0].Выгрузить().ВыгрузитьКолонку("Ссылка");
    СчетаМСФО_02 = Результат[1].Выгрузить().ВыгрузитьКолонку("Ссылка");
    
    Состояние("Определение СПИ по доработкам");
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Счета01М",СчетаМСФО_01);
    Запрос.УстановитьПараметр("Счета02М",СчетаМСФО_02);
    Запрос.УстановитьПараметр("Период", Новый Граница(КонецДня(ПериодКонец),ВидГраницы.Включая));
    
    Запрос.УстановитьПараметр("ОсновноеСредство",ОсновноеСредство_ОсновноеМодернизируемое);
    Запрос.УстановитьПараметр("ПериодКонец",ПериодКонец);
    Запрос.УстановитьПараметр("Организация",Организация);
    Запрос.Текст = "ВЫБРАТЬ
    |	Софт_СвязанныеОсновныеСредстваСрезПоследних.ОсновноеСредство,
    |	Софт_СвязанныеОсновныеСредстваСрезПоследних.СвязанныеОсновныеСредства
    |ПОМЕСТИТЬ СвязанныеОС
    |ИЗ
    |	РегистрСведений.Софт_СвязанныеОсновныеСредства.СрезПоследних(&ПериодКонец, ОсновноеСредство = &ОсновноеСредство) КАК Софт_СвязанныеОсновныеСредстваСрезПоследних
    |ГДЕ
    |	Софт_СвязанныеОсновныеСредстваСрезПоследних.ВЭксплуатации = ИСТИНА
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |	Софт_ПараметрыАмортизацииОСМеждународныйУчетСрезПоследних.ОсновноеСредство,
    |	Софт_ПараметрыАмортизацииОСМеждународныйУчетСрезПоследних.СрокИспользованияДляВычисленияАмортизации,
    |	ВЫБОР
    |		КОГДА ХозрасчетныйОстатки.Счет В (&Счета02М)
    |			ТОГДА ХозрасчетныйОстатки.СуммаОстатокКт
    |		ИНАЧЕ 0
    |	КОНЕЦ КАК СуммаИзносаОсновногоОС,
    |	ВЫБОР
    |		КОГДА ХозрасчетныйОстатки.Счет В (&Счета01М)
    |			ТОГДА ХозрасчетныйОстатки.СуммаОстатокДт
    |		ИНАЧЕ 0
    |	КОНЕЦ КАК БалансоваяСтоимостьОсновногоОС
    |ПОМЕСТИТЬ СрокСПИ_ОсновногоОС
    |ИЗ
    |	РегистрБухгалтерии.Хозрасчетный.Остатки КАК ХозрасчетныйОстатки
    |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Софт_ПараметрыАмортизацииОСМеждународныйУчет.СрезПоследних(
    |				&ПериодКонец,
    |				Организация = &Организация
    |					И ОсновноеСредство = &ОсновноеСредство) КАК Софт_ПараметрыАмортизацииОСМеждународныйУчетСрезПоследних
    |		ПО ХозрасчетныйОстатки.Субконто1 = Софт_ПараметрыАмортизацииОСМеждународныйУчетСрезПоследних.ОсновноеСредство
    |ГДЕ
    |	ХозрасчетныйОстатки.Субконто1 = &ОсновноеСредство
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |	Софт_СостоянияОСМеждународныйУчет.ОсновноеСредство,
    |	Софт_СостоянияОСМеждународныйУчет.ДатаСостояния,
    |	Софт_ПараметрыАмортизацииОСМеждународныйУчетСрезПоследних.СрокИспользованияДляВычисленияАмортизации,
    |	ВЫБОР
    |		КОГДА ХозрасчетныйОстатки.Счет В (&Счета02М)
    |			ТОГДА ХозрасчетныйОстатки.СуммаОстатокКт
    |		ИНАЧЕ 0
    |	КОНЕЦ КАК СуммаИзносаДоработки,
    |	ВЫБОР
    |		КОГДА ХозрасчетныйОстатки.Счет В (&Счета01М)
    |			ТОГДА ХозрасчетныйОстатки.СуммаОстатокДт
    |		ИНАЧЕ 0
    |	КОНЕЦ КАК БалансоваяСтоимостьДоработки
    |ПОМЕСТИТЬ СвязанныеОС_СДатойПринятияКУчету
    |ИЗ
    |	РегистрСведений.Софт_СостоянияОСМеждународныйУчет КАК Софт_СостоянияОСМеждународныйУчет
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Софт_ПараметрыАмортизацииОСМеждународныйУчет.СрезПоследних(
    |				&ПериодКонец,
    |				Организация = &Организация
    |					И ОсновноеСредство В
    |						(ВЫБРАТЬ
    |							СвязанныеОС.СвязанныеОсновныеСредства
    |						ИЗ
    |							СвязанныеОС КАК СвязанныеОС)) КАК Софт_ПараметрыАмортизацииОСМеждународныйУчетСрезПоследних
    |			ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки КАК ХозрасчетныйОстатки
    |			ПО (ХозрасчетныйОстатки.Субконто1 = Софт_ПараметрыАмортизацииОСМеждународныйУчетСрезПоследних.ОсновноеСредство)
    |		ПО Софт_СостоянияОСМеждународныйУчет.ОсновноеСредство = Софт_ПараметрыАмортизацииОСМеждународныйУчетСрезПоследних.ОсновноеСредство
    |ГДЕ
    |	Софт_СостоянияОСМеждународныйУчет.Организация = &Организация
    |	И Софт_СостоянияОСМеждународныйУчет.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияОС.ПринятоКУчету)
    |	И Софт_СостоянияОСМеждународныйУчет.ОсновноеСредство В
    |			(ВЫБРАТЬ
    |				СвязанныеОС.СвязанныеОсновныеСредства
    |			ИЗ
    |				СвязанныеОС КАК СвязанныеОС)
    |	И ХозрасчетныйОстатки.Субконто1 В
    |			(ВЫБРАТЬ
    |				СвязанныеОС.СвязанныеОсновныеСредства
    |			ИЗ
    |				СвязанныеОС КАК СвязанныеОС)
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |	Софт_СостоянияОСМеждународныйУчет.ОсновноеСредство,
    |	Софт_СостоянияОСМеждународныйУчет.ДатаСостояния,
    |	ВЫБОР
    |		КОГДА ХозрасчетныйОстатки.Счет В (&Счета01М)
    |			ТОГДА ХозрасчетныйОстатки.СуммаОстатокДт
    |		ИНАЧЕ 0
    |	КОНЕЦ КАК БалансоваяСтоимостьОсновоногоОС,
    |	ВЫБОР
    |		КОГДА ХозрасчетныйОстатки.Счет В (&Счета02М)
    |			ТОГДА ХозрасчетныйОстатки.СуммаОстатокКт
    |		ИНАЧЕ 0
    |	КОНЕЦ КАК СуммаИзносаОсновногоОС
    |ПОМЕСТИТЬ ОсновноеОС_СДатойПринятияКУчету
    |ИЗ
    |	РегистрСведений.Софт_СостоянияОСМеждународныйУчет КАК Софт_СостоянияОСМеждународныйУчет
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки КАК ХозрасчетныйОстатки
    |		ПО (ХозрасчетныйОстатки.Субконто1 = Софт_СостоянияОСМеждународныйУчет.ОсновноеСредство)
    |ГДЕ
    |	Софт_СостоянияОСМеждународныйУчет.Организация = &Организация
    |	И Софт_СостоянияОСМеждународныйУчет.ОсновноеСредство = &ОсновноеСредство
    |	И Софт_СостоянияОСМеждународныйУчет.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияОС.ПринятоКУчету)
    |	И ХозрасчетныйОстатки.Субконто1 = &ОсновноеСредство
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |	СрокСПИ_ОсновногоОС.ОсновноеСредство КАК ОсновноеОС,
    |	СрокСПИ_ОсновногоОС.СрокИспользованияДляВычисленияАмортизации КАК СПИ_ОсновгоОС,
    |	ОсновноеОС_СДатойПринятияКУчету.ДатаСостояния КАК ДатаПринятияКУчетуОсновногоОС,
    |	СрокСПИ_ОсновногоОС.БалансоваяСтоимостьОсновногоОС,
    |	СрокСПИ_ОсновногоОС.СуммаИзносаОсновногоОС,
    |	СвязанныеОС_СДатойПринятияКУчету.ОсновноеСредство КАК СвязанноеОС,
    |	СвязанныеОС_СДатойПринятияКУчету.ДатаСостояния КАК ДатаПринятияКУчетуСвязанногоОС,
    |	СвязанныеОС_СДатойПринятияКУчету.БалансоваяСтоимостьДоработки,
    |	СвязанныеОС_СДатойПринятияКУчету.СуммаИзносаДоработки,
    |	СвязанныеОС_СДатойПринятияКУчету.СрокИспользованияДляВычисленияАмортизации КАК СПИ_СвязанногоОС
    |ИЗ
    |	СрокСПИ_ОсновногоОС КАК СрокСПИ_ОсновногоОС
    |		ЛЕВОЕ СОЕДИНЕНИЕ СвязанныеОС_СДатойПринятияКУчету КАК СвязанныеОС_СДатойПринятияКУчету
    |		ПО (ИСТИНА)
    |		ЛЕВОЕ СОЕДИНЕНИЕ ОсновноеОС_СДатойПринятияКУчету КАК ОсновноеОС_СДатойПринятияКУчету
    |		ПО СрокСПИ_ОсновногоОС.ОсновноеСредство = ОсновноеОС_СДатойПринятияКУчету.ОсновноеСредство
    |
    |СГРУППИРОВАТЬ ПО
    |	СвязанныеОС_СДатойПринятияКУчету.ОсновноеСредство,
    |	СрокСПИ_ОсновногоОС.ОсновноеСредство,
    |	СрокСПИ_ОсновногоОС.СрокИспользованияДляВычисленияАмортизации,
    |	СвязанныеОС_СДатойПринятияКУчету.ДатаСостояния,
    |	СвязанныеОС_СДатойПринятияКУчету.БалансоваяСтоимостьДоработки,
    |	СвязанныеОС_СДатойПринятияКУчету.СуммаИзносаДоработки,
    |	СвязанныеОС_СДатойПринятияКУчету.СрокИспользованияДляВычисленияАмортизации,
    |	ОсновноеОС_СДатойПринятияКУчету.ДатаСостояния,
    |    СрокСПИ_ОсновногоОС.БалансоваяСтоимостьОсновногоОС,
    |	СрокСПИ_ОсновногоОС.СуммаИзносаОсновногоОС
    |";
    СрокСПИ = 0;
    КоличествоОС_Основных = 0;
    
    Выборка = Запрос.Выполнить().Выбрать();   //ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока Выборка.Следующий() Цикл
    
    Если СрокСПИ = 0 Тогда
    СрокСПИ = СрокСПИ + Выборка.СПИ_ОсновгоОС;
    КоличествоОС_Основных = КоличествоОС_Основных + 1;
    КонецЕсли;
    
    
    Если Выборка.ДатаПринятияКУчетуСвязанногоОС = ДатаНачалаВеденияУчетаПоМСФОвНЕФАЗ и ЗначениеЗаполнено(ДатаНачалаВеденияУчетаПоМСФОвНЕФАЗ) Тогда
    СрокСПИ = СрокСПИ + Выборка.СПИ_СвязанногоОС;
    КоличествоОС_Основных = КоличествоОС_Основных + 1;
    КонецЕсли;
    
    Если Выборка.БалансоваяСтоимостьОсновоногоОС=Выборка.СуммаИзносаОсновногоОС Тогда
    ИзносСвязанногоОС=0;
    ВыборкаПоДоработкам = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Если ИзносСвязанногоОС=0 Тогда
    Пока ВыборкаПоДоработкам.Следующий() Цикл
    ИзносСвязанногоОС=ВыборкаПоДоработкам.БалансоваяСтоимостьДоработки-ВыборкаПоДоработкам.СуммаИзносаДоработки;
    КонецЦикла;	
    Иначе 
    Если ДатаУстановкиОсновногоОС = "" Тогда
    ДатаУстановкиОсновногоОС = Выборка.ДатаПринятияКУчетуСвязанногоОС;
    КонецЕсли;
    КонецЕсли;
    Иначе 	
    Если ДатаУстановкиОсновногоОС = "" Тогда
    ДатаУстановкиОсновногоОС = Выборка.ДатаПринятияКУчетуОсновногоОС;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    
    Возврат ?(КоличествоОС_Основных = 0, 0,Окр( СрокСПИ / КоличествоОС_Основных,0,0));
    
    КонецФункции
    

    Вложения:

  2. sgirg
    Offline

    sgirg Опытный в 1С

    Регистрация:
    25 дек 2008
    Сообщения:
    126
    Симпатии:
    0
    Баллы:
    26
    Без тестирования самолично сказать причину не могу, но факт того, что запрос очень небрежный, виден сразу!
    Во втором пакете второго запроса при выборе данных из регистра бухгалтерии Хозрасчетный.Остатки нужно тоже опираться на дату и организацию.
    что то вроде:
    РегистрБухгалтерии.Хозрасчетный.Остатки(&ПериодКонец, , , Организация = &Организация) КАК ХозрасчетныйОстатки
  3. sgirg
    Offline

    sgirg Опытный в 1С

    Регистрация:
    25 дек 2008
    Сообщения:
    126
    Симпатии:
    0
    Баллы:
    26
    Код:
    "
    |ВЫБРАТЬ
    |    Софт_ПараметрыАмортизацииОСМеждународныйУчетСрезПоследних.ОсновноеСредство,
    |    Софт_ПараметрыАмортизацииОСМеждународныйУчетСрезПоследних.СрокИспользованияДляВычисленияАмортизации,
    |    ВЫБОР
    |        КОГДА ХозрасчетныйОстатки.Счет В (&Счета02М)
    |            ТОГДА ХозрасчетныйОстатки.СуммаОстатокКт
    |        ИНАЧЕ 0
    |    КОНЕЦ КАК СуммаИзносаОсновногоОС,
    |    ВЫБОР
    |        КОГДА ХозрасчетныйОстатки.Счет В (&Счета01М)
    |            ТОГДА ХозрасчетныйОстатки.СуммаОстатокДт
    |        ИНАЧЕ 0
    |    КОНЕЦ КАК БалансоваяСтоимостьОсновногоОС
    |ПОМЕСТИТЬ СрокСПИ_ОсновногоОС
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.Остатки КАК ХозрасчетныйОстатки
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Софт_ПараметрыАмортизацииОСМеждународныйУчет.СрезПоследних(
    |                &ПериодКонец,
    |                Организация = &Организация
    |                    И ОсновноеСредство = &ОсновноеСредство) КАК Софт_ПараметрыАмортизацииОСМеждународныйУчетСрезПоследних
    |        ПО ХозрасчетныйОстатки.Субконто1 = Софт_ПараметрыАмортизацииОСМеждународныйУчетСрезПоследних.ОсновноеСредство
    |ГДЕ
    |    ХозрасчетныйОстатки.Субконто1 = &ОсновноеСредство"
    
    

    Как можно пытаться с помощью этого пакета запроса в одну строку выудить и балансовую стоимость и амортизацию? результатом будет либо амортизация либо балансовая стоимость
    И в последнем пакете запроса вы уже по идее получаете две строки с одним ОС

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