1С 8.2 Сортировка таблицы документа перед печатью #728770


#0 by maslov_ilya
Здравствуйте, Гуру! Задача такая. Есть документ "РеализацияТовара" с табличной частью "Товар"(Код, Номенклатура, Кол-во, Цена, Сумма) Необходимо, перед тем как отправить на печать, отсортировать эту таблицу по колонке номенклатура на выбор пользователя двумя методами: 1)По наименованию номенклатуры 2) По длине наименования номенклатуры Как я смог выяснить, сортировать непосредственно саму ТЧ - не верно, т.к. документ будет каждый раз перепроводиться и второй метод не получится реализовать. Сортировка должна проводиться только лишь для печатной формы. Так же прикинул примерный алгоритм для решения задачи: 1) выгружаем ТЧ в ТЗ 2) сортируем ТЗ 3) выводим печатную форму Вот тут проблемы в знаниях... 1) Можно ли решить мою задачу не прибегая к обработки внешней печатной формы? 2) Подскажите пожалуйста с чего начать? В каких модулях какие процедуры должны быть? Прошу пинать не сильно, новичок. Решаю эту задачу с целью разобраться, а не получить готовое решение. Заранее спасибо!
#1 by Любопытная
Зачем решать эту задачу не прибегая к внешней обработке?
#2 by maslov_ilya
Любопытная, вы не правильно поняли, такой цели нет. Я предполагаю, что как раз таки и нужно через внешнюю. Просто поинтересовался, вдруг тут все проще.
#3 by Garykom
в большинстве типовых печать устроена путем передачи некого объекта в типовую функцию печати можно подменить объект к примеру вместо исходного документа подсовываем другой с отсортированной как надо ТЧ ))
#4 by Любопытная
по длине наименования уж точно типовыми методами не отсортируешь, так что однозначно свое ваять. А раз свое ваять, значит лучше ВПФ
#5 by maslov_ilya
Да, как раз это я и хочу сделать. Не могу сообразить как к этой задаче подойти, куда копать)
#6 by Любопытная
копай в процедуру Печать либо в модуле объекта, либо в модуле менеджера. А там уже смотри, что передается и что на выходе получается
#7 by Любопытная
+ Обычно культурные люди запросом вытаскивают отдельно данные для шапки документа, отдельно ТЧ (опять же запросом), вот там, где ТЧ, можешь сортировать ее как тебе нравится.
#8 by maslov_ilya
Спасибо! То есть я правильно понимаю... 1) Создаю внешнюю обработку 2) Подцепляю ее к кнопке печать(по умолчанию) на форме нужного документа 3) Далее работаю с модулем этой внешней обработки и там уже формирую все запросы.
#9 by Vladal
"Подцеплять к кнопке Печать" в типовых легко - открыть справочник ВнешнихОбработок, создать новый элемент, указать тип "Внешняя печатная форма" и загрузить эту обработку. На форме элемента этого справочника указать объект, если он не получен автоматически при добавлении внешней обработки.
#10 by Vladal
3) Только после каждого изменения модуля обработки ее надо снова загружать в справочник внешних обработок (поверх существущей)
#11 by vicof
"т.к. документ будет каждый раз перепроводиться" меня одного это смущает?
#12 by Vladal
А что смущает? Если непосредственно в форме документа сортировать, то перед печатью надо будет проводить/записывать документ. Всё правильно человек рассуждает - ему надо сортировать товары только в печатной форме, не затрагивая данные документа.
#13 by vicof
Ну то есть взяли распечатали документ за 2012 год, и тут бах, он перепроводится. Расчет себестоимости слетает :)
#14 by Vladal
ТС как раз хочет не трогать данные докуента, а сортировать ТЗ товаров. Что непонятно?
#15 by vicof
Так если не хочет, зачем документ перепроводить?
#16 by maslov_ilya
Чтобы напечатать его придется провести опять. спасибо, уже в процессе. Как приду к чему то, опубликую тут, мало ли еще какому новичку пригодится.
#17 by vicof
Нахрена??? Бери данные из документа, сортируй в запросе уже, какая разница, в каком порядке в документе строчки?
#18 by Рэйв
Подходит ко мне сегодня коллега и говорит."Там в числе пробез когда я со строкой соедеиняю, как убрать?" Я говорю- долго- формат.Быстро - замени Символы.НПП на пустую... Он такой -"А проще никак?" И тут я понял что лень - неистребима. ТС проще просидеть поддня на форуме чем написать пару тройку строк:-)
#19 by Рэйв
*пробез =пробел
#20 by maslov_ilya
То есть вы имеете ввиду произвести сортировку в запросе при формировании печатной формы? Тогда как реализовать вот это: "Необходимо, перед тем как отправить на печать, отсортировать эту таблицу по колонке номенклатура на выбор пользователя двумя методами: 1)По наименованию номенклатуры 2) По длине наименования номенклатуры"
#21 by vicof
Зачем сортировать в документе? Какой смысл? Кто тебе эту чушь написал?
#22 by maslov_ilya
Я не понимаю, что вас смущает) Есть задача: предоставить пользователю возможность перед тем как его документ вылезет из принтера выбрать каким способом отсортировать таблицу и собственно этим способом отсортировать. Эти способы описаны выше. При этом сортировки в самом документе производиться не должно, т.к. это повлечет за собой его перепроведение, что не допустимо.
#23 by DexterMorgan
Задача понятна. Сложность в чем?
#24 by qesto
сделай так: По кнопке печать открывается форма обработки, где пользователь может выбрать сортировку. Далее выбирает печать и по ней уже передается твой параметр сортировки.
#25 by vicof
Ок, понял, написано так, что по-разному можно воспринять. См.
#26 by qesto
документ при этом не затрагивается.
#27 by barrgand
Как-то странно ты прочитал. Автор как раз и говорит, что выяснил, что сортировать в документе неверно, поэтому спрашивает как ему лучше поступить. А ты пристал к нему со своей сортировкой в документе.
#28 by bazvan
если на выбор пользователя, то бишь интерактивно, создай форму обработки вызывай ее а там галочка так или так сортировать
#29 by mrDSide
вот тут что-то похожее делал -
#30 by vicof
см.
#31 by maslov_ilya
Да, спасибо, как раз этим и занимаюсь. Посмотрим что получится)
#32 by maslov_ilya
Вообщем так, господа, выручайте) Помогите разобраться пожалуйста) Перечитал несколько статей, упор сделал вот на эту Саму внешнюю обработку создал и вроде должна работать, но, как оказалось я не могу ее зарегистрировать у себя в конфигурации, т.к. я не использую типовую а писал конфигурацию с нуля. В итоге у меня даже нет раздела администрирование, где и происходит регистрация внешней обработки. Как мне быть?
#33 by МимохожийОднако
Почитай БСП на ИТС. Добавь нужные куски кода в свою нетленку.
#34 by Chameleon1980
кто итс? даем тс придумать новое пока не поздно (если не в курсе он)
#35 by Chameleon1980
ну аббревиатуры я имел ввиду :)
#36 by maslov_ilya
Ну не такой я тупой, че началось то)))) Изучаю. Только понял я что не подсилу мне самому из пустоты нарисовать то что мне нужно. Думаю, как обойтись уже без внешней печатной формы
#37 by Chameleon1980
извини. да я не для того. просто верно - получай таблицу дока, например запросом, сотртируй как надо (только длину в запросе????). А там делай что хотишь. и вперед. затык то самый в чем?
#38 by Maniac
#39 by Maniac
Выкладываю код:
#40 by maslov_ilya
Затык самый что ни на есть глупый. Запрос на получение данных из таблицы где нужно вызывать? В модуле менеджера документа в процедуре Печать? Или создать еще одну кнопку на форме документа Мне же еще нужно реализовать возможность выбора метода сортировки, получается нужно еще какую то форму предварительно вызывать.
#41 by maslov_ilya
Ох... Спасибо, сейчас изучу)
#42 by Chameleon1980
мы же не видели твою конфу и как ты хочешь реализовывать. шагай от печать
#43 by Chameleon1980
только, как ты говорил, по длине наименования, допустим. Там перебором - опять же методов несколько. Самый прростой предложить. +колонкаДлина цикл запроняем , сортируем поехали
#44 by Maniac
Я уже все выложил Полностью готовая процедура. Пусть вставит ее в вывзов любой печати и все дела. Документ физически перепроводиться не будет. Запись - не смертельно.
#45 by Maniac
По длине наименования все просто. В ту же колонку в моей процедеру ИднесСОртировки в цикле бежать и прописывать СтрДлина(Номенклатура.Наименование). в Конце после цикла Таблицатряляля.Сортировать(ИндексСортировки) Вот и все.
#46 by Chameleon1980
ну конечно
#47 by maslov_ilya
Спасибо большое, помогли сдвинуться с мертвой точки! Пытаюсь разобраться с кодом и подстроить под свои объекты. Вот мой модуль менеджера. [spoiler=Модуль Менеджера] [code] [/code] [/spoiler] Я временно удалил остальные методы сортировки чтобы отладить первый. Подскажите пожалуйста, что передается этими параметрами (ИдентификаторКоманды,ПараметрыОбработки)? Не могу понять их назначения и принципа работы.
#48 by maslov_ilya
Уважаемый, Maniac, растолкуйте пожалуйста для новичка, всю ночь просидел, не смог добиться нужного результата. 1) Процедура вызова печати у меня находится в МодулеМенеджера Документа "РеализацияТоваров". Вот она: 2) Где мне описывать вашу процедуру и где вызывать ее? Синтаксис я немного переписал, т.к. компилятор ругался на ДокументСсылка как на неопределенную переменную. Не уверен верно ли я написал в этот раз, но компилятор не ругается. 3) Я пытался Описать в этом же модуле процедуру и вызвать в теле процедуры Печать, но из-за того что не понимаю какие параметры передать, возникали ошибки типов.
#49 by Maniac
Назови мою процедуру вот так: и условия что не нужны
#50 by Maniac
Не вот так сделай ВидСортировки = "ВариантКОторый у тебя будет постоянным";
#51 by Maniac
в печати вот так:
#52 by Maniac
Короче еще лучше: Внутри
#53 by maslov_ilya
Хорошо, спасибо, с самой сортировкой понятно, разобрался. Как и вчера, сейчас возникает ошибка: {Документ.РеализацияТоваров.МодульМенеджера}: Значение не является значением объектного типа (Товары)     ОбъектНазначения.Товары.Загрузить(ТаблицаТовары); Вот в этих строках: ТаблицаТовары.Сортировать("ИндексСортировки");
#54 by maslov_ilya
Возможно я что то упускаю. Вот, на всякий случай, моя база
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С