Как автоматически обновить цены в документах 1С:Бухгалтерия 3.0, настроить связь контрагента с договором и обратиться к полям расширений

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

В процессе работы с программой «1С:Бухгалтерия предприятия 3.0» пользователи и разработчики часто сталкиваются с необходимостью массового обновления цен, особенно при выходе новых прейскурантов. Другой популярный запрос — настройка удобного интерфейса, где выбор одного параметра (например, контрагента) жестко ограничивает список доступных значений в другом поле (например, договоре). В рамках данной статьи мы подробно разберем, как решить эти задачи, а также затронем технический аспект обращения к полям из расширений в запросах для внешних печатных форм (ВПФ).

Автоматическое обновление цен в документах при изменении прейскуранта

Рассмотрим ситуацию: в системе создано множество документов (например, «Калькуляция» или «Оказание услуг»), в которых зафиксированы старые цены. При поступлении нового прейскуранта простое изменение цен в справочниках или установка новой даты в интерфейсе («Рабочая дата») не приводит к автоматическому пересчету сумм в уже созданных или скопированных документах. Это происходит потому, что документ при записи фиксирует значения цен в своей табличной части для обеспечения исторической достоверности учета.

Проанализируем, как можно ускорить процесс обновления цен в табличных частях. Для этого мы воспользуемся встроенными механизмами пересчета:

  1. Откроем нужный документ (или создадим копию старого).
  2. Обратим внимание на командную панель над табличной частью «Товары» или «Услуги». В типовых решениях «1С:Бухгалтерия 3.0» предусмотрена кнопка «Изменить».
  3. После нажатия откроется окно «Изменение таблицы товаров». Здесь выберем в выпадающем списке команду «Пересчитать цены по типу».
  4. Система предложит выбрать тип цен и дату, на которую нужно подтянуть актуальные значения из регистра сведений «Цены номенклатуры».
  5. После нажатия кнопки «Выполнить» программа автоматически найдет актуальные цены на указанную дату и обновит их в табличной части.

Выясним причину, по которой изменение «Рабочей даты» не помогало автору вопроса. Рабочая дата в 1С влияет только на подстановку даты в новые создаваемые объекты. Она не инициирует фоновый пересчет данных в открытых формах. Чтобы программа «увидела» новые цены, необходимо либо заново выбрать номенклатурную позицию, либо использовать групповую обработку пересчета, описанную выше.

Загрузка цен из внешних файлов (Excel)

Если позиций в прейскуранте сотни, ручной ввод в документ «Установка цен номенклатуры» неэффективен. Разберем, как использовать типовой функционал загрузки данных:

В современных релизах 1С 8.3 встроен мощный механизм загрузки из табличных документов. Нам не обязательно искать внешнюю обработку ЗагрузкаДанныхИзТабличногоДокумента, так как ее функции интегрированы в справочники. Для этого выполним следующие действия:

  1. Перейдем в раздел «Склад» — «Установка цен номенклатуры».
  2. Создадим новый документ и нажмем кнопку «Загрузить из файла».
  3. Программа предложит шаблон в формате Excel или позволит просто вставить данные из буфера обмена (Copy-Paste).
  4. Настроим соответствие колонок: «Номенклатура» (по коду, артикулу или наименованию) и «Цена».
  5. После загрузки документ будет заполнен автоматически, и нам останется только провести его.

Настройка связи «Контрагент — Договор» в отчетах и документах

Часто программистам ставят задачу: сделать так, чтобы при выборе контрагента в поле «Договор» отображались только те договоры, которые принадлежат именно этому клиенту. Рассмотрим по шагам, как это реализовать с помощью механизма Связи параметров выбора.

