gifts2017

Валовая прибыль из документа "Заказ покупателя" для оценки эффективности предполагаемой продажи

Опубликовал Николай Степанов (Tapochki-tmn) в раздел Программирование - Практика программирования

Чтобы не формировать несколько отчетов выставляя фильтры по организации/складам/номенклатуре/документу-регистратору и не сводить потом всю эту информацию воедино пытаясь оценить эффективность и рентабельность предполагаемой продажи по конкретному документу заказа покупателя предлагаю встроить в документ вызов отчета по валовой прибыли, с подменой запроса чтобы увидеть данные по себестоимости и рассчитать прибыль/эффективность/рентабельность с уже настроенными фильтрами по данным из заказа покупателя. Доработка разрабатывалась для УПП 1.3, но может быть встроена и в УТ 10.3.  Может кому пригодится.
В другой моей статье рассматривается подобная доработка для вызова типового отчета по валовой прибыли из документа реализации. 
Там действительно вызывался типовой отчет, только задавался фильтр по документу-регистратору.

В данном же случае требуется оценить полезность сделки до свершения сделки, т.е. до создания и проведения документа реализации. 
Исходя из этого, сразу обращаю внимание, что данные по себестоимости будем получать из регистра "ПартииТоватовНаСкладах" на  момент времени документа заказа покупателя и накладывая фильтры на регистр через ЛЕВОЕ СОЕДИНЕНИЕ. 
Причем, если склад указан в табличной части заказа, то данные из регистра будут отбираться с учетом фильтра по складу, иначе по всей организации указанной в шапке заказа.

Предполагается, что кнопку для вызова прилагаемой процедуры сумеете встроить сами :)



