Как в 1С:УТ 11.4 отобразить документы приобретения, по которым не выполнена установка цен

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

В процессе работы с конфигурацией «1С:Управление торговлей 11.4» (УТ 11.4) часто возникает необходимость контроля операционной деятельности. Одной из критически важных задач является проверка того, по всем ли поступившим товарам зафиксированы цены закупки. Если документ ПриобретениеТоваровУслуг оформлен, а связанный с ним документ УстановкаЦенНоменклатуры отсутствует, это может привести к ошибкам в отчетах по рентабельности и проблемам при последующей продаже товаров. Разберем подробно, как решить эту задачу с помощью технических средств платформы 1С.

Способ 1. Поиск через консоль запросов или создание отчета

Самый эффективный и быстрый метод — это использование механизма запросов. Основная идея заключается в том, чтобы выбрать все документы поступления и попытаться «присоединить» к ним документы установки цен по ссылке основания. Проанализируем ситуацию: если при соединении мы получаем пустое значение (NULL) в поле документа установки цен, значит, документ-основание остался без пары.

Рассмотрим текст запроса, который позволяет вывести список «забытых» документов. Мы будем использовать ЛЕВОЕ СОЕДИНЕНИЕ, где главной таблицей выступит ПриобретениеТоваровУслуг.


ВЫБРАТЬ
    Приобретение.Ссылка КАК ДокументПриобретения,
    УстановкаЦен.Ссылка КАК ДокументУстановкиЦен
ИЗ
    Документ.ПриобретениеТоваровУслуг КАК Приобретение
ЛЕВОЕ СОЕДИНЕНИЕ 
    Документ.УстановкаЦенНоменклатуры КАК УстановкаЦен
ПО 
    УстановкаЦен.ДокументОснование = Приобретение.Ссылка
ГДЕ 
    УстановкаЦен.Ссылка ЕСТЬ NULL
    И Приобретение.Проведен = ИСТИНА

Разберем по шагам, что происходит в этом запросе:

  1. Выбор источника данных: Мы обращаемся к таблице Документ.ПриобретениеТоваровУслуг. Это наш основной список поступлений.
  2. Левое соединение: Мы присоединяем таблицу Документ.УстановкаЦенНоменклатуры. Условием связи является равенство поля ДокументОснование в установке цен и ссылки самого поступления.
  3. Фильтрация: Условие ГДЕ УстановкаЦен.Ссылка ЕСТЬ NULL отсекает все записи, для которых нашлась хотя бы одна установка цен. Остаются только «одинокие» поступления.
  4. Дополнительные условия: Мы добавили проверку Приобретение.Проведен = ИСТИНА, чтобы не анализировать черновики и помеченные на удаление документы, которые не влияют на учет.

Способ 2. Обработка через программный код (поиск подчиненных объектов)

Иногда задачу нужно решить программно, например, при создании специализированной обработки или при проверке перед закрытием месяца. Выясним причину, почему стандартная структура подчиненности не всегда удобна: она показывает связи только для одного конкретного документа. Чтобы проверить массово, нам нужен обход выборки.

Посмотрим на пример кода, который ищет связанные документы для конкретного типа связи. В типовых конфигурациях 1С связь между поступлением и установкой цен часто фиксируется в реквизите ДокументОснование подчиненного документа.


// Пример поиска подчиненных документов на сервере
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Ссылка
    |ИЗ
    |	Документ.УстановкаЦенНоменклатуры
    |ГДЕ
    |	ДокументОснование = &ВыбДокумент";

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

РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
    Сообщить("Для документа " + СсылкаНаПриобретение + " установка цен не найдена!");
КонецЕсли;

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

Способ 3. Модификация динамического списка формы

Для того чтобы пользователи могли видеть информацию об отсутствии цен прямо в форме списка Приобретения товаров и услуг, можно прибегнуть к изменению свойств динамического списка. Рассмотрим подробнее, как это сделать без изменения конфигурации (используя расширение):

  1. Откроем форму списка документов ПриобретениеТоваровУслуг.
  2. Перейдем к свойствам основной таблицы (динамического списка) и установим флаг Произвольный запрос.
  3. В тексте запроса добавим соединение с таблицей установок цен, как мы делали в первом способе.
  4. Выведем в список новое поле — назовем его, например, СтатусЦен.

Для визуального удобства используем функцию ВЫБОР прямо в запросе динамического списка:


ВЫБОР
    КОГДА УстановкаЦен.Ссылка ЕСТЬ NULL ТОГДА "Цены не установлены"
    ИНАЧЕ "Ок"
КОНЕЦ КАК СтатусУстановкиЦен

Важный момент: Если для одного поступления создано несколько документов установки цен (например, отдельно для разных категорий товаров), обычное соединение может «размножить» строки в списке. Чтобы этого избежать, используйте оператор ВЫБРАТЬ РАЗЛИЧНЫЕ или группировку в запросе динамического списка.

Нюансы использования функции ЕСТЬNULL

В обсуждениях часто упоминается функция ЕСТЬNULL. Разберем, зачем она нужна. При левом соединении, если данных в правой таблице нет, система возвращает значение NULL. Это специфический тип данных, который нельзя просто сравнить с пустой ссылкой. Функция ЕСТЬNULL(Поле, ЗначениеЗамены) позволяет подставить понятное значение вместо пустоты.

Например, если мы хотим, чтобы в отчете вместо пустого места выводилась пустая ссылка типа «Установка цен», мы пишем:

ЕСТЬNULL(УстановкаЦен.Ссылка, ЗНАЧЕНИЕ(Документ.УстановкаЦенНоменклатуры.ПустаяСсылка))

Однако для фильтрации «недостающих» документов в блоке ГДЕ правильнее использовать прямое сравнение: ГДЕ УстановкаЦен.Ссылка ЕСТЬ NULL.

Рекомендации по автоматизации контроля

Чтобы минимизировать человеческий фактор в УТ 11.4, рекомендуем рассмотреть следующие шаги:

Таким образом, мы проанализировали несколько вариантов решения задачи: от простых запросов в консоли до внедрения в интерфейс пользователя через динамические списки. Выбор конкретного метода зависит от того, насколько часто требуется такая проверка и кто будет являться конечным потребителем этой информации.

← На главную