Этот метод не требует написания кода на языке 1С и настраивается в свойствах элементов формы или метаданных. Разберем алгоритм настройки в конфигураторе:

  1. Найдем реквизит Договор (в документе или внешнем отчете).
  2. Откроем палитру свойств этого реквизита.
  3. Найдем пункт «Связи параметров выбора» и нажмем на кнопку с многоточием.
  4. В открывшемся окне создадим новую связь. В колонке «Параметр выбора» укажем Отбор.Владелец, а в колонке «Выражение» выберем имя реквизита, отвечающего за контрагента (например, Объект.Контрагент или просто Контрагент, если это отчет).

Теперь платформа автоматически будет накладывать фильтр на справочник договоров, передавая ссылку на выбранного контрагента в качестве владельца. Если мы работаем с Системой компоновки данных (СКД) во внешнем отчете, аналогичную настройку выполним на закладке «Наборы данных» в поле «Параметры редактирования» для соответствующего поля.

Обращение к полям из расширений в запросах для ВПФ

Ситуация: поле Характеристика добавлено в справочник ОсновныеСредства через расширение. Нам нужно вывести это поле во внешнюю печатную форму. Рассмотрим особенности работы с расширениями в запросах.

Проанализируем техническую сторону: когда расширение подключено к базе, платформа «объединяет» структуру метаданных. С точки зрения текста запроса, поле расширения становится равноправным участником таблицы. Посмотрим на пример кода запроса:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   ОсновныеСредства.Ссылка КАК ОС,
    |   ОсновныеСредства.Характеристика КАК ХарактеристикаИзРасширения
    |ИЗ
    |   Справочник.ОсновныеСредства КАК ОсновныеСредства
    |ГДЕ
    |   ОсновныеСредства.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
РезультатЗапроса = Запрос.Выполнить();

Важный нюанс: если вы разрабатываете ВПФ в конфигураторе «пустой» базы (где нет этого расширения), конфигуратор выдаст ошибку при попытке сохранить такой запрос, так как он «не знает» о существовании поля Характеристика. Чтобы успешно разработать такую форму, необходимо:

Если же поле является не реквизитом, а «Дополнительным реквизитом» (созданным в пользовательском режиме), то обращаться к нему нужно через левое соединение с табличной частью ДополнительныеРеквизиты или через обращение к регистру сведений ЗначенияДополнительныхРеквизитов. В запросе это будет выглядеть так:


ВЫБРАТЬ
    ЗНАЧЕНИЕ(ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ХарактеристикаОС) КАК Свойство,
    ЗначенияДополнительныхРеквизитов.Значение КАК Значение
ИЗ
    РегистрСведений.ЗначенияДополнительныхРеквизитов КАК ЗначенияДополнительныхРеквизитов
ГДЕ
    ЗначенияДополнительныхРеквизитов.Объект = &Объект
    И ЗначенияДополнительныхРеквизитов.Свойство = &Свойство

Создание внешней печатной формы (ВПФ)

Поскольку документ «Калькуляция» часто является специфическим для конкретного предприятия, разберем общую структуру создания ВПФ для 1С 8.3 на базе БСП (Библиотеки стандартных подсистем). Каждая внешняя обработка должна содержать в модуле объекта экспортную функцию СведенияОВнешнейОбработке().

Рассмотрим пример формирования этой функции:


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = Новый Структура;
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
    ПараметрыРегистрации.Вставить("Назначение", ПолучитьНазначениеОбработки());
    ПараметрыРегистрации.Вставить("Наименование", "Печатная форма Калькуляция");
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
    
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд, "Калькуляция", "КалькуляцияПечать", "ВызовСерверногоМетода", Ложь, "ПечатьMXL");
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    
    Возврат ПараметрыРегистрации;
КонецФункции

Основная логика получения данных и заполнения макета должна находиться в процедуре Печать(), которая вызывается платформой при нажатии пользователем кнопки печати в интерфейсе документа. Мы проанализировали основные запросы и методы, которые помогут вам автоматизировать работу с ценами и интерфейсом в «1С:Бухгалтерия 3.0».

← На главную