Здравствуйте.
Создаю обработку в конфигурации 1С ERP 2.5, с помощью которой можно будет создать документ Движение продукции и материалов, с видом операции "Передача материалов в кладовую".
Сделал известным способом:
Однако, нужно создавать документ через "Структура", якобы при таком варианте минимизируется появление ошибок при заполнении невидимых реквизитов документа.
Подскажите, пожалуйста, каким образом нужно создавать?
Спасибо.
Создаю обработку в конфигурации 1С ERP 2.5, с помощью которой можно будет создать документ Движение продукции и материалов, с видом операции "Передача материалов в кладовую".
Сделал известным способом:
Если ЗначениеЗаполнено(Объект.Получатель) Тогда
НовыйДок = Документы.ДвижениеПродукцииИМатериалов.СоздатьДокумент();
НовыйДок.Статус = Перечисления.СтатусыДвиженияПродукцииИМатериалов.Принято;
НовыйДок.Дата = ТекущаяДата();
НовыйДок.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаМатериаловВКладовую;
НовыйДок.Ответственный = Пользователи.ТекущийПользователь();
НовыйДок.Отправитель = Объект.Отправитель;
НовыйДок.Получатель = Объект.Получатель;
НовыйДок.НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС;
НовыйДок.Валюта = Справочники.Валюты.НайтиПоКоду("643");
НовыйДок.ВариантПриемкиТоваров = Перечисления.ВариантыПриемкиТоваров.РазделенаТолькоПоНакладным;
НовыйДок.ВидЦены = Объект.Отправитель.УчетныйВидЦены;
Для каждого ТекущаяСтрока Из Объект.Список Цикл
Если ЗначениеЗаполнено(ТекущаяСтрока.Переместить) Тогда
СтрТаб = НовыйДок.Товары.Добавить();
ЗаполнитьЗначенияСвойств(СтрТаб,ТекущаяСтрока);
СтрТаб.Количество = ТекущаяСтрока.Переместить;
СтрТаб.КоличествоУпаковок = ТекущаяСтрока.Переместить;
КонецЕсли;
КонецЦикла;
НовыйДок.Записать();
СсылкаНаДок = НовыйДок.Ссылка;
Возврат СсылкаНаДок;
Иначе
Сообщить("Заполните склад получатель");
КонецЕсли;
ПоказатьОднако, нужно создавать документ через "Структура", якобы при таком варианте минимизируется появление ошибок при заполнении невидимых реквизитов документа.
Подскажите, пожалуйста, каким образом нужно создавать?
Спасибо.
По теме из базы знаний
- УФ: программное создание и копирование документов с использованием конструкций ДанныеФормыВЗначение, ЗначениеВДанныеФормы
- Загрузка прайс-листов (выгрузка с сайта) из Excel в 1С: УТ 11, 10.3 и 1С БП 3.0 с группами (папками) и создание документов: Установка цен номенклатуры, Оприходование товаров, Заказ поставщику, Поступление товаров и услуг, Реализация товаров
- Пример загрузки документов приобретения и реализации за период по Ole (Com) в УТ 11 из ТиС 7.7
- Программное копирование узла/строки дерева значений на управляемой форме (УФ, ДанныеФормыДерево, ДанныеФормыЭлементДерева) в вариантах на клиенте и на сервере
- Формирование документа MS Word с использованием БСП и программное добавление закладок
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Ну типа вот так при загрузке выписки через клиент-банк:
ОбъектДокумента = МенеджерДокумента.СоздатьДокумент();
// тут данные заполняются функцией, у Вас Ваш код будет
ДанныеЗаполнения = НовыйДанныеЗаполнения(
Операция,
РаспознаннаяОперация.ПлатежноеПоручение,
ХозяйственнаяОперация,
РаспознаннаяВыписка.ВладелецСчета);
ОбъектДокумента.Заполнить(ДанныеЗаполнения);
В модуле документа должна быть стандартная процедура, которая и заполняет по данным заполнения то, что может заполнить, а Вы забыли
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
ОбъектДокумента = МенеджерДокумента.СоздатьДокумент();
// тут данные заполняются функцией, у Вас Ваш код будет
ДанныеЗаполнения = НовыйДанныеЗаполнения(
Операция,
РаспознаннаяОперация.ПлатежноеПоручение,
ХозяйственнаяОперация,
РаспознаннаяВыписка.ВладелецСчета);
ОбъектДокумента.Заполнить(ДанныеЗаполнения);
В модуле документа должна быть стандартная процедура, которая и заполняет по данным заполнения то, что может заполнить, а Вы забыли
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
(1) как то так...
ДокументОбъект = Документы[ПолноеИмяДокумента].СоздатьДокумент();
ДанныеЗаполнения = Новый Структура;
ДанныеЗаполнения.Вставить("Организация", Выборка.Организация);
ДанныеЗаполнения.Вставить("Контрагент", Выборка.Контрагент);
ДанныеЗаполнения.Вставить("Дата", Выборка.Дата);
ДанныеЗаполнения.Вставить("НомерСФ", Выборка.НомерСФ);
ДанныеЗаполнения.Вставить("ДатаСоставления", Выборка.ДатаСФ);
ДанныеЗаполнения.Вставить("ДокументОснование", Выборка.ДокументОснование);
ДанныеЗаполнения.Вставить("НаименованиеДокумента", Выборка.НаименованиеДокумента);
ДокументОбъект.Заполнить(ДанныеЗаполнения);
ДокументОбъект.Записать();
ДокументОбъект = Документы[ПолноеИмяДокумента].СоздатьДокумент();
ДанныеЗаполнения = Новый Структура;
ДанныеЗаполнения.Вставить("Организация", Выборка.Организация);
ДанныеЗаполнения.Вставить("Контрагент", Выборка.Контрагент);
ДанныеЗаполнения.Вставить("Дата", Выборка.Дата);
ДанныеЗаполнения.Вставить("НомерСФ", Выборка.НомерСФ);
ДанныеЗаполнения.Вставить("ДатаСоставления", Выборка.ДатаСФ);
ДанныеЗаполнения.Вставить("ДокументОснование", Выборка.ДокументОснование);
ДанныеЗаполнения.Вставить("НаименованиеДокумента", Выборка.НаименованиеДокумента);
ДокументОбъект.Заполнить(ДанныеЗаполнения);
ДокументОбъект.Записать();
(4) вся магия в этой команде: ДокументОбъект.Заполнить(ДанныеЗаполнения);
Если попытаетесь присвоить значение реквизиту документа напрямую, а его нет, то получите ошибку.
Методом Заполнить произойдет заполнение доступных реквизитов документа из данные в структуре. И не важно, сколько там еще дополнительно данных в структуре. Ошибки заполнения не произойдет.
Если попытаетесь присвоить значение реквизиту документа напрямую, а его нет, то получите ошибку.
Методом Заполнить произойдет заполнение доступных реквизитов документа из данные в структуре. И не важно, сколько там еще дополнительно данных в структуре. Ошибки заполнения не произойдет.
Действительно метод работает, данные заполняются, правда при попытке заполнить составной тип реквизита, через структуру не заполняется, приходится выносить его за рамки заполнения и вводить принудительно. Но это уже не все подряд заполнять.
(7)
Деле не в этом. Он прекрасно заполняет реквизит и составного типа. Только для заполняемого реквизита должно быть выставлено свойство реквизита "Заполнять из данных заполнения".
данные заполняются, правда при попытке заполнить составной тип реквизита, через структуру не заполняется, приходится выносить его за рамки заполнения и вводить принудительно.
Деле не в этом. Он прекрасно заполняет реквизит и составного типа. Только для заполняемого реквизита должно быть выставлено свойство реквизита "Заполнять из данных заполнения".
Я бы не стал использовать какую-то странную структуру и надеяться, что из неё произойдёт заполнение реквизитов, у которых стоит галка "Заполнять из данных заполнения", а в первую очередь посмотрел бы обработчик заполнения целевого документа, чтобы понять, из чего он может заполниться. Иногда там бывает заполнение и из структур, но тогда у них д.б. определены конкретные ключи.
В целом же надо проанализировать всю процедуру обработчика, чтобы понимать, что после заполнения такого-то реквизита можно вызвать такой-то обработчик изменения реквизита и он заполнит ещё десяток других реквизитов.
Заполнение из данных заполнения не выполнит за тебя все эти обработчики изменения. Универсальное решение - смотри в обработчик заполнения документа и не майся со структурами.
В целом же надо проанализировать всю процедуру обработчика, чтобы понимать, что после заполнения такого-то реквизита можно вызвать такой-то обработчик изменения реквизита и он заполнит ещё десяток других реквизитов.
Заполнение из данных заполнения не выполнит за тебя все эти обработчики изменения. Универсальное решение - смотри в обработчик заполнения документа и не майся со структурами.
(9) Обработчик заполнения как раз и заточен под структуру. То есть там сначала происходит заполнение на платформенном уровне (ДанныеЗаполнения), а потом идет куча дополнительных обработчиков.
Но проконтролировать исполнение все равно надо. Иногда после работы обработчика заполнения - некоторые реквизиты очищаются, даже не смотря на то, что они есть в структуре ДанныеЗаполнения.
Но проконтролировать исполнение все равно надо. Иногда после работы обработчика заполнения - некоторые реквизиты очищаются, даже не смотря на то, что они есть в структуре ДанныеЗаполнения.
(12) Посмотри в типовых конфах, у многих реквизитов видишь заполнение из данных заполнения? Лучше не полагаться на какое-то частичное заполнение каких-то реквизитов, а заполнять гарантированно и последовательно, с вызовом доп.процедур после установки значений конкретных реквизитов. Ну и возможно, обнаружится заполнение из структуры в обработчике заполнения.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот