В типовой конфигурации «1С:Управление торговлей 10.3» пользователи часто сталкиваются с тем, что функционал разных документов реализован неодинаково. Например, в документе РеализацияТоваровУслуг существует удобная кнопка «Заполнить и провести», которая автоматически подбирает серии номенклатуры по остаткам на складе. В то же время в документе ЧекККМ такая возможность часто отсутствует, что вынуждает кассира выбирать серии вручную «методом тыка».
Разберем подробно, можно ли просто «скопировать и вставить» кнопку из одного документа в другой и что для этого потребуется на самом деле.
Проанализируем ситуацию: любая кнопка на форме — это лишь визуальный элемент. Она не обладает «интеллектом» сама по себе. В свойствах кнопки прописано событие (обычно это Действие), которое ссылается на конкретную процедуру в программном коде модуля формы. Когда вы копируете кнопку из «Реализации» в «Чек ККМ», вы копируете только «картинку» и ссылку на имя процедуры. Однако самой процедуры ЗаполнитьТабличныеЧастиПередПроведением() в модуле формы ЧекККМ не существует. Именно поэтому при попытке сохранения или выполнения программы 1С выдает ошибку: «Процедура или функция с указанным именем не определена».
Для того чтобы кнопка заработала, нам необходимо перенести не только визуальный элемент, но и всю программную логику. Рассмотрим, как это сделать правильно.
РеализацияТоваровУслуг. Найдем кнопку «Заполнить и провести» и через ее свойства перейдем в процедуру-обработчик в модуле формы. Скорее всего, она будет вызывать процедуру ЗаполнитьТабличныеЧастиПередПроведением().
// Пример вызова в модуле формы
Процедура КнопкаЗаполнитьИПровестиНажатие(Кнопка)
// Вызов основной логики заполнения
ЗаполнитьТабличныеЧастиПередПроведением();
// Попытка проведения документа
Если ЗаписатьВФорме(РежимЗаписиДокумента.Проведение) Тогда
ЭтаФорма.Закрыть();
КонецЕсли;
КонецПроцедуры
Проанализируем ситуацию: процедура ЗаполнитьТабличныеЧастиПередПроведением() в «Реализации» жестко завязана на структуру этого документа. Она ищет табличную часть Товары, проверяет наличие склада в реквизите Склад и обращается к общим модулям для расчета остатков серий. В документе ЧекККМ названия реквизитов могут совпадать, но контекст работы (розничная торговля) накладывает свои ограничения.
Выясним причину, по которой серии в «Реализации» заполняются автоматически. Чаще всего для этого используется глобальный механизм конфигурации. В УТ 10.3 за это отвечает общий модуль РаботаСНоменклатурой. Чтобы не переписывать тонны кода, мы можем попробовать вызвать стандартную функцию подбора серий напрямую в ЧекККМ.
Рассмотрим пример кода, который можно интегрировать в обработчик нажатия вашей новой кнопки в ЧекККМ:
// Вставляем в модуль формы ЧекККМ
Процедура ОсновныеДействияФормыЗаполнитьСерии(Кнопка)
// Подготовим структуру параметров для заполнения
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("ДокументСсылка", Ссылка);
ПараметрыЗаполнения.Вставить("Склад", Склад);
// Вызываем типовую функцию из общего модуля
// В УТ 10.3 она может называться иначе, например:
РаботаСНоменклатурой.ЗаполнитьСерииПоОстаткам(Товары, Ссылка, Склад);
КонецПроцедуры
Важный момент: если вы решите просто скопировать весь код из одного документа в другой, 1С продолжит ругаться на неопределенные функции. Вам придется «вытягивать» по цепочке все связанные процедуры, что для человека, не знающего код, практически невозможно без ошибок.
Если вы опасаетесь вносить изменения в код типовой конфигурации (что приведет к трудностям при последующих обновлениях), рассмотрим более профессиональный подход — использование Внешней обработки заполнения табличных частей.
Разберем преимущества этого метода:
.epf, и вы сможете подключать его к любому документу (и к Чеку ККМ, и к Реализации).Проанализируем методологию 1С. Документ ЧекККМ предназначен для оперативной розничной торговли. Предполагается, что кассир берет конкретный товар с полки, на котором указана конкретная серия (или срок годности), и сканирует его. Автоматическое заполнение серий «по остаткам» в рознице чревато тем, что программа спишет одну серию (которая числится первой по методу FIFO/FEFO), а клиент унесет в руках другую. Это приведет к пересортице серий на складе.
Однако, если ваш бизнес-процесс подразумевает, что серии приходуются автоматически (например, через Контур.Диадок, как в сообщении пользователя) и вам важно просто быстро списать остаток, то добавление такой кнопки оправдано.
Посмотрим правде в глаза: чисто методом «Копировать-Вставить» в интерфейсе задачу не решить. Вам в любом случае придется открыть модуль документа и внести программные правки. Если вы готовы рискнуть, следуйте алгоритму:
Реализации процедуру ЗаполнитьТабличныеЧастиПередПроведением.ЧекККМ.Реализации и перенести.Совет: Самый надежный вариант — обратиться к специалисту для создания внешней обработки заполнения. Это сэкономит ваше время и убережет базу данных от критических ошибок при проведении чеков.