Чтобы автоматически заполнять табличную часть документов «Приходная накладная» и «Расходная накладная» с использованием цен из регистра сведений, можно воспользоваться следующими шагами:
### Шаги для автоматического заполнения цен
1. **Создание регистра сведений для хранения цен:**
Убедитесь, что ваш регистр сведений правильно настроен. Он должен включать необходимые поля, такие как:
- Номенклатура (или товар)
- Цена
- Дата (для учета актуальности цен)
2. **Создание обработчика на событие «ПередЗаписью» или «ПередРасчетом» у документов:**
В каждом из документов (Приходная накладная и Расходная накладная), вам нужно создать обработчик, который будет выполняться перед сохранением документа. Это позволит вам заполнять табличные части перед их записью.
3. **Запрос к регистру сведений:**
В обработчике вам нужно сформировать запрос к вашему регистру сведений для получения текущих цен на оборудование. Учитывайте, что нужно фильтровать данные по дате (например, выбирая только актуальные для даты накладной).
4. **Заполнение табличной части:**
На основе полученных данных вам нужно будет заполнить табличную часть для каждой строки, основываясь на номенклатуре.
### Пример кода
Вот пример кода, который может помочь вам реализовать описанный выше процесс:
```1C
Процедура ПередЗаписью(Отказ)
// Проверяем, чтобы табличная часть была заполнена
Если Не ТабличнаяЧасть.Пустое() Тогда
// Перебираем строки табличной части
Для Каждого Строка Из ТабличнаяЧасть Цикл
Номенклатура = Строка.Номенклатура;
// Запрос к регистру сведений для получения цены
Запрос = Новый Запрос("
ВЫБРАТЬ TOP 1
РегистрЦен.Номенклатура,
РегистрЦен.Цена
ИЗ
РегистрЦен
ГДЕ
РегистрЦен.Номенклатура = &Номенклатура
И РегистрЦен.Дата <= &Дата
УПОРЯДОЧИТЬ ПО РегистрЦен.Дата УБЫВ");
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.УстановитьПараметр("Дата", ЭтотОбъект.Дата);
Результат = Запрос.Выполнить();
Если Результат.Найдено() Тогда
// Получаем цену из результата запроса
Строка.Цена = Результат.Цена;
Иначе
// Обработка случая, когда цена не найдена
Строка.Цена = 0; // или другое значение по умолчанию
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
```
### Подсказки
- **Обработка ошибок:** Не забудьте добавить обработку ошибок на случай, если информация о ценах не найдена или возникнут другие проблемы.
- **Оптимизация:** Если вы ожидаете большое количество записей, рассмотрите возможность оптимизации вашего кода, например, чтобы делать один запрос для всех строк вместо того, чтобы выполнять запрос отдельно для каждой.
- **Тестирование:** Обязательно протестируйте ваше решение, чтобы убедиться, что цены заполняются корректно и ошибки не возникают.
### Заключение
Теперь у вас есть основные шаги и пример кода, который вы можете использовать для автоматического заполнения табличной части документов с помощью цен из вашего регистра сведений. Отладьте и улучшите код согласно вашим требованиям.