1 — 18.01.16 — 22:12
А вот сама ОсновнаяСхемаКомпоновкиДанных
ВЫБРАТЬ РАЗЛИЧНЫЕ
Сегменты.Номенклатура,
Сегменты.Характеристика,
ИСТИНА КАК ИспользуетсяОтборПоСегментуНоменклатуры
ПОМЕСТИТЬ ОтборПоСегментуНоменклатуры
ИЗ
РегистрСведений.НоменклатураСегмента КАК Сегменты
{ГДЕ
Сегменты.Сегмент.* КАК СегментНоменклатуры,
Сегменты.Номенклатура.* КАК Номенклатура,
Сегменты.Характеристика.* КАК Характеристика}
ИНДЕКСИРОВАТЬ ПО
Сегменты.Номенклатура,
Сегменты.Характеристика,
ИспользуетсяОтборПоСегментуНоменклатуры
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ТоварыНаСкладах.ПериодСекунда КАК Период,
ТоварыНаСкладах.Регистратор КАК Регистратор,
ТоварыНаСкладах.Номенклатура КАК Номенклатура,
ТоварыНаСкладах.Характеристика КАК Характеристика,
ТоварыНаСкладах.Склад КАК Склад,
ТоварыНаСкладах.Помещение КАК Помещение,
ТоварыНаСкладах.ВНаличииНачальныйОстаток КАК КоличествоНачальныйОстаток,
ТоварыНаСкладах.ВНаличииПриход КАК КоличествоПриход,
ТоварыНаСкладах.ВНаличииРасход КАК КоличествоРасход,
ТоварыНаСкладах.ВНаличииКонечныйОстаток КАК КоличествоКонечныйОстаток
ПОМЕСТИТЬ ОстаткиИОбороты
ИЗ
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , Авто, , {(Номенклатура).* КАК Номенклатура, (Характеристика).* КАК Характеристика, (Склад).* КАК Склад, ((Номенклатура, Характеристика) В
(ВЫБРАТЬ
ОтборПоСегментуНоменклатуры.Номенклатура,
ОтборПоСегментуНоменклатуры.Характеристика
ИЗ
ОтборПоСегментуНоменклатуры
ГДЕ
ОтборПоСегментуНоменклатуры.ИспользуетсяОтборПоСегментуНоменклатуры = &ИспользуетсяОтборПоСегментуНоменклатуры))}) КАК ТоварыНаСкладах
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ТаблицаЦен.Период КАК Период,
ТаблицаЦен.Регистратор КАК Регистратор,
ТаблицаЦен.Номенклатура КАК Номенклатура,
ТаблицаЦен.Характеристика КАК Характеристика,
ВЫБОР
КОГДА ЦеныНоменклатурыА.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
ИЛИ ЕСТЬNULL(ЦеныНоменклатурыА.Упаковка.Знаменатель, 0) = 0
ТОГДА ЦеныНоменклатурыА.Цена
ИНАЧЕ ЦеныНоменклатурыА.Цена / ЦеныНоменклатурыА.Упаковка.Знаменатель
КОНЕЦ КАК Цена,
ВЫБОР
КОГДА ЦеныНоменклатурыБ.Цена ЕСТЬ NULL
ТОГДА 0
КОГДА ЦеныНоменклатурыБ.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
ИЛИ ЕСТЬNULL(ЦеныНоменклатурыБ.Упаковка.Знаменатель, 0) = 0
ТОГДА ЦеныНоменклатурыБ.Цена
ИНАЧЕ ЦеныНоменклатурыБ.Цена / ЦеныНоменклатурыБ.Упаковка.Знаменатель
КОНЕЦ КАК СтараяЦена,
ВЫБОР
КОГДА ЦеныНоменклатурыА.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
ИЛИ ЕСТЬNULL(ЦеныНоменклатурыА.Упаковка.Знаменатель, 0) = 0
ТОГДА ЦеныНоменклатурыА.Цена
ИНАЧЕ ЦеныНоменклатурыА.Цена / ЦеныНоменклатурыА.Упаковка.Знаменатель
КОНЕЦ — ВЫБОР
КОГДА ЦеныНоменклатурыБ.Цена ЕСТЬ NULL
ТОГДА 0
КОГДА ЦеныНоменклатурыБ.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
ИЛИ ЕСТЬNULL(ЦеныНоменклатурыБ.Упаковка.Знаменатель, 0) = 0
ТОГДА ЦеныНоменклатурыБ.Цена
ИНАЧЕ ЦеныНоменклатурыБ.Цена / ЦеныНоменклатурыБ.Упаковка.Знаменатель
КОНЕЦ КАК Дельта
ПОМЕСТИТЬ ИзмененияЦен
ИЗ
(ВЫБРАТЬ
МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период,
МАКСИМУМ(ЦеныДоИзменения.Период) КАК ДатаПрошлогоИзменения,
ЦеныНоменклатуры.Регистратор КАК Регистратор,
ЦеныНоменклатуры.ВидЦены КАК ВидЦены,
ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
ЦеныНоменклатуры.Характеристика КАК Характеристика
ИЗ
РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныДоИзменения
ПО ЦеныНоменклатуры.Период > ЦеныДоИзменения.Период
И ЦеныНоменклатуры.Номенклатура = ЦеныДоИзменения.Номенклатура
И ЦеныНоменклатуры.Характеристика = ЦеныДоИзменения.Характеристика
И (&ВидЦены = ЦеныДоИзменения.ВидЦены)
ГДЕ
ЦеныНоменклатуры.ВидЦены = &ВидЦены
{ГДЕ
(ЦеныНоменклатуры.Период <= &КонецПериода),
ЦеныНоменклатуры.Номенклатура.* КАК Номенклатура,
ЦеныНоменклатуры.Характеристика.* КАК Характеристика}
СГРУППИРОВАТЬ ПО
ЦеныНоменклатуры.Регистратор,
ЦеныНоменклатуры.ВидЦены,
ЦеныНоменклатуры.Номенклатура,
ЦеныНоменклатуры.Характеристика) КАК ТаблицаЦен
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатурыА
ПО ТаблицаЦен.Период = ЦеныНоменклатурыА.Период
И ТаблицаЦен.Номенклатура = ЦеныНоменклатурыА.Номенклатура
И ТаблицаЦен.Характеристика = ЦеныНоменклатурыА.Характеристика
И ТаблицаЦен.ВидЦены = ЦеныНоменклатурыА.ВидЦены
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатурыБ
ПО ТаблицаЦен.ДатаПрошлогоИзменения = ЦеныНоменклатурыБ.Период
И ТаблицаЦен.Номенклатура = ЦеныНоменклатурыБ.Номенклатура
И ТаблицаЦен.Характеристика = ЦеныНоменклатурыБ.Характеристика
И ТаблицаЦен.ВидЦены = ЦеныНоменклатурыБ.ВидЦены
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ИзмененияЦен.Период КАК Период,
ИзмененияЦен.Регистратор КАК Регистратор,
ИзмененияЦен.Дельта КАК Дельта,
ИзмененияЦен.Цена КАК Цена,
ИзмененияЦен.СтараяЦена КАК СтараяЦена,
ИзмененияЦен.Номенклатура КАК Номенклатура,
ИзмененияЦен.Характеристика КАК Характеристика,
ТоварыОрганизацийОстаткиИОбороты.Склад КАК Склад,
ТоварыОрганизацийОстаткиИОбороты.Помещение КАК Помещение,
МАКСИМУМ(ТоварыОрганизацийОстаткиИОбороты.Период) КАК ПериодМаксимум
ПОМЕСТИТЬ БлижайшиеОстаткиПоНоменклатуреПодготовка
ИЗ
ИзмененияЦен КАК ИзмененияЦен
ЛЕВОЕ СОЕДИНЕНИЕ ОстаткиИОбороты КАК ТоварыОрганизацийОстаткиИОбороты
ПО ИзмененияЦен.Период > ТоварыОрганизацийОстаткиИОбороты.Период
И ИзмененияЦен.Номенклатура = ТоварыОрганизацийОстаткиИОбороты.Номенклатура
И ИзмененияЦен.Характеристика = ТоварыОрганизацийОстаткиИОбороты.Характеристика
{ГДЕ
ИзмененияЦен.Номенклатура.* КАК Номенклатура,
ИзмененияЦен.Характеристика.* КАК Характеристика}
СГРУППИРОВАТЬ ПО
ИзмененияЦен.Период,
ИзмененияЦен.Регистратор,
ИзмененияЦен.Дельта,
ИзмененияЦен.Цена,
ИзмененияЦен.СтараяЦена,
ИзмененияЦен.Номенклатура,
ТоварыОрганизацийОстаткиИОбороты.Склад,
ТоварыОрганизацийОстаткиИОбороты.Помещение,
ИзмененияЦен.Характеристика
ИМЕЮЩИЕ
НЕ МАКСИМУМ(ТоварыОрганизацийОстаткиИОбороты.Период) ЕСТЬ NULL
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
МАКСИМУМ(Т.Регистратор) КАК Регистратор,
Т.Период,
Т.Номенклатура,
Т.Характеристика,
Т.Склад,
Т.Помещение
ПОМЕСТИТЬ РегистраторМаксимумПоПериоду
ИЗ
ОстаткиИОбороты КАК Т
ГДЕ
(Т.Период, Т.Номенклатура, Т.Характеристика, Т.Склад, Т.Помещение) В
(ВЫБРАТЬ
Т.ПериодМаксимум,
Т.Номенклатура,
Т.Характеристика,
Т.Склад,
Т.Помещение
ИЗ
БлижайшиеОстаткиПоНоменклатуреПодготовка КАК Т)
СГРУППИРОВАТЬ ПО
Т.Период,
Т.Номенклатура,
Т.Характеристика,
Т.Склад,
Т.Помещение
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Т.Период,
Т.Регистратор,
Т.Дельта,
Т.Цена,
Т.СтараяЦена,
Т.Номенклатура,
Т.Характеристика,
Т.Склад,
Т.Помещение,
Т.ПериодМаксимум,
РегистраторМаксимумПоПериоду.Регистратор КАК РегистраторМаксимум
ПОМЕСТИТЬ БлижайшиеОстаткиПоНоменклатуре
ИЗ
БлижайшиеОстаткиПоНоменклатуреПодготовка КАК Т
ЛЕВОЕ СОЕДИНЕНИЕ РегистраторМаксимумПоПериоду КАК РегистраторМаксимумПоПериоду
ПО (РегистраторМаксимумПоПериоду.Номенклатура = Т.Номенклатура)
И (РегистраторМаксимумПоПериоду.Характеристика = Т.Характеристика)
И (РегистраторМаксимумПоПериоду.Склад = Т.Склад)
И (РегистраторМаксимумПоПериоду.Помещение = Т.Помещение)
И (РегистраторМаксимумПоПериоду.Период = Т.ПериодМаксимум)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВидыЦен.ВалютаЦены КАК Валюта,
ТаблицаТоварыНаСкладахМаксимальныйПериод.ПериодДвижения КАК ПериодСекунда,
НАЧАЛОПЕРИОДА(ТаблицаТоварыНаСкладахМаксимальныйПериод.ПериодДвижения, МИНУТА) КАК ПериодМинута,
НАЧАЛОПЕРИОДА(ТаблицаТоварыНаСкладахМаксимальныйПериод.ПериодДвижения, ЧАС) КАК ПериодЧас,
НАЧАЛОПЕРИОДА(ТаблицаТоварыНаСкладахМаксимальныйПериод.ПериодДвижения, ДЕНЬ) КАК ПериодДень,
НАЧАЛОПЕРИОДА(ТаблицаТоварыНаСкладахМаксимальныйПериод.ПериодДвижения, НЕДЕЛЯ) КАК ПериодНеделя,
НАЧАЛОПЕРИОДА(ТаблицаТоварыНаСкладахМаксимальныйПериод.ПериодДвижения, МЕСЯЦ) КАК ПериодМесяц,
НАЧАЛОПЕРИОДА(ТаблицаТоварыНаСкладахМаксимальныйПериод.ПериодДвижения, КВАРТАЛ) КАК ПериодКвартал,
НАЧАЛОПЕРИОДА(ТаблицаТоварыНаСкладахМаксимальныйПериод.ПериодДвижения, ГОД) КАК ПериодГод,
ТаблицаТоварыНаСкладахМаксимальныйПериод.Регистратор КАК Регистратор,
ТаблицаТоварыНаСкладахМаксимальныйПериод.Склад КАК Склад,
ТаблицаТоварыНаСкладахМаксимальныйПериод.Помещение КАК Помещение,
ТаблицаТоварыНаСкладахМаксимальныйПериод.Номенклатура КАК Номенклатура,
ТаблицаТоварыНаСкладахМаксимальныйПериод.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаХранения,
ТаблицаТоварыНаСкладахМаксимальныйПериод.Номенклатура.ЕдиницаДляОтчетов КАК ЕдиницаДляОтчетов,
ТаблицаТоварыНаСкладахМаксимальныйПериод.Характеристика КАК Характеристика,
ВЫБОР
КОГДА &ЕдиницыКоличества = 0
ТОГДА ЕСТЬNULL(ТаблицаТоварыНаСкладахМаксимальныйПериод.КоличествоНачальныйОстаток, 0)
КОГДА &ЕдиницыКоличества = 1
ТОГДА ВЫБОР
КОГДА ТаблицаТоварыНаСкладахМаксимальныйПериод.Номенклатура.КоэффициентЕдиницыДляОтчетов <> 0
ТОГДА ЕСТЬNULL(ТаблицаТоварыНаСкладахМаксимальныйПериод.КоличествоНачальныйОстаток, 0) / ТаблицаТоварыНаСкладахМаксимальныйПериод.Номенклатура.КоэффициентЕдиницыДляОтчетов
ИНАЧЕ 0
КОНЕЦ
КОНЕЦ КАК КоличествоНачальныйОстаток,
ВЫБОР
КОГДА &ЕдиницыКоличества = 0
ТОГДА ЕСТЬNULL(ТаблицаТоварыНаСкладахМаксимальныйПериод.КоличествоКонечныйОстаток, 0)
КОГДА &ЕдиницыКоличества = 1
ТОГДА ВЫБОР
КОГДА ТаблицаТоварыНаСкладахМаксимальныйПериод.Номенклатура.КоэффициентЕдиницыДляОтчетов <> 0
ТОГДА ЕСТЬNULL(ТаблицаТоварыНаСкладахМаксимальныйПериод.КоличествоКонечныйОстаток, 0) / ТаблицаТоварыНаСкладахМаксимальныйПериод.Номенклатура.КоэффициентЕдиницыДляОтчетов
ИНАЧЕ 0
КОНЕЦ
КОНЕЦ КАК КоличествоКонечныйОстаток,
ВЫБОР
КОГДА &ЕдиницыКоличества = 0
ТОГДА ЕСТЬNULL(ТаблицаТоварыНаСкладахМаксимальныйПериод.КоличествоПриход, 0)
КОГДА &ЕдиницыКоличества = 1
ТОГДА ВЫБОР
КОГДА ТаблицаТоварыНаСкладахМаксимальныйПериод.Номенклатура.КоэффициентЕдиницыДляОтчетов <> 0
ТОГДА ЕСТЬNULL(ТаблицаТоварыНаСкладахМаксимальныйПериод.КоличествоПриход, 0) / ТаблицаТоварыНаСкладахМаксимальныйПериод.Номенклатура.КоэффициентЕдиницыДляОтчетов
ИНАЧЕ 0
КОНЕЦ
КОНЕЦ КАК КоличествоПриход,
ВЫБОР
КОГДА &ЕдиницыКоличества = 0
ТОГДА ЕСТЬNULL(ТаблицаТоварыНаСкладахМаксимальныйПериод.КоличествоРасход, 0)
КОГДА &ЕдиницыКоличества = 1
ТОГДА ВЫБОР
КОГДА ТаблицаТоварыНаСкладахМаксимальныйПериод.Номенклатура.КоэффициентЕдиницыДляОтчетов <> 0
ТОГДА ЕСТЬNULL(ТаблицаТоварыНаСкладахМаксимальныйПериод.КоличествоРасход, 0) / ТаблицаТоварыНаСкладахМаксимальныйПериод.Номенклатура.КоэффициентЕдиницыДляОтчетов
ИНАЧЕ 0
КОНЕЦ
КОНЕЦ КАК КоличествоРасход,
ЕСТЬNULL(ТаблицаТоварыНаСкладахМаксимальныйПериод.КоличествоНачальныйОстаток, 0) * ТаблицаТоварыНаСкладахМаксимальныйПериод.Номенклатура.ВесЗнаменатель КАК НачальныйОстатокВес,
ЕСТЬNULL(ТаблицаТоварыНаСкладахМаксимальныйПериод.КоличествоКонечныйОстаток, 0) * ТаблицаТоварыНаСкладахМаксимальныйПериод.Номенклатура.ВесЗнаменатель КАК КонечныйОстатокВес,
ЕСТЬNULL(ТаблицаТоварыНаСкладахМаксимальныйПериод.КоличествоПриход, 0) * ТаблицаТоварыНаСкладахМаксимальныйПериод.Номенклатура.ВесЗнаменатель КАК ПриходВес,
ЕСТЬNULL(ТаблицаТоварыНаСкладахМаксимальныйПериод.КоличествоРасход, 0) * ТаблицаТоварыНаСкладахМаксимальныйПериод.Номенклатура.ВесЗнаменатель КАК РасходВес,
ЕСТЬNULL(ТаблицаТоварыНаСкладахМаксимальныйПериод.КоличествоНачальныйОстаток, 0) * ТаблицаТоварыНаСкладахМаксимальныйПериод.Номенклатура.ОбъемЗнаменатель КАК НачальныйОстатокОбъем,
ЕСТЬNULL(ТаблицаТоварыНаСкладахМаксимальныйПериод.КоличествоКонечныйОстаток, 0) * ТаблицаТоварыНаСкладахМаксимальныйПериод.Номенклатура.ОбъемЗнаменатель КАК КонечныйОстатокОбъем,
ЕСТЬNULL(ТаблицаТоварыНаСкладахМаксимальныйПериод.КоличествоПриход, 0) * ТаблицаТоварыНаСкладахМаксимальныйПериод.Номенклатура.ОбъемЗнаменатель КАК ПриходОбъем,
ЕСТЬNULL(ТаблицаТоварыНаСкладахМаксимальныйПериод.КоличествоРасход, 0) * ТаблицаТоварыНаСкладахМаксимальныйПериод.Номенклатура.ОбъемЗнаменатель КАК РасходОбъем,
ЕСТЬNULL(ЦеныНоменклатуры.Цена * ТаблицаТоварыНаСкладахМаксимальныйПериод.КоличествоНачальныйОстаток, 0) КАК СуммаНачальныйОстаток,
ЕСТЬNULL(ЦеныНоменклатуры.Цена * ТаблицаТоварыНаСкладахМаксимальныйПериод.КоличествоПриход, 0) КАК СуммаПриход,
ЕСТЬNULL(ЦеныНоменклатуры.Цена * ТаблицаТоварыНаСкладахМаксимальныйПериод.КоличествоРасход, 0) КАК СуммаРасход,
ЕСТЬNULL(ЦеныНоменклатуры.Цена * ТаблицаТоварыНаСкладахМаксимальныйПериод.КоличествоКонечныйОстаток, 0) КАК СуммаКонечныйОстаток
ИЗ
(ВЫБРАТЬ
ТоварыНаСкладах.Период КАК ПериодДвижения,
ТоварыНаСкладах.Регистратор КАК Регистратор,
ТоварыНаСкладах.Номенклатура КАК Номенклатура,
ТоварыНаСкладах.Характеристика КАК Характеристика,
ТоварыНаСкладах.Склад КАК Склад,
ТоварыНаСкладах.Помещение КАК Помещение,
ТоварыНаСкладах.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
ТоварыНаСкладах.КоличествоПриход КАК КоличествоПриход,
ТоварыНаСкладах.КоличествоРасход КАК КоличествоРасход,
ТоварыНаСкладах.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток,
МАКСИМУМ(ЦеныНоменклатуры.Период) КАК ПериодМаксимум
ИЗ
ОстаткиИОбороты КАК ТоварыНаСкладах
ЛЕВОЕ СОЕДИНЕНИЕ ИзмененияЦен КАК ЦеныНоменклатуры
ПО ТоварыНаСкладах.Номенклатура = ЦеныНоменклатуры.Номенклатура
И ТоварыНаСкладах.Характеристика = ЦеныНоменклатуры.Характеристика
И ТоварыНаСкладах.Период >= ЦеныНоменклатуры.Период
{ГДЕ
ТоварыНаСкладах.Номенклатура.* КАК Номенклатура,
ТоварыНаСкладах.Характеристика.* КАК Характеристика}
СГРУППИРОВАТЬ ПО
ТоварыНаСкладах.Период,
ТоварыНаСкладах.Регистратор,
ТоварыНаСкладах.Номенклатура,
ТоварыНаСкладах.Характеристика,
ТоварыНаСкладах.Склад,
ТоварыНаСкладах.Помещение,
ТоварыНаСкладах.КоличествоНачальныйОстаток,
ТоварыНаСкладах.КоличествоПриход,
ТоварыНаСкладах.КоличествоРасход,
ТоварыНаСкладах.КоличествоКонечныйОстаток) КАК ТаблицаТоварыНаСкладахМаксимальныйПериод
ЛЕВОЕ СОЕДИНЕНИЕ ИзмененияЦен КАК ЦеныНоменклатуры
ПО ТаблицаТоварыНаСкладахМаксимальныйПериод.ПериодМаксимум = ЦеныНоменклатуры.Период
И ТаблицаТоварыНаСкладахМаксимальныйПериод.Номенклатура = ЦеныНоменклатуры.Номенклатура
И ТаблицаТоварыНаСкладахМаксимальныйПериод.Характеристика = ЦеныНоменклатуры.Характеристика
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыЦен КАК ВидыЦен
ПО (ВидыЦен.Ссылка = &ВидЦены)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ВидыЦен.ВалютаЦены,
БлижайшиеОстаткиПоНоменклатуре.Период,
НАЧАЛОПЕРИОДА(БлижайшиеОстаткиПоНоменклатуре.Период, МИНУТА),
НАЧАЛОПЕРИОДА(БлижайшиеОстаткиПоНоменклатуре.Период, ЧАС),
НАЧАЛОПЕРИОДА(БлижайшиеОстаткиПоНоменклатуре.Период, ДЕНЬ),
НАЧАЛОПЕРИОДА(БлижайшиеОстаткиПоНоменклатуре.Период, НЕДЕЛЯ),
НАЧАЛОПЕРИОДА(БлижайшиеОстаткиПоНоменклатуре.Период, МЕСЯЦ),
НАЧАЛОПЕРИОДА(БлижайшиеОстаткиПоНоменклатуре.Период, КВАРТАЛ),
НАЧАЛОПЕРИОДА(БлижайшиеОстаткиПоНоменклатуре.Период, ГОД),
БлижайшиеОстаткиПоНоменклатуре.Регистратор,
БлижайшиеОстаткиПоНоменклатуре.Склад,
БлижайшиеОстаткиПоНоменклатуре.Помещение,
БлижайшиеОстаткиПоНоменклатуре.Номенклатура,
БлижайшиеОстаткиПоНоменклатуре.Номенклатура.ЕдиницаИзмерения,
БлижайшиеОстаткиПоНоменклатуре.Номенклатура.ЕдиницаДляОтчетов,
БлижайшиеОстаткиПоНоменклатуре.Характеристика,
ВЫБОР
КОГДА &ЕдиницыКоличества = 0
ТОГДА ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток, 0)
КОГДА &ЕдиницыКоличества = 1
ТОГДА ВЫБОР
КОГДА БлижайшиеОстаткиПоНоменклатуре.Номенклатура.КоэффициентЕдиницыДляОтчетов <> 0
ТОГДА ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток, 0) / БлижайшиеОстаткиПоНоменклатуре.Номенклатура.КоэффициентЕдиницыДляОтчетов
ИНАЧЕ 0
КОНЕЦ
КОНЕЦ,
ВЫБОР
КОГДА &ЕдиницыКоличества = 0
ТОГДА ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток, 0)
КОГДА &ЕдиницыКоличества = 1
ТОГДА ВЫБОР
КОГДА БлижайшиеОстаткиПоНоменклатуре.Номенклатура.КоэффициентЕдиницыДляОтчетов <> 0
ТОГДА ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток, 0) / БлижайшиеОстаткиПоНоменклатуре.Номенклатура.КоэффициентЕдиницыДляОтчетов
ИНАЧЕ 0
КОНЕЦ
КОНЕЦ,
0,
0,
ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток, 0) * БлижайшиеОстаткиПоНоменклатуре.Номенклатура.ВесЗнаменатель,
ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток, 0) * БлижайшиеОстаткиПоНоменклатуре.Номенклатура.ВесЗнаменатель,
0,
0,
ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток, 0) * БлижайшиеОстаткиПоНоменклатуре.Номенклатура.ОбъемЗнаменатель,
ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток, 0) * БлижайшиеОстаткиПоНоменклатуре.Номенклатура.ОбъемЗнаменатель,
0,
0,
ЕСТЬNULL(БлижайшиеОстаткиПоНоменклатуре.СтараяЦена * ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток, 0),
ВЫБОР
КОГДА БлижайшиеОстаткиПоНоменклатуре.Дельта > 0
ТОГДА ЕСТЬNULL(БлижайшиеОстаткиПоНоменклатуре.Дельта * ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток, 0)
ИНАЧЕ 0
КОНЕЦ,
ВЫБОР
КОГДА БлижайшиеОстаткиПоНоменклатуре.Дельта < 0
ТОГДА ЕСТЬNULL(-БлижайшиеОстаткиПоНоменклатуре.Дельта * ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток, 0)
ИНАЧЕ 0
КОНЕЦ,
ЕСТЬNULL(БлижайшиеОстаткиПоНоменклатуре.Цена * ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток, 0)
ИЗ
БлижайшиеОстаткиПоНоменклатуре КАК БлижайшиеОстаткиПоНоменклатуре
ЛЕВОЕ СОЕДИНЕНИЕ ОстаткиИОбороты КАК ТоварыНаСкладахОстаткиИОбороты
ПО БлижайшиеОстаткиПоНоменклатуре.ПериодМаксимум = ТоварыНаСкладахОстаткиИОбороты.Период
И БлижайшиеОстаткиПоНоменклатуре.РегистраторМаксимум = ТоварыНаСкладахОстаткиИОбороты.Регистратор
И БлижайшиеОстаткиПоНоменклатуре.Склад = ТоварыНаСкладахОстаткиИОбороты.Склад
И БлижайшиеОстаткиПоНоменклатуре.Помещение = ТоварыНаСкладахОстаткиИОбороты.Помещение
И БлижайшиеОстаткиПоНоменклатуре.Номенклатура = ТоварыНаСкладахОстаткиИОбороты.Номенклатура
И БлижайшиеОстаткиПоНоменклатуре.Характеристика = ТоварыНаСкладахОстаткиИОбороты.Характеристика
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыЦен КАК ВидыЦен
ПО (ВидыЦен.Ссылка = &ВидЦены)
ГДЕ
ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <> 0
{ГДЕ
(ТоварыНаСкладахОстаткиИОбороты.Период <= &КонецПериода)}
Функция не найдена «ПолучитьФункциональнуюОпцию» |
Я |
PbI4
31.05.16 — 10:52
1С:ERP Управление предприятием, редакция 2.0 + CRM, редакция 2.0 (2.0.10/2.0.8)
Доработал стандартный отчет СостояниеРасчетвоСКлиентами, с полными правами формируется без ошибок, менеджерам дал права на отчет и команды в нём.
В результате в журнале такое:
{ОбщийМодуль.ВариантыОтчетов.Модуль(1302)}: Ошибка при вызове метода контекста (СкомпоноватьРезультат)
по причине:
по причине:
Ошибка исполнения отчета
по причине:
Ошибка при выполнении обработчика — ‘ПриКомпоновкеРезультата’
по причине:
{Отчет.СостояниеРасчетовСКлиентами.МодульОбъекта(89)}: Ошибка при вызове метода контекста (Инициализировать)
по причине:
Ошибка компоновки данных
по причине:
Ошибка инициализации
по причине:
Функция не найдена «ПолучитьФункциональнуюопцию»
Nuobu
1 — 31.05.16 — 10:55
Посмотри на вкладке «Вычисляемые поля»
ИсчадиеADO
2 — 31.05.16 — 10:57
а где хранится значение функ опции?
PbI4
3 — 31.05.16 — 11:02
На вкладке «Вычисляемые поля» пусто, в модуле объекта отчета смущают следующие строки:
#Область СлужебныеПроцедурыИФункции
Процедура НастроитьПараметрыОтборыПоФункциональнымОпциям(КомпоновщикНастроекФормы)
Если ПолучитьФункциональнуюОпцию(«ИспользоватьПартнеровКакКонтрагентов») Тогда
КомпоновкаДанныхСервер.УдалитьЭлементОтбораИзВсехНастроекОтчета(КомпоновщикНастроекФормы, «Контрагент»);
КонецЕсли;
Если ПолучитьФункциональнуюОпцию(«ИспользоватьУпрощеннуюСхемуОплатыВПродажах») Тогда
КомпоновкаДанныхСервер.УдалитьВыбранноеПолеИзВсехНастроекОтчета(КомпоновщикНастроекФормы, «АвансДоОбеспечения»);
КонецЕсли;
КонецПроцедуры
Процедура НастроитьПользовательскиеНастройкиПоФункциональнымОпциям(КомпоновщикНастроекФормы)
Если ПолучитьФункциональнуюОпцию(«ИспользоватьУпрощеннуюСхемуОплатыВПродажах») Тогда
КомпоновкаДанныхСервер.ОтключитьВыбранноеПолеВПользовательскихНастройках(КомпоновщикНастроекФормы, «АвансДоОбеспечения»);
КонецЕсли;
КонецПроцедуры
PbI4
4 — 31.05.16 — 11:03
с Функциональными опциями не сталкивался никогда
ИсчадиеADO
5 — 31.05.16 — 11:06
(4) пофигурация — ветка обсчие — функциональные опции — открываешь нужную. там будет св-во Хранение. На это дело права есть? Хотя текст ошибки странный конеш…
Nuobu
6 — 31.05.16 — 11:09
А есть ф-я ПолучитьФункциональнуюОпцию(«ИспользоватьПартнеровКакКонтрагентов»)
PbI4
7 — 31.05.16 — 11:11
на вкладке параметры вот:
Nuobu
8 — 31.05.16 — 11:11
(7) Тебе нужная ф-я «ПолучитьФункциональнуОпцию» ищи её.
ИсчадиеADO
9 — 31.05.16 — 11:14
Глобальный контекст (Global context)
ПолучитьФункциональнуюОпцию (GetFunctionalOption)
Синтаксис:
ПолучитьФункциональнуюОпцию(<Имя>, <Параметры>)
Параметры:
PbI4
10 — 31.05.16 — 11:20
У константы, хранящейся в функциональной опции стоит только чтение, давать изменение/просмотр/редактирование?
PbI4
11 — 31.05.16 — 11:20
Копать надо думаю в права, так как с полными отчёт формируется без ошибок
ИсчадиеADO
12 — 31.05.16 — 11:21
(10) нет
Cyberhawk
13 — 31.05.16 — 11:40
Функция недоступна на клиенте, в этом твоя беда
PbI4
14 — 31.05.16 — 12:15
И как же избавиться от такой напасти?
PbI4
15 — 31.05.16 — 12:16
С полными правами она значит доступна на клиенте?
hhhh
16 — 31.05.16 — 12:21
(15) а святой водой не пробовали на сервер побрызгать?
PbI4
17 — 31.05.16 — 12:28
не, не достану, он в Германии
PbI4
18 — 31.05.16 — 13:32
Ну что, найдем функцию? В УТ 11 такой же отчёт есть, может есть столкнувшиеся с такой засадой ещё?
0
— 31.03.2014 — 09:22
БП 3.0, кем-то слегка измененная. Версия конфигурации 3.0.30.16.
Иду «Учет, налоги, отчетность»-> «Отчеты для руководителя». В самом верху панели вижу ссылку «Калькуляция себестоимости».
При попытке запуска выдает ошибку:
«{Форма.ФормаОтчета.Форма(1000)**: Ошибка при вызове метода контекста (ПолучитьФункциональнуюОпцию)
Форма.ИспользуетсяЭЦП = ПолучитьФункциональнуюОпцию(«ИспользоватьЭлектронн ыеЦифровыеПодписи»);
по причине:
Функциональная опция не найдена»
Проблема в том, что я не могу найти, какой отчет запускается и в каком модуле ошибка. И не могу понять, как ссылка «Калькуляция себестоимости» добавлена в панель.
До последнего обновления эта ссылка работала, на старой копии проверил
1
— 31.03.2014 — 09:59
так вроде ж кнопка есть «Конфигуратор», когда ошибка выскакивает.
2
— 31.03.2014 — 10:04
0-БВН >Где-то прочел неплохой совет — включи в конфигураторе замер производительности на обновленной и на копии, выполни проблемную команду, замер выключи и анализируй открывшиеся окошки — что куда ходит, дальше уже поймешь, где в отладчике точки останова расставлять.
3
— 31.03.2014 — 10:23
Цитата:
Сообщение от kupreeff
так вроде ж кнопка есть «Конфигуратор», когда ошибка выскакивает
Не-а… Если запущено одно предприятие — только кнопка ок. Если предприятие запущено из Конфигуратора — появляется еще кнопка «Подробно», которая и показывает текст ошибки. А дальше только Закрыть и Завершить работу
4
— 31.03.2014 — 10:25
0-БВН > «кем-то слегка измененная» — как мило это звучит. Вполне блондинтсто
5
— 31.03.2014 — 10:26
Поставил чистую базу с дистрибутива — В отчетах для руководителя ссылка «Калькуляция себестоимости » отсутствует. Вопрос: как добавлен этот элемент интерфейса?
6
— 31.03.2014 — 10:27
Цитата:
Сообщение от VZ
как мило это звучит. Вполне блондинтсто
Брутально прозвучал бы полный список изменений?
7
— 31.03.2014 — 10:34
5-БВН >Командой, отчетом, обормоткой, вариантов куча — замер производительности включай, увидишь.
8
— 31.03.2014 — 10:36
+4 Во-первых, надо узнать, менялось ли это дело «кем-то». Для этого заходим в конфигуратор, и сравниваем две конфигурации (пункт «Сравнить конфигурации…«): Основную конфигурацию и конфигурацию поставщика.
Вот там проявятся все «слегка измененные» шалости «кем-то».
Если там присутствует раздел, касаемый отчета, снова накатить обновление, но когда вылезет таблица различий, найти этот злополучный отчет, и поставить команду выбрать из конфигурации поставщика.
Еще это может быть внешним отчетом. Тогда его надо просто отключить (это уже в режиме Предприятие)
9
— 31.03.2014 — 10:41
8-VZ >+8 Лучше первую в сравнении ставить Конфигурацию поставщика, а вторую Основную конфигурацию — так добавления виднее, хотя на вкус и цвет…
10
— 31.03.2014 — 10:45
+8 Кстати, в кустах случайно обнаружился рояль версии 3.0.30.16. И никакого отчета «КалькуляцияСебестоимости» там нет. И среди обормоток тоже.
Либо этот «кем-то» добавил внешний отчет, либо зря попортил такую полезную вещь, как Конфигурация.
11
— 31.03.2014 — 10:47
9-K Michael > Монописсуально, кто как приноровился. Хотя попробую сравнить отчеты, спасибо за мысль.
12
— 31.03.2014 — 11:01
права добавьте на ЭЦП, у гл.буха в упп тоже выскакивало, отладчиком нашел
13
— 31.03.2014 — 11:06
12-Jimbo > А оно точно надо? По сабжу не видна (не просматривается) принадлежность этого отчета к ЭЦП.
Вначале следовало бы посмотреть на это изобретение
14
— 31.03.2014 — 13:15
в регламентных книгах продаж и покупок оно надо ? по коду 1с видимо надо
15
— 01.04.2014 — 08:25
Нарыл следующее:
В общем модуле ДополнительныеОтчетыИОбработки подключается внешний отчет. Имя файла «СправкаРасчетКалькуляцияСебестоимости-копия.erf»
Поиск по всему компу такого файла не находит. При этом, в рабочей базе запуск отчета заканчивается ошибкой, а в копии месячной давности (до последних обновлений) — запускается нормально. Откуда же он берется?
16
— 01.04.2014 — 10:05
15-БВН >в справочнике хранится
17
— 02.04.2014 — 07:40
Нашел что-то похожее в справочнике «Дополнительные отчеты и обработки». Но не пойму, как до программного модуля добраться…
18
— 02.04.2014 — 08:08
Вроде бы немного прояснилось… Выгрузил модуль в файл, закоментировал строку, вызывающую ошибку (вроде бы ЭЦП там и нафиг ненужна)- отчет заработал. Получается, в старой версии конфы, когда делался этот отчет была функциональная опция «Использовать электронные цифровые подписи», а после обновления она из конфы исчезла.
Конфигурация «Управлении торговлей для Украины» (3.0.4.3) с подключенным дополнением «Обмен данными с «1С-Битрикс: Управление сайтом», редакция 2»(Дополнение для конфигурации «Управление торговлей для Украины»,редакция 3 (3.0.4.3)) . При проведении обмена с сайтом (не выгрузки товара, а именно загрузки данных) |
|
Отладчиком нужно пройтись и узнать причину ошибки. |
|
Пользователь 216218 Заглянувший Сообщений: 6 |
#4 23.09.2013 10:24:51
Это первое что я сделал. |
||
Пользователь 105835 Эксперт Сообщений: 761 |
#5 24.09.2013 13:54:36
Как вариант закомментировать часть кода, отвечающего за ошибку…. Битрикс и Битрикс 24 РАБОТА ВАКАНСИИ — https://t.me/bitrixworkrabota |
||||
Написав это обращение, я надеялся что не я один ищу ответ… |
|
Пользователь 216218 Заглянувший Сообщений: 6 |
#7 24.09.2013 15:34:38
И да, я пробовал закомментировать, но он тут же начинает ругаться на что то еще. И так просто циклически…. Видимо таким способом нужно закомментировать сразу все ) |
||||||
В ТП пишите. |
|
Пользователь 124324 Постоянный посетитель Сообщений: 64 |
#9 27.09.2013 03:21:30 Доброго времени суток подскажите что необходимо указать в Поле «Доп. реквизит документа «Заказ клиента» — «Номер заказа на сайте»» не заполнено Поле «Доп. реквизит документа «Заказ клиента» — «Дата заказа на сайте»» не заполнено скрин http://screencast.com/t/QDuFV40JH Заранее благодарен |
Всем привет! Пытаюсь переделать внешний отчет «Остатки товаров» (Где есть цена, сумма и количество). Была версия УТ 11.1.10.153, а стала 11.2.3.66 и в ней перестал работать отчет. Которые были ошибки я подправил, а когда появилась эта, то не знаю и куда смотреть. Это модуль объетка #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
А вот сама ОсновнаяСхемаКомпоновкиДанных ВЫБРАТЬ РАЗЛИЧНЫЕ Сегменты.Номенклатура, Сегменты.Характеристика, ИЗ ОтборПоСегментуНоменклатуры КОГДА ЦеныНоменклатурыБ.Цена ЕСТЬ NULL ИЗ ИМЕЮЩИЕ НЕ МАКСИМУМ(ТоварыОрганизацийОстаткиИОбороты.Период) ЕСТЬ NULL ; ТоварыНаСкладах.КоличествоРасход КАК КоличествоРасход, ТоварыНаСкладах.КоличествоПриход, 0, 0, 0,
я заменил УпаковкиНоменклатуры=УпаковкиЕдиницыИзмерения Коэффициент=Знаменатель Вес=ВесЗнаменатель Объем=ОбъемЗнаменатель
ты бы еще Войну и Мир запостил. Проверь ИспользоватьУпаковкиНоменклатуры в функциональных опцих есть?
Скорее всего удалили/переименовали ФО.
Я что-то текста ошибки так и не вижу
да я тебя полностью про «Войну и Мир», но я сидел и обновлял базы все выходные и перенес все свои доработки и сторонние доработки кроме этого отчета. Я уже замучился и хочу отдохнуть ) Простите за такое количество кода, думал что будет информативнее. Если нужны какие скриншоты по ошибке могу выложить
Это я проверял, такая опция осталась
В журнале регистрации смотрел?
Проверь ФО, которые начинаются с удалить. Ну и, на крайняк, сделай сравнение релизов.
Вот ошибка из журнала регистрации Ошибка при формировании: {ОбщийМодуль.ВариантыОтчетов.Модуль(1914)}: Ошибка при вызове метода контекста (СкомпоноватьРезультат) ОтчетОбъект.СкомпоноватьРезультат(Результат.ТабличныйДокумент, Результат.Расшифровка); по причине: Ошибка исполнения отчета по причине: Ошибка при выполнении обработчика — ‘ПриКомпоновкеРезультата’ по причине: {ВнешнийОтчет.ОстаткиТоваровДополнительный.МодульОбъекта}: Ошибка при вызове метода контекста (ПолучитьФункциональнуюОпцию) Если НЕ ПолучитьФункциональнуюОпцию(«ИспользоватьУпаковкиЕдиницыИзмерения») Тогда по причине: Функциональная опция не найдена
их всего две УдалитьИспользоватьАктыОРасхожденияхПриПоступленииТоваров УдалитьИспользоватьАктыПриемкиТоваров
прикольно. точно из этой же базы?
Если не поможет: убери Если НЕ ПолучитьФункциональнуюОпцию(«ИспользоватьУпаковкиЕдиницыИзмерения») Тогда
ИспользоватьУпаковкиНоменклатуры ИспользоватьУпаковкиЕдиницыИзмерения
ошибка осталась Вот из тех. журнала Ошибка при формировании: {ОбщийМодуль.ВариантыОтчетов.Модуль(1914)}: Ошибка при вызове метода контекста (СкомпоноватьРезультат) ОтчетОбъект.СкомпоноватьРезультат(Результат.ТабличныйДокумент, Результат.Расшифровка); по причине: Ошибка исполнения отчета по причине: Ошибка при выполнении обработчика — ‘ПриКомпоновкеРезультата’ по причине: {ВнешнийОтчет.ОстаткиТоваровДополнительный.МодульОбъекта}: Ошибка при вызове метода контекста (ПолучитьФункциональнуюОпцию) Если НЕ ПолучитьФункциональнуюОпцию(«ИспользоватьУпаковкиЕдиницыИзмерения») Тогда по причине: Функциональная опция не найдена
с радостью ) только завтра можно на работе тогда не появляться) взять внеплановый отпуск)
точно . Я же написал в в чем проблема: они переименовали ФО из ИспользоватьУпаковкиЕдиницыИзмерения в ИспользоватьУпаковкиНоменклатуры. Поменяй или удали условие.
так я уже удалял условие по твоему сообщению и переименовывал из ИспользоватьУпаковкиНоменклатуры в ИспользоватьУпаковкиНоменклатуры. Только у меня нет в списке ИспользоватьУпаковкиНоменклатуры.
из ИспользоватьУпаковкиНоменклатуры в ИспользоватьУпаковкиЕдиницыИзмерения , но у меня в скиске нету ФО ИспользоватьУпаковкиЕдиницыИзмерения
Если удалять условие, то появляется другая ошибка {ОбщаяФорма.ФормаОтчета.Форма}: Ошибка при вызове метода контекста (ФоновоеЗаданиеЗапустить) ТребуетсяОбработчик = ФоновоеЗаданиеЗапустить(ПеременныеКлиента.ФормированиеПриОткрытии); по причине: Неизвестный идентификатор формы
Даешь в студию скрин конфигуратора с ИспользоватьУпаковкиНоменклатуры и ошибкой отчета, в которой также есть слова «ИспользоватьУпаковкиНоменклатуры». А с продолжай разбираться. Когда победишь первую вторая все равно вылезет, они не связаны.
А в журнале почему-то пишет «ИспользоватьУпаковкиЕдиницыИзмерения» Ошибка при формировании: {ОбщийМодуль.ВариантыОтчетов.Модуль(1914)}: Ошибка при вызове метода контекста (СкомпоноватьРезультат) ОтчетОбъект.СкомпоноватьРезультат(Результат.ТабличныйДокумент, Результат.Расшифровка); по причине: Ошибка исполнения отчета по причине: Ошибка при выполнении обработчика — ‘ПриКомпоновкеРезультата’ по причине: {ВнешнийОтчет.ОстаткиТоваровДополнительный.МодульОбъекта}: Ошибка при вызове метода контекста (ПолучитьФункциональнуюОпцию) Если НЕ ПолучитьФункциональнуюОпцию(«ИспользоватьУпаковкиЕдиницыИзмерения») Тогда по причине: Функциональная опция не найдена
Сделай копию внешнего отчета и открывай его. С этим что-то не так.
Кеш чистил. а ошибка осталась
и копию делал, открывал ошибка осталась
ну пили ее. чудес то не бывает. надо чтобы исполнялся тот код, который написан.
поменяй имя отчета. Кэш сбойнул.
УРААААААААААА. Ребят, это было из-за того что я не удалил из базы старый отчет и когда я добавлял измененный просто переносом в 1с, они походу конфликтовали. Спасибо всем большое. вот как раз про поменять имя отчета я думаю то же бы помогло
Только я вот не могу понят, я сегодня пробовал этот отчет удалить из базы, но у меня не получилось, пишет что он предопределенный (на работа база клиен-серверная и пользователи в ней работали когда я хотел удалить), а дома в фойловом варианте и все сразу удалилось
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.
Исправляем ситуацию
Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.
Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| ";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
КонецЦикла;
Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.
Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.
Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа ";
НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
КонецЦикла;
1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.
В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.
Чаще всего причиной подобных ошибок выступают следующие факторы:
- Невнимательность;
- Отсутствие опыта или знаний;
- Несогласованность действий разработчиков друг с другом;
- Изменения в методах контекста в новых версиях платформы.
Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.
HostedRedmine.com has moved to the Planio platform. All logins and passwords remained the same. All users will be able to login and use Redmine just as before. *Read more…*
closed
Исправлена ошибка выполнения отчета с получением функциональных опций при наличии опций с параметрами
Category:
Анализ прав доступа
Description
{ИнструментыРазработчикаTormozit Отчет.ирАнализПравДоступа.Форма.ФормаОтчета.Форма(288)}: Ошибка при вызове метода контекста (СкомпоноватьРезультат) СкомпоноватьРезультат(ЭлементыФормы.ТабличныйДокумент, ДанныеРасшифровки); по причине: Ошибка исполнения отчета по причине: Ошибка при выполнении обработчика - 'ПриКомпоновкеРезультата' по причине: {ИнструментыРазработчикаTormozit Отчет.ирАнализПравДоступа.МодульОбъекта(111)}: Ошибка при вызове метода контекста (ПолучитьФункциональнуюОпцию) СтрокаТаблицы.ФункциональнаяОпцияВключена = ПолучитьФункциональнуюОпцию(ФункциональнаяОпция.Имя); по причине: Не указаны все необходимые параметры функциональных опций
- Description updated (diff)
- Sprint/Milestone changed from Разработка to 5.73
Also available in: Atom
PDF
Функциональная опция
Функциональные опции — это общие объекты конфигурации. Они являются частью механизма функциональных опций и позволяют выделить в прикладном решении функциональность, которую можно включать/выключать при внедрении, не изменяя само прикладное решение.
Например, в зависимости от условий конкретного внедрения, необходимо предусмотреть отключение учета товаров по складам. Чтобы при оформлении документов поступления товаров поле Склад не отображалось в форме документа.
Для этого в конфигурации может быть определена функциональная опция Учет по складам, хранящаяся в константе типа Булево.
С этой функциональной опцией можно связать различные объекты конфигурации или их реквизиты. Например, с этой функциональной опцией можно связать реквизит Склад документа Поступление товаров.
Тогда, при внедрении можно включать или выключать эту функциональную опцию в конкретной информационной базе в режиме 1С:Предприятие.
Платформа при этом будет автоматически включать и выключать отображение всех соответствующих элементов интерфейса (полей, команд, колонок списков, элементов отчетов). В нашем случае — будет скрываться или отображаться поле Склад во всех формах документа Поступление товара.
Функциональные опции могут иметь значения произвольного типа, не обязательно Булево. Работа с функциональными опциями доступна из встроенного языка. Благодаря этому разработчик может создавать собственные алгоритмы обработки значений функциональных опций.
0
— 31.03.2014 — 09:22
БП 3.0, кем-то слегка измененная. Версия конфигурации 3.0.30.16.
Иду «Учет, налоги, отчетность»-> «Отчеты для руководителя». В самом верху панели вижу ссылку «Калькуляция себестоимости».
При попытке запуска выдает ошибку:
«{Форма.ФормаОтчета.Форма(1000)**: Ошибка при вызове метода контекста (ПолучитьФункциональнуюОпцию)
Форма.ИспользуетсяЭЦП = ПолучитьФункциональнуюОпцию(«ИспользоватьЭлектронн ыеЦифровыеПодписи»);
по причине:
Функциональная опция не найдена»
Проблема в том, что я не могу найти, какой отчет запускается и в каком модуле ошибка. И не могу понять, как ссылка «Калькуляция себестоимости» добавлена в панель.
До последнего обновления эта ссылка работала, на старой копии проверил
1
— 31.03.2014 — 09:59
так вроде ж кнопка есть «Конфигуратор», когда ошибка выскакивает.
2
— 31.03.2014 — 10:04
0-БВН >Где-то прочел неплохой совет — включи в конфигураторе замер производительности на обновленной и на копии, выполни проблемную команду, замер выключи и анализируй открывшиеся окошки — что куда ходит, дальше уже поймешь, где в отладчике точки останова расставлять.
3
— 31.03.2014 — 10:23
Цитата:
Сообщение от kupreeff
так вроде ж кнопка есть «Конфигуратор», когда ошибка выскакивает
Не-а… Если запущено одно предприятие — только кнопка ок. Если предприятие запущено из Конфигуратора — появляется еще кнопка «Подробно», которая и показывает текст ошибки. А дальше только Закрыть и Завершить работу
4
— 31.03.2014 — 10:25
0-БВН > «кем-то слегка измененная» — как мило это звучит. Вполне блондинтсто
5
— 31.03.2014 — 10:26
Поставил чистую базу с дистрибутива — В отчетах для руководителя ссылка «Калькуляция себестоимости » отсутствует. Вопрос: как добавлен этот элемент интерфейса?
6
— 31.03.2014 — 10:27
Цитата:
Сообщение от VZ
как мило это звучит. Вполне блондинтсто
Брутально прозвучал бы полный список изменений?
7
— 31.03.2014 — 10:34
5-БВН >Командой, отчетом, обормоткой, вариантов куча — замер производительности включай, увидишь.
8
— 31.03.2014 — 10:36
+4 Во-первых, надо узнать, менялось ли это дело «кем-то». Для этого заходим в конфигуратор, и сравниваем две конфигурации (пункт «Сравнить конфигурации…«): Основную конфигурацию и конфигурацию поставщика.
Вот там проявятся все «слегка измененные» шалости «кем-то».
Если там присутствует раздел, касаемый отчета, снова накатить обновление, но когда вылезет таблица различий, найти этот злополучный отчет, и поставить команду выбрать из конфигурации поставщика.
Еще это может быть внешним отчетом. Тогда его надо просто отключить (это уже в режиме Предприятие)
9
— 31.03.2014 — 10:41
8-VZ >+8 Лучше первую в сравнении ставить Конфигурацию поставщика, а вторую Основную конфигурацию — так добавления виднее, хотя на вкус и цвет…
10
— 31.03.2014 — 10:45
+8 Кстати, в кустах случайно обнаружился рояль версии 3.0.30.16. И никакого отчета «КалькуляцияСебестоимости» там нет. И среди обормоток тоже.
Либо этот «кем-то» добавил внешний отчет, либо зря попортил такую полезную вещь, как Конфигурация.
11
— 31.03.2014 — 10:47
9-K Michael > Монописсуально, кто как приноровился. Хотя попробую сравнить отчеты, спасибо за мысль.
12
— 31.03.2014 — 11:01
права добавьте на ЭЦП, у гл.буха в упп тоже выскакивало, отладчиком нашел
13
— 31.03.2014 — 11:06
12-Jimbo > А оно точно надо? По сабжу не видна (не просматривается) принадлежность этого отчета к ЭЦП.
Вначале следовало бы посмотреть на это изобретение
14
— 31.03.2014 — 13:15
в регламентных книгах продаж и покупок оно надо ? по коду 1с видимо надо
15
— 01.04.2014 — 08:25
Нарыл следующее:
В общем модуле ДополнительныеОтчетыИОбработки подключается внешний отчет. Имя файла «СправкаРасчетКалькуляцияСебестоимости-копия.erf»
Поиск по всему компу такого файла не находит. При этом, в рабочей базе запуск отчета заканчивается ошибкой, а в копии месячной давности (до последних обновлений) — запускается нормально. Откуда же он берется?
16
— 01.04.2014 — 10:05
15-БВН >в справочнике хранится
17
— 02.04.2014 — 07:40
Нашел что-то похожее в справочнике «Дополнительные отчеты и обработки». Но не пойму, как до программного модуля добраться…
18
— 02.04.2014 — 08:08
Вроде бы немного прояснилось… Выгрузил модуль в файл, закоментировал строку, вызывающую ошибку (вроде бы ЭЦП там и нафиг ненужна)- отчет заработал. Получается, в старой версии конфы, когда делался этот отчет была функциональная опция «Использовать электронные цифровые подписи», а после обновления она из конфы исчезла.
Что такое функциональные опции (далее ФО) и как с ними работать, необходимо знать каждому кто начинает заниматься разработкой на платформе 1С Предприятие 8. Конечно, можно и нужно читать официальную документацию, но для понимания новичками она бывает довольно сложна. В этой статье рассмотрим понятие ФО и принципы работы с этим объектом конфигурации. Приступим…
Что же такое функциональные опции?
Функциональные опции (ФО) – это объекты конфигурации, которые предназначены для включения и выключения различной функциональности в интерфейсе пользователя за счет отображения или сокрытия элементов включенных в состав ФО. Если коротко то ФО –выключатель видимости элементов на форме.
Для чего это может быть необходимо?
Функционал (типового) прикладного решения производится для решения обширного спектра задач для работы с различными разделами, разрезами учета, который здорово нагрузит интерфейс различными элементами и может оказаться чрезмерно большим громоздким и не бесполезным в рамках отдельного предприятия. ФО дают возможность настроить интерфейс пользователя сделав его более ясным, простым и понятным – оставив только нужные документы, реквизиты, логику и отключив все ненужное. Например: Наличие ФО «Многофирменный учет»
позволит вести учет разных предприятий, но во всех документах и отчетах станет видимым реквизит для выбора предприятия, который совсем не нужен для тех кто не ведет многофирменный учет, поэтому при выключении ФО реквизит будет просто скрыт из интерфейса.
На что влияют ФО ?
ФО могут оказывать влияние:
- На пользовательский интерфейс – при выключении каких либо ФО система скрывает в польззовательском интерфейсе все элементы которые к ней относятся, затрагивая следующие элементы интерфейса:
- Глобальный командный интерфейс
- Реквизиты формы (в т.ч. колонки реквизита формы типа ТаблицаЗначений или ДеревоЗначений);
- Команды формы
- Отчеты реализованные с помощью системы СКД.
- На алгоритмы написанные на встроенном языке – имеется возможность програмно получать значения ФО и использовать их в различных условиях, например для уменьшения объема вычислений.
ВНИМАНИЕ!
ФО не влияют на состав базы данных. Все таблицы и поля присутствуют в базе данных не зависимо от состояния значений ФО.
Как управлять функциональной опцией?
Выше уже было сказано, что включение / выключение видимости объектов добавленных в состав ФО зависит от логического значения, которое храниться в одном из трех видах объектов конфигурации (Константа, реквизит справочника, ресурс регистра сведений) и иметь Булевский тип.
Значение Истина – включенный объект в состав ФО отображается в интерфейсе программы. Ложь – включенный объект в состав ФО НЕ отображается в интерфейсе программы.
Какие свойства имеются у объекта функциональная опция?
- Хранение — поле в котором выбирается объект (Константа, Реквизит справочника, Ресурс регистра сведений) булевского типа.
- Привилегированный режим при получении — флаг отвечает за возможность получения значения функциональной опции в привилегированном режиме.
- Состав — список объектов и реквизитов объектов, видимостью которых можно будет управлять с помощью функциональной опции.
Рассмотрев объект конфигурации ФО, мы плавно подошли еще к одному объекту конфигурации — Параметры Функциональных Опций (далее ПФО), который неразрывно связан с механизмом работы ФО и для полноты понимания работы ФО и дальнейшей возможности рассмотрения примеров, рассмотрим этот объект прямо сейчас в этой же статье.
Что такое и для чего нужны ПФО ?
Параметры Функциональных Опций (ПФО) – хоть и представлены в дереве метаданных отдельным объектом, обособленно от ФО использоваться не могут и предназначены они для сообщения ФО – из какого элемента справочника или измерения регистра сведений брать значение для получения значения ФО.
У объекта ПФО есть только одно интересующее нас свойство:
Использование, которое предназначено для указания ФО в каком справочнике или ресурсе регистра сведений будут хранится элементы или записи для получения значения ФО.
На словах не совсем понятно, поэтому рассмотрим примеры работы с хранением значения ФО во всех доступных объектах.
Для экспериментов создадим ФО ВалютныйУчет и добавим в состав ФО справочник Валюты для организации возможности выбирать валюту в договорах с клиентами.
Значение ФО хранится в константе
Это самый простой способ управления функциональной опцией и его можно применить для создания возможности управления глобальными настройками прикладного решения, например – для включения или отключения валютного учета, учета партий, учета НДС, возможности включения многофирменного и многоскладского учета и т.д.
Для использования значения хранящегося в константе не нужно писать никакого кода, достаточно просто создать константу Булевского типа и указать ее в качестве значения хранения.
Пример использования константы:
Значение ФО хранится в реквизите справочника
Данный вариант реализации в отличие от хранения значения в константе имеет ряд особенностей. Если просто выбрать в свойстве Хранение реквизит справочника Булевского типа, то такое решение будет работать не корректно. После установки у элемента справочника флажка в состояние Истина (видимость включена) и перезаписи элемента справочника, скрытый элемент диалога отобразится у элемента справочника при повторном открытии. Не корректность заключается в том, что включив видимость хотя-бы у одно элемента из всего справочника, скрытый элемент диалога отобразится у всех остальных элементов, даже у тех у кого реквизит хранящий значение ФО установлен в состояние Ложь (видимость выключена).
Для того чтобы поведение системы стало корректным и скрытые элементы диалога отображались только у тех элементов справочника, где соответствующая настройка включена, необходимо дополнительно использовать объект конфигурации — параметры функциональных опций (ПФО) и при открытии формы элемента справочника передавать ссылку на текущий элемент справочника в ПФО .
Используя объект конфигурации ПФО, мы указываем ФО из какого именно элемента справочника нужно взять значение ФО.
Данное решение так же имеет недостаток, – который заключается в том, что значение ФО хранится в реквизите справочника, а значение реквизита в базе данных, и устанавливается оно только после записи элемента справочника БД. Другими словами – при такой реализации хранения значения ФО, можно бесконечно и безрезультатно включать/выключать ФО , до момента пока элемент справочника не будет записан в базу данных никаких изменений в интерфейсе происходить не будет.
Для решения этой проблемы можно хранить значение ФО в другом справочнике назовем его для примера ЗначенияНастройкиФО и тогда при изменении значения флага управляющего видимостью должна отработать процедура которая будет осуществлять поиск в справочнике с именем ЗначенияНастройкиФО элементов с необходимым значением реквизита и его дальнейшей передачи в параметр ФО.
&НаСервере Процедура УстановитьПараметрыФО() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗначенияНастройкиФО .Ссылка КАК Ссылка |ИЗ | Справочник.ЗначенияНастройкиФО КАК ЗначенияНастройкиФО |ГДЕ | ЗначенияНастройкиФО .ВключитьВалютныйУчет = &ВключитьВалютныйУчет"; Запрос.УстановитьПараметр("ВключитьВалютныйУчет", Объект.ВключитьВалютныйУчет); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Если ВыборкаДетальныеЗаписи.Следующий() Тогда Значение = ВыборкаДетальныеЗаписи.Ссылка; Иначе НовыйЭлемент = Справочники.ЗначенияНастройкиФО .СоздатьЭлемент(); НовыйЭлемент.ВключитьВалютныйУчет = Объект.ВключитьВалютныйУчет; НовыйЭлемент.Записать(); Значение = НовыйЭлемент.Ссылка; КонецЕсли; УстановитьПараметрыФункциональныхОпцийФормы(Новый Структура("Договор", Значение)); КонецПроцедуры &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) УстановитьПараметрыФО(); КонецПроцедуры &НаКлиенте Процедура ВключитьВалютныйУчетПриИзменении(Элемент) УстановитьПараметрыФО(); ОбновитьИнтерфейс(); КонецПроцедуры
Значение ФО хранится в ресурсе Регистра сведений
Хранение значения ФО в регистре сведений может быть обусловлено необходимостью управлять видимостью элементов диалога по нескольким условиям, иначе говоря, ФО включит видимость тогда, когда найдет запись, в Регистре сведений совпадающую по всем переданным значениям измерений, а так же хранение значения в регистре сведений позволит реализовать хранение истории изменений значения.
Для примера рассмотрим такую ситуацию:
— Валютный учет действует только для определенной организации и определенного склада в соответствии с этим видимость элемента «Валюта» в документе «Продажа», должна появляться только для соответствующей организации и соответствующего склада.
Для решения этой задачи изменим свойство хранение ФО «Валютный учет» с реквизита справочника, на измерение регистра сведений.
Для начала создадим регистр сведений в котором будем хранить значение в разрезе измерений.
Изменим значение хранение ФО на ресурс регистра сведений.
Создадим два объекта ПФО «Организация» и «Склад» и укажем, откуда брать значения для параметров.
В документе продажа будем вызывать процедуру «УстановкаПараметровФО()» для установки значения ПФО в обработчиках событий : «ПриСозданииНаСервере» и «ПриИзменении» при изменении значений элементов формы «Организация» и «Склад».
Проверяем что получилось…
В регистр сведений добавляем запись, содержащую значения для какой организации и какого склада ведется валютный учет.
Добавляем документ и выбираем организацию и склад..
Меняем склад на другой.
Как предполагалось –элемент формы «Валюта» просто исчез с формы.
В этой статье мы познакомились с механизмом ФО и рассмотрели базовые приемы работы с объектами конфигурации ФО и ПФО.
Благодарю за внимание.