Не заполняется основание 1с
Обработчик события ОбработкаЗаполнения
Область применения: управляемое приложение, мобильное приложение, обычное приложение.
1. В случае если в силу каких-либо условий необходимо ограничивать ввод на основании по команде "Создать на основании", то такую проверку следует выполнять в обработчике ОбработкаЗаполнения модуля объекта (набора записей). Например, это могут быть проверки вида:
- Для команды "Создать на основании" не различимы группы и элементы справочников и планов видов характеристик: команда одинаково доступна в форме списка как для групп, так и для элементов. Требуется запретить ввод на основании групп.
- Требуется запретить ввод на основании непроведенных документов.
2. Для оповещения пользователя о причинах отказа, в обработчике ОбработкаЗаполнения следует использовать исключения:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Сотрудники") Тогда
Если ПолучитьЗначениеРеквизита(ДанныеЗаполнения, "ЭтоГруппа") = Истина Тогда
ВызватьИсключение "Ввод приказа о приеме на основании группы сотрудников невозможен!
|Выберите сотрудника. Для раскрытия группы используйте клавиши Ctrl и стрелку вниз";
КонецЕсли;
// обработка заполнения объекта по данным заполнения
При этом не рекомендуются какие-либо иные решения для подобных проверок. В частности, не следует создавать дополнительные команды для ввода на основании и размещать проверки в обработчиках этих команд.
Методическая рекомендация (полезный совет)
3. Рекомендуется придерживаться следующей логической структуры обработчика ОбработкаЗаполнения (отдельные шаги могут быть пропущены):
3.1. Выполнение специального заполнения в зависимости от типа параметра ДанныеЗаполнения .
Например:
ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);
Если ТипДанныхЗаполнения = Тип("Структура") Тогда
ЗаполнитьДокументПоОтбору(ДанныеЗаполнения);
ИначеЕсли ТипДанныхЗаполнения = Тип("ДокументСсылка.ЗаказКлиента") Тогда
ЗаполнитьДокументНаОснованииЗаказаКлиента(ДанныеЗаполнения);
// .3.2. Выполнение общего заполнения, с целью заполнить значениями по умолчанию реквизиты, которые не были заполнены специальным заполнением. При этом необходимо предварительно проверять реквизит на заполненность.
Например:
Если Не ЗначениеЗаполнено(Подразделение) Тогда
Подразделение = ЗначениеНастроекПовтИсп.ПодразделениеПоУмолчанию();
КонецЕсли;Также при заполнении реквизитов значениями по умолчанию следует, по возможности, использовать свойство метаданных "Значение заполнения" . Значение, указанное в этом свойстве будет автоматически присваиваться реквизиту при выходе из обработчика ОбработкаЗаполнения , в случае если параметр СтандартнаяОбработка установлен в Истина , и реквизит не был заполнен в обработчике.
Выполнение данной рекомендации позволит уменьшить количество логических ошибок заполнения и повысит читаемость кода.
Ну он не ошибку выдаёт,а просто не заполняет.ДатаВозврата в таблице остаётся пустой.
Да.Документ ОтпускаОрганизаций является основанием.
"Тогда ошибка возникает<br>: Ошибка при вызове метода контекста (Записать): Не задана дата документа<br> ДокументОбъект.Записать();<br>"
А если отладчиком пройтись, что он говорит?
Я проверяла в консоли запросов,там всё в порядке,отбиратся нужные мне документы.
Консоль то здесь причем? В процедуру заполнения заходит? Там что то обрабатывается?
Конфигурация какая? Релиз?
Зарплата и Управление Персоналом(ред. 2.5),8.1.15.14
Да,я так поняла,что дело в процедуре ОбработкаЗаполнения.У меня некоторые части таблица заполняются,но не все
"Вот что там заполняется :<br>ТипОснования = ТипЗнч(Основание);<br> Если ТипОснования = Тип("ДокументСсылка.КомандировкиОрганизаций") или ТипОснования = Тип("ДокументСсылка.ОтпускаОрганизаций") Тогда<br> <br> // Заполним реквизиты из стандартного набора.<br> ЗаполнениеДокументов.ЗаполнитьШапкуДокументаПоОснованию(ЭтотОбъект, Основание);<br> <br> Если Основание.Проведен Тогда<br> <br> УчетнаяПолитикаПоПерсоналуОрганизации = глЗначениеПеременной("глУчетнаяПолитикаПоПерсоналуОрганизации");<br> <br> // Заполнение табличной части. <br> Для Каждого ТекСтрока Из Основание.РаботникиОрганизации Цикл<br> Если ЗначениеЗаполнено(ТекСтрока.ДатаОкончания) и ТекСтрока.НапомнитьПоЗавершении Тогда<br> НоваяСтрока = РаботникиОрганизации.Добавить();<br> НоваяСтрока.Сотрудник = ТекСтрока.Сотрудник;<br> НоваяСтрока.Физлицо = ТекСтрока.Физлицо;<br> НоваяСтрока.ДатаВозврата = ТекСтрока.ДатаОкончания + 86400;<br> НоваяСтрока.ЗаниматьСтавку = ТекСтрока.ОсвобождатьСтавку;<br> КонецЕсли;<br> КонецЦикла;<br> <br> КонецЕсли;<br> <br> ИначеЕсли ТипОснования = Тип("СправочникСсылка.СотрудникиОрганизаций") Тогда <br>"
Добавление расширения в конфигурацию
Работа с расширением
Мы добавили новое расширение и теперь можно приступать к работе с ним.
Для этого в списке расширение двойным кликом или с помощью контекстного меню откроем конфигурацию нашего расширения
На момент написания статьи, расширения конфигурации 1С не поддерживают стандартный механизм ввода на основании, поэтому нам придется описать его вручную, приступим.
Переходим с свойства общей нашей общей команды. В свойствах нам необходимо указать группу, в которую входит команда по умолчанию и тип параметра команды.
Переходим в модуль команды и описываем обработку нашей глобальной команды:
На этом работа с глобальной командой завершена.
В добавленной процедуре напишем простой код для заполнения нашего документа по основанию
Так же необходимо дать права обычным пользователям на работу с нашей общей командой. Для этого возьмем роль, которая есть у каждого пользователя, добавим ее в наше расширение и разрешим просмотр нашей команды.
На этом разработка реализации ввода на основании в 1С при помощи расширения конфигурации завершено, можем запустить конфигурацию и проверить, что проделали данную работу не зря.
Рассмотрим простой пример программного ввода документа в 1С на основании. Допустим необходимо после проведения приходного документа «Приход» создать расходный документ «Расход» на основании данных полученных из приходного документа.
Простое создание на основании стандартным способом платформы 1С
Где указать с кем он связан:
Должна получиться следующая картина:
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
И прописать программный код заполнения. Пример кода:
Конструктор ввода на основании
Создание документа после записи первого документа с последующей записью созданного
Для реализации такой задачи можно использовать метод объекта Заполнить(), в параметры которого необходимо будет передать данные заполнения из документа прихода. Метод инициирует событие ОбработкаЗаполнения() и вызов процедуры-обработчика в модуле объекта документа «Расход».
Создание объекта после записи с открытием управляемой формы
Для программного создания документа в 1С с открытием управляемой формы пользователю можно использовать функцию ОткрытьФорму(), в параметры которой можно передавать данные для заполнения.
Читайте также: