Весь исходный текст в статье.
Статью написать сподвиг вопрос Слишком сложно для меня по уже стандартно нестандартной расшифровке. В свое время тоже требовалось оное и естественно набрел на Это. Все здорово. Но! Статья то о СКД + Лень. Последняя пылала пожаром и отказывалась нажимать последовательность cntr+C, alt+Tab, cntr+V многократно.
Я её уговаривал, грамотно же статья написана. Нет, отвечает Лень. Там нужна форма, а в БСП это Общая форма и она может измениться со следующим релизом, будет тебе лишняя головная боль при обновлении. В общем, Лень странная девочка. Когда творческий поиск, сложный запрос — ядерным взрывом не разбудишь, а тут бунт и в условиях цейтнота.
Пришлось идти на поводу у Матери всея прогресса. Спросил у Яндекса, тот мне честно: “Ты б еще у Гугела идиот спросил”. Пришлось включать творческий процесс и метод “Научного тыка”. Чем научный от ненаучного знаете, чем отличается? Ставишь точку останова и смотришь в табло. Не нужное само отметается, а нужное обязательно найдется. А где ее ставить как не в ПриКомпоновкеРезультата. В уже стандартных строчках:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,, ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
И вот ОНО. Нужное! После строчки:
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
Под пытками, ЕЁ Величества Точки останова, ДанныеРасшифровки сознаются в своих параметрах, отборах и остальных "грехах". Остается только проверить, а расшифровка ли это
ЭтоРасшифровка = Не ДанныеРасшифровки.Настройки.Отбор.Элементы.Количество()= 0;
Накидываем седло с уздечкой на коня и вуаля. Шорты превращаются в брюки:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
#Область ВставкаДляВыводаНестандартнойРасшифровки
ЭтоРасшифровка = Не ДанныеРасшифровки.Настройки.Отбор.Элементы.Количество()= 0;
Если ЭтоРасшифровка Тогда
Отчет = Отчеты.<Любой отчет>.Создать();
Настройки = Отчет.КомпоновщикНастроек.Настройки;
//Устанавливаем отборы и параметры из ДанныеРасшифровки в Настройки(
//....
//)
МакетКомпоновки = КомпоновщикМакета.Выполнить(Отчет.СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
КонецЕсли;
#КонецОбласти
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,, ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Вроде бы просто. Но не тут то было. Моя Лень требует большего. Шорты не превращаются в брюки. При выборе поля расшифровки нет строчки. "Остатки товаров", а есть другие поля, которые мне абсолютно не нужны. С ненужными полями все просто. Идем на закладку "Наборы данный" и ставим ограничение поля на "Не доступно для группировки". Но и с выводом нужной мне строки в диалоге выбора поля, тоже банально. Добавляем в вычисляемые поля "ОтчетОстаткиТоваров" с заголовком "Остатки товаров" и в диалоге выбора поля уже ее наблюдаем. Остается только обработать в процедуре ПриКомпоновкеРезультата именно её:
Если ЭтоРасшифровка Тогда
ИмяРашифровки = МакетКомпоновки.Тело[МакетКомпоновки.Тело.Количество()-1].Группировка[0].ИмяПоля;
Если ИмяРашифровки = "ОтчетОстаткиТоваров" Тогда
Отчет = Отчеты.ОстаткиТоваров.Создать();
Настройки = Отчет.КомпоновщикНастроек.Настройки;
//Устанавливаем отборы и параметры из ДанныеРасшифровки в Настройки(
//....
//)
МакетКомпоновки = КомпоновщикМакета.Выполнить(Отчет.СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
КонецЕсли;
КонецЕсли;
Вот собственно и все. Наивную девочку Расшифровка обманули и она выдала все что мне нужно, при минимальных затратах и обработчиков формы "Выбор" и "ОбработкаРасшифровки". Лень успокоилась на время.
Тестировалось на платформах 8.3.10 и 8.3.13. Но думаю будет работать и на более ранних релизах.
Все хорошо, но у Вас 2 раза вызывается
МакетКомпоновки = КомпоновщикМакета.Выполнить…
Один раз лишний. Перепишите для красоты.
(1)Нет Второй не лишний. Первый раз, чтобы получить значения ДанныеРасшифровки и тело. Второй раз уже к выводу отчета расшифровки относиться
МакетКомпоновки = КомпоновщикМакета.Выполнить(Отчет.СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
В общем, то что я в статье назвал обманом девочки по имени Расшифровка
Надо запомнить. Пригодится.
Албанский прям какой-то. Ничего не понял. Особенно понравилась конструкция
(4)Албанский не албанский, но работает при минимуме строчек кода.
А Вы думаете проверять расшифровку через Тело лучше
Если формируется отчет у ДанныеРасшифровки.Настройки.Отбор.Элементы.Количество() =0.
Если расшифровка Количество отборов больше нуля
Все просто
Интересное решение — надо будет попробовать
(5)
Не, религия не позволяет ? ж))
Это, вообще, чья процедура рассматривается — основного отчета или отчета-расшифровки ?
(7) А чем это
лучше чем это?
(7) (8)Статья о чем? О Лени + СКД:). Переключится на английский, и написать лишние 2 символа, потом переключится обратно.Это жеж непосильный труд, когда 1С числовые значения понимает как булево.
Я исчо в запросах пишу Значение(Справочник.Контрагенты.). А почему бы нет, если ПустаяССылка писать не надо
(7)
Основного отчета
Мне было лень прочитать эту статью. Тема Лени не раскрыта.Пишу комментарий, потому — что лень работать. Если дочитал мой комментарий и статью до конца — ты трудоголик:).
З.Ы. Мне лень дописывать этот комме
(8) адназначна лучше. Те, кто не только на 1С пишет, сразу о такое спотыкаются. Потому как операторные скобки. Автоматически запускается ненужный вспоминатор — а как 1С разбирает логические выражения….
(10) Тогда я не понимаю, как это работает. Допустим, есть ячейка со ссылкой. При клике на неё будет вызвана ПриКомпоновкеРезультата? Да ладно ?!
(12) Вкусовщина.
(14) стандартизация
(15) Ссылка на стандарт?
(13)Ячейку со ссылкой откроет. Но вычисляемое поле, которое я добавил — строка. Вот оно и ползет в ПриКомпоновкеРезультата.
Ну а так то можно через вычисляемое поле принудительно и ссылку отправить на выполнение расшифровки. Пример на скрине
(11)
Ес ай эм. Ленивый трудоголик:)
Где бы мне такую лень найти, чтобы писать так статьи кратко и ясно.
(17) Я всегда думал, что ПриКомпоновкеРезультата запускается один раз и после заполнения результата больше не вызывается. Я не прав ? Ну давно я в это не ковырялся, не помню уже, а интересно…
(20)
Это правда. Вызывается один раз. Но вывод расшифровки это как бэ новый отчет, следовательно идет в ПриКомпоновкеРезультата с заполненными ДанныеРасшифровки. Собственно на этом метод и построен
(21) Блин, ну не вкуриваю я тада, почему оно пойдёт в свой же ПриКомпоновке при попытке расшифровки. Там своё событие было на форме типа ПриРасшифровке или что-то в этом духе.
(22)Событие формы ОбработкаРасшифровки, если СтандартнаяОбработка = Истина Пойдет в ПриКомпоновкеРезультата.
(11)
(23) Спасибо за ликбез.
(4) а мне нравится
(7)
Ну строго говоря сократить
нужноможно вообще так.Вместо этого
написать это
Однако у одинэсников откуда-то дичайшая любовь создавать тонны лишних переменных.
(27)
«Не» забыли иначе будер расшифровывать основной отчет:) В статье так для наглядности
(19)Э брат. Мне бы научиться у юзера этого сайта по нику dhurricane, четкостью мысли и правильным ответа Цены мнеб не было:)
(27) Когда-то, давным-давно, был такой контупер БК-0010. И был у него «вильнюсский бейсик». И была у этого бейсика особенность — операторы идентифицировались по 2-3 первым символам, что позволяло экономить ОЗУ, которого там было аж 16 килобайт… Оправдано было, ага. Чего не скажешь про сабж…
(9)О Великий !!! я даже не знал что так можно .
(30)Когда то, давным — давно, еще на первых Семерках, после обновления, перестало работать «<>», а вот Не Блабала =0, работало. В общем какая разница, если и то и другое возвращает булево
(30) Аж всплакнул. Перетыкание пзу с фокал на бэйсик и изучение устройства телевизора на 3усцт для подключения rgb
а как сделать расшифровку по значению?
Чтобы при нажатии на значение, значение расшифровалось например по номенклатуре и по складу.
До расшифровки:
Склад Номенклатура 12 11 10
После расшифровки
10Дт — 60Кт Склад Номенклатура.3
10Дт — 60Кт Склад Номенклатура.8
(34)Так Склад и номенклатура должны сидеть в ДанныеРасшифровки.Настройки.Отбор. Вы просто переносите нужные значения из расшифровки в Настройки.Отбор
Когда нажимаю на значение при расшифровке. Открывается форма выбора поля(см. рис.) можно ли как то его обойти чтобы он не вызывался или вызывался только с одним значением в списке?
(36)Вы не внимательно прочитали статью. Чтобы не попадало лишнее в поля Выбора расшифровки
Идем на закладку «Наборы данный» и ставим ограничение поля на «Не доступно для группировки».
Чтобы вообще не выходил Диалог выбора, без использования обработчика формы Выбор, победить не удалось. Задавал вопрос на этом форуме. Ни кто не знает
Возможно ли расшифровать на СКД по значению колонки?
Склад Номенклатура Приход Расход
Нажали на значение колонки Приход расшифровался по определенным проводкам
Нажали на значение колонки Расход расшифровался по определенным проводкам.
(38)Проверил. Добавил Два Вычисляемых поля, Я назвал их Дебет и Кредит, Выражение — «», Ограничение по группировке — Истина(Чтобы не показывало в выборе расшифровки)
Добавил макет поля: Заполнение — Параметр, Параметр — ИмяПоля, Параметр расшифровки(от балды) — П1
Заполнил выражения параметров макета:
И в список расшифровки добавил Дебет и Кредит, Выражения «10,41»; «60,79,76»
В общем В отбор расшифровки попадает, как надо
Про штаны и лень можно было бы и убрать. А так сплошная вода и бесовщина, за сленг минус. По коду надо проверять.
(40)
Щаз было обидно.
Всем сленгом не угодишь,не литературное произведение. Для того вставки кода написаны подробно, что бы было понятно.
А код работает, не сомневайся. Причем я могу вызвать кучу своих расшифровок, создавая Вычисляемые поля и проверяя какое вычисляемое поле было выбрано для расшифровки
(41) кто будет искать код его сложно будет найти по такому тексту заголовка и описания. А затем прочитать чтобы понять, что имел автор! Поработайте над описанием!
(42)Не ну Максим. Шесть лет назад мой сленг тебе охотно нравился. Кто тебя по конвертации то гонял. Забыл?
Ну и ребята. моя статья абсолютно бесплатная
А так. Этой статьи в запросе у яндекса я не нашел. Приму к сведению. Но тут дело не стиле, а в ключевых словах.
ЗЫ: Попробуешь код на зуб — спасибо скажешь ибо он легок и быстр и ему наплевать, есть форма или нет
(43) так об этом и речь. Воду убрать оставить только то что по теме.
Смысл отсебятину кидать. В статье важен смысл и простота понимания. Ты же не как Белокаменцев рассказы о жизни пилишь, а что-то в массы!
(44)Все дело в ключевых полях. Проверил. Моя статья на первом месте
(45) поиск да. А смысл статьи?
Я конечно тоже иногда читаю между строк. Но блин поработать же можно над текстом?
(46)Смысл? Мало я тебя 6 лет назад гонял:) Зырь не в инструкцию, а в код. Формы нет, а расшифровка есть, причём, как мне вздумается. Код минимален и он рабочий
И ваще нормальный человек смотрит в RTFM, когда все сломано)))
(47) вопросов по коду нету, написал еще в (40).
(48)Ну так
покупайпроверяй. Я дарую этот код «бездвоздмездно, то есть дадом»:)(49) повторяю еще раз вопрос в том что это уровень статьи. А у вас это статья уровня комментарий на форуме. Мне кажется разница есть?
(50)Разница, Максим большущая. И я и ты на форуме особо высоким языком не блещем:) Я только не понимаю, что в заголовке то не так?.»Без использования обработчиков формы. Только макет компоновки и модуль отчета. »
Лень убрать? Так люди точки останова перестануть ставить и Нас раздербанят на вопросы почему.
Не трогай мой стиль. Меня по нему узнают плюсы и минусы ставят.
Радоваться люди должны, что я за Них догадался, что так все просто.
Не нравиться стиль, да божеж мой, пользуйся, что я придумал, не нравиться пройди мимо. Но код читать обязательно
(39)
В макете СКД добавил макет поля.
<Приход БУ>.
В параметре расшифровки указал Номенклатура и склад.
При формировании СКД выдает ошибку, «Поле «Склад» не может быть использовано в группировке «Номенклатура»»
В настройках стоит группировка сначала по номенклатуре, далее группировка по складу.
Вопрос, как такую ошибку можно обойти?
Чтобы при расшифровке брал значение еще и склада.
(39)
(52)Составной группировкой. Номенклатура, Склад
Привет!
ЭтоРасшифровка = Не ДанныеРасшифровки.Настройки.Отбор.Элементы.Количество()= 0;
У меня этот код выдает Истина, если добавляю отбор в пользовательском режиме. Заменил на:
ЭтоРасшифровка = ДанныеРасшифровки.Настройки.Структура[0].Имя = «Расшифровка»;
(54)А устарело.
Достаточно