Процедура ДействияФормыВаловаяПрибыльПоДокументу(Кнопка)

	    Попытка

	 

	        ИмяОтчета = "ВаловаяПрибыль";

	

	        ОтчетОбъект = Отчеты[ИмяОтчета].Создать();

	

	        ФормаОтчета = ОтчетОбъект.ПолучитьФорму();

	

	        // Содержит название отчета, которое будет выводиться в шапке.

	        // Тип: Строка.

	        // Пример:

	        // УниверсальныйОтчет.мНазваниеОтчета = "Название отчета";

	        ОтчетОбъект.УниверсальныйОтчет.мНазваниеОтчета = "Валовая прибыль по документу (Не меняйте настройки этого отчета ! Это не типовой отчет по валовой прибыли.)";

	        ОтчетОбъект.УниверсальныйОтчет.ПоказыватьЗаголовок = Истина;

	

	        Попытка

	            ФормаОтчета.СпособОтображенияОкна = ВариантСпособаОтображенияОкна.Максимизированное;

	        Исключение

	        КонецПопытки;

	        ФормаОтчета.УниверсальныйОтчет.ВариантОформления = СтандартноеОформление.Камень;

	

	

	        ОтчетОбъект.УниверсальныйОтчет.мВосстанавливатьНастройкиПриОткрытии = Ложь;

	

	        ФормаОтчета.УниверсальныйОтчет.ДатаНач = Дата;

	        ФормаОтчета.УниверсальныйОтчет.ДатаКон = Дата;

	        ФормаОтчета.УниверсальныйОтчет.ОтрицательноеКрасным    = Истина;

	        ФормаОтчета.УниверсальныйОтчет.ВыводитьДетальныеЗаписи = Ложь;

	        ФормаОтчета.УниверсальныйОтчет.ВыводитьОбщиеИтоги      = Истина;

	

	    Исключение

	        Предупреждение("Отчет не обнаружен. Возможно у Вас его нет или он не включен в состав программы.");

	        Возврат;

	    КонецПопытки;

	

	        ФормаОтчета.Открыть();

	

	        ПостроительОтчета = ФормаОтчета.УниверсальныйОтчет.ПостроительОтчета;

	        УниверсальныйОтчет = ФормаОтчета.УниверсальныйОтчет;

	

	        // Описание исходного текста запроса.

	        ТекстЗапроса =

	        "ВЫБРАТЬ РАЗРЕШЕННЫЕ

	        |   ЗаказПокупателяТовары.Номенклатура КАК Номенклатура,

	        |   ЗаказПокупателяТовары.Ссылка.Организация КАК Организация,

	        |   ВЫБОР

	        |       КОГДА НЕ ТИПЗНАЧЕНИЯ(ЗаказПокупателяТовары.Размещение) = ТИП(Справочник.Склады)

	        |               ИЛИ ЗаказПокупателяТовары.Размещение = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)

	        |           ТОГДА ""По всем складам""

	        |       ИНАЧЕ ЗаказПокупателяТовары.Размещение

	        |   КОНЕЦ КАК Склад,

	        |   ВЫБОР

	        |       КОГДА НЕ ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток ЕСТЬ NULL

	        |           ТОГДА ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток

	        |       КОГДА НЕ ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток ЕСТЬ NULL

	        |           ТОГДА ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток

	        |       ИНАЧЕ 0

	        |   КОНЕЦ КАК КоличествоОстаток,

	        |   ВЫБОР

	        |       КОГДА ЗаказПокупателяТовары.Номенклатура.ЕдиницаДляОтчетов.Коэффициент > 0

	        |           ТОГДА ЗаказПокупателяТовары.Количество * ЗаказПокупателяТовары.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / ЗаказПокупателяТовары.Номенклатура.ЕдиницаДляОтчетов.Коэффициент

	        |       ИНАЧЕ 0

	        |   КОНЕЦ КАК ЗаказПокупателяКоличествоВЕдиницахДляОтчетов,

	        |   ВЫБОР

	        |       КОГДА ЗаказПокупателяТовары.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент > 0

	        |           ТОГДА ЗаказПокупателяТовары.Количество * ЗаказПокупателяТовары.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент

	        |       ИНАЧЕ 0

	        |   КОНЕЦ КАК ЗаказПокупателяКоличествоВБазовыхЕдиницах,

	        |   ВЫБОР

	        |       КОГДА НЕ ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток ЕСТЬ NULL

	        |           ТОГДА ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.СтоимостьОстаток / ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток

	        |       КОГДА НЕ ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток ЕСТЬ NULL

	        |           ТОГДА ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.СтоимостьОстаток / ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток

	        |       ИНАЧЕ 0

	        |   КОНЕЦ КАК СебестоимостьНачальныйОстатоток,

	        |   ВЫБОР

	        |       КОГДА НЕ ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.СтоимостьОстаток ЕСТЬ NULL

	        |           ТОГДА ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.СтоимостьОстаток

	        |       КОГДА НЕ ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.СтоимостьОстаток ЕСТЬ NULL

	        |           ТОГДА ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.СтоимостьОстаток

	        |       ИНАЧЕ 0

	        |   КОНЕЦ КАК СтоимостьОстаток,

	        |   ЗаказПокупателяТовары.Количество КАК ЗаказПокупателяКоличество,

	        |   ВЫБОР

	        |       КОГДА НЕ ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.СтоимостьОстаток ЕСТЬ NULL

	        |               И ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.СтоимостьОстаток > 0

	        |               И НЕ ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток ЕСТЬ NULL

	        |               И ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток > 0

	        |           ТОГДА ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.СтоимостьОстаток / ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток * ЗаказПокупателяТовары.Количество

	        |       КОГДА НЕ ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.СтоимостьОстаток ЕСТЬ NULL

	        |               И ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.СтоимостьОстаток > 0

	        |               И НЕ ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток ЕСТЬ NULL

	        |               И ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток > 0

	        |           ТОГДА ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.СтоимостьОстаток / ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток * ЗаказПокупателяТовары.Количество

	        |       ИНАЧЕ 0

	        |   КОНЕЦ КАК СебестоимостьЗакупки,

	        |   ЗаказПокупателяТовары.Сумма КАК ЗаказПокупателяСумма,

	        |   ВЫБОР

	        |       КОГДА НЕ ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.СтоимостьОстаток ЕСТЬ NULL

	        |               И ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.СтоимостьОстаток > 0

	        |               И НЕ ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток ЕСТЬ NULL

	        |               И ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток > 0

	        |           ТОГДА ЗаказПокупателяТовары.Сумма - ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.СтоимостьОстаток / ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток * ЗаказПокупателяТовары.Количество

	        |       КОГДА НЕ ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.СтоимостьОстаток ЕСТЬ NULL

	        |               И ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.СтоимостьОстаток > 0

	        |               И НЕ ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток ЕСТЬ NULL

	        |               И ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток > 0

	        |           ТОГДА ЗаказПокупателяТовары.Сумма - ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.СтоимостьОстаток / ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток * ЗаказПокупателяТовары.Количество

	        |       ИНАЧЕ 0

	        |   КОНЕЦ КАК ВаловаяПрибыль,

	        |   ВЫБОР

	        |       КОГДА НЕ ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.СтоимостьОстаток ЕСТЬ NULL

	        |               И ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.СтоимостьОстаток > 0

	        |               И НЕ ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток ЕСТЬ NULL

	        |               И ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток > 0

	        |           ТОГДА (ЗаказПокупателяТовары.Сумма - ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.СтоимостьОстаток / ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток * ЗаказПокупателяТовары.Количество) / (ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.СтоимостьОстаток / ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток * ЗаказПокупателяТовары.Количество) * 100

	        |       КОГДА НЕ ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.СтоимостьОстаток ЕСТЬ NULL

	        |               И ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.СтоимостьОстаток > 0

	        |               И НЕ ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток ЕСТЬ NULL

	        |               И ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток > 0

	        |           ТОГДА (ЗаказПокупателяТовары.Сумма - ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.СтоимостьОстаток / ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток * ЗаказПокупателяТовары.Количество) / (ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.СтоимостьОстаток / ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток * ЗаказПокупателяТовары.Количество) * 100

	        |       ИНАЧЕ 0

	        |   КОНЕЦ КАК Эффективность

	        |{ВЫБРАТЬ

	        |   Номенклатура.*,

	        |   Организация,

	        |   Склад,

	        |   СебестоимостьНачальныйОстатоток КАК ЦенаЗакупочная,

	        |   СтоимостьОстаток,

	        |   ЗаказПокупателяКоличество,

	        |   СебестоимостьЗакупки КАК СебестоимостьЗакупки,

	        |   ЗаказПокупателяСумма КАК ЗаказПокупателяСумма,

	        |   ВаловаяПрибыль КАК ВаловаяПрибыль,

	        |   ЗаказПокупателяКоличествоВЕдиницахДляОтчетов,

	        |   ЗаказПокупателяКоличествоВБазовыхЕдиницах,

	        |   Эффективность}

	        |ИЗ

	        |   Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары

	        |       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&ПозицияДокумента {(&ПозицияДокумента)}, {(Номенклатура).* КАК Номенклатура, (Организация).* КАК Организация, (Склад).* КАК Склад}) КАК ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация

	        |       ПО ЗаказПокупателяТовары.Номенклатура = ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.Номенклатура

	        |           И ЗаказПокупателяТовары.Размещение = ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.Склад

	        |           И ЗаказПокупателяТовары.Ссылка.Организация = ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.Организация

	        |       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&ПозицияДокумента {(&ПозицияДокумента)}, {(Номенклатура).* КАК Номенклатура, (Организация).* КАК Организация, (Склад).* КАК Склад}) КАК ПартииТоваровНаСкладахСвязьНоменклатураОрганизация

	        |       ПО ЗаказПокупателяТовары.Номенклатура = ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.Номенклатура

	        |           И ЗаказПокупателяТовары.Ссылка.Организация = ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.Организация

	        |ГДЕ

	        |   ЗаказПокупателяТовары.Ссылка = &ЗаказПокупателя

	        |{ГДЕ

	        |   ЗаказПокупателяТовары.Номенклатура.*,

	        |   ЗаказПокупателяТовары.Ссылка.Организация,

	        |   (ВЫБОР

	        |           КОГДА НЕ ТИПЗНАЧЕНИЯ(ЗаказПокупателяТовары.Размещение) = ТИП(Справочник.Склады)

	        |                   ИЛИ ЗаказПокупателяТовары.Размещение = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)

	        |               ТОГДА ""По всем складам""

	        |           ИНАЧЕ ЗаказПокупателяТовары.Размещение

	        |       КОНЕЦ) КАК Склад}

	        |{УПОРЯДОЧИТЬ ПО

	        |   Номенклатура.*,

	        |   Организация,

	        |   Склад}

	        |ИТОГИ

	        |   СУММА(КоличествоОстаток),

	        |   СУММА(ЗаказПокупателяКоличествоВЕдиницахДляОтчетов),

	        |   СУММА(ЗаказПокупателяКоличествоВБазовыхЕдиницах),

	        |   МАКСИМУМ(СебестоимостьНачальныйОстатоток),

	        |   СУММА(СтоимостьОстаток),

	        |   СУММА(ЗаказПокупателяКоличество),

	        |   СУММА(СебестоимостьЗакупки),

	        |   СУММА(ЗаказПокупателяСумма),

	        |   СУММА(ВаловаяПрибыль),

	        |   СУММА(Эффективность)

	        |ПО

	        |   ОБЩИЕ

	        |{ИТОГИ ПО

	        |   Номенклатура.*,

	        |   Организация,

	        |   Склад}";

	

	

	        // Инициализация текста запроса построителя отчета

	        ПостроительОтчета.Текст = ТекстЗапроса;

	

	        //Заполним параметры запроса

	        ПостроительОтчета.Параметры.Вставить("ЗаказПокупателя", ЭтотОбъект.Ссылка);

	        ПостроительОтчета.Параметры.Вставить("ПозицияДокумента", Новый Граница(ЭтотОбъект.МоментВремени(), ВидГраницы.Исключая));

	

	        // Представления полей отчета.

	        // Необходимо вызывать для каждого поля запроса.

	        // УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить(<ИмяПоля>, <ПредставлениеПоля>);

	

	        УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Номенклатура", "Номенклатура");

	        УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Организация", "Организация");

	        УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Склад", "Склад");

	

	        УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("ЗаказПокупателяКоличество","Количество (ед. хранения)");

	        УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("ЗаказПокупателяКоличествоВБазовыхЕдиницах","Количество (базовых ед.)");

	        УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("ЗаказПокупателяКоличествоВЕдиницахДляОтчетов","Количество (ед. отчетов)");

	        УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("СебестоимостьЗакупки","Себестоимость");

	        УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("ЗаказПокупателяСумма","Сумма продажи");

	        УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("ВаловаяПрибыль","Валовая прибыль");

	        УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Эффективность", "Эффективность, %");

	

	        // Добавление показателей

	        ВалютаУпр = глЗначениеПеременной("ВалютаУправленческогоУчета");

	        // Необходимо вызывать для каждого добавляемого показателя.

	        // УниверсальныйОтчет.ДобавитьПоказатель(<ИмяПоказателя>, <ПредставлениеПоказателя>, <ВключенПоУмолчанию>, <Формат>, <ИмяГруппы>, <ПредставлениеГруппы>);

	        УниверсальныйОтчет.ДобавитьПоказатель("ЗаказПокупателяКоличество","Количество", Истина, "ЧЦ=15; ЧДЦ=3", "Количество", "Количество");

	        УниверсальныйОтчет.ДобавитьПоказатель("ЗаказПокупателяКоличествоВБазовыхЕдиницах", "Базовых ед.", Истина, "ЧЦ=15; ЧДЦ=3", "Количество", "Количество");

	        УниверсальныйОтчет.ДобавитьПоказатель("ЗаказПокупателяКоличествоВЕдиницахДляОтчетов", "Ед. отчетов", Истина, "ЧЦ=15; ЧДЦ=3", "Количество", "Количество");

	        УниверсальныйОтчет.ДобавитьПоказатель("СебестоимостьЗакупки", "Себестоимость (" + ВалютаУпр + ")", Истина, "ЧЦ=15; ЧДЦ=2");//, "Стоимость", "Стоимость (" + ВалютаУпр + ")");

	        УниверсальныйОтчет.ДобавитьПоказатель("ЗаказПокупателяСумма", "Стоимость продажи (" + ВалютаУпр + ")", Истина, "ЧЦ=15; ЧДЦ=2"); //, "Стоимость", "Стоимость (" + ВалютаУпр + ")");

	        УниверсальныйОтчет.ДобавитьПоказатель("ВаловаяПрибыль", "Валовая прибыль (" + ВалютаУпр + ")", Истина, "ЧЦ=15; ЧДЦ=2");

	        УниверсальныйОтчет.ДобавитьПоказатель("Эффективность", "Эффективность, %", Истина, "ЧЦ=15; ЧДЦ=2");

	

	

	        // Добавление предопределенных группировок строк отчета.

	        // Необходимо вызывать для каждой добавляемой группировки строки.

	        // УниверсальныйОтчет.ДобавитьИзмерениеСтроки(<ПутьКДанным>);

	        УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Номенклатура");

	        УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Организация");

	        УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Склад");

	

	        // Добавление предопределенных группировок колонок отчета.

	        // Необходимо вызывать для каждой добавляемой группировки колонки.

	        // УниверсальныйОтчет.ДобавитьИзмерениеКолонки(<ПутьКДанным>);

	

	        // Добавление предопределенных отборов отчета.

	        // Необходимо вызывать для каждого добавляемого отбора.

	        // УниверсальныйОтчет.ДобавитьОтбор(<ПутьКДанным>);

	        УниверсальныйОтчет.ДобавитьОтбор("Номенклатура");

	        УниверсальныйОтчет.ДобавитьОтбор("Организация");

	        УниверсальныйОтчет.ДобавитьОтбор("Склад");

	

	

	        // Установка представлений полей

	        УниверсальныйОтчет.УстановитьПредставленияПолей(УниверсальныйОтчет.мСтруктураПредставлениеПолей, УниверсальныйОтчет.ПостроительОтчета);

	

	        // Заполнение начальных настроек универсального отчета

	        УниверсальныйОтчет.УстановитьНачальныеНастройки(Ложь);

	

	        ФормаОтчета.ОбновитьОтчет();

	        //ФормаОтчета.ЭлементыФормы.ПолеТабличногоДокументаРезультат.ПоказатьУровеньГруппировокСтрок(0);

	

	

	    //КонецЕсли;

	КонецПроцедуры



