1с отчет поиск данных
Ребята-программисты! Хочу быть как вы.
Научите, пожалуйста, как узнать откуда отчёт (любой) берёт данные?
Т.е., открываю отчёт, вижу цифру и хочу узнать как она сформировалась, из каких документов она была взята. Иногда, в некоторых простых отчётах, можно и догадаться. А иногда нет.
Отсылки на соответствующие ресурсы принимаются.
Дополнение-поправка: Хочу узнать, точнее увидеть (в Конфигураторе, в коде и т.д.) как сформировалась конкретная цифра ПРОГРАММНО.
Вроде постарался выразиться правильно )
(2) Любой! Например, в отчете "Чистые активы" откуда взялась цифра в строке "Расчеты с покупателями"
(5) Нужно смотреть алгоритм отчёта - запрос и пост-обработку результата запроса.
(3) Спасибо, начну!
(4) Как узнать какие регистры участвуют в формировании отчета?
(7) Пожалуйста, поподробнее. Как посмотреть алгоритм отчёта?
(9) Конфигуратор, это такое огромное поле, и где-то в нём зарыта жемчужина. Только вот не знаешь, где именно, и на какой глубине. Если у вас есть намётки по-конкретней, поделитесь пожалуйста
(10) ну пройдись поиском по отчету Запрос,там же параметры буду рядом
(16) Огромное спасибо, Фишер, за подробное разъяснение. Вот, смотрю я на примере отчёта "Чистые активы" (1С 8.3.15.1700 УНФ 1.6.17.161). Открываю Конфигуратор - открываю конфигурацию - раздел Отчеты - ЧистыеАктивы - закладка Макеты - ОсновнаяСхемаКомпоновкиДанных - закладка Ресурсы. Если я правильно понял, то колонка "Выражение" как раз и показывает те необходимые формулы (или нет?). Здесь всего три поля:
Поле | Выражение | Рассчитывать по
СуммаОстаток | Сумма(СуммаОстаток) |
СуммаОстатокДебет | Сумма(СуммаОстатокДебет) |
СуммаОстатокКредит | Сумма(СуммаОстатокКредит) |
В колонке "Рассчитывать по" ничего нет.
Где здесь ресурс, который попадает в интересующую меня колонку отчёта (Расчеты с покупателями)?
(0)
хороший случай, если источником для отчета является запрос к таблицам (регистров, документов и т.д.), тогда достаточно знать только язык запросов.
худший случай - запрос+программная обработка (в любом порядке) - надо знать и то и другое
(17) Да. Формула ресурсов у тебя простая - Сумма. А как называется интересующая тебя колонка? Если она не переименована в настройках варианта или макетах СКД, то ее название ты найдешь в поле "Заголовок" для одного из этих трех полей (СуммаОстаток, СуммаОстатокДебет, СуммаОстатокКредит) на закладке "НаборыДанных" (еще в "Вычисляемых полях" может быть, но не в твоем случае).
(20) Меня интересует цифра, указанная в строчке "Расчеты с покупателями" в этом отчете (Чистые активы).
Ни в каких Заголовках я не нашел такого названия. Вот как выглядит закладка "Наборы данных":
Работа в программном комплексе 1С осуществляется как одним человеком, так и группой людей. Соответственно, существует необходимость проверки вносимых в документы изменений. Речь идет о том, чтобы посмотреть кто, когда и какие корректировки вносил в определенный объект данных. Даже если пользователь всего один, но при этом абсолютный новичок, он может совершать ошибки. И в данном случае также необходима возможность просмотра истории изменений. Как и где это можно сделать в 1С рассмотрим в статье.
- Механизмы отслеживания изменения данных в базах 1С
- Настройки хранения история изменений
- Просмотр истории изменения в документе
- Сравнение версий объекта данных
- Переход на предыдущую версию
- Как включить версионирование в различных решениях 1С
- Как узнать кто менял документ с помощью журнала регистрации
- Как узнать с какими объектами данных работал пользователь?
- Групповое изменение данных (ГИД)
- Просмотр ранее измененных реквизитов
1. Механизмы отслеживания изменения данных в базах 1С
В рассматриваемом программном продукте существуют 3 механизма, которые помогают отследить корректировки:
- журнал регистрации;
- платформенный механизм истории данных;
- версионирование
Для того чтобы каждый из этих механизмов правильно работал необходимо изначально провести настройки.
2. Настройки хранения история изменений
Стоит отметить, что настройку можно включить как для всего объекта данных, так и выборочно для каких-то его частей. Например, только для реквизитов. Тем самым экономится место объема сохраненных данных. Для того, чтобы сохраненные корректировки не занимали места больше, чем сами объекты, с которыми производилась эта работа, необходимо грамотно настраивать механизм версионирования. В противном случае произойдет замедление работы всей программы. Включить сам механизм может либо сотрудник предприятия, работающий в системе, либо разработчик в конфигураторе.
Для того чтобы настроить хранение истории изменений, следует перейти в левом меню в раздел «Администрирование», далее в раздел «Общие настройки» и затем «История изменений».
Приветствую. Продолжаем изучать объекты на дереве конфигурации и на очереди "Отчет" (Рисунок 1).
Создание отчета ничем не отличается от создания любого другого объекта дерева конфигурации: через контекстное меню или через значок плюсик.
Отчет - это объект дерева конфигурации, который предназначен для обработки данных и вывода их в виде, удобном пользователю.
Как и в жизни, отчеты хранят какую-то информацию, так и наши отчеты будут хранить информацию, которую хочет видеть пользователь.
Приступим к созданию отчета. Перед нами стоит задача: необходимо вывести список всех сотрудников по предприятию.
Добавляем отчет и называем его "Список сотрудников" (Рисунок 2).
Теперь необходимо нажать на кнопку "Открыть схему компоновки данных" (Рисунок 3).
Схема компоновки данных (СКД) - это специальный механизм (инструмент) платформы, который позволяет с легкостью создавать отчеты, даже не имея опыта разработки.
В открывшемся окне нажимаем "Готово"(Рисунок 4).
В следующем окне нужно подготовить все для создания отчета. Для этого создадим запрос (Рисунок 5).
После этого переходим в низ открывшегося окна и нажимаем кнопку "Конструктор запроса" (Рисунок 6).
В открывшемся окне нужно выбрать тот объект, по которому вы хотите сделать отчет, в данном случае нас интересует отчет по сотрудникам, значит выбираем справочник "СписокСотрудников" (Рисунок 7).
Перетаскиваем справочник (или двойным нажатием или на стрелочку вправо, выделив справочник) во второй столбец (Рисунок 7).
Теперь необходимо раскрыть элементы этого справочника и выбрать там те, которые мы хотим видеть в отчете (Рисунок 8). Перетаскиваем в столбец "Поля" нужные элементы (Рисунок 8).
После этого нажимаем "Ок" и в поле "" появится запрос (Рисунок 9).
Переходим на вкладку "Настройки" (Рисунок 10).
На этой вкладке нужно создать сам отчет (Рисунок 11). Создаем группировку.
В новом окне нажимаем "Ок", ничего не меняя (Рисунок 12).
После этого идем вниз и перетаскиваем нужные поля (Рисунок 13).
В итоге у вас должно получиться так (Рисунок 14).
Доступные поля - это те поля, которые вы выбрали на этапе создания запросе.
После этого закроем все окна, отчет готов, но нужно добавить его в одну из подсистем, иначе пользователь не сможет им пользоваться (Рисунок 15).
Запустим пользователя, перейдем в подсистему и найдем наш отчет (Рисунок 16).
Как видите, отчета нет. Нужно нажать кнопку "Сформировать" и отчет появится (Рисунок 17).
Таким образом, нажимая на кнопку "Сформировать" отчет будет формироваться каждый раз по новым данным, которые пользователь может добавлять каждый час или день.
Создание отчета завершено - это самый простейший отчет, который может создавать платформа. Это минимально, что она может и ее функционал намного больше, чем мы сделали сейчас. Но все это еще впереди, пока остановимся на этом.
На этом статья урока подходит к концу. Попробуйте выполнить все действия, которые описаны в этом уроке. Если что-то не получается, то вы всегда сможете написать вопрос о том, что вам непонятно или вернуться к предыдущим урокам и посмотреть их - ссылки внизу!
1С Предприятие поддерживает полнотекстовый поиск. Это позволяет легко искать в информационной базе практически любую информацию, которая в ней содержится, даже без указания чётких критериев для поиска.
Механизм полнотекстового поиска в 1С состоит из двух составных частей:
- Полнотекстовый индекс;
- Средства выполнения поиска.
Полнотекстовый индекс
Полнотекстовый индекс представляет собой, по сути, служебную базу данных, в которую заносится информация об объектах информационной базы. Средства выполнения полнотекстового поиска получают данные из него.
Будет ли информация о том или ином объекте входить в полнотекстовый индекс, определяется его свойством «Полнотекстовый поиск» (значение по умолчанию «Использовать») в конфигураторе.
Если установлено значение «Использовать», объект информационной базы будет участвовать в полнотекстовом поиске.
Полнотекстовый индекс создаётся только один раз. После этого он только периодически обновляется.
Частота обновления определяется исходя из интенсивности работы с информационной базой. Чем чаще в ней происходят изменения (добавление данных в справочники, создание и проведение документов и т.д.), тем чаще нужно обновлять полнотекстовый индекс. Иначе поиск будет предоставлять пользователю неактуальные данные.
Управлять полнотекстовым индексом можно из режима» 1С Предприятие» или программно.
В режиме «1С Предприятие»
При помощи открывшегося диалогового окна можно обновить индекс (о необходимости обновления будет информировать соответствующая надпись) или полностью очистить индекс. В последнем случае для того чтобы полнотекстовый поиск вновь заработал индекс необходимо обновить.
Кнопка «Настройка» открывает диалоговое окно включения и отключения полнотекстового поиска как такового.
В программном коде
Для работы с полнотекстовым поиском в программном коде существует специальный объект «Полнотекстовый поиск».
Обновление полнотекстового индекса возможно в двух режимах:
Первый режим используется для обновления полнотекстового индекса целиком.
Если Не ПолнотекстовыйПоиск . ИндексАктуален ( ) ТогдаДля этого в методе ОбновитьИндекс в первом параметре передаётся значение «Истина» (второй имеет значение по умолчанию «Ложь»).
В этом случае помимо обновления данных выполняется их слияние, и полнотекстовый индекс полностью обновляется. Однако такое обновление требует много времени. Особенно если в информационной базе хранится достаточно большое количество информации.
Поэтому его применяют, как правило, периодически в рамках регламентного задания, которое лучше всего назначить на нерабочее время.
Второй режим применяется для быстрого обновления, так как данные обновляются отдельными порциями, максимальный размер которых составляет 10 000 записей. При этом за один раз обрабатывается только одна порция. То есть, если нужно обновить 25 000 записей, быстрое обновление придётся выполнить три раза.
Реализация частичного обновления полностью аналогична полному за исключение параметров передаваемых методу ОбновитьИндекс.
Если Не ПолнотекстовыйПоиск . ИндексАктуален ( ) ТогдаПри быстром обновлении значение первого параметра остаётся по умолчанию («Ложь»), а во втором параметре передаётся наоборот «Истина». Тогда слияния не произойдет, и данные будут обновляться каждый раз частично.
Очистка индекса производится при помощи метода ОчиститьИндекс. Он не принимает никаких параметров.
Важно:
Перед выполнением любых операций с полно текстовым индексом необходимо обязательно убедиться в том, что полнотекстовый поиск включен.
Если ПолнотекстовыйПоиск . ПолучитьРежимПолнотекстовогоПоиска ( ) =РежимПолнотекстовогоПоиска . Разрешить ТогдаВключение и отключение полнотекстового поиска производится при помощи метода УстановитьРежимПолнотекстовогоПоиска. Он принимает единственный параметр типа РежимПолнотекстовогоПоиска.
Для включения полнотекстового поиска передаём РежимПолнотекстовогоПоиска.Разрешить
ПолнотекстовыйПоиск . УстановитьРежимПолнотекстовогоПоиска ( РежимПолнотекстовогоПоиска . Разрешить ) ;Для отключения РежимПолнотекстовогоПоиска.Запретить
ПолнотекстовыйПоиск . УстановитьРежимПолнотекстовогоПоиска ( РежимПолнотекстовогоПоиска . Запретить ) ;Реализация полнотекстового поиска
Для того чтобы пользователь мог выполнять полнотекстовый поиск необходим соответствующий интерфейс.
Реализовать его можно при помощи такого объекта конфигурации как «Отчёт».
Для этого в режиме конфигуратор создаём новый «Отчёт» и сразу же создаём для него основную форму.
Для работы с полнотекстовым поиском схема компоновки данных не применяется. Альтернативных графических средств для этих целей в 1С Предприятие также не предусмотрено. Поэтому весь необходимый функционал реализуем вручную непосредственно в модуле созданной нами форм, но вначале сконструируем её внешний вид.
Внешний вид отчёта по поиску
Для работы с полнотекстовым поиском нам потребуются:
Поиск может выдать результат достаточно большого объёма. Поэтому сразу предусматриваем условное разделение их на страницы для удобства работы. Собственно для этого и созданы команды «Предыдущая», «Следующая» и реквизит «Текущая позиция».
Всё вышеперечисленные элементы можно располагать по своему усмотрению. Возможный вариант их расположения:
Этот же вариант в работе уже был показан в самом начале статьи. Однако для того чтобы придать созданной форме отчёта работоспособность разработать её внешний вид недостаточно.
Нужно реализовать программную логику работы с полнотекстовым поиском.
Основной механизм полнотекстового поиска и обработки его результатов
Для начала реализуем работу с поиском и его выдачей на стороне сервера.
Получаем результаты поиска по введённой поисковой фразе и выбираем из них соответствующую часть.
Какую именно часть следует выбрать, определяем с помощью значения числового флага:
- Значение «0» – выбираем самую первую часть результатов поиска;
- Значение «1» – выбираем следующую часть (страницу) результатов поиска относительно текущей позиции;
- Значение «-1» – выбираем предыдующую часть (страницу) результатов поиска относительно текущей позиции.
Далее получаем информацию о каждом найденном объекте информационной базы и добавляем её в список РезультатыПоиска.
При этом краткую информацию о них отображаем в виде HTML в тестовом поле РезультатПоиска. Это именно то, что будет видеть пользователь, если был найден хотя бы один объект (иначе это текстовое поле останется пустым).
РезультатПоиска=СписокПоиска . ПолучитьОтображение ( ВидОтображенияПолнотекстовогоПоиска . HTMLТекст ) ;Сохраняем текущую позицию (условный номер текущей части (страницы) и общее количество частей (страниц) в поисковой выдаче.
В завершение обработки результатов поиска отображаем информацию о результатах поиска и устанавливаем доступность команд «Предыдущая» и «Следующая».
Элементы . Следующая . Доступность= ( ПолноеКоличество-ТекущаяПозиция ) > СписокПоиска . Количество ( ) ; Элементы . Предыдущая . Доступность=ТекущаяПозиция > 0 ;Полностью процедура поиска на стороне сервера выглядит следующим образом:
РезультатПоиска=СписокПоиска . ПолучитьОтображение ( ВидОтображенияПолнотекстовогоПоиска . HTMLТекст ) ; Элементы . Следующая . Доступность= ( ПолноеКоличество-ТекущаяПозиция ) > СписокПоиска . Количество ( ) ; Элементы . Предыдущая . Доступность=ТекущаяПозиция > 0 ;Приведённая процедура является основой выполнения полнотекстового поиска и представляет наиболее сложный его компонент.
Процедура работы с поиском на стороне клиента только проверяет, не задан ли пустой поисковый запрос и если он действительно не пуст, вызывает серверную процедуру.
Реализация клиентских команд и доступа к найденным объектам
Теперь, когда механизм поиска готов, можно без труда реализовать работу всех трёх ранее созданных команд на форме отчёта.
Смысл параметров передаваемых процедуре Искать подробно описан в предыдущем подразделе.
Для того чтобы получить доступ найденным объектам необходимо получить из результатов поиска ссылку на тот или иной конкретный объект и открыть его по этой ссылке. Лучше всего это сделать при обработке события ПриНажатии элемента формы РезультатПоиска.
Процедура РезультатПоискаПриНажатии ( Элемент , ДанныеСобытия , СтандартнаяОбработка ) ВыбраннаяСтрока=РезультатыПоиска [ НомерВСписке ] . Значение ;Теперь при клике мышью на любом из найденных объектов, отображаемых в списке, этот объект будет открыт для просмотра и редактирования.
Варианты обновления полнотекстового индекса
В заключение хотелось бы сказать несколько слов о таком важном вопросе, как применимость различных вариантов обновления полнотекстового индекса.
Как уже было сказано выше, возможны два варианта обновления полнотекстового индекса:
- Вручную (через меню «Все функции»);
- При помощи программного кода.
Они не является взаимоисключающими. Однако в зависимости от конкретных обстоятельств и IT инфраструктуры один из них, так или иначе, является более предпочтительным.
Обновление, реализованное в программном коде наиболее предпочтительно, так как его можно легко автоматизировать в виде регламентного задания. Полнотекстовый индекс будет частично или полностью обновляться автоматически в заданное время.
Но, такой подход требует наличие постоянно работающего сервера или, в крайнем случае, обычного компьютера на котором 1С Предприятие будет работать в режиме толстого клиента.
Также необходимо сформировать расписание выполнения заданий таким образом, чтобы процесс обновления не создавал помех в работе пользователей. Например, назначить полное обновление в ночное время.
Ручное обновление незаменимо при работе с информационной базой в файловом режиме в одно лицо или в составе небольшой группы.
В виду отсутствия сервера 1С и возможности выделить отдельный компьютер для выполнения исключительно технологических задач, возможность обновить полнотекстовый индекс вручную становится спасительным выходом из ситуации.
Однако требует определённой дисциплины, чтобы обновления выполнялись своевременно.
2 комментария
Алгоритм полнотекстового поиска реализован в самописной конфе.
Проблема заключается в сложной системе настройки прав к объектам (через регистр сведений), т.е. автоматом не убираются документы на которые у пользователя нет прав. По сути вопроса: РезПоиска = ПолнотекстовыйПоиск.СоздатьСписок(СтрокаПоиска, РазмерПорции); далее определяем где именно искать и размеры порций. В результате есть список найденных документов в переменной РезПоиска. Затем я проверяю права на полученные документы в РезПоиска, в итоге мне нужно отсеять те документы из общего списка на которые у тек. пользователя нет прав. Подскажите, как это можно реализовать? СПс.
В 1С есть возможность обратиться к реквизитам и свойствам тех объектов, которые были найдены в результате полнотекстового поиска. Опираясь на это, можно разработать алгоритм отбора.
На сайте есть статья, в которой на простом примере описан принцип подобной фильтрации.
Читайте также: