Группа: Пользователи
Сообщений: 108
Спасибо сказали: 2 раз
Рейтинг: 0
Отчет создала первый раз с нуля. И застряла на весе товара в таблице во всех секциях поставила Запрос.РасхОстатокТовара/2*Запрос.Вес, где Запрос.Вес должен вытягивать значение из самого справочника товаров(т.е.|Вес = Регистр.ПартииТоваров.Товар.Вес;) И не получается. Подскажите как решить эту проблему. Второй день с этим ВЕСОМ ковыряюсь Да еще приходная накладная -это возврат от покупателя может я здесь тоже не туплю.
Процедура УдалитьКонтрагента(Режим = 0) Если Режим = 0 Тогда Если МФКонтрагентов.ТекущаяСтрока() <> 0 Тогда МФКонтрагентов.УдалитьЗначение(МФКонтрагентов.ТекущаяСтрока()); КонецЕсли; Иначе Если Вопрос("Список объектов будет полностью очищен! Продолжить?", "Да+Нет") = "Да" Тогда МФКонтрагентов.УдалитьВсе(); КонецЕсли; КонецЕсли; КонецПроцедуры // Удалить
//==================Для списка клиентов====================== Если Эл.Вид()="Контрагенты" Тогда Если МФКонтрагентов.Принадлежит(Эл.ТекущийЭлемент()) = 1 Тогда Сообщить("уже присутствует в списке"); СтатусВозврата(0); Возврат; КонецЕсли; МФКонтрагентов.ДобавитьЗначение(Эл.ТекущийЭлемент(), +"Группа "+Эл.ТекущийЭлемент().Наименование); КонецЕсли; КонецПроцедуры
"//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |ТекДок = Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяНакладная.ТекущийДокумент, Регистр.ПартииТоваров.ТекущийДокумент.ПриходнаяНакладная.ТекущийДокумент; |Покупатель=Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяНакладная.Контрагент, |Регистр.ПартииТоваров.ТекущийДокумент.ПриходнаяНакладная.Контрагент; |Товар = Регистр.ПартииТоваров.Товар; |Вес = Регистр.ПартииТоваров.Товар.Вес; |Нетто = Регистр.ПартииТоваров.Товар.Нетто; |Сумма = Регистр.ПартииТоваров.Оборот; |Кво= Регистр.ПартииТоваров.ОстатокТовара; |КодОперации= Регистр.ПартииТоваров.КодОперации; |КатегорияТовара = Регистр.ПартииТоваров.Товар.КатегорияДляГруппировки; |Условие (ПустоеЗначение(Покупатель)=0); |Условие (ПустоеЗначение(КатегорияТовара)=0); |Условие (Сумма<>0); |Условие(КатегорияТовара в ВыбКатегорияТовара); |Условие(Покупатель в ВыбКонтрагентов); |Условие(Покупатель в МФКонтрагентов); |Функция СуммаСумма = Сумма(Сумма/2); |Функция РасхОстатокТовара=Расход(Кво); |Группировка КатегорияТовара без групп упорядочить по КатегорияТовара.Наименование; |Группировка Покупатель без групп упорядочить по Покупатель.Наименование; |Группировка Товар без групп упорядочить по Товар.Наименование; |Группировка ТекДок; |"//}}ЗАПРОС ;
// накладываем дополнительный фильтр по контрагентам СписокКонтрагентов = СоздатьОбъект("СписокЗначений");
Если глФильтрПоСправочнику("Контрагенты",0,0,ВыбКатегорияКонтрагентов,0,0,СписокКонтрагентов,ТекстЗапроса,0,0,"Контрагент,,,СписокКонтрагентов,,,,,")=0 Тогда Возврат; КонецЕсли;
Если Запрос.Выполнить(ТекстЗапроса)=0 тогда Предупреждение("Запрос по Партиям не выполнился!"); Возврат; КонецЕсли;
Группа: Местный
Сообщений: 298
Спасибо сказали: 98 раз
Рейтинг: 0
inna.innainna84 @ Сегодня, 15:33
, Странно, при таком раскладе должно время от времени кидать ошибку на "Запрос.РасхОстатокТовара/2*Запрос.Вес"... Нет проверки на равенство 0 Запрос.Вес... А зачем деление на 2 ? При таком построении запроса условие должно отработать только в Таб.ВывестиСекцию("Товар"), в других будет 0; К запросу целая телега претензий. Кроме "Группировка()" не помешает использование "ВНачалоВыборки()", "Когда"... Оптимизируйте его без явного указания ТекущийДокумент.РасходнаяНакладная или ТекущийДокумент.РасходнаяПриходнаяНакладная - такое на SQL еще более или менее шустро работает, а на DBF - имеем 2-5 сек "висяка" перед обработкой...
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)
Группа: Пользователи
Сообщений: 108
Спасибо сказали: 2 раз
Рейтинг: 0
mister-x @ Сегодня, 16:26
, Вес вытягивает, по товарно считает верно, но не правильно суммирует итоговые Деление на 2 почему то суммы из регистров тянутся задвоенными
Группа: Основатель
Сообщений: 13981
Из: Киев
Спасибо сказали: 4549 раз
Рейтинг: 3678.1
Цитата(logist @ 04.11.16, 16:36)
Sharzem, вы бы обратили внимание, что пользователь далек от программирования и старается его освоить.
На мой взгляд это inna.innainna84 было бы не плохо писать в каждой теме либо написать 1 раз в подписи о том, что с программированием у неё плохо, но она старается научиться.
Группа: Местный
Сообщений: 298
Спасибо сказали: 98 раз
Рейтинг: 0
logist @ Вчера, 17:31
, Ув, logist, как и обещал выполняю свои обещания исправиться.
Ув. inna.innainna84, итак начнем:
При подготовке отчета, Вы имеете дело с регистром остатков - "ПартииТоваров". Данный регистр имеет: 1. Измерения: Фирма, Товар, Контрагент (Вы упустили Фирму и Контрагент, а они тоже нужны); 2. Ресурсы: ОстатокТовара; 3. Реквизиты: Оборот;
Соответственно мы должны обратиться к измерениям, ресурсам и реквизитам (дополнительным реквизитам, если тип справочник) задав им переменные:
Для получения информации по ресурсам и реквизитам используются функции:
ТекстФункций = " |Функция КолРасход = Расход(Количество) когда (ТекДокумент.Вид() = ""РасходнаяНакладная""); |Функция Сумма = Сумма(Оборот) когда (ТекДокумент.Вид() = ""РасходнаяНакладная""); |Функция ВесРасход = Сумма(Запрос.КолРасход * Вес + Количество - Количество);";
Обратите внимание что в функциях КолРасход и Сумма используется доп условие "Когда". Это для того что бы итоги отбирались только по указанному виду документов. Дело в том что документ Приходная накладная делает движения по приходу, т.е. движений по расход в регистре по данному виду нет. В итоге в функции Сумма у Вас не будет двоиться. По поводу функции ВесРасход то это один из методов борьбы с фичей 7.7. останавливаться здесь не буду. Далее задаем группировки:
ТекстГруппировок = " |Группировка Фирма; |Группировка Категория без групп; |Группировка Контрагент без групп; |Группировка Товар без групп; |Группировка ТекДокумент;";
И условия:
ТекстУсловий = " |Условие(Фирма = ВыбФирма); |Условие(Контрагент в ВыбКонтрагент); |Условие(Категория в ВыбКатегория);";
В итоге:
ТекстЗапроса = ТекстПеременных+РазделительСтрок+ТекстФункций+РазделительСтрок+ТекстГруппировок+РазделительСтрок+ТекстУсловий; Сообщить(ТекстЗапроса); Запрос = СоздатьОбъект("Запрос"); Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; //И в конце уже заполнение выходной таблицы по группировкам 1 - Фирма, 2 - Категория, 3 - Контрагент, 4 - Товар, 5 - ТекДокумент
Если что-то не получиться отпишитесь в теме.
Сообщение отредактировал Vofka - 07.11.16, 9:18
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)
Группа: Пользователи
Сообщений: 108
Спасибо сказали: 2 раз
Рейтинг: 0
Приходная накладная- это приходная (возврат от покупателя) поэтому я применила "Расход(Количество)" к этому док. Я не смогла понять как указать, что это все же возврат, но данные подтягивалась верно со знаком "-" Sharzem @ Сегодня, 12:32
,
|Функция ВесРасход = Сумма(Запрос.КолРасход * Вес + Количество - Количество);"; я изменила на |Функция ВесРасход = Сумма(Запрос.КолРасход * Вес + Количество - Количество) когда (ТекДокумент.Вид() = ""РасходнаяНакладная""); Потому как вытягивает все документы(приход,расход,перемещение,списание)Sharzem @ Вчера, 12:32
,
Группа: Пользователи
Сообщений: 108
Спасибо сказали: 2 раз
Рейтинг: 0
Все же мне кажется нужно во всех переменых указывать док. расходная накладная, а то по группировке контрагент вытягивает и поставщика т.е. |Покупатель=Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяНакладная.Контрагент,
Группа: Местный
Сообщений: 298
Спасибо сказали: 98 раз
Рейтинг: 0
inna.innainna84 @ Сегодня, 2:31
, Вы правы, в Измерение "Контрагент" в модуле проведения действительно пишется не покупатель, а поставщик. Кроме того, в измерении Фирма пусто... А почему бы Вам для этого отчета не воспользоваться регистром "ОборотПродаж" ?
Дело в том что конструкция: Покупатель=Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяНакладная.Контрагент на файловой версии 1 С очень долго будет отрабатывать + сам регистр "ПартииТоваров" тяжелый. Попробуйте так:
ТекстЗапроса = " |Период с ВыбНачПериода по ВыбКонПериода; |Товар = Регистр.ОборотПродаж.Товар; |Контрагент = Регистр.ОборотПродаж.Контрагент; |ТекДокумент = Регистр.ОборотПродаж.ТекущийДокумент; |Фирма = Регистр.ОборотПродаж.ТекущийДокумент.Фирма; |Вес = Регистр.ОборотПродаж.Товар.Вес; |Категория = Регистр.ОборотПродаж.Товар.КатегорияДляГруппировки; |Количество = Регистр.ОборотПродаж.Кво; |Оборот = Регистр.ОборотПродаж.ПродСтоимость; |Функция КолРасход = Сумма(Количество); |Функция Сумма = Сумма(Оборот); |Функция ВесРасход = Сумма(Запрос.КолРасход * Вес + Количество - Количество); |Группировка Фирма; |Группировка Категория без групп; |Группировка Контрагент без групп; |Группировка Товар без групп; |Группировка ТекДокумент; |Условие(Фирма = ВыбФирма); |Условие(Контрагент в ВыбКонтрагент); |Условие(Категория в ВыбКатегория);";
Отработает значительно быстрее и выведет только реализацию и возвраты.
Сообщение отредактировал Sharzem - 06.11.16, 18:30
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!