См. также

Подписаться Добавить вознаграждение
Комментарии
1. Макас (makas) 09.08.14 00:37
А как внешнюю печатную форму почему нельзя сделать отчёт?
2. Сергей Ожерельев (Поручик) 08.08.14 22:53
(0) Гораздо полезнее будет оформить вызов отчета из внешней печатной формы.
3. Николай Степанов (Tapochki-tmn) 11.08.14 05:28
Руководство захотело кнопку в документе. Им так нагляднее. Но если переделаю, выложу как внешнюю печатную форму.
4. Светлана Куприянова (Merlin12042009) 13.08.14 12:22
Очень хорошая статья.Мне пригодилась. И вообще,когда наберется достаточное количество статей с конкретными нужными, а не надуманными примерами, можно напечатать книгу.
5. Антон Собейко (sobeyko2008) 13.08.14 10:17
6. Сергей Ожерельев (Поручик) 13.08.14 11:14
(5) УТ 10.3? В ней в РегистрНакопления.ПартииТоваровНаСкладах нет измерения Организация.
7. Сергей Ожерельев (Поручик) 13.08.14 13:17
(0) Встроить в УТ 10.3 можно только после доработки текста запроса.
8. Антон Собейко (sobeyko2008) 13.08.14 14:20
Автор доработай пожалуйста, а то я далеко не программист!
9. Антон Собейко (sobeyko2008) 13.08.14 18:52
Вобщем кому нужно для 10.3 пользуйтесь:

