Почему не редактируется Назначение в Приобретении товаров и услуг 1С:КА 2.5 и как это исправить

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

В современных конфигурациях 1С, таких как Комплексная автоматизация 2.5 и ERP Управление предприятием, пользователи и разработчики часто сталкиваются с ситуацией, когда в документе ПриобретениеТоваровУслуг (ПТУ) невозможно изменить значение в колонке Назначение. При этом визуально поле кажется доступным, программная проверка через отладчик показывает ТолькоПросмотр = Ложь, а Доступность = Истина, но при попытке выбора ничего не происходит. Рассмотрим подробно, почему система ведет себя именно так и как правильно решить эту задачу.

Выясняем причину блокировки: механизм Условного оформления

Проанализируем поведение управляемой формы. В 1С:КА и ERP реализована сложная логика управления элементами интерфейса. Если прямое обращение к свойствам реквизита в коде (через ЭтаФорма.Элементы...) не дает ответа, значит, в дело вступает Условное оформление формы. Оно работает на уровне платформы и может перекрывать настройки доступности, заданные программно.

Разберем конкретный пример настройки условного оформления, который часто встречается в типовых решениях:


// Условное оформление на форме документа
ЭлементОформления = УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ТоварыНазначение");
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.КодСтроки");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ЭлементОтбора.ПравоеЗначение = 0;

Эта логика означает: если строка приобретения связана с заказом, редактирование назначения запрещено. Система считает, что если вы закупаете товар под конкретное назначение (например, под Заказ клиента или направление деятельности), то эта связь должна быть жестко зафиксирована еще на этапе планирования (в Заказе поставщику).

Роль реквизита КодСтроки в связке документов

Проанализируем, что такое КодСтроки. В табличной части Товары документов закупки и продажи это служебный реквизит типа Число. Он служит уникальным идентификатором связи между строкой Заказа поставщику и строкой Приобретения товаров и услуг.

  1. Когда ПТУ создается на основании Заказа, в него копируется КодСтроки из Заказа.
  2. Благодаря этому числу система понимает, какая именно позиция заказа была исполнена, даже если в документе несколько одинаковых номенклатурных позиций.
  3. Если КодСтроки больше нуля, система блокирует Назначение, чтобы не возникло ситуации, когда по Заказу товар ждали под "Назначение А", а фактически приняли под "Назначение Б". Это разрушило бы логику закрытия потребностей и привело бы к ошибкам в отчете "Состояние выполнения заказов".

Способ 1: Методически верное решение (через первоисточник)

Если нам необходимо изменить Назначение, самым правильным с точки зрения архитектуры системы будет изменение исходного документа. Рассмотрим этот алгоритм по шагам:

  1. Перейдем в документ Заказ поставщику, который является основанием для нашего приобретения.
  2. В табличной части Товары найдем нужную строку и изменим Назначение там. Важно: убедитесь, что вариант обеспечения установлен как "Обособленно", иначе назначение может не учитываться.
  3. Проведем Заказ.
  4. Вернемся в Приобретение товаров и услуг.
  5. Нажмем кнопку Заполнить и выберем пункт Перезаполнить по заказу.

После этих действий система обновит данные в ПТУ, сохранив корректную связь через КодСтроки, и в регистрах себестоимости и накопления данные отразятся без перекосов.

Способ 2: Использование группового изменения реквизитов

Рассмотрим ситуацию, когда документов много или прямой доступ к перезаполнению ограничен. В этом случае можно воспользоваться обработкой Групповое изменение реквизитов. Разберем, как сделать это безопасно:

  1. Откроем обработку и выберем объект Приобретение товаров и услуг (Товары).
  2. Обязательно настроим отбор по ссылке на конкретный документ и, при необходимости, по конкретной номенклатуре.
  3. Нажмем кнопку Дополнительные параметры и установим флаг Показывать служебные реквизиты.
  4. Найдем в списке реквизит Назначение и укажите новое значение.
  5. Выполним изменение.

Внимание: помните, что при таком способе вы меняете данные "в обход" экранных проверок. Если назначение в ПТУ перестанет совпадать с назначением в Заказе, это может привести к тому, что Заказ останется в статусе "Не выполнен", хотя товар фактически пришел.

Способ 3: Технический разрыв связи (установка Кода строки в 0)

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

Как только КодСтроки станет равен 0, условное оформление перестанет действовать, и поле Назначение станет доступным для редактирования прямо в форме документа. Однако в этот момент связь с Заказом поставщику будет разорвана. Документ приобретения перестанет закрывать потребность по этому заказу.

Для реализации этого способа программисты часто используют внешние обработки или консоль запросов/кода:


ОбъектДок = СсылкаНаПТУ.ПолучитьОбъект();
Для Каждого СтрокаТовара Из ОбъектДок.Товары Цикл
    Если СтрокаТовара.Номенклатура = ИскомаяНоменклатура Тогда
        СтрокаТовара.КодСтроки = 0;
    КонецЕсли;
КонецЦикла;
ОбъектДок.Записать(РежимЗаписиДокумента.Проведение);

Проблема пустых назначений в регистрах

Выясним причину, почему даже при заполненном назначении в документах, в регистрах себестоимости оно может оказаться пустым. Это часто связано с настройкой финансового учета. Если в системе не включен учет по назначениям или если тип запасов в строке документа определен как "Общий", система намеренно очищает назначение при проведении, так как не предполагает обособленного учета для данной операции.

Проанализируем ситуацию в закрытии месяца. Если вы видите несоответствие аналитик, проверьте регистр ВыручкаИСебестоимостьПродаж и СебестоимостьТоваров. Если в одном документе (Заказе) назначение есть, а в ПТУ оно "потерялось", это прямой путь к ошибкам распределения затрат. В таких случаях рекомендуется использовать Способ 1, чтобы восстановить целостность данных через перезаполнение документа по актуальному заказу.

← На главную