в. 7.7Бухгалтерия. Нужно выводить РН только по одному типу деталей
24.12.2009
15:13
#41
Я не понял - результат запроса у вас пустой или нет? Если пустой, то какая разница во сколько этапов и что формируется - пустой результат, значит не выполняются условия.
25.12.2009
09:41
#43
"Вобщем вот часть программы ответственная за формирование первой подтаблицы, много лишнего, но пока черновой вариант... а то так долго в небо пальцем тыкать будем...
Процедура Сформировать()
Перем НомСтр;
Дата1=Дата(2001,01,01);
Граница1 =ПолучитьДокументТА();
Рег=СоздатьОбъект("Регистр.ОстаткиТоваров");
Рег.ВременныйРасчет();
РассчитатьРегистрыПо (Граница1);
СпрНом= СоздатьОбъект ("Справочник.Номенклатура");
ТабРасх.Очистить();
ТабРасх.НоваяКолонка("Товар",,,,"Товар",15);
ТабРасх.НоваяКолонка("КолВо",,,,"КолВо",15);
ТабРасх.НоваяКолонка("Цена",,,,"Цена",15);
ТабРасх.НоваяКолонка("Документ",,,,"Документ",15);
ТабРасх.НоваяКолонка("ЦенаБезСк",,,,"ЦенаБезСк",15);
СпЗнач= СоздатьОбъект ("СписокЗначений");
//Продажи в учетный период
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с Дата3 по Дата4;
|Товар = Документ.РасходнаяНакладная.Товар;
|КолВо = Документ.РасходнаяНакладная.Количество;
|ЦенаПоз = Документ.РасходнаяНакладная.Цена;
|ЦенаБезСкидки = Документ.РасходнаяНакладная.ЦенаБезСкидки;
|Дата = Документ.РасходнаяНакладная.ДатаДок;
|Менеджер = Документ.РасходнаяНакладная.Продавец;
|Произ = Документ.РасходнаяНакладная.Товар.Производитель;
|ТекущийДокумент = Документ.РасходнаяНакладная.ТекущийДокумент;
|Группировка Товар Упорядочить по Товар.Код, Товар.Наименование;
|Группировка Дата;
|Группировка ТекущийДокумент;
|Группировка СтрокаДокумента;
|Группировка Менеджер;
|Группировка КолВо;
|Группировка ЦенаПоз;
|Группировка ЦенаБезСкидки;
|Условие (Менеджер в ВыбМенеджер);
|"//}}ЗАПРОС
;
Если Флаг2 = 1 Тогда
Имя2К = "2K";
лПроиз = СоздатьОбъект ("Справочник.Производители");
Если лПроиз.НайтиПоНаименованию (Имя2К,0,0) = 1 Тогда
ТекстЗапроса = ТекстЗапроса + "Условие(Произ = лПроиз.ТекущийЭлемент());"
КонецЕсли;
КонецЕсли;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Пока Запрос.Группировка(1)=1 Цикл
Код=Запрос.ЗначениеУпорядочивания(1,1);
Количество=0;
Наименование=Запрос.ЗначениеУпорядочивания(1,2);
Пока Запрос.Группировка(2)=1 Цикл
Пока Запрос.Группировка(3)=1 Цикл
Документ=Запрос.ТекущийДокумент;
Пока Запрос.Группировка(4)=1 Цикл
Пока Запрос.Группировка(5)=1 Цикл
Пока Запрос.Группировка(6)=1 Цикл
Пока Запрос.Группировка(7)=1 Цикл
Кол=Запрос.КолВо;
ЦенаПозиции=Запрос.ЦенаПоз;
Если Документ.Вид()="РасходнаяНакладная" Тогда
Пока Запрос.Группировка(8)=1 Цикл
ЦенаБезСкидки=Запрос.ЦенаБезСкидки;
КонецЦикла;
Иначе ЦенаБезСкидки=0;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Если СокрЛП(Наименование)="Работа" Тогда
Иначе
ТабРасх.НоваяСтрока();
ТабРасх.Товар=СокрЛП(Строка(Код));
ТабРасх.Производитель=Имя2К;
ТабРасх.КолВо=Кол;
ТабРасх.Цена=ЦенаПозиции;
ТабРасх.Документ=Документ;
ТабРасх.ЦенаБезСк=ЦенаБезСкидки;
Тов=Запрос.Товар;
СпЗнач.ДобавитьЗначение(Тов);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
//Приход в учетный период
ТабПрих.Очистить();
ТабПрих.НоваяКолонка("Товар",,,,"Товар",15);
ТабПрих.НоваяКолонка("СредИзТрех",,,,"СредИзТрех",15);
ТабПрих.НоваяКолонка("Послед",,,,"Послед",15);
ТабПрих.НоваяКолонка("МаксЗак",,,,"МаксЗак",15);
ТабПрих.НоваяКолонка("Примечание",,,,"Примечание",15);
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с Дата1 по Дата4;
|Товар = Документ.ПриходнаяНакладная.Товар, Документ.ВводОстатковТоваров.Товар, Документ.ЗаказНаРемонт.Деталь;
|КолВо = Документ.ПриходнаяНакладная.Количество, Документ.ВводОстатковТоваров.Количество, Документ.ЗаказНаРемонт.КолВо;
|Дата = Документ.ПриходнаяНакладная.ДатаДок, Документ.ВводОстатковТоваров.ДатаДок, Документ.ЗаказНаРемонт.ДатаДок;
//|Произ = Документ.ПриходнаяНакладная.Товар.Производитель;
|ТекущийДокумент = Документ.ПриходнаяНакладная.ТекущийДокумент, Документ.ВводОстатковТоваров.ТекущийДокумент, Документ.ЗаказНаРемонт.ТекущийДокумент;
|Цена = Документ.ПриходнаяНакладная.Цена, Документ.ВводОстатковТоваров.Сумма, Документ.ЗаказНаРемонт.ТекущийДокумент.Сумма;
|Группировка Товар Упорядочить по Товар.Код, Товар.Наименование без групп;
|Группировка Дата;
|Группировка ТекущийДокумент;
|Группировка СтрокаДокумента;
|Группировка КолВо;
|Группировка Цена;
|Условие (СпЗнач.НайтиЗначение(Товар)<>0);
|"//}}ЗАПРОС
;
//Если Флаг2 = 1 Тогда
//Имя2К = "2К";
// Если лПроиз.НайтиПоНаименованию (Имя2К) = 1 Тогда
// ТекстЗапроса = ТекстЗапроса + "Условие(Произ=лПроиз.ТекущийЭлемент());"
// КонецЕсли;
//КонецЕсли;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Таб.ВывестиСекцию("Заголовок");
Пока Запрос.Группировка(1)=1 Цикл
Товар=Запрос.Товар;
Код=Запрос.ЗначениеУпорядочивания(1,1);
СпрНом.НайтиПоКоду(Код);
Примечание=СпрНом.Примечание;
Наименование=Запрос.ЗначениеУпорядочивания(1,2);
ЕТК=Товар.КаталНомер;
РекЦена=Товар.РекомендованнаяЦена;
РознЦена=Товар.РозничнаяЦена;
КолПродаж=0;
МаксЦена=0;
Цена=0;
Ост=СпрНом.ТекущийЭлемент();
ТекОстаток= Рег.СводныйОстаток(Ост,,,"Количество");
ТабРасх.НайтиЗначение(СокрЛП(Строка(Код)),НомСтр,1);
Если НомСтр>0 Тогда
КолПродаж=ТабРасх.ПолучитьЗначение(НомСтр,2);
КонецЕсли;
НомСтр="""";
Цена3=0;
Цена2=0;
Цена1=0;
Пока Запрос.Группировка(2)=1 Цикл
Пока Запрос.Группировка(3)=1 Цикл
Пока Запрос.Группировка(4)=1 Цикл
Пока Запрос.Группировка(5)=1 Цикл
Пока Запрос.Группировка(6)=1 Цикл
ТипДокумента=Запрос.ТекущийДокумент;
Цена=0;
Если ТипДокумента.Вид()="ПриходнаяНакладная" Тогда
Цена=Запрос.Цена;
Если ПустоеЗначение(Цена)=0 Тогда
Себестоимость=0;
КонецЕсли;
ИначеЕсли ТипДокумента.Вид()="ВводОстатковТоваров" Тогда
Количество=Запрос.КолВо;
Если ПустоеЗначение(Количество)=0 Тогда
Цена=(Запрос.Цена)/Количество;
Иначе Цена=Запрос.Цена;
КонецЕсли;
ИначеЕсли ТипДокумента.Вид()="ЗаказНаРемонт" Тогда
Сумма=Запрос.Цена;
Цена=Цена+Сумма;
КонецЕсли;
Если Цена>0 Тогда
Цена3=Цена2;
Цена2=Цена1;
Цена1=Цена;
КонецЕсли;
Если МаксЦена<Цена Тогда
МаксЦена=Цена;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Кол=3;
Если Цена3=0 Тогда
Кол=Кол-1;
КонецЕсли;
Если Цена2=0 Тогда
Кол=Кол-1;
КонецЕсли;
Если Цена1=0 Тогда
Кол=Кол-1;
КонецЕсли;
Если Кол>0 Тогда
СреднЦена=(Цена1+Цена2+Цена3)/Кол;
Иначе СреднЦена=0;
КонецЕсли;
ТабПрих.НоваяСтрока();
ТабПрих.Товар=СокрЛП(Строка(Код));
ТабПрих.СредИзТрех=СреднЦена;
ТабПрих.Послед=Цена1;
ТабПрих.МаксЗак=МаксЦена;
ТабПрих.Примечание=Примечание;
СреднЦена=0;
Цена1=0;
МаксЦена=0;
Примечание=0;
КонецЦикла;
//Формирование результативной таблицы
ИтКолВо = 0;
ИтСумма = 0;
ИтЦена = 0;
ИтЦенаБезСкидкиИтог = 0;
ИтСуммаБезСкидки = 0;
ИтСебестоимость = 0;
ИтПрибыль = 0;
ИтНаценка = 0;
ИтНаценкаБезСкидки = 0;
Для НомерСтроки = 1 По ТабРасх.КоличествоСтрок() Цикл
ЦенаБезСкидкиИтог="""";
ТабРасх.ПолучитьСтрокуПоНомеру(НомерСтроки);
Код=ТабРасх.Товар;
КолВо=ТабРасх.КолВо;
Цена=ТабРасх.Цена;
Документ=ТабРасх.Документ;
ЦенаБезСкидкиИтог=ТабРасх.ЦенаБезСк;
НомСтр="""";
ТабПрих.НайтиЗначение(СокрЛП(Строка(Код)),НомСтр,1);
СредИзТрехЦена=0;
ПослЦена=0;
МаксЦена=0;
Если НомСтр>0 Тогда
СредИзТрехЦена=ТабПрих.ПолучитьЗначение(НомСтр,2);
ПослЦена=ТабПрих.ПолучитьЗначение(НомСтр,3);
МаксЦена=ТабПрих.ПолучитьЗначение(НомСтр,4);
ТабПримечание=ТабПрих.ПолучитьЗначение(НомСтр,5);
КонецЕсли;
НомСтр="""";
СпрНом.НайтиПоКоду(Код);
Наименование=СпрНом.Наименование;
ЕТК=СпрНом.КаталНомер;
Производитель=СпрНом.Производитель;
РекЦена=СпрНом.РекомендованнаяЦена;
РознЦена = ГлПолучитьЦенуНоменклатуры(СпрНом.ТекущийЭлемент(),,Граница1);
Сумм1=КолВо*Цена;
Себ1=КолВо*ПослЦена;
СуммБезСк1=КолВо*ЦенаБезСкидкиИтог;
Если ПустоеЗначение(Себ1)=0 Тогда
Наценка=Сумм1/Себ1;
НацБезСк=СуммБезСк1/Себ1;
Иначе
Наценка="""";
НацБезСк="""";
КонецЕсли;
Себестоимость = ПослЦена*КолВо;
Прибыль = (Цена-ПослЦена)*КолВо;
Таб.Вывестисекцию("Строка");
ИтКолВо = ИтКолВо + КолВо;
ИтСумма = ИтСумма + Сумм1;
ИтЦена = ИтЦена + Цена;
ИтЦенаБезСкидкиИтог = ИтЦенаБезСкидкиИтог + ЦенаБезСкидкиИтог;
ИтСуммаБезСкидки = ИтСуммаБезСкидки + СуммБезСк1;
ИтСебестоимость = ИтСебестоимость + Себестоимость;
ИтПрибыль = ИтПрибыль + Прибыль;
ИтНаценка = ИтСумма / ИтСебестоимость;
ИтНаценкаБезСкидки = ИтСуммаБезСкидки / ИтСебестоимость;
КонецЦикла;"
Процедура Сформировать()
Перем НомСтр;
Дата1=Дата(2001,01,01);
Граница1 =ПолучитьДокументТА();
Рег=СоздатьОбъект("Регистр.ОстаткиТоваров");
Рег.ВременныйРасчет();
РассчитатьРегистрыПо (Граница1);
СпрНом= СоздатьОбъект ("Справочник.Номенклатура");
ТабРасх.Очистить();
ТабРасх.НоваяКолонка("Товар",,,,"Товар",15);
ТабРасх.НоваяКолонка("КолВо",,,,"КолВо",15);
ТабРасх.НоваяКолонка("Цена",,,,"Цена",15);
ТабРасх.НоваяКолонка("Документ",,,,"Документ",15);
ТабРасх.НоваяКолонка("ЦенаБезСк",,,,"ЦенаБезСк",15);
СпЗнач= СоздатьОбъект ("СписокЗначений");
//Продажи в учетный период
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с Дата3 по Дата4;
|Товар = Документ.РасходнаяНакладная.Товар;
|КолВо = Документ.РасходнаяНакладная.Количество;
|ЦенаПоз = Документ.РасходнаяНакладная.Цена;
|ЦенаБезСкидки = Документ.РасходнаяНакладная.ЦенаБезСкидки;
|Дата = Документ.РасходнаяНакладная.ДатаДок;
|Менеджер = Документ.РасходнаяНакладная.Продавец;
|Произ = Документ.РасходнаяНакладная.Товар.Производитель;
|ТекущийДокумент = Документ.РасходнаяНакладная.ТекущийДокумент;
|Группировка Товар Упорядочить по Товар.Код, Товар.Наименование;
|Группировка Дата;
|Группировка ТекущийДокумент;
|Группировка СтрокаДокумента;
|Группировка Менеджер;
|Группировка КолВо;
|Группировка ЦенаПоз;
|Группировка ЦенаБезСкидки;
|Условие (Менеджер в ВыбМенеджер);
|"//}}ЗАПРОС
;
Если Флаг2 = 1 Тогда
Имя2К = "2K";
лПроиз = СоздатьОбъект ("Справочник.Производители");
Если лПроиз.НайтиПоНаименованию (Имя2К,0,0) = 1 Тогда
ТекстЗапроса = ТекстЗапроса + "Условие(Произ = лПроиз.ТекущийЭлемент());"
КонецЕсли;
КонецЕсли;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Пока Запрос.Группировка(1)=1 Цикл
Код=Запрос.ЗначениеУпорядочивания(1,1);
Количество=0;
Наименование=Запрос.ЗначениеУпорядочивания(1,2);
Пока Запрос.Группировка(2)=1 Цикл
Пока Запрос.Группировка(3)=1 Цикл
Документ=Запрос.ТекущийДокумент;
Пока Запрос.Группировка(4)=1 Цикл
Пока Запрос.Группировка(5)=1 Цикл
Пока Запрос.Группировка(6)=1 Цикл
Пока Запрос.Группировка(7)=1 Цикл
Кол=Запрос.КолВо;
ЦенаПозиции=Запрос.ЦенаПоз;
Если Документ.Вид()="РасходнаяНакладная" Тогда
Пока Запрос.Группировка(8)=1 Цикл
ЦенаБезСкидки=Запрос.ЦенаБезСкидки;
КонецЦикла;
Иначе ЦенаБезСкидки=0;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Если СокрЛП(Наименование)="Работа" Тогда
Иначе
ТабРасх.НоваяСтрока();
ТабРасх.Товар=СокрЛП(Строка(Код));
ТабРасх.Производитель=Имя2К;
ТабРасх.КолВо=Кол;
ТабРасх.Цена=ЦенаПозиции;
ТабРасх.Документ=Документ;
ТабРасх.ЦенаБезСк=ЦенаБезСкидки;
Тов=Запрос.Товар;
СпЗнач.ДобавитьЗначение(Тов);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
//Приход в учетный период
ТабПрих.Очистить();
ТабПрих.НоваяКолонка("Товар",,,,"Товар",15);
ТабПрих.НоваяКолонка("СредИзТрех",,,,"СредИзТрех",15);
ТабПрих.НоваяКолонка("Послед",,,,"Послед",15);
ТабПрих.НоваяКолонка("МаксЗак",,,,"МаксЗак",15);
ТабПрих.НоваяКолонка("Примечание",,,,"Примечание",15);
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с Дата1 по Дата4;
|Товар = Документ.ПриходнаяНакладная.Товар, Документ.ВводОстатковТоваров.Товар, Документ.ЗаказНаРемонт.Деталь;
|КолВо = Документ.ПриходнаяНакладная.Количество, Документ.ВводОстатковТоваров.Количество, Документ.ЗаказНаРемонт.КолВо;
|Дата = Документ.ПриходнаяНакладная.ДатаДок, Документ.ВводОстатковТоваров.ДатаДок, Документ.ЗаказНаРемонт.ДатаДок;
//|Произ = Документ.ПриходнаяНакладная.Товар.Производитель;
|ТекущийДокумент = Документ.ПриходнаяНакладная.ТекущийДокумент, Документ.ВводОстатковТоваров.ТекущийДокумент, Документ.ЗаказНаРемонт.ТекущийДокумент;
|Цена = Документ.ПриходнаяНакладная.Цена, Документ.ВводОстатковТоваров.Сумма, Документ.ЗаказНаРемонт.ТекущийДокумент.Сумма;
|Группировка Товар Упорядочить по Товар.Код, Товар.Наименование без групп;
|Группировка Дата;
|Группировка ТекущийДокумент;
|Группировка СтрокаДокумента;
|Группировка КолВо;
|Группировка Цена;
|Условие (СпЗнач.НайтиЗначение(Товар)<>0);
|"//}}ЗАПРОС
;
//Если Флаг2 = 1 Тогда
//Имя2К = "2К";
// Если лПроиз.НайтиПоНаименованию (Имя2К) = 1 Тогда
// ТекстЗапроса = ТекстЗапроса + "Условие(Произ=лПроиз.ТекущийЭлемент());"
// КонецЕсли;
//КонецЕсли;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Таб.ВывестиСекцию("Заголовок");
Пока Запрос.Группировка(1)=1 Цикл
Товар=Запрос.Товар;
Код=Запрос.ЗначениеУпорядочивания(1,1);
СпрНом.НайтиПоКоду(Код);
Примечание=СпрНом.Примечание;
Наименование=Запрос.ЗначениеУпорядочивания(1,2);
ЕТК=Товар.КаталНомер;
РекЦена=Товар.РекомендованнаяЦена;
РознЦена=Товар.РозничнаяЦена;
КолПродаж=0;
МаксЦена=0;
Цена=0;
Ост=СпрНом.ТекущийЭлемент();
ТекОстаток= Рег.СводныйОстаток(Ост,,,"Количество");
ТабРасх.НайтиЗначение(СокрЛП(Строка(Код)),НомСтр,1);
Если НомСтр>0 Тогда
КолПродаж=ТабРасх.ПолучитьЗначение(НомСтр,2);
КонецЕсли;
НомСтр="""";
Цена3=0;
Цена2=0;
Цена1=0;
Пока Запрос.Группировка(2)=1 Цикл
Пока Запрос.Группировка(3)=1 Цикл
Пока Запрос.Группировка(4)=1 Цикл
Пока Запрос.Группировка(5)=1 Цикл
Пока Запрос.Группировка(6)=1 Цикл
ТипДокумента=Запрос.ТекущийДокумент;
Цена=0;
Если ТипДокумента.Вид()="ПриходнаяНакладная" Тогда
Цена=Запрос.Цена;
Если ПустоеЗначение(Цена)=0 Тогда
Себестоимость=0;
КонецЕсли;
ИначеЕсли ТипДокумента.Вид()="ВводОстатковТоваров" Тогда
Количество=Запрос.КолВо;
Если ПустоеЗначение(Количество)=0 Тогда
Цена=(Запрос.Цена)/Количество;
Иначе Цена=Запрос.Цена;
КонецЕсли;
ИначеЕсли ТипДокумента.Вид()="ЗаказНаРемонт" Тогда
Сумма=Запрос.Цена;
Цена=Цена+Сумма;
КонецЕсли;
Если Цена>0 Тогда
Цена3=Цена2;
Цена2=Цена1;
Цена1=Цена;
КонецЕсли;
Если МаксЦена<Цена Тогда
МаксЦена=Цена;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Кол=3;
Если Цена3=0 Тогда
Кол=Кол-1;
КонецЕсли;
Если Цена2=0 Тогда
Кол=Кол-1;
КонецЕсли;
Если Цена1=0 Тогда
Кол=Кол-1;
КонецЕсли;
Если Кол>0 Тогда
СреднЦена=(Цена1+Цена2+Цена3)/Кол;
Иначе СреднЦена=0;
КонецЕсли;
ТабПрих.НоваяСтрока();
ТабПрих.Товар=СокрЛП(Строка(Код));
ТабПрих.СредИзТрех=СреднЦена;
ТабПрих.Послед=Цена1;
ТабПрих.МаксЗак=МаксЦена;
ТабПрих.Примечание=Примечание;
СреднЦена=0;
Цена1=0;
МаксЦена=0;
Примечание=0;
КонецЦикла;
//Формирование результативной таблицы
ИтКолВо = 0;
ИтСумма = 0;
ИтЦена = 0;
ИтЦенаБезСкидкиИтог = 0;
ИтСуммаБезСкидки = 0;
ИтСебестоимость = 0;
ИтПрибыль = 0;
ИтНаценка = 0;
ИтНаценкаБезСкидки = 0;
Для НомерСтроки = 1 По ТабРасх.КоличествоСтрок() Цикл
ЦенаБезСкидкиИтог="""";
ТабРасх.ПолучитьСтрокуПоНомеру(НомерСтроки);
Код=ТабРасх.Товар;
КолВо=ТабРасх.КолВо;
Цена=ТабРасх.Цена;
Документ=ТабРасх.Документ;
ЦенаБезСкидкиИтог=ТабРасх.ЦенаБезСк;
НомСтр="""";
ТабПрих.НайтиЗначение(СокрЛП(Строка(Код)),НомСтр,1);
СредИзТрехЦена=0;
ПослЦена=0;
МаксЦена=0;
Если НомСтр>0 Тогда
СредИзТрехЦена=ТабПрих.ПолучитьЗначение(НомСтр,2);
ПослЦена=ТабПрих.ПолучитьЗначение(НомСтр,3);
МаксЦена=ТабПрих.ПолучитьЗначение(НомСтр,4);
ТабПримечание=ТабПрих.ПолучитьЗначение(НомСтр,5);
КонецЕсли;
НомСтр="""";
СпрНом.НайтиПоКоду(Код);
Наименование=СпрНом.Наименование;
ЕТК=СпрНом.КаталНомер;
Производитель=СпрНом.Производитель;
РекЦена=СпрНом.РекомендованнаяЦена;
РознЦена = ГлПолучитьЦенуНоменклатуры(СпрНом.ТекущийЭлемент(),,Граница1);
Сумм1=КолВо*Цена;
Себ1=КолВо*ПослЦена;
СуммБезСк1=КолВо*ЦенаБезСкидкиИтог;
Если ПустоеЗначение(Себ1)=0 Тогда
Наценка=Сумм1/Себ1;
НацБезСк=СуммБезСк1/Себ1;
Иначе
Наценка="""";
НацБезСк="""";
КонецЕсли;
Себестоимость = ПослЦена*КолВо;
Прибыль = (Цена-ПослЦена)*КолВо;
Таб.Вывестисекцию("Строка");
ИтКолВо = ИтКолВо + КолВо;
ИтСумма = ИтСумма + Сумм1;
ИтЦена = ИтЦена + Цена;
ИтЦенаБезСкидкиИтог = ИтЦенаБезСкидкиИтог + ЦенаБезСкидкиИтог;
ИтСуммаБезСкидки = ИтСуммаБезСкидки + СуммБезСк1;
ИтСебестоимость = ИтСебестоимость + Себестоимость;
ИтПрибыль = ИтПрибыль + Прибыль;
ИтНаценка = ИтСумма / ИтСебестоимость;
ИтНаценкаБезСкидки = ИтСуммаБезСкидки / ИтСебестоимость;
КонецЦикла;"
25.12.2009
10:43
#44
"Да уж - исследователь из вас никакой.
Пришлось немного подстроить конфигурацию, результат такой:
1. Дабы заработало:
Если Флаг2 = 1 Тогда
Имя2К = "2K";
лПроиз = СоздатьОбъект ("Справочник.Производители");
Если лПроиз.НайтиПоНаименованию (Имя2К,0,0) = 1 Тогда
лВыбПроиз = лПроиз.ТекущийЭлемент(); //Как ни странно, но внутри запроса лПроиз.ТекущийЭлемент() не работает, а элемент должен быть выбран через ТекущийЭлемент().
ТекстЗапроса = ТекстЗапроса + "Условие(Произ = лВыбПроиз);"
КонецЕсли;
КонецЕсли;
2. ТабРасх:
1) у вас в начале процедуры написано "ТабРасх.Очистить();", а почему не просто "ТабРасх = СоздатьОбъект ("ТаблицаЗначений");"
2) "ТабРасх.Производитель=Имя2К;" - а где добавлена колонка "Производитель"? Нет её в тексте, и это вызывает ошибку. В добавок странно, зачем присваивать Имя2К. Почему не написать так: "ТабРасх.Производитель=Запрос.Товар.Производитель;"
3. Как это не странно, но элементарная замена условия:
Если Флаг2 = 1 Тогда
Имя2К = "2K";
ТекстЗапроса = ТекстЗапроса + "Условие(Произ.Наименование = Имя2К);"
КонецЕсли;
Показало работоспособность этого кода, т.е. изначально у вас ошибка была где-то в другом месте. Может у меня в базе что-то не так, т.к. все сделано "на скорую руку", но не потребовалось увеличивать Имя2К до длины наименования, что само по себе странно, т.к. помню, что однажды мне приходилось это делать.
p.s. Пытаться решить задачу своими силами - это хорошо, но у вас, на мой взгляд, нет жилки искателя (исследователя). В таком случае - лучше пригласите специалиста, котороый на вашей базе проверит ваш код, сделает его работоспособным и объяснит ошибки."
Пришлось немного подстроить конфигурацию, результат такой:
1. Дабы заработало:
Если Флаг2 = 1 Тогда
Имя2К = "2K";
лПроиз = СоздатьОбъект ("Справочник.Производители");
Если лПроиз.НайтиПоНаименованию (Имя2К,0,0) = 1 Тогда
лВыбПроиз = лПроиз.ТекущийЭлемент(); //Как ни странно, но внутри запроса лПроиз.ТекущийЭлемент() не работает, а элемент должен быть выбран через ТекущийЭлемент().
ТекстЗапроса = ТекстЗапроса + "Условие(Произ = лВыбПроиз);"
КонецЕсли;
КонецЕсли;
2. ТабРасх:
1) у вас в начале процедуры написано "ТабРасх.Очистить();", а почему не просто "ТабРасх = СоздатьОбъект ("ТаблицаЗначений");"
2) "ТабРасх.Производитель=Имя2К;" - а где добавлена колонка "Производитель"? Нет её в тексте, и это вызывает ошибку. В добавок странно, зачем присваивать Имя2К. Почему не написать так: "ТабРасх.Производитель=Запрос.Товар.Производитель;"
3. Как это не странно, но элементарная замена условия:
Если Флаг2 = 1 Тогда
Имя2К = "2K";
ТекстЗапроса = ТекстЗапроса + "Условие(Произ.Наименование = Имя2К);"
КонецЕсли;
Показало работоспособность этого кода, т.е. изначально у вас ошибка была где-то в другом месте. Может у меня в базе что-то не так, т.к. все сделано "на скорую руку", но не потребовалось увеличивать Имя2К до длины наименования, что само по себе странно, т.к. помню, что однажды мне приходилось это делать.
p.s. Пытаться решить задачу своими силами - это хорошо, но у вас, на мой взгляд, нет жилки искателя (исследователя). В таком случае - лучше пригласите специалиста, котороый на вашей базе проверит ваш код, сделает его работоспособным и объяснит ошибки."
28.12.2009
17:23
#45
А можете еще подсказать, как сделать тоже самое но только с документом вида НАРЯД-ЗАКАЗ?
28.12.2009
17:59
#46
"Как я вам подскажу, если:
1. У меня нет такого документа.
2. Вы не указали в чем проблема.
Возьмите запрос, вставьте в отдельную обработку и начните его гонять с разными условиями.
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "...Тут ваш запрос...";
...Тут еще какие-нибудь условия....
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Запрос.Выгрузить(лТабл);
лТабл.ВыбратьСтроку();
В общем когда получите не путую таблицу - значит условия поставили верно.
p.s. Не забывайте, если в условиях используется элемент справочника или документ - они должны быть выбраны через ТекущийЭлемент или ТекущийДокумент. Самое простое и безотказно работающее - поместить для теста поле ввода на форму - там выбраный элемент всегда выбран.
p.p.s. Если решив одну проблему вы не можете справиться с подобной - значит вы ничему не научились. А тут 2 варианта - 1. не могу, 2. не хочу. В любом случае - пригласите специалиста - работы на 1 час."
1. У меня нет такого документа.
2. Вы не указали в чем проблема.
Возьмите запрос, вставьте в отдельную обработку и начните его гонять с разными условиями.
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "...Тут ваш запрос...";
...Тут еще какие-нибудь условия....
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Запрос.Выгрузить(лТабл);
лТабл.ВыбратьСтроку();
В общем когда получите не путую таблицу - значит условия поставили верно.
p.s. Не забывайте, если в условиях используется элемент справочника или документ - они должны быть выбраны через ТекущийЭлемент или ТекущийДокумент. Самое простое и безотказно работающее - поместить для теста поле ввода на форму - там выбраный элемент всегда выбран.
p.p.s. Если решив одну проблему вы не можете справиться с подобной - значит вы ничему не научились. А тут 2 варианта - 1. не могу, 2. не хочу. В любом случае - пригласите специалиста - работы на 1 час."
29.12.2009
14:18
#47
Нужно определить тип справочника Производители.
в таб.части РН Товар выставлен как справочник.номенклатура, а в ЗН товар выставлен просто справочник...
поэтому запрос не работает как для расходной накладной.
в таб.части РН Товар выставлен как справочник.номенклатура, а в ЗН товар выставлен просто справочник...
поэтому запрос не работает как для расходной накладной.
29.12.2009
15:17
#48
"Если я правильно помню (уже года 2 не занимался 7-кой), то запрос поддерживает вызов внешней функции, т.е.:
Функция ЭтоНужныйТовар (Товар)
//Тут логика типа:
Если Товар.Вид() = "Номенклатура" Тогда
Возврат 1;
КонецЕсли;
Возврат 0;
КонецФункции;
Ну а в запросе соответственно получиться
Условие (ЭтоНужныйТовар(Товар) = 1);
Понятное дело, что вам надо это адаптировать под ваши нужды."
Функция ЭтоНужныйТовар (Товар)
//Тут логика типа:
Если Товар.Вид() = "Номенклатура" Тогда
Возврат 1;
КонецЕсли;
Возврат 0;
КонецФункции;
Ну а в запросе соответственно получиться
Условие (ЭтоНужныйТовар(Товар) = 1);
Понятное дело, что вам надо это адаптировать под ваши нужды."
Читают тему
(гостей: 1)