8.х Обработка заполнения тч инвентаризации товаров

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем Margo, 19 дек 2013.

  1. TopicStarter Overlay
    Margo
    Offline

    Margo

    Регистрация:
    31 май 2010
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Привет всем! не могу сообразить как вытянуть настройки из документа Инвентаризация товаров на складе. там стоит отбор в условиях проведения инвентаризации номенклатура в группе, не могу понять как это задействовать. все настройки сохраняются в построитель отчета
    Код:
    Процедура Инициализировать(Объект, ИмяКнопки, Расшифровка,ПостроительОтчета) Экспорт
    Перем СпособЗаполненияЦен, ВалютаЦены, Номенклатура;
    Форма = ПолучитьФорму("Форма",Форма, Объект);
    
    ЗаполнитьНачальныеНастройки(ПостроительОтчета);
    КонецПроцедуры
    
    
    Процедура ЗаполнитьНачальныеНастройки(ПостроительОтчета) Экспорт
    Объект.УсловияПроведенияИнвентаризации.Получить(); 
    ПостроительОтчета.Текст =
    "ВЫБРАТЬ
    | ОстаткиТоваров.Номенклатура,
    | ОстаткиТоваров.ХарактеристикаНоменклатуры
    //| ОстаткиТоваров.Качество,
    | СУММА(ОстаткиТоваров.КоличествоОстаток) КАК Количество,
    | ВЫБОР
    |  КОГДА (СУММА(ОстаткиПартий.КоличествоОстаток) = 0)
    |    ИЛИ (СУММА(ОстаткиПартий.КоличествоОстаток) ЕСТЬ NULL) ТОГДА
    |   0
    |  ИНАЧЕ
    |   СУММА(ОстаткиПартий.СтоимостьОстаток)*СУММА(ОстаткиТоваров.КоличествоОстаток)
    |   / СУММА(ОстаткиПартий.КоличествоОстаток)
    | КОНЕЦ								  КАК Сумма
    |ИЗ
    | РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад)
    |КАК ОстаткиТоваров
    |
    |ЛЕВОЕ СОЕДИНЕНИЕ
    | РегистрНакопления.ПартииТоваровНаСкладах.Остатки(,
    |												   Склад = &ПартионныйСклад) КАК ОстаткиПартий
    |ПО
    | ОстаткиТоваров.Номенклатура = ОстаткиПартий.Номенклатура
    | И ОстаткиТоваров.ХарактеристикаНоменклатуры = ОстаткиПартий.ХарактеристикаНоменклатуры
    | И ОстаткиТоваров.Качество = ОстаткиПартий.Качество
    |
    |{ГДЕ ОстаткиТоваров.Номенклатура КАК Номенклатура,
    |	 ОстаткиТоваров.Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа}
    |
    |СГРУППИРОВАТЬ ПО
    | ОстаткиТоваров.Номенклатура,
    | ОстаткиТоваров.ХарактеристикаНоменклатуры";
    
    МассивОтбора = Новый Массив;
    МассивОтбора.Добавить("Номенклатура");
    МассивОтбора.Добавить("НоменклатурнаяГруппа");
    УправлениеОтчетами.ЗаполнитьОтбор(МассивОтбора, ПостроительОтчета);
    ЗаполнитьПоОстаткамНаСкладе(ПостроительОтчета,"")
    КонецПроцедуры
    
    Процедура ЗаполнитьПоОстаткамНаСкладе(ПостроительОтчета, ТолькоУчетные = Ложь) Экспорт
    мВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();
    Если РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(Объект.Дата).ВестиПартионныйУчетПоСкладам Тогда
    ВремСклад = Объект.Склад;
    Иначе
    ВремСклад = Справочники.Склады.ПустаяСсылка();
    КонецЕсли;
    ВалютаУпрУчета    = глЗначениеПеременной("ВалютаУправленческогоУчета");
    СтруктураКурса    = МодульВалютногоУчета.ПолучитьКурсВалюты(ВалютаУпрУчета, Объект.Дата);
    КурсУпрУчета	  = СтруктураКурса.Курс;
    КратностьУпрУчета = СтруктураКурса.Кратность;
    Если Объект.Склад.ВидСклада = Перечисления.ВидыСкладов.НТТ Тогда
    ПостроительОтчета.Текст =
    "ВЫБРАТЬ
    | ОстаткиТоваров.Номенклатура,
    | ОстаткиТоваров.ХарактеристикаНоменклатуры,"
    +?(Объект.УчитыватьСерии, "
    | ОстаткиТоваров.СерияНоменклатуры,", "") + "
    | ОстаткиТоваров.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаХранения,
    | ОстаткиТоваров.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК КоэффициентЕдиницыХранения,
    | ОстаткиТоваров.ЦенаВРознице,
    | ВЫБОР
    |  КОГДА (СУММА(ОстаткиПартий.КоличествоОстаток) = 0)
    |    ИЛИ (СУММА(ОстаткиПартий.КоличествоОстаток) ЕСТЬ NULL) ТОГДА
    |   0
    |  ИНАЧЕ
    |   СУММА(ОстаткиПартий.СтоимостьОстаток)*СУММА(ОстаткиТоваров.КоличествоОстаток)
    |   / СУММА(ОстаткиПартий.КоличествоОстаток)
    | КОНЕЦ								   КАК Сумма,
    | СУММА(ОстаткиТоваров.КоличествоОстаток) КАК Количество
    |ИЗ
    | РегистрНакопления.ТоварыВНТТ.Остатки(&МоментДокумента,
    |												    Склад = &Склад
    |//												  И ЦенаВРознице > 0
    |) КАК ОстаткиТоваров
    |ЛЕВОЕ СОЕДИНЕНИЕ
    | РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&МоментДокумента,
    |												   Склад = &ПартионныйСклад) КАК ОстаткиПартий
    |ПО
    | ОстаткиТоваров.Номенклатура = ОстаткиПартий.Номенклатура
    | И ОстаткиТоваров.ХарактеристикаНоменклатуры = ОстаткиПартий.ХарактеристикаНоменклатуры"
    +?(Объект.УчитыватьСерии, "
    | И (ОстаткиТоваров.СерияНоменклатуры		  = ОстаткиПартий.СерияНоменклатуры
    |  ИЛИ НЕ ОстаткиТоваров.Номенклатура.ВестиПартионныйУчетПоСериям)", "") + "
    |
    |{ГДЕ ОстаткиТоваров.Номенклатура КАК Номенклатура,
    |	 ОстаткиТоваров.Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа}
    |
    |СГРУППИРОВАТЬ ПО
    | ОстаткиТоваров.Номенклатура,
    | ОстаткиТоваров.ХарактеристикаНоменклатуры,"
    +?(Объект.УчитыватьСерии, "
    | ОстаткиТоваров.СерияНоменклатуры,", "") + "
    | ОстаткиТоваров.ЦенаВРознице";
    Иначе
    Если Объект.Склад.ВидСклада = Перечисления.ВидыСкладов.Оптовый Тогда
    РегОстатки = "ТоварыНаСкладах";
    Иначе
    РегОстатки = "ТоварыВРознице";
    КонецЕсли;
    
    ПостроительОтчета.Текст =
    "ВЫБРАТЬ
    | ОстаткиТоваров.Номенклатура,
    | ОстаткиТоваров.ХарактеристикаНоменклатуры,"
    +?(Объект.УчитыватьСерии, "
    | ОстаткиТоваров.СерияНоменклатуры,", "") + "
    | ОстаткиТоваров.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаХранения,
    | ОстаткиТоваров.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК КоэффициентЕдиницыХранения,
    | ОстаткиТоваров.Качество,
    | СУММА(ОстаткиТоваров.КоличествоОстаток) КАК Количество,
    | ВЫБОР
    |  КОГДА (СУММА(ОстаткиПартий.КоличествоОстаток) = 0)
    |    ИЛИ (СУММА(ОстаткиПартий.КоличествоОстаток) ЕСТЬ NULL) ТОГДА
    |   0
    |  ИНАЧЕ
    |   СУММА(ОстаткиПартий.СтоимостьОстаток)*СУММА(ОстаткиТоваров.КоличествоОстаток)
    |   / СУММА(ОстаткиПартий.КоличествоОстаток)
    | КОНЕЦ								  КАК Сумма
    |ИЗ
    | РегистрНакопления." + РегОстатки + ".Остатки(&МоментДокумента, Склад = &Склад)
    |КАК ОстаткиТоваров
    |
    |ЛЕВОЕ СОЕДИНЕНИЕ
    | РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&МоментДокумента,
    |												   Склад = &ПартионныйСклад) КАК ОстаткиПартий
    |ПО
    | ОстаткиТоваров.Номенклатура = ОстаткиПартий.Номенклатура
    | И ОстаткиТоваров.ХарактеристикаНоменклатуры = ОстаткиПартий.ХарактеристикаНоменклатуры"
    +?(Объект.УчитыватьСерии, "
    | И (ОстаткиТоваров.СерияНоменклатуры		  = ОстаткиПартий.СерияНоменклатуры
    |  ИЛИ НЕ ОстаткиТоваров.Номенклатура.ВестиПартионныйУчетПоСериям)", "") + "
    | И ОстаткиТоваров.Качество				   = ОстаткиПартий.Качество
    |
    |{ГДЕ ОстаткиТоваров.Номенклатура КАК Номенклатура,
    |	 ОстаткиТоваров.Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа}
    |
    |СГРУППИРОВАТЬ ПО
    | ОстаткиТоваров.Номенклатура,
    | ОстаткиТоваров.ХарактеристикаНоменклатуры,"
    +?(Объект.УчитыватьСерии, "
    | ОстаткиТоваров.СерияНоменклатуры,", "") + "
    | ОстаткиТоваров.Качество";
    КонецЕсли;
    Запрос = ПостроительОтчета.ПолучитьЗапрос();
    Запрос.УстановитьПараметр("Склад",		   Объект.Склад);
    Запрос.УстановитьПараметр("ПартионныйСклад", ВремСклад);
    //Если ЭтоНовый() Тогда
    Запрос.УстановитьПараметр("МоментДокумента", КонецДня(Объект.Дата));
    //Иначе
    // Запрос.УстановитьПараметр("МоментДокумента", МоментВремени());
    //КонецЕсли;
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
    Если Выборка.Количество = 0 Тогда
    Продолжить;
    КонецЕсли;
    СтрокаТабличнойЧасти = Объект.Товары.Добавить();
    СтрокаТабличнойЧасти.Номенклатура	 = Выборка.Номенклатура;
    СтрокаТабличнойЧасти.КоличествоУчет   = Выборка.Количество;
    СтрокаТабличнойЧасти.Количество	   = ?(Объект.ТолькоУчетные, 0, СтрокаТабличнойЧасти.КоличествоУчет);
    СтрокаТабличнойЧасти.ЕдиницаИзмерения = Выборка.ЕдиницаХранения;
    СтрокаТабличнойЧасти.Коэффициент	  = Выборка.КоэффициентЕдиницыХранения;
    СтрокаТабличнойЧасти.СуммаУчет	    = Выборка.Сумма;
    СтрокаТабличнойЧасти.Сумма		    = ?(Объект.ТолькоУчетные, 0, Выборка.Сумма);
    СтрокаТабличнойЧасти.Цена			 = СтрокаТабличнойЧасти.Сумма / СтрокаТабличнойЧасти.КоличествоУчет;
    Если Объект.Склад.ВидСклада = Перечисления.ВидыСкладов.НТТ Тогда
    СтрокаТабличнойЧасти.ЦенаВРознице = Выборка.ЦенаВРознице;
    Иначе
    СтрокаТабличнойЧасти.Качество	 = Выборка.Качество;
    КонецЕсли;
    СтрокаТабличнойЧасти.СуммаРегл	    = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(СтрокаТабличнойЧасти.Сумма, ВалютаУпрУчета,
    мВалютаРегламентированногоУчета, КурсУпрУчета, 1, КратностьУпрУчета, 1);
    СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры = Выборка.ХарактеристикаНоменклатуры;
    Если Объект.УчитыватьСерии Тогда
    СтрокаТабличнойЧасти.СерияНоменклатуры = Выборка.СерияНоменклатуры;
    КонецЕсли;
    КонецЦикла;
    
    КонецПроцедуры // ЗаполнитьПоОстаткамНаСкладе()
    
    ругается на Значение не является значением объектного типа (Текст)
    ПостроительОтчета.Текст =
    как задействовать построитель?
  2. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    отладчик вам в помощь, смотрите где валится, значение и тип переменной
  3. NcSteel
    Offline

    NcSteel Опытный в 1С

    Регистрация:
    29 окт 2013
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26
    В обработке/форме нужно добавить реквизит с именем ПостроительОтчета и соответствующим типом.

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