В процессе работы с программой «1С:Бухгалтерия предприятия 3.0» пользователи и разработчики часто сталкиваются с необходимостью массового обновления цен, особенно при выходе новых прейскурантов. Другой популярный запрос — настройка удобного интерфейса, где выбор одного параметра (например, контрагента) жестко ограничивает список доступных значений в другом поле (например, договоре). В рамках данной статьи мы подробно разберем, как решить эти задачи, а также затронем технический аспект обращения к полям из расширений в запросах для внешних печатных форм (ВПФ).
Рассмотрим ситуацию: в системе создано множество документов (например, «Калькуляция» или «Оказание услуг»), в которых зафиксированы старые цены. При поступлении нового прейскуранта простое изменение цен в справочниках или установка новой даты в интерфейсе («Рабочая дата») не приводит к автоматическому пересчету сумм в уже созданных или скопированных документах. Это происходит потому, что документ при записи фиксирует значения цен в своей табличной части для обеспечения исторической достоверности учета.
Проанализируем, как можно ускорить процесс обновления цен в табличных частях. Для этого мы воспользуемся встроенными механизмами пересчета:
Выясним причину, по которой изменение «Рабочей даты» не помогало автору вопроса. Рабочая дата в 1С влияет только на подстановку даты в новые создаваемые объекты. Она не инициирует фоновый пересчет данных в открытых формах. Чтобы программа «увидела» новые цены, необходимо либо заново выбрать номенклатурную позицию, либо использовать групповую обработку пересчета, описанную выше.
Если позиций в прейскуранте сотни, ручной ввод в документ «Установка цен номенклатуры» неэффективен. Разберем, как использовать типовой функционал загрузки данных:
В современных релизах 1С 8.3 встроен мощный механизм загрузки из табличных документов. Нам не обязательно искать внешнюю обработку ЗагрузкаДанныхИзТабличногоДокумента, так как ее функции интегрированы в справочники. Для этого выполним следующие действия:
Часто программистам ставят задачу: сделать так, чтобы при выборе контрагента в поле «Договор» отображались только те договоры, которые принадлежат именно этому клиенту. Рассмотрим по шагам, как это реализовать с помощью механизма Связи параметров выбора.
Этот метод не требует написания кода на языке 1С и настраивается в свойствах элементов формы или метаданных. Разберем алгоритм настройки в конфигураторе:
Договор (в документе или внешнем отчете).Отбор.Владелец, а в колонке «Выражение» выберем имя реквизита, отвечающего за контрагента (например, Объект.Контрагент или просто Контрагент, если это отчет).Теперь платформа автоматически будет накладывать фильтр на справочник договоров, передавая ссылку на выбранного контрагента в качестве владельца. Если мы работаем с Системой компоновки данных (СКД) во внешнем отчете, аналогичную настройку выполним на закладке «Наборы данных» в поле «Параметры редактирования» для соответствующего поля.
Ситуация: поле Характеристика добавлено в справочник ОсновныеСредства через расширение. Нам нужно вывести это поле во внешнюю печатную форму. Рассмотрим особенности работы с расширениями в запросах.
Проанализируем техническую сторону: когда расширение подключено к базе, платформа «объединяет» структуру метаданных. С точки зрения текста запроса, поле расширения становится равноправным участником таблицы. Посмотрим на пример кода запроса:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОсновныеСредства.Ссылка КАК ОС,
| ОсновныеСредства.Характеристика КАК ХарактеристикаИзРасширения
|ИЗ
| Справочник.ОсновныеСредства КАК ОсновныеСредства
|ГДЕ
| ОсновныеСредства.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
РезультатЗапроса = Запрос.Выполнить();
Важный нюанс: если вы разрабатываете ВПФ в конфигураторе «пустой» базы (где нет этого расширения), конфигуратор выдаст ошибку при попытке сохранить такой запрос, так как он «не знает» о существовании поля Характеристика. Чтобы успешно разработать такую форму, необходимо:
Если же поле является не реквизитом, а «Дополнительным реквизитом» (созданным в пользовательском режиме), то обращаться к нему нужно через левое соединение с табличной частью ДополнительныеРеквизиты или через обращение к регистру сведений ЗначенияДополнительныхРеквизитов. В запросе это будет выглядеть так:
ВЫБРАТЬ
ЗНАЧЕНИЕ(ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ХарактеристикаОС) КАК Свойство,
ЗначенияДополнительныхРеквизитов.Значение КАК Значение
ИЗ
РегистрСведений.ЗначенияДополнительныхРеквизитов КАК ЗначенияДополнительныхРеквизитов
ГДЕ
ЗначенияДополнительныхРеквизитов.Объект = &Объект
И ЗначенияДополнительныхРеквизитов.Свойство = &Свойство
Поскольку документ «Калькуляция» часто является специфическим для конкретного предприятия, разберем общую структуру создания ВПФ для 1С 8.3 на базе БСП (Библиотеки стандартных подсистем). Каждая внешняя обработка должна содержать в модуле объекта экспортную функцию СведенияОВнешнейОбработке().
Рассмотрим пример формирования этой функции:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
ПараметрыРегистрации.Вставить("Назначение", ПолучитьНазначениеОбработки());
ПараметрыРегистрации.Вставить("Наименование", "Печатная форма Калькуляция");
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд, "Калькуляция", "КалькуляцияПечать", "ВызовСерверногоМетода", Ложь, "ПечатьMXL");
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Основная логика получения данных и заполнения макета должна находиться в процедуре Печать(), которая вызывается платформой при нажатии пользователем кнопки печати в интерфейсе документа. Мы проанализировали основные запросы и методы, которые помогут вам автоматизировать работу с ценами и интерфейсом в «1С:Бухгалтерия 3.0».