Как провести документ, если он создается программно
Создаю документ програмно, далее проожу:
Док.Записать(РежимЗаписиДокумента.Проведение);
Но такой способ только записывает документ с установкой флага проведено в истину.
А мне нужны движения в рег. накопления. Конечно можно прописать движения по рег. в процедуре программного создания, а нельзя ли как-то проще?
Док.Записать(РежимЗаписиДокумента.Проведение);
Но такой способ только записывает документ с установкой флага проведено в истину.
А мне нужны движения в рег. накопления. Конечно можно прописать движения по рег. в процедуре программного создания, а нельзя ли как-то проще?
По теме из базы знаний
- Конфигурация "Весовая ред. 3.0" для Платформы 8.3
- Как мы загружаем данные в "Центр управления кассами Магнита"
- Не клади яйца в одну корзину. Как удовлетворить всех клиентов и не превратить конфигурацию в помойку
- Бонусная система. Разработка, внедрение
- Переход с УПП на ERP с сохранением документов. Фантастика или реальность?
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(8) Psylocibine,
У меня УТ , если что-то не заполнено то сразу выскакивает ошибка, но ее нет.Просто не двигает регистр и все.(9) PetrPervuy,
Ну я и переписывал. Только ничего на тему запрета проведения.
Кстати, док того же типа созданный вручную регистр двигает. Созданные програмно нет(как через комнду Записать(...), так и при ручном проведении. У меня УТ 10 ,понятно ,что ошибка в какой-то проверке но ответа не нахожу,запускал отладчик но в типовой что то найти не просто. если кто-то сталкиваля с чем-то конкретным, то подскажите.
У меня УТ , если что-то не заполнено то сразу выскакивает ошибка, но ее нет.Просто не двигает регистр и все.(9) PetrPervuy,
Ну я и переписывал. Только ничего на тему запрета проведения.
Кстати, док того же типа созданный вручную регистр двигает. Созданные програмно нет(как через комнду Записать(...), так и при ручном проведении. У меня УТ 10 ,понятно ,что ошибка в какой-то проверке но ответа не нахожу,запускал отладчик но в типовой что то найти не просто. если кто-то сталкиваля с чем-то конкретным, то подскажите.
(10) alw-1,
Как правило ошибка о незаполненности реквизита только в форме.
При программном создании документа никакие проверки описанные в форме не вызываются.
Отсутствие движений в документе созданном программно похоже на отсутствие информации для этих движений.
При ручном создании, скорее всего, в форме заполняются некоторые реквизиты "по умолчанию", при открытии формы. Когда Вы создаете документ программно, возможно не заполняете какой-то реквизит...
попробуйте такой алгоритм:
Этот код равнозначен ручному созданию/проведению.
Либо напишет ошибку какой реквизит не заполнен - тогда исправите первоначальный код,
Либо проведется и создаст проводки - тогда посмотрите под отладчиком - какой реквизит форма заполняет "по умолчанию".
Как правило ошибка о незаполненности реквизита только в форме.
При программном создании документа никакие проверки описанные в форме не вызываются.
Отсутствие движений в документе созданном программно похоже на отсутствие информации для этих движений.
При ручном создании, скорее всего, в форме заполняются некоторые реквизиты "по умолчанию", при открытии формы. Когда Вы создаете документ программно, возможно не заполняете какой-то реквизит...
попробуйте такой алгоритм:
Объект = Документы.<НаименованиеДокумента>.СоздатьДокумент();
Форма = Объект.ПолучитьФорму(<"имя формы" из конфигуратора или "ФормаДокумента" если форма не добавлена");
// Здесь заполняете все необходимые реквизиты
Форма.ЗаписатьВФорме(РежимЗаписиДокумента.Проведение);
Этот код равнозначен ручному созданию/проведению.
Либо напишет ошибку какой реквизит не заполнен - тогда исправите первоначальный код,
Либо проведется и создаст проводки - тогда посмотрите под отладчиком - какой реквизит форма заполняет "по умолчанию".
1.Заверни вызов программного проведения документа
в попытку исключение
Примерно так
Попытка
Док.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Сообщить(""+ОписаниеОшибки());
КОнецПопытки;
И посмотреть что будет выдано в окне сообщений.
2. Поставить точку останова внутри процедуры ОбработкаПроведения модуля документа и по шагам пройти посмотреть где происходит формирование движений, а где может быть при невыполнении каких либо условий они стираются без уведомления пользователя, что-то пошло не так.
Удачи в расследовании.
в попытку исключение
Примерно так
Попытка
Док.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Сообщить(""+ОписаниеОшибки());
КОнецПопытки;
И посмотреть что будет выдано в окне сообщений.
2. Поставить точку останова внутри процедуры ОбработкаПроведения модуля документа и по шагам пройти посмотреть где происходит формирование движений, а где может быть при невыполнении каких либо условий они стираются без уведомления пользователя, что-то пошло не так.
Удачи в расследовании.
Попробуй следующим образом:
Всесто записи документа получить его форму и открыть сам документ и провести его в ручную.
Далее проверь есть ли движения, возможно ошибка как раз таки не в коде проведения, а где-то еще например при его создании.
Всесто записи документа получить его форму и открыть сам документ и провести его в ручную.
Далее проверь есть ли движения, возможно ошибка как раз таки не в коде проведения, а где-то еще например при его создании.
А что собственно за документ? Если в конфигураторе у документа не указано свойство проведение как разрешить, то врятли он будет проводится по коду Док.Записать(РежимЗаписиДокумента.Проведение). Точнее точно не будет.
Столкнулся с подобной проблемой. В подписке на событие проведение одного документа нужно создать и провести другой. Документ создается и записывается с признаком Проведен, но проводок нет. Самое интересное - вызываю эту же процедуру из внешней обработки - все проводки формируются. Получается нельзя при проведении одного документа проводить другой документ?
(17) u_prog,(19) u_prog, Привожу отрывок из кода процедуры подписки на событие ОбработкаПроведения первого документа. ДокСсылка и ДокОб соответственно ссылка и объект второго документа
///////сначала идут определенные действия по проверке Источника, т.е. первого документа,
............
//тут начались действия со вторым документом
Если Не ДокСсылка.Проведен Тогда
Попытка
ДокОб.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЕсли
Показать
А может стоит еще и режим проведения документа указать? Еще лучше, если для данного типа документов разрешено оперативное проведение.
Попытка
ДокШтраф.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Оперативный);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Попытка
ДокШтраф.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Оперативный);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
У меня конфигурация УПП 1.3 для Украины. Мне необходимо при создании и проведении документа БюджетнаяОперация создавать и проводить док. КонтролируемыеЗначенияПоБюджетам. Вот привожу весь код
пробовал играться с режимом проведения. пробовал переносить код из подписки на событие непосредственно в модуль документа, в обработчик проведения. уже незнаю что и пробовать
КонтрЗнач = Документы.КонтролируемыеЗначенияПоБюджетам.СоздатьДокумент();
КонтрЗнач.Сценарий = ПараметрыСеанса.СтруктураРесурсовДополнительныхПараметров.КонтрольБюджетов_СценарийФакт;
КонтрЗнач.ВидКонтролируемыхЗначений = Перечисления.ВидыКонтролируемогоЗначенияБюджета.Ограничивающее;
КонтрЗнач.ИспользованиеКонтролируемыхЗначений = Перечисления.ИспользованиеКонтролируемыхЗначенийБюджетов.ПриИсполнении;
КонтрЗнач.ВидОграниченияОборотов = Перечисления.ВидыОграниченийОборотовБюджета.КонтролирующийСценарийВыборочно;
КонтрЗнач.КонтролирующийСценарий = Источник.Сценарий;
КонтрЗнач.Состояние = Источник.Состояние;
КонтрЗнач.Ответственный = Источник.Ответственный;
КонтрЗнач.Дата = ТекущаяДата();
//конец заполения шапки документа
//заполнение табличной части документа
КонтрЗнач.ГраницыЗначений.Очистить();
ТабЧасть = КонтрЗнач.ГраницыЗначений.Добавить();
ТабЧасть.Период = Источник.ПериодПланирования;
ТабЧасть.ВидОтклоненияКонтролируемыхЗначений = Перечисления.ВидыОтклоненийКонтролируемыхЗначенийБюджетов.Относительное;
ТабЧасть.СтатьяОборотов = Источник.СтатьяОборотов;
ТабЧасть.ЦФО = Источник.ЦФО;
//конец заполениея табличной части документа
КонтрЗнач.Записать(РежимЗаписиДокумента.Проведение);
Показатьпробовал играться с режимом проведения. пробовал переносить код из подписки на событие непосредственно в модуль документа, в обработчик проведения. уже незнаю что и пробовать
Если не заполнен какой то реквизит при программном создании документа, тогда я бы сделал Записать(РежимЗаписиДокумента.Запись); а потом бы открыл и попытался провести документ вручную, что бы сработали все проверки и мне указали на все ошибки...
ммм... а программное создание и проведение "нашего" документа происходит внутри процедуры "Обработка проведения" другого документа. Насколько я знаю, пока работает процедура "Обработка проведения" работает и транзакция. и ни какая другая транзакция не может наступить до тех пор пока не закончится эта.
ммм... ну, тут только одно. при нажатии кнопки "ОК" не должна срабатывать процедура ОбработкаПроведения, а должна открываться обработка в которой создаются, записываются оба документа а потом последовательно проводятся...
но что в таком случае делать при отмене проведения документа.... я затрудняюсь ответить. потому что при срабатывании процедуры "ОбработкаУдаленияПроведения" скорее всего получится обратная картина - документ не удалится. но можно попробовать запустить процедуру удаления в обработчике "ПередУдалением"
но что в таком случае делать при отмене проведения документа.... я затрудняюсь ответить. потому что при срабатывании процедуры "ОбработкаУдаленияПроведения" скорее всего получится обратная картина - документ не удалится. но можно попробовать запустить процедуру удаления в обработчике "ПередУдалением"
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот