В повседневной работе бухгалтера часто возникает необходимость видеть суть хозяйственной операции непосредственно в списке документов, не открывая каждый из них. В 1С:Предприятие 7.7 общие журналы документов по умолчанию выводят стандартные реквизиты (номер, дата, вид документа и т.д.), но содержание бухгалтерской операции зачастую остается «за кадром», особенно если речь идет о ручных операциях. Рассмотрим подробнее, какими способами можно реализовать это требование и какие технические нюансы следует учитывать.
Это самый быстрый в реализации метод, который не требует изменения структуры таблиц базы данных. Мы добавим в форму журнала «виртуальную» колонку, содержимое которой будет вычисляться динамически в момент отрисовки строки.
Разберем по шагам процесс настройки:
глПолучитьСодержание(ТекущийДокумент).Теперь проанализируем код функции, который необходимо разместить в модуле формы журнала:
Функция глПолучитьСодержание(Док)
Если ПустоеЗначение(Док) = 1 Тогда
Возврат "";
КонецЕсли;
// Проверяем, есть ли у документа бухгалтерская операция
Если Док.Выбран() = 1 Тогда
Попытка
Возврат Док.Операция.Содержание;
Исключение
// Если у документа нет объекта "Операция"
Возврат "";
КонецПопытки;
КонецЕсли;
Возврат "";
КонецФункции
Важный нюанс: Использование функции в колонке журнала может существенно замедлить работу интерфейса. Проанализируем ситуацию: 1С 7.7 вызывает эту функцию каждый раз, когда строка появляется на экране, при скроллинге или обновлении списка. Если база данных работает в сетевом режиме, это создает дополнительную нагрузку на сервер и сеть. Чтобы минимизировать тормоза, рекомендуется ограничивать длину возвращаемой строки с помощью функции Лев(), так как длинные тексты все равно не поместятся в узкую колонку журнала.
Если производительность системы является приоритетом, рассмотрим более надежный способ — использование общего реквизита документов. Этот метод позволяет хранить текст содержания непосредственно в таблице журнала, что делает отображение мгновенным.
Выясним алгоритм реализации этого подхода:
СодержаниеДляЖурнала (тип — Строка, длина 50–100 символов).Теперь нам нужно обеспечить автоматическое заполнение этого реквизита. Чтобы пользователю не пришлось вводить данные дважды, пропишем код в модуле формы тех документов, где это необходимо. Например, для документа Операция (ручная операция) в процедуре ПриЗаписи:
Процедура ПриЗаписи()
// Копируем содержание операции в наш общий реквизит для журнала
СодержаниеДляЖурнала = Операция.Содержание;
КонецПроцедуры
Для обычных документов, которые формируют проводки, логика может быть аналогичной. Преимущество этого метода в том, что данные считываются напрямую из индексированной таблицы, и журнал будет «летать» даже на очень больших объемах данных.
Проанализируем техническую разницу, которую важно понимать при реализации данной задачи. В 1С 7.7 существует объект Операция. Он может быть:
Если вы используете первый способ (функцию), вам нужно обращаться к Документ.Операция.Содержание. Если вы используете второй способ (общий реквизит), не забудьте добавить код заполнения в процедуру ОбработкаПроведения или ПриЗаписи соответствующих документов.
В ситуациях, когда стандартных средств платформы 7.7 недостаточно, разработчики часто прибегают к использованию внешней компоненты 1CPP.dll. Посмотрим, как это помогает решить нашу задачу:
Используя объект TableField, можно заменить стандартный список документов на виртуальную таблицу. Это позволяет выполнять прямые SQL-запросы к базе данных (в версии SQL). Таким образом, можно мгновенно «подтянуть» содержание операции напрямую из таблицы _1SOPER (где хранятся операции), не создавая лишних реквизитов в конфигурации и не нагружая систему функциями в колонках.
Иногда стоит предложить пользователю альтернативное решение, которое уже заложено в типовую конфигурацию. Рассмотрим Журнал проводок. В нем поле «Содержание» отображается штатно для каждой проводки. Если бухгалтеру нужно видеть именно суть операций, возможно, ему будет удобнее работать в журнале проводок, предварительно настроив в нем необходимые фильтры по видам документов. Это избавит вас от необходимости вносить изменения в структуру конфигурации.
Подводя итог, выбор метода зависит от ваших приоритетов: если нужно сделать «здесь и сейчас» и база небольшая — подойдет текстовая колонка с функцией. Если важна скорость работы и возможность поиска — выбирайте общий реквизит с индексацией.