проводка документа

1. krpsh 19.07.22 12:49 Сейчас в теме
Здравствуйте!
Не знаю важно это или нет, вводные данные такие: платформа 8.3.20.1838, конфигурация Розница 8 Аптека 2.3.11.37.
У одного из документов, через расширение добавлена обработка проведения (после). В этой обработке заполняется одна из табличных частей документа. И вот у меня есть некая неоднозначность - в форме документа при нажатии на кнопку "Провести", все отрабатывает как надо, а вот при нажатии на кнопку "Провести и закрыть" нифига не отрабатывает?
Поскольку я совсем "зелен" в 1С, может я чего не знаю в правилах проводки документов.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. spacecraft 19.07.22 13:01 Сейчас в теме
(1)
У одного из документов, через расширение добавлена обработка проведения (после). В этой обработке заполняется одна из табличных частей документа.

Вот это совсем плохо. На момент проведения документ уже записан. Изменение ТЧ не запишется.
Изменять документ нужно в ПередЗаписью.
Или менять бизнес логику.
6. sssss_aaaaa_2011 19.07.22 13:37 Сейчас в теме
(1)
Поскольку я совсем "зелен" в 1С, может я чего не знаю в правилах проводки документов.
А еще "зелен" в использовании терминов. И путаешь "проводка" и "проведение". Нет "проводки документов", есть проведение документов. А проводка (от 0 до максимально возможного количества проводок в документе) есть результат проведения.
7. krpsh 19.07.22 13:55 Сейчас в теме
(6) Согласен с вами полностью.
Я неправильно сформулировал вопрос, каюсь (((
3. krpsh 19.07.22 13:23 Сейчас в теме
Это я все прекрано понимаю и уже начал переделывать - именно в ПередЗаписью.
Но сам факт разных поведений кнопок делающих одно и тоже меня смутил.
Лан, тему считаю закрытой из-за неправильности использования обработки проведения.
5. spacecraft 19.07.22 13:31 Сейчас в теме
(3) да не делают они ничего по разному. Оба варианта не записывают измененные в обработке проведения данных документа. Просто при просто записать измененные данные показываются в документе, но они не записаны в базу. При проведении (при переходе из модуля формы в модуль объекта) идет конвертация данных основного реквизита формы Объект в данные объекта модуля объекта. В обработчике проведения производятся изменения данных объекта модуля объекта. При возвращении в модуль формы происходит обратная конвертация данных объекта модуля объекта в данные основного реквизита формы Объект. От этого и видны на форме изменения, если форма не закрывается.
4. nikolasx 59 19.07.22 13:26 Сейчас в теме
Когда вы нажимаете только провести, форма не закрывается и обновляется показывая заполненные данные, а второй раз вы их уже сохраняете. Делайте правильно, заполнение реквизитов, реквизитов формы нужно делать до записи.
8. krpsh 19.07.22 13:57 Сейчас в теме
(4) Вы несовсем правильно поняли суть вопроса. Нет никаких двойных нажатий на разные кнопки и смотрю я, что обработка отработала не на форме сразу (после нажатия на кнопку), а после ее закрытия и затем открытия.
13. nikolasx 59 19.07.22 14:30 Сейчас в теме
(8) Я все верно понял. При нажатии на кнопку проведение, форма не закрывается и у вас в процедуре обработка проведения (после) заполняется ТЧ (возможно таблица значений). Так документ уже записан и проведен, но в форме и в реквизите уже есть изменения. Далее вы нажимаете закрыть (скорее всего вас система спрашивает "Сохранить изменения?") и на этом этапе происходит сохранение ваших измененных данных (в данном случае вашей ТЧ). Вопрос о изменениях происходит перед записью. После проведения система уже не знает о ваш изменениях, которые произошли в процедуре обработка проведения (после) и просто закрывает форму не спрашивая что есть ещё изменения.
14. krpsh 19.07.22 20:42 Сейчас в теме
(13) То, что вы описываете очень логично, и именно такое поведение должно было бы бить, но в том-то все и дело, что при нажатии на "Провести" у меня заполняется одна из табличных частей документа, которая зависит от другой табличной части документа, и после этого я нажимаю на "крестик", который закрывает форму и никакого вопроса о том, что даные изменились нет, форма просто закрыается. И когда я потом открываю форму снова и смотрю табличную часть которую я заполнил, она оказывается заполненной как мне надо. Но такого фокуса не происходит, если на форме я нажимаю "Провести и закрыть". Поэтому придется переписать в событии "ПередЗаписью".
15. ElGatoGris 20.07.22 14:01 Сейчас в теме
(14) Что значит "придётся". Манипуляции с данными документа как раз следует делать в событии "ПередЗаписью". Процедура проведения для этого не предназначена, она служит для того, чтобы "раскидать" данные документа по реестрам.

Если вы изменяете данные в событии "ПередЗаписью", то при нажатии кнопки "Сохранить" вы, если я правильно понимаю, увидите сделанные изменения на оставшейся открытой форме.

Вот, например, картинка из интернетиков со схемой проводки документа

17. nikolasx 59 20.07.22 14:27 Сейчас в теме
(14) Я думаю, в вашем случае, для понимания как это работает - точка останова в помощь, и обход процедур. Тут никакой магии нет. Да, и схема проводки/записи документа, которая представлена ниже, в помощь.
9. krpsh 19.07.22 14:05 Сейчас в теме
Мне сложно переключиться из обычных sql запросов в язык 1С. Поэтому я решил попробовать сделать "финт" и включил заполнение одной из табличной части именно в проведение только потому, что глянув на цепочку событий при проведении документа, я обратил внимание, что обработка проведения происходит после того, как документ записан в базу, а следовательно все данные можно выловить запросом к базе, а не вытаскивать оз объекта (я плохо это умею в 1С). И поскольку я заполняю лишь табличную чать документа (это отдельная таблица ведь в базе данных, хоть и привязанная к основной таблице документа), я подумал, что может и прокатит и она заполнится.
И ведь прокатило ))), но вот только по кнопке "Провести", а по кнопке "Провести и закрыть" не прокатило. Вот я и спросил.
10. RustamZz 19.07.22 14:14 Сейчас в теме
(9)
И ведь прокатило
Не прокатило. Еще в форме списка нажмите провести и убедитесь: все что вы с таким тяжким трудом заполнили в ТЧ пошло прахом.
11. krpsh 19.07.22 14:15 Сейчас в теме
(10) я знаю это, но мне так и не надо ))))
мне нужна лишь кнопка "Провести и закрыть" )))
12. RustamZz 19.07.22 14:16 Сейчас в теме
(11) Не взлетит воробышек. Переделывать придется.
16. ElGatoGris 20.07.22 14:26 Сейчас в теме
(9) На форме документа есть реквизит Объект с типом что-то вроде КоллекцияДанныхФормы, структура которого соответствует объекту типа ДокументОбъект. Имеено этот реквизит и отображается на форме. При возникновении на форме события Записать сначала создаётся объект типа ДокументОбъект, в него переписываются данные из реквизита Объект, затем для этого объекта вызывается метод Сохранить(). Если в модуле объекта документа есть метод ПередЗаписью, то он вызывается. Внутри этого метода доступны все данные документа который будет сохранён, так что никаких запросов для получения данных документа не требуется. Они уже получены из формы документа. Далее можно делать любые манипуляции с данными. После завершения записи и, если требуется проведения документа, процесс возвращается в форму и та перечитывает данные документа и заполняет ими реквизит формы.Объект. Вы видите изменения.
18. krpsh 21.07.22 06:47 Сейчас в теме
(16) Спасибо за толковое разъяснение.
Просто заниматься 1С приходиться по принципу "больше некому" и теорию я не знаю, отсюда и такие вопросы.
Я нашел как заполнить нужную мне табличную часть правильно в ПередЗаписью, точнее я нашел как обратится к табличной части Объекта в запросе.
Запрос.УстановитьПараметр("ТаблицаТовары", Объект["Товары"].Выгрузить(,"Номенклатура,Характеристика,Количество,ор_ИдентификаторСтроки"));


а весь запрос выглядит так
Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Товары.Номенклатура           КАК Номенклатура,
        |    Товары.Характеристика         КАК Характеристика,
        |    Товары.Количество                КАК Количество,
        |    Товары.ор_ИдентификаторСтроки КАК ор_ИдентификаторСтроки
        |ПОМЕСТИТЬ ТаблицаТоваров
        |ИЗ
        |    &ТаблицаТовары КАК Товары
        |;
        |
        |////////////////////////////////////////////////////////////­////////////////////
        |ВЫБРАТЬ
        |    Товары1.Номенклатура           КАК Номенклатура,
        |    Товары1.Характеристика         КАК Характеристика,
        |    Товары1.Количество             КАК Количество,
        |    Товары1.ор_ИдентификаторСтроки КАК ор_ИдентификаторСтроки
        |ИЗ
        |    ТаблицаТоваров КАК Товары1
        |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        |        ПО Товары1.Характеристика = ХарактеристикиНоменклатуры.Ссылка
        |ГДЕ
        |    ХарактеристикиНоменклатуры.ор_МаркируемыйТовар = ИСТИНА
        |";
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот