Здравствуйте!
Не знаю важно это или нет, вводные данные такие: платформа 8.3.20.1838, конфигурация Розница 8 Аптека 2.3.11.37.
У одного из документов, через расширение добавлена обработка проведения (после). В этой обработке заполняется одна из табличных частей документа. И вот у меня есть некая неоднозначность - в форме документа при нажатии на кнопку "Провести", все отрабатывает как надо, а вот при нажатии на кнопку "Провести и закрыть" нифига не отрабатывает?
Поскольку я совсем "зелен" в 1С, может я чего не знаю в правилах проводки документов.
Не знаю важно это или нет, вводные данные такие: платформа 8.3.20.1838, конфигурация Розница 8 Аптека 2.3.11.37.
У одного из документов, через расширение добавлена обработка проведения (после). В этой обработке заполняется одна из табличных частей документа. И вот у меня есть некая неоднозначность - в форме документа при нажатии на кнопку "Провести", все отрабатывает как надо, а вот при нажатии на кнопку "Провести и закрыть" нифига не отрабатывает?
Поскольку я совсем "зелен" в 1С, может я чего не знаю в правилах проводки документов.
По теме из базы знаний
- Групповая печать актов возврата товарно-материальных ценностей с хранения (МХ-3) по проводкам документа "Реализация товаров и услуг" по дням для Бухгалтерия Предприятия 2.0
- БП 3.0: Заполнение документа "Зарплата (ЗУП 2.5, ЗиК 7.7)" проводками из документа "Отражение зарплаты в бухучете".
- Сводные проводки по документу
- Создание операции по проводкам документа
- Внешняя печатная форма, выводящая итоги по бухгалтерским проводкам документов
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Вот это совсем плохо. На момент проведения документ уже записан. Изменение ТЧ не запишется.
Изменять документ нужно в ПередЗаписью.
Или менять бизнес логику.
У одного из документов, через расширение добавлена обработка проведения (после). В этой обработке заполняется одна из табличных частей документа.
Вот это совсем плохо. На момент проведения документ уже записан. Изменение ТЧ не запишется.
Изменять документ нужно в ПередЗаписью.
Или менять бизнес логику.
(1)
Поскольку я совсем "зелен" в 1С, может я чего не знаю в правилах проводки документов.
А еще "зелен" в использовании терминов. И путаешь "проводка" и "проведение". Нет "проводки документов", есть проведение документов. А проводка (от 0 до максимально возможного количества проводок в документе) есть результат проведения.
Это я все прекрано понимаю и уже начал переделывать - именно в ПередЗаписью.
Но сам факт разных поведений кнопок делающих одно и тоже меня смутил.
Лан, тему считаю закрытой из-за неправильности использования обработки проведения.
Но сам факт разных поведений кнопок делающих одно и тоже меня смутил.
Лан, тему считаю закрытой из-за неправильности использования обработки проведения.
(3) да не делают они ничего по разному. Оба варианта не записывают измененные в обработке проведения данных документа. Просто при просто записать измененные данные показываются в документе, но они не записаны в базу. При проведении (при переходе из модуля формы в модуль объекта) идет конвертация данных основного реквизита формы Объект в данные объекта модуля объекта. В обработчике проведения производятся изменения данных объекта модуля объекта. При возвращении в модуль формы происходит обратная конвертация данных объекта модуля объекта в данные основного реквизита формы Объект. От этого и видны на форме изменения, если форма не закрывается.
Когда вы нажимаете только провести, форма не закрывается и обновляется показывая заполненные данные, а второй раз вы их уже сохраняете. Делайте правильно, заполнение реквизитов, реквизитов формы нужно делать до записи.
(8) Я все верно понял. При нажатии на кнопку проведение, форма не закрывается и у вас в процедуре обработка проведения (после) заполняется ТЧ (возможно таблица значений). Так документ уже записан и проведен, но в форме и в реквизите уже есть изменения. Далее вы нажимаете закрыть (скорее всего вас система спрашивает "Сохранить изменения?") и на этом этапе происходит сохранение ваших измененных данных (в данном случае вашей ТЧ). Вопрос о изменениях происходит перед записью. После проведения система уже не знает о ваш изменениях, которые произошли в процедуре обработка проведения (после) и просто закрывает форму не спрашивая что есть ещё изменения.
(13) То, что вы описываете очень логично, и именно такое поведение должно было бы бить, но в том-то все и дело, что при нажатии на "Провести" у меня заполняется одна из табличных частей документа, которая зависит от другой табличной части документа, и после этого я нажимаю на "крестик", который закрывает форму и никакого вопроса о том, что даные изменились нет, форма просто закрыается. И когда я потом открываю форму снова и смотрю табличную часть которую я заполнил, она оказывается заполненной как мне надо. Но такого фокуса не происходит, если на форме я нажимаю "Провести и закрыть". Поэтому придется переписать в событии "ПередЗаписью".
(14) Что значит "придётся". Манипуляции с данными документа как раз следует делать в событии "ПередЗаписью". Процедура проведения для этого не предназначена, она служит для того, чтобы "раскидать" данные документа по реестрам.
Если вы изменяете данные в событии "ПередЗаписью", то при нажатии кнопки "Сохранить" вы, если я правильно понимаю, увидите сделанные изменения на оставшейся открытой форме.
Вот, например, картинка из интернетиков со схемой проводки документа
Если вы изменяете данные в событии "ПередЗаписью", то при нажатии кнопки "Сохранить" вы, если я правильно понимаю, увидите сделанные изменения на оставшейся открытой форме.
Вот, например, картинка из интернетиков со схемой проводки документа
Мне сложно переключиться из обычных sql запросов в язык 1С. Поэтому я решил попробовать сделать "финт" и включил заполнение одной из табличной части именно в проведение только потому, что глянув на цепочку событий при проведении документа, я обратил внимание, что обработка проведения происходит после того, как документ записан в базу, а следовательно все данные можно выловить запросом к базе, а не вытаскивать оз объекта (я плохо это умею в 1С). И поскольку я заполняю лишь табличную чать документа (это отдельная таблица ведь в базе данных, хоть и привязанная к основной таблице документа), я подумал, что может и прокатит и она заполнится.
И ведь прокатило ))), но вот только по кнопке "Провести", а по кнопке "Провести и закрыть" не прокатило. Вот я и спросил.
И ведь прокатило ))), но вот только по кнопке "Провести", а по кнопке "Провести и закрыть" не прокатило. Вот я и спросил.
(9) На форме документа есть реквизит Объект с типом что-то вроде КоллекцияДанныхФормы, структура которого соответствует объекту типа ДокументОбъект. Имеено этот реквизит и отображается на форме. При возникновении на форме события Записать сначала создаётся объект типа ДокументОбъект, в него переписываются данные из реквизита Объект, затем для этого объекта вызывается метод Сохранить(). Если в модуле объекта документа есть метод ПередЗаписью, то он вызывается. Внутри этого метода доступны все данные документа который будет сохранён, так что никаких запросов для получения данных документа не требуется. Они уже получены из формы документа. Далее можно делать любые манипуляции с данными. После завершения записи и, если требуется проведения документа, процесс возвращается в форму и та перечитывает данные документа и заполняет ими реквизит формы.Объект. Вы видите изменения.
(16) Спасибо за толковое разъяснение.
Просто заниматься 1С приходиться по принципу "больше некому" и теорию я не знаю, отсюда и такие вопросы.
Я нашел как заполнить нужную мне табличную часть правильно в ПередЗаписью, точнее я нашел как обратится к табличной части Объекта в запросе.
а весь запрос выглядит так
Просто заниматься 1С приходиться по принципу "больше некому" и теорию я не знаю, отсюда и такие вопросы.
Я нашел как заполнить нужную мне табличную часть правильно в ПередЗаписью, точнее я нашел как обратится к табличной части Объекта в запросе.
Запрос.УстановитьПараметр("ТаблицаТовары", Объект["Товары"].Выгрузить(,"Номенклатура,Характеристика,Количество,ор_ИдентификаторСтроки"));
а весь запрос выглядит так
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Количество КАК Количество,
| Товары.ор_ИдентификаторСтроки КАК ор_ИдентификаторСтроки
|ПОМЕСТИТЬ ТаблицаТоваров
|ИЗ
| &ТаблицаТовары КАК Товары
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Товары1.Номенклатура КАК Номенклатура,
| Товары1.Характеристика КАК Характеристика,
| Товары1.Количество КАК Количество,
| Товары1.ор_ИдентификаторСтроки КАК ор_ИдентификаторСтроки
|ИЗ
| ТаблицаТоваров КАК Товары1
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
| ПО Товары1.Характеристика = ХарактеристикиНоменклатуры.Ссылка
|ГДЕ
| ХарактеристикиНоменклатуры.ор_МаркируемыйТовар = ИСТИНА
|";
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот