Каким образом можно получить цены из регистра сведений и внести их в табличную часть документов «ПриходнаяНакладная» и «РасходнаяНакладная» при их создании?

Как я могу автоматически заполнить табличную часть документов «Приходная накладная» и «Расходная накладная» согласно условию: "Цены на оборудование фиксируются отдельным документом, который может вводиться раз в день, и ручное указание цены в документе «Расходная накладная» запрещено"? Я уже создал документ и регистр сведений для хранения цен, но не могу понять, как связать их с создаваемыми накладными. У меня есть возможность предоставить скриншоты или код, если это необходимо. С чего лучше начать?
  • 18 декабря 2024 г. 17:13
Ответы на вопрос 2
Чтобы автоматически заполнять табличную часть документов «Приходная накладная» и «Расходная накладная» с использованием цен из регистра сведений, можно воспользоваться следующими шагами:

### Шаги для автоматического заполнения цен

1. **Создание регистра сведений для хранения цен:**
   Убедитесь, что ваш регистр сведений правильно настроен. Он должен включать необходимые поля, такие как:
   - Номенклатура (или товар)
   - Цена
   - Дата (для учета актуальности цен)

2. **Создание обработчика на событие «ПередЗаписью» или «ПередРасчетом» у документов:**
   В каждом из документов (Приходная накладная и Расходная накладная), вам нужно создать обработчик, который будет выполняться перед сохранением документа. Это позволит вам заполнять табличные части перед их записью.

3. **Запрос к регистру сведений:**
   В обработчике вам нужно сформировать запрос к вашему регистру сведений для получения текущих цен на оборудование. Учитывайте, что нужно фильтровать данные по дате (например, выбирая только актуальные для даты накладной).

4. **Заполнение табличной части:**
   На основе полученных данных вам нужно будет заполнить табличную часть для каждой строки, основываясь на номенклатуре.

### Пример кода

Вот пример кода, который может помочь вам реализовать описанный выше процесс:

```1C
Процедура ПередЗаписью(Отказ)
    // Проверяем, чтобы табличная часть была заполнена
    Если Не ТабличнаяЧасть.Пустое() Тогда
        // Перебираем строки табличной части
        Для Каждого Строка Из ТабличнаяЧасть Цикл
            Номенклатура = Строка.Номенклатура;

            // Запрос к регистру сведений для получения цены
            Запрос = Новый Запрос("
                ВЫБРАТЬ TOP 1
                    РегистрЦен.Номенклатура,
                    РегистрЦен.Цена
                ИЗ
                    РегистрЦен
                ГДЕ
                    РегистрЦен.Номенклатура = &Номенклатура
                    И РегистрЦен.Дата <= &Дата
                УПОРЯДОЧИТЬ ПО РегистрЦен.Дата УБЫВ");
           
            Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
            Запрос.УстановитьПараметр("Дата", ЭтотОбъект.Дата);
            
            Результат = Запрос.Выполнить();
            
            Если Результат.Найдено() Тогда
                // Получаем цену из результата запроса
                Строка.Цена = Результат.Цена;
            Иначе
                // Обработка случая, когда цена не найдена
                Строка.Цена = 0; // или другое значение по умолчанию
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
КонецПроцедуры
```

### Подсказки

- **Обработка ошибок:** Не забудьте добавить обработку ошибок на случай, если информация о ценах не найдена или возникнут другие проблемы.
- **Оптимизация:** Если вы ожидаете большое количество записей, рассмотрите возможность оптимизации вашего кода, например, чтобы делать один запрос для всех строк вместо того, чтобы выполнять запрос отдельно для каждой.
- **Тестирование:** Обязательно протестируйте ваше решение, чтобы убедиться, что цены заполняются корректно и ошибки не возникают.

### Заключение

Теперь у вас есть основные шаги и пример кода, который вы можете использовать для автоматического заполнения табличной части документов с помощью цен из вашего регистра сведений. Отладьте и улучшите код согласно вашим требованиям.
Я в 1С не селён, да и не сказать что занимаюсь этим делом по своей воле, просто задание итоговое по курсу такое.

Если не хотите разбираться, то сходите и купите решение. Если решили делать сами, то старайтесь вникнуть и задавайте конкретные вопросы. Это не то место, где за Вас сделают задание.
Похожие вопросы