Возможно ли человеку, который не знает код 1С, перенести кнопку для автоматического заполнения серий?

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

В типовой конфигурации «1С:Управление торговлей 10.3» пользователи часто сталкиваются с тем, что функционал разных документов реализован неодинаково. Например, в документе РеализацияТоваровУслуг существует удобная кнопка «Заполнить и провести», которая автоматически подбирает серии номенклатуры по остаткам на складе. В то же время в документе ЧекККМ такая возможность часто отсутствует, что вынуждает кассира выбирать серии вручную «методом тыка».

Разберем подробно, можно ли просто «скопировать и вставить» кнопку из одного документа в другой и что для этого потребуется на самом деле.

Почему простое копирование кнопки не работает

Проанализируем ситуацию: любая кнопка на форме — это лишь визуальный элемент. Она не обладает «интеллектом» сама по себе. В свойствах кнопки прописано событие (обычно это Действие), которое ссылается на конкретную процедуру в программном коде модуля формы. Когда вы копируете кнопку из «Реализации» в «Чек ККМ», вы копируете только «картинку» и ссылку на имя процедуры. Однако самой процедуры ЗаполнитьТабличныеЧастиПередПроведением() в модуле формы ЧекККМ не существует. Именно поэтому при попытке сохранения или выполнения программы 1С выдает ошибку: «Процедура или функция с указанным именем не определена».

Разберем по шагам процесс правильного переноса функционала

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

  1. Поиск программного кода: В конфигураторе откроем форму документа РеализацияТоваровУслуг. Найдем кнопку «Заполнить и провести» и через ее свойства перейдем в процедуру-обработчик в модуле формы. Скорее всего, она будет вызывать процедуру ЗаполнитьТабличныеЧастиПередПроведением().
  2. Копирование логики: Нам нужно найти описание этой процедуры. Обычно она находится либо в самом модуле формы, либо в модуле объекта документа. Нам придется скопировать не только саму процедуру, но и все функции, к которым она обращается.
  3. Адаптация кода под Чек ККМ: Рассмотрим пример кода, который обычно вызывает ошибку у новичков:

// Пример вызова в модуле формы
Процедура КнопкаЗаполнитьИПровестиНажатие(Кнопка)
    // Вызов основной логики заполнения
    ЗаполнитьТабличныеЧастиПередПроведением();
    // Попытка проведения документа
    Если ЗаписатьВФорме(РежимЗаписиДокумента.Проведение) Тогда
        ЭтаФорма.Закрыть();
    КонецЕсли;
КонецПроцедуры

Проанализируем ситуацию: процедура ЗаполнитьТабличныеЧастиПередПроведением() в «Реализации» жестко завязана на структуру этого документа. Она ищет табличную часть Товары, проверяет наличие склада в реквизите Склад и обращается к общим модулям для расчета остатков серий. В документе ЧекККМ названия реквизитов могут совпадать, но контекст работы (розничная торговля) накладывает свои ограничения.

Использование общего модуля для подбора серий

Выясним причину, по которой серии в «Реализации» заполняются автоматически. Чаще всего для этого используется глобальный механизм конфигурации. В УТ 10.3 за это отвечает общий модуль РаботаСНоменклатурой. Чтобы не переписывать тонны кода, мы можем попробовать вызвать стандартную функцию подбора серий напрямую в ЧекККМ.

Рассмотрим пример кода, который можно интегрировать в обработчик нажатия вашей новой кнопки в ЧекККМ:


// Вставляем в модуль формы ЧекККМ
Процедура ОсновныеДействияФормыЗаполнитьСерии(Кнопка)
    
    // Подготовим структуру параметров для заполнения
    ПараметрыЗаполнения = Новый Структура;
    ПараметрыЗаполнения.Вставить("ДокументСсылка", Ссылка);
    ПараметрыЗаполнения.Вставить("Склад", Склад);
    
    // Вызываем типовую функцию из общего модуля
    // В УТ 10.3 она может называться иначе, например:
    РаботаСНоменклатурой.ЗаполнитьСерииПоОстаткам(Товары, Ссылка, Склад);
    
КонецПроцедуры

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

Альтернативный и безопасный способ: Внешняя обработка

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

Разберем преимущества этого метода:

Почему в «Чеке ККМ» изначально нет этой кнопки?

Проанализируем методологию 1С. Документ ЧекККМ предназначен для оперативной розничной торговли. Предполагается, что кассир берет конкретный товар с полки, на котором указана конкретная серия (или срок годности), и сканирует его. Автоматическое заполнение серий «по остаткам» в рознице чревато тем, что программа спишет одну серию (которая числится первой по методу FIFO/FEFO), а клиент унесет в руках другую. Это приведет к пересортице серий на складе.

Однако, если ваш бизнес-процесс подразумевает, что серии приходуются автоматически (например, через Контур.Диадок, как в сообщении пользователя) и вам важно просто быстро списать остаток, то добавление такой кнопки оправдано.

Резюме для пользователя без навыков программирования

Посмотрим правде в глаза: чисто методом «Копировать-Вставить» в интерфейсе задачу не решить. Вам в любом случае придется открыть модуль документа и внести программные правки. Если вы готовы рискнуть, следуйте алгоритму:

  1. Найдите в Реализации процедуру ЗаполнитьТабличныеЧастиПередПроведением.
  2. Скопируйте её текст целиком.
  3. Вставьте её в самый конец модуля формы ЧекККМ.
  4. При попытке сохранения 1С укажет на новые ошибки (отсутствующие функции) — их тоже придется найти в Реализации и перенести.

Совет: Самый надежный вариант — обратиться к специалисту для создания внешней обработки заполнения. Это сэкономит ваше время и убережет базу данных от критических ошибок при проведении чеков.

← На главную