Процедура ДействияФормыВаловаяПрибыльПоДокументу(Кнопка)

        Попытка

            ИмяОтчета = "ВаловаяПрибыль";
            ОтчетОбъект = Отчеты[ИмяОтчета].Создать();
            ФормаОтчета = ОтчетОбъект.ПолучитьФорму();

            // Содержит название отчета, которое будет выводиться в шапке.
            // Тип: Строка.
            // Пример:
            // УниверсальныйОтчет.мНазваниеОтчета = "Название отчета";
            ОтчетОбъект.УниверсальныйОтчет.мНазваниеОтчета = "Валовая прибыль по документу (Не меняйте настройки этого отчета ! Это не типовой отчет по валовой прибыли.)";
            ОтчетОбъект.УниверсальныйОтчет.ПоказыватьЗаголовок = Истина;

            Попытка

                ФормаОтчета.СпособОтображенияОкна = ВариантСпособаОтображенияОкна.Максимизированное;

            Исключение

            КонецПопытки;

            ФормаОтчета.УниверсальныйОтчет.ВариантОформления = СтандартноеОформление.Камень;

	

	

            ОтчетОбъект.УниверсальныйОтчет.мВосстанавливатьНастройкиПриОткрытии = Ложь;

	

            ФормаОтчета.УниверсальныйОтчет.ДатаНач = Дата;

            ФормаОтчета.УниверсальныйОтчет.ДатаКон = Дата;

            ФормаОтчета.УниверсальныйОтчет.ОтрицательноеКрасным    = Истина;

            ФормаОтчета.УниверсальныйОтчет.ВыводитьДетальныеЗаписи = Ложь;

            ФормаОтчета.УниверсальныйОтчет.ВыводитьОбщиеИтоги      = Истина;

	

        Исключение

            Предупреждение("Отчет не обнаружен. Возможно у Вас его нет или он не включен в состав программы.");

            Возврат;

        КонецПопытки;

	

            ФормаОтчета.Открыть();

	

            ПостроительОтчета = ФормаОтчета.УниверсальныйОтчет.ПостроительОтчета;

            УниверсальныйОтчет = ФормаОтчета.УниверсальныйОтчет;

	

            // Описание исходного текста запроса.

            ТекстЗапроса =

            "ВЫБРАТЬ РАЗРЕШЕННЫЕ
            |   ЗаказПокупателяТовары.Номенклатура КАК Номенклатура,
			//|   ЗаказПокупателяТовары.Ссылка.Организация КАК Организация,
            |   ВЫБОР
            |       КОГДА НЕ ТИПЗНАЧЕНИЯ(ЗаказПокупателяТовары.Размещение) = ТИП(Справочник.Склады)
            |               ИЛИ ЗаказПокупателяТовары.Размещение = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
            |           ТОГДА ""По всем складам""
            |       ИНАЧЕ ЗаказПокупателяТовары.Размещение
            |   КОНЕЦ КАК Склад,
            |   ВЫБОР
            |       КОГДА НЕ ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток ЕСТЬ NULL
            |           ТОГДА ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток
            |       КОГДА НЕ ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток ЕСТЬ NULL
            |           ТОГДА ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток
            |       ИНАЧЕ 0
            |   КОНЕЦ КАК КоличествоОстаток,
            |   ВЫБОР
            |       КОГДА ЗаказПокупателяТовары.Номенклатура.ЕдиницаДляОтчетов.Коэффициент > 0
            |           ТОГДА ЗаказПокупателяТовары.Количество * ЗаказПокупателяТовары.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / ЗаказПокупателяТовары.Номенклатура.ЕдиницаДляОтчетов.Коэффициент
            |       ИНАЧЕ 0
            |   КОНЕЦ КАК ЗаказПокупателяКоличествоВЕдиницахДляОтчетов,
            |   ВЫБОР
            |       КОГДА ЗаказПокупателяТовары.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент > 0
            |           ТОГДА ЗаказПокупателяТовары.Количество * ЗаказПокупателяТовары.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент
            |       ИНАЧЕ 0
            |   КОНЕЦ КАК ЗаказПокупателяКоличествоВБазовыхЕдиницах,
            |   ВЫБОР
            |       КОГДА НЕ ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток ЕСТЬ NULL
            |           ТОГДА ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.СтоимостьОстаток / ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток
            |       КОГДА НЕ ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток ЕСТЬ NULL
            |           ТОГДА ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.СтоимостьОстаток / ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток
            |       ИНАЧЕ 0
            |   КОНЕЦ КАК СебестоимостьНачальныйОстатоток,
            |   ВЫБОР
            |       КОГДА НЕ ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.СтоимостьОстаток ЕСТЬ NULL
            |           ТОГДА ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.СтоимостьОстаток
            |       КОГДА НЕ ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.СтоимостьОстаток ЕСТЬ NULL
            |           ТОГДА ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.СтоимостьОстаток
            |       ИНАЧЕ 0
            |   КОНЕЦ КАК СтоимостьОстаток,
            |   ЗаказПокупателяТовары.Количество КАК ЗаказПокупателяКоличество,
            |   ВЫБОР
            |       КОГДА НЕ ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.СтоимостьОстаток ЕСТЬ NULL
            |               И ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.СтоимостьОстаток > 0
            |               И НЕ ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток ЕСТЬ NULL
            |               И ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток > 0
            |           ТОГДА ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.СтоимостьОстаток / ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток * ЗаказПокупателяТовары.Количество
            |       КОГДА НЕ ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.СтоимостьОстаток ЕСТЬ NULL
            |               И ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.СтоимостьОстаток > 0
            |               И НЕ ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток ЕСТЬ NULL
            |               И ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток > 0
            |           ТОГДА ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.СтоимостьОстаток / ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток * ЗаказПокупателяТовары.Количество
            |       ИНАЧЕ 0
            |   КОНЕЦ КАК СебестоимостьЗакупки,
            |   ЗаказПокупателяТовары.Сумма КАК ЗаказПокупателяСумма,
            |   ВЫБОР
            |       КОГДА НЕ ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.СтоимостьОстаток ЕСТЬ NULL
            |               И ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.СтоимостьОстаток > 0
            |               И НЕ ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток ЕСТЬ NULL
            |               И ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток > 0
            |           ТОГДА ЗаказПокупателяТовары.Сумма - ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.СтоимостьОстаток / ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток * ЗаказПокупателяТовары.Количество
            |       КОГДА НЕ ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.СтоимостьОстаток ЕСТЬ NULL
            |               И ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.СтоимостьОстаток > 0
            |               И НЕ ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток ЕСТЬ NULL
            |               И ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток > 0
            |           ТОГДА ЗаказПокупателяТовары.Сумма - ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.СтоимостьОстаток / ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток * ЗаказПокупателяТовары.Количество
            |       ИНАЧЕ 0
            |   КОНЕЦ КАК ВаловаяПрибыль,
            |   ВЫБОР
            |       КОГДА НЕ ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.СтоимостьОстаток ЕСТЬ NULL
            |               И ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.СтоимостьОстаток > 0
            |               И НЕ ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток ЕСТЬ NULL
            |               И ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток > 0
            |           ТОГДА (ЗаказПокупателяТовары.Сумма - ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.СтоимостьОстаток / ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток * ЗаказПокупателяТовары.Количество) / (ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.СтоимостьОстаток / ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.КоличествоОстаток * ЗаказПокупателяТовары.Количество) * 100
            |       КОГДА НЕ ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.СтоимостьОстаток ЕСТЬ NULL
            |               И ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.СтоимостьОстаток > 0
            |               И НЕ ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток ЕСТЬ NULL
            |               И ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток > 0
            |           ТОГДА (ЗаказПокупателяТовары.Сумма - ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.СтоимостьОстаток / ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток * ЗаказПокупателяТовары.Количество) / (ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.СтоимостьОстаток / ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.КоличествоОстаток * ЗаказПокупателяТовары.Количество) * 100
            |       ИНАЧЕ 0
            |   КОНЕЦ КАК Эффективность
            |{ВЫБРАТЬ
            |   Номенклатура.*,
			//|   Организация,
            |   Склад,
            |   СебестоимостьНачальныйОстатоток КАК ЦенаЗакупочная,
            |   СтоимостьОстаток,
            |   ЗаказПокупателяКоличество,
            |   СебестоимостьЗакупки КАК СебестоимостьЗакупки,
            |   ЗаказПокупателяСумма КАК ЗаказПокупателяСумма,
            |   ВаловаяПрибыль КАК ВаловаяПрибыль,
            |   ЗаказПокупателяКоличествоВЕдиницахДляОтчетов,
            |   ЗаказПокупателяКоличествоВБазовыхЕдиницах,
            |   Эффективность}
            |ИЗ
            |   Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
			//|       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&ПозицияДокумента {(&ПозицияДокумента)}, {(Номенклатура).* КАК Номенклатура, (Организация).* КАК Организация, (Склад).* КАК Склад}) КАК ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация
			|       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&ПозицияДокумента {(&ПозицияДокумента)}, {(Номенклатура).* КАК Номенклатура, (Склад).* КАК Склад}) КАК ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация
            |       ПО ЗаказПокупателяТовары.Номенклатура = ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.Номенклатура
            |           И ЗаказПокупателяТовары.Размещение = ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.Склад
			//|           И ЗаказПокупателяТовары.Ссылка.Организация = ПартииТоваровНаСкладахСвязьНоменклатураСкладОрганизация.Организация
            //|       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&ПозицияДокумента {(&ПозицияДокумента)}, {(Номенклатура).* КАК Номенклатура, (Организация).* КАК Организация, (Склад).* КАК Склад}) КАК ПартииТоваровНаСкладахСвязьНоменклатураОрганизация
			|       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&ПозицияДокумента {(&ПозицияДокумента)}, {(Номенклатура).* КАК Номенклатура, (Склад).* КАК Склад}) КАК ПартииТоваровНаСкладахСвязьНоменклатураОрганизация
            |       ПО ЗаказПокупателяТовары.Номенклатура = ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.Номенклатура
			//|           И ЗаказПокупателяТовары.Ссылка.Организация = ПартииТоваровНаСкладахСвязьНоменклатураОрганизация.Организация
            |ГДЕ
            |   ЗаказПокупателяТовары.Ссылка = &ЗаказПокупателя
            |{ГДЕ
            |   ЗаказПокупателяТовары.Номенклатура.*,
			//|   ЗаказПокупателяТовары.Ссылка.Организация,
            |   (ВЫБОР
            |           КОГДА НЕ ТИПЗНАЧЕНИЯ(ЗаказПокупателяТовары.Размещение) = ТИП(Справочник.Склады)
            |                   ИЛИ ЗаказПокупателяТовары.Размещение = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
            |               ТОГДА ""По всем складам""
            |           ИНАЧЕ ЗаказПокупателяТовары.Размещение
            |       КОНЕЦ) КАК Склад}
            |{УПОРЯДОЧИТЬ ПО
            |   Номенклатура.*,
			//|   Организация,
            |   Склад}
            |ИТОГИ
            |   СУММА(КоличествоОстаток),
            |   СУММА(ЗаказПокупателяКоличествоВЕдиницахДляОтчетов),
            |   СУММА(ЗаказПокупателяКоличествоВБазовыхЕдиницах),
            |   МАКСИМУМ(СебестоимостьНачальныйОстатоток),
            |   СУММА(СтоимостьОстаток),
            |   СУММА(ЗаказПокупателяКоличество),
            |   СУММА(СебестоимостьЗакупки),
            |   СУММА(ЗаказПокупателяСумма),
            |   СУММА(ВаловаяПрибыль),
            |   СУММА(Эффективность)
            |ПО
            |   ОБЩИЕ
            |{ИТОГИ ПО
            |   Номенклатура.*,
			//|   Организация,
            |   Склад}";

	

	

            // Инициализация текста запроса построителя отчета

            ПостроительОтчета.Текст = ТекстЗапроса;

	

            //Заполним параметры запроса

            ПостроительОтчета.Параметры.Вставить("ЗаказПокупателя", ЭтотОбъект.Ссылка);

            ПостроительОтчета.Параметры.Вставить("ПозицияДокумента", Новый Граница(ЭтотОбъект.МоментВремени(), ВидГраницы.Исключая));

	

            // Представления полей отчета.

            // Необходимо вызывать для каждого поля запроса.

            // УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить(<ИмяПоля>, <ПредставлениеПоля>);

	

            УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Номенклатура", "Номенклатура");

            УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Организация", "Организация");

            УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Склад", "Склад");

	

            УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("ЗаказПокупателяКоличество","Количество (ед. хранения)");

            УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("ЗаказПокупателяКоличествоВБазовыхЕдиницах","Количество (базовых ед.)");

            УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("ЗаказПокупателяКоличествоВЕдиницахДляОтчетов","Количество (ед. отчетов)");

            УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("СебестоимостьЗакупки","Себестоимость");

            УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("ЗаказПокупателяСумма","Сумма продажи");

            УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("ВаловаяПрибыль","Валовая прибыль");

            УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Эффективность", "Эффективность, %");

	

            // Добавление показателей

            ВалютаУпр = глЗначениеПеременной("ВалютаУправленческогоУчета");

            // Необходимо вызывать для каждого добавляемого показателя.

            // УниверсальныйОтчет.ДобавитьПоказатель(<ИмяПоказателя>, <ПредставлениеПоказателя>, <ВключенПоУмолчанию>, <Формат>, <ИмяГруппы>, <ПредставлениеГруппы>);

            УниверсальныйОтчет.ДобавитьПоказатель("ЗаказПокупателяКоличество","Количество", Истина, "ЧЦ=15; ЧДЦ=3", "Количество", "Количество");

            УниверсальныйОтчет.ДобавитьПоказатель("ЗаказПокупателяКоличествоВБазовыхЕдиницах", "Базовых ед.", Истина, "ЧЦ=15; ЧДЦ=3", "Количество", "Количество");

            УниверсальныйОтчет.ДобавитьПоказатель("ЗаказПокупателяКоличествоВЕдиницахДляОтчетов", "Ед. отчетов", Истина, "ЧЦ=15; ЧДЦ=3", "Количество", "Количество");

            УниверсальныйОтчет.ДобавитьПоказатель("СебестоимостьЗакупки", "Себестоимость (" + ВалютаУпр + ")", Истина, "ЧЦ=15; ЧДЦ=2");//, "Стоимость", "Стоимость (" + ВалютаУпр + ")");

            УниверсальныйОтчет.ДобавитьПоказатель("ЗаказПокупателяСумма", "Стоимость продажи (" + ВалютаУпр + ")", Истина, "ЧЦ=15; ЧДЦ=2"); //, "Стоимость", "Стоимость (" + ВалютаУпр + ")");

            УниверсальныйОтчет.ДобавитьПоказатель("ВаловаяПрибыль", "Валовая прибыль (" + ВалютаУпр + ")", Истина, "ЧЦ=15; ЧДЦ=2");

            УниверсальныйОтчет.ДобавитьПоказатель("Эффективность", "Эффективность, %", Истина, "ЧЦ=15; ЧДЦ=2");

	

	

            // Добавление предопределенных группировок строк отчета.

            // Необходимо вызывать для каждой добавляемой группировки строки.

            // УниверсальныйОтчет.ДобавитьИзмерениеСтроки(<ПутьКДанным>);

            УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Номенклатура");

            УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Организация");

            УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Склад");

	

            // Добавление предопределенных группировок колонок отчета.

            // Необходимо вызывать для каждой добавляемой группировки колонки.

            // УниверсальныйОтчет.ДобавитьИзмерениеКолонки(<ПутьКДанным>);

	

            // Добавление предопределенных отборов отчета.

            // Необходимо вызывать для каждого добавляемого отбора.

            // УниверсальныйОтчет.ДобавитьОтбор(<ПутьКДанным>);

            УниверсальныйОтчет.ДобавитьОтбор("Номенклатура");

            УниверсальныйОтчет.ДобавитьОтбор("Организация");

            УниверсальныйОтчет.ДобавитьОтбор("Склад");

	

	

            // Установка представлений полей

            УниверсальныйОтчет.УстановитьПредставленияПолей(УниверсальныйОтчет.мСтруктураПредставлениеПолей, УниверсальныйОтчет.ПостроительОтчета);

	

            // Заполнение начальных настроек универсального отчета

            УниверсальныйОтчет.УстановитьНачальныеНастройки(Ложь);

	

            ФормаОтчета.ОбновитьОтчет();

            //ФормаОтчета.ЭлементыФормы.ПолеТабличногоДокументаРезультат.ПоказатьУровеньГруппировокСтрок(0);

	

	

        //КонецЕсли;

КонецПроцедуры
...Показать Скрыть
10. Антон Собейко (sobeyko2008) 13.08.14 18:55
Но есть один недостаток этого отчета - если товара нет в наличии, но он заказан у поставщика не мешало бы тоже высчитывать себестоимость, но как я понимаю это уже совершенно другой отчет!
11. Николай Степанов (Tapochki-tmn) 14.08.14 07:36
(10) sobeyko2008,
Почти другой :)
Запускаешь в блокноте или прямо в 1С через меню "Правка" пункт "Заменить" и заменяешь "ЗаказПокупателя" на "ЗаказПоставщику" и вуаля! Легким движением руки "брюки превращаются..." :)
Суть-то одна: из документа берем только номенклатуру и организацию. Все остальное из регистра себестоимости или из регистра сведений "цены номенклатуры", ну или из "цены номенклатуры поставщика"
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа