Мы с вами рассмотрим подробный процесс настройки функционала «Ввод на основании» в системе 1С:ERP. Эта задача часто возникает при необходимости автоматизировать создание документов, таких как «Перемещение товаров», на основе уже существующих, например, «Передача продукции из производства». Наша цель — не только сделать доступной соответствующую команду, но и обеспечить автоматическое заполнение нового документа данными из документа-основания. Разберем этот процесс по шагам, ориентируясь на использование Библиотеки стандартных подсистем (БСП), которая является основой для многих типовых конфигураций 1С.
Для начала нам необходимо убедиться, что кнопка «Создать на основании» с нужным видом документа вообще появляется в форме документа-основания. В типовых конфигурациях 1С, основанных на БСП, команды ввода на основании не добавляются на форму напрямую через конфигуратор, а формируются программно.
Определяем место для кода. Команды ввода на основании обычно добавляются в процедуре, которая отвечает за формирование списка таких команд. Чаще всего эта процедура находится в модуле менеджера документа-основания. В нашем случае, это будет модуль менеджера документа ПередачаПродукцииИзПроизводства. Нам нужно найти процедуру с названием, похожим на ДобавитьКомандыСозданияНаОсновании или ПриДобавленииКомандСозданияНаОсновании. Если такой процедуры нет, ее необходимо создать. Она вызывается системой при открытии формы документа-основания для заполнения меню «Создать на основании».
Реализуем добавление команды. Внутри этой процедуры мы добавляем вызов специальной функции, которая регистрирует наш новый вид документа. Воспользуемся примером, который помог нашему коллеге:
// В модуле менеджера документа "ПередачаПродукцииИзПроизводства"
// Например, в процедуре ДобавитьКомандыСозданияНаОсновании
// (или в той, которая формирует список команд ввода на основании)
Команда = Документы.ПеремещениеТоваров.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
Разберем подробнее, что делает функция ДобавитьКомандуСоздатьНаОсновании, которая, вероятно, находится в модуле менеджера документа ПеремещениеТоваров:
Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт
Если ПравоДоступа("Добавление", Метаданные.Документы.ПеремещениеТоваров) Тогда
КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить();
КомандаСоздатьНаОсновании.Менеджер = Метаданные.Документы.ПеремещениеТоваров.ПолноеИмя();
КомандаСоздатьНаОсновании.Представление = ОбщегоНазначенияУТ.ПредставлениеОбъекта(Метаданные.Документы.ПеремещениеТоваров);
КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить"; // Опционально, можно установить нужный режим
КомандаСоздатьНаОсновании.ФункциональныеОпции = "ИспользоватьПеремещениеТоваров"; // Указываем опцию, при которой команда активна
Возврат КомандаСоздатьНаОсновании;
КонецЕсли;
Возврат Неопределено;
КонецФункции
Эта функция проверяет права доступа текущего пользователя, создает новый элемент коллекции КомандыСозданияНаОсновании, заполняет его метаданными документа ПеремещениеТоваров и устанавливает, при каких условиях (функциональная опция) эта команда будет доступна. После внесения этих изменений и обновления конфигурации базы данных, вы сможете увидеть кнопку «Создать на основании» в документе «Передача продукции из производства».
После того как кнопка «Создать на основании» появилась и стала активной, следующим шагом является обеспечение автоматического заполнения нового документа «Перемещение товаров» данными из документа «Передача продукции из производства». Этот механизм реализуется с помощью стандартного события ОбработкаЗаполнения, которое вызывается системой 1С при создании нового объекта на основании другого.
Переходим в модуль объекта. Откроем конфигуратор и найдем документ ПеремещениеТоваров. Нам нужен его модуль объекта.
Находим или создаем процедуру ОбработкаЗаполнения. В модуле объекта документа ПеремещениеТоваров найдите процедуру с названием ОбработкаЗаполнения. Если ее нет, создайте ее:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
// Здесь будет наш код
КонецПроцедуры
Проверяем тип документа-основания. Внутри процедуры ОбработкаЗаполнения нам необходимо убедиться, что документ, на основании которого мы создаем новый, является именно ПередачаПродукцииИзПроизводства. Это позволит нам избежать конфликтов, если документ ПеремещениеТоваров может создаваться на основании других типов документов.
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ПередачаПродукцииИзПроизводства") Тогда
// Здесь будет наш код заполнения
ДокументОснование = ДанныеЗаполнения;
// Заполнение основных реквизитов документа "Перемещение товаров"
ЭтотОбъект.Организация = ДокументОснование.Организация;
// Важно: определите, откуда брать склады.
// Примерные варианты:
// СкладОтправитель может быть складом, откуда передавалась продукция
// В документе "Передача продукции из производства" это может быть реквизит "СкладОтправитель"
// или "СкладГотовойПродукции" (в зависимости от вашей конфигурации)
ЭтотОбъект.СкладОтправитель = ДокументОснование.СкладОтправитель;
// СкладПолучатель может быть определен по умолчанию, из настроек или из другого реквизита.
// Например, если в документе "ПередачаПродукцииИзПроизводства" есть реквизит "СкладПолучатель"
// ЭтотОбъект.СкладПолучатель = ДокументОснование.СкладПолучатель;
// Или если он должен быть фиксированным
// ЭтотОбъект.СкладПолучатель = Справочники.Склады.НайтиПоКоду("00001"); // Пример поиска по коду
// Или выбранным по определенной логике, например, из настроек пользователя
// ЭтотОбъект.СкладПолучатель = Пользователи.ПолучитьЗначениеПоУмолчанию(СтандартныеПодсистемы.НастройкиПользователей.ПолучитьКлючНастройкиПользователя("ОсновнойСкладПолучатель"));
// Заполнение табличной части "Товары"
// Необходимо понять, какая табличная часть в "ПередачаПродукцииИзПроизводства" содержит нужные товары/продукцию.
// Чаще всего это табличная часть "Продукция" или "Материалы"
Для Каждого СтрокаТЧОснования Из ДокументОснование.Продукция Цикл // Или ДокументОснование.Материалы, в зависимости от вашей ТЧ
НоваяСтрока = ЭтотОбъект.Товары.Добавить();
НоваяСтрока.Номенклатура = СтрокаТЧОснования.Номенклатура;
НоваяСтрока.Количество = СтрокаТЧОснования.Количество;
// Копируем остальные важные поля из строки табличной части документа-основания
// Например: Характеристика, Серия, ЕдиницаИзмерения, Упаковка, Цена, Сумма и т.д.
// Проверяйте наличие этих реквизитов в обеих табличных частях.
// Если СтрокаТЧОснования.Свойство("Характеристика") Тогда
// НоваяСтрока.Характеристика = СтрокаТЧОснования.Характеристика;
// КонецЕсли;
// Если СтрокаТЧОснования.Свойство("Серия") Тогда
// НоваяСтрока.Серия = СтрокаТЧОснования.Серия;
// КонецЕсли;
// ...
КонецЦикла;
// Дополнительные реквизиты, которые могут быть заполнены
ЭтотОбъект.Комментарий = "Создано на основании документа 'Передача продукции из производства' №"
+ ДокументОснование.Номер + " от "
+ Формат(ДокументОснование.Дата, "ДФ=dd.MM.yyyy");
// Например, заполнение реквизита "Ответственный" или "Подразделение"
// ЭтотОбъект.Ответственный = ДокументОснование.Ответственный;
// ЭтотОбъект.Подразделение = ДокументОснование.Подразделение;
КонецЕсли;
КонецПроцедуры
Адаптируем код под вашу конфигурацию.
Реквизиты шапки: Внимательно проанализируйте, какие реквизиты шапки документа ПеремещениеТоваров (например, Организация, СкладОтправитель, СкладПолучатель) должны быть заполнены и из каких реквизитов документа ПередачаПродукцииИзПроизводства их можно получить. Особенно внимательно отнеситесь к определению склада-получателя, так как он может быть неявно задан или требовать специфической логики (например, использоваться склад по умолчанию для подразделения-получателя).
Табличные части: Убедитесь, что вы обращаетесь к правильной табличной части в документе ПередачаПродукцииИзПроизводства, которая содержит информацию о продуктах (например, Продукция, Товары или Материалы), и переносите все необходимые поля (Номенклатура, Количество, Характеристика, Серия, Упаковка и т.д.) в табличную часть Товары документа ПеремещениеТоваров. Важно также проверять, существуют ли соответствующие реквизиты в обеих табличных частях, чтобы избежать ошибок при компиляции.
Тестирование: После внесения всех изменений обязательно тщательно протестируйте функционал в режиме «Предприятие». Создайте несколько документов «Передача продукции из производства» с различными данными и убедитесь, что «Перемещение товаров» создается корректно и все поля заполняются правильно. Обратите особое внимание на количество, характеристики, серии и другие специфические данные, если они используются.
Права доступа: Убедитесь, что у пользователей, которые будут использовать этот функционал, есть необходимые права для создания документа ПеремещениеТоваров и для чтения данных из ПередачаПродукцииИзПроизводства.
БСП: Механизм ОбработкаЗаполнения является стандартным для платформы 1С:Предприятие. Библиотека стандартных подсистем (БСП) лишь предоставляет удобные интерфейсы для регистрации команд ввода на основании, но сама логика заполнения всегда лежит в модуле объекта нового документа.
Следуя этим шагам, вы сможете полностью настроить функционал ввода на основании «Перемещения товаров» из «Передачи продукции из производства», значительно упростив работу пользователей и повысив автоматизацию процессов на вашем предприятии.