Есть задачка вывести в журнал документа цены номенклатуры из документа.
Для этого добавил в шапку документа строковый реквизит "Цены" и пробую записать в него значения цен при записи документа.
Так вот по-нормальному не получается это сделать, если я использую процедуру:
Процедура ПередЗаписью()
//Здесь я собираю цены
Цены=ЦеныДокумента;
КонецПроцедуры
Для уже сохраненного документа и забитых цен все нормально получается, а вот если добавляешь новую цену и записываешь документ,то цена в журнале не отображается, пока не пересохранишь документ повторно.
Если использую процедуру ПриЗаписи(), то после записи документа, при закрытии документа выскакивает еще одно сообщение, что документ был изменен и хотите ли вы его сохранить.
Подскажите обойти такие проблемы, чтобы реквизит при записи правильно записывался без пересохранений.
Для этого добавил в шапку документа строковый реквизит "Цены" и пробую записать в него значения цен при записи документа.
Так вот по-нормальному не получается это сделать, если я использую процедуру:
Процедура ПередЗаписью()
//Здесь я собираю цены
Цены=ЦеныДокумента;
КонецПроцедуры
Для уже сохраненного документа и забитых цен все нормально получается, а вот если добавляешь новую цену и записываешь документ,то цена в журнале не отображается, пока не пересохранишь документ повторно.
Если использую процедуру ПриЗаписи(), то после записи документа, при закрытии документа выскакивает еще одно сообщение, что документ был изменен и хотите ли вы его сохранить.
Подскажите обойти такие проблемы, чтобы реквизит при записи правильно записывался без пересохранений.
По теме из базы знаний
- Импорт из Excel справочников, независимых записей в регистр сведений, реквизитов шапки документов v1.2
- Изменение реквизитов справочников, документов, табличных частей, движений (Обычные и Управляемые формы)
- Механизм "Отложенная отправка писем", при записи документа
- Открытие формы подключаемой внешней обработки без записи документа
- Изменение реквизитов справочника (документа) из документа Заказ поставщику (ERP 2, КА 2, УТ 11)
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) VaneSyS, нет не равны нулю, я бы такое заметил))
Захожу в документ устанавливаю цену, провожу документ и цена не появляется в журанле, еще раз захожу в документ,документ еще раз сохраняю и цена появляется.
Посмотрел подобную задачку в ЗУП, там они они выводят в строковый реквизит шапки перечень сотрудников из документа, используют процедуру ПередЗаписью() и у там все работает. Бред какой-то, у меня практически также и не работает.
Захожу в документ устанавливаю цену, провожу документ и цена не появляется в журанле, еще раз захожу в документ,документ еще раз сохраняю и цена появляется.
Посмотрел подобную задачку в ЗУП, там они они выводят в строковый реквизит шапки перечень сотрудников из документа, используют процедуру ПередЗаписью() и у там все работает. Бред какой-то, у меня практически также и не работает.
Ну если уж добавляете в процедуру ПередЗаписью, то следует понимать, что в момент ее вызова измененые данные в форме документа еще не сохранены, следовательно реквизит будет заполнен по данным документа до внесения изменений.
Используйте процедуру ПриЗаписи()
Используйте процедуру ПриЗаписи()
(9) megaandr, Видимо в этом и есть затык, я получал цены через ссылку.
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
ЗапросСуммы = Новый Запрос;
ЗапросСуммы.Текст =
"ВЫБРАТЬ
|СУММА(АктПриемкиСоставПоставки.МассаБрутто - АктПриемкиСоставПоставки.Партия.МассаТары) КАК Сумма,
|АктПриемкиСоставПоставки.Цена
|ИЗ
| Документ.АктПриемки.СоставПоставки КАК АктПриемкиСоставПоставки
|ГДЕ
| АктПриемкиСоставПоставки.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| АктПриемкиСоставПоставки.Цена";
ЗапросСуммы.УстановитьПараметр("Ссылка", Ссылка);
Результат = ЗапросСуммы.Выполнить().Выгрузить();
ИтогоНетто = Результат.Итог("Сумма");
Цена1="";
Поз=0;
Разделитель="";
Для Каждого Строка ИЗ Результат Цикл
Если Поз>0 Тогда
Разделитель="; ";
КонецЕсли;
Цена1=Цена1+Разделитель+Строка.Цена;
Поз=Поз+1;
КонецЦикла;
Цены=Цена1;
КонецПроцедуры
Показать
Замени свой код на следующий:
ТЗ = СоставПоставки.Выгрузить();
ЗапросСуммы = Новый Запрос;
ЗапросСуммы.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ЗапросСуммы.Текст = "ВЫБРАТЬ * ПОМЕСТИТЬ ТЗ ИЗ &ТЗ КАК ТЗ";
ЗапросСуммы.УстановитьПараметр("ТЗ", ТЗ);
ЗапросСуммы.Выполнить();
ЗапросСуммы.Текст =
"ВЫБРАТЬ
|СУММА(АктПриемкиСоставПоставки.МассаБрутто - АктПриемкиСоставПоставки.Партия.МассаТары) КАК Сумма,
|АктПриемкиСоставПоставки.Цена
|ИЗ
| ТЗ КАК АктПриемкиСоставПоставки
|
|СГРУППИРОВАТЬ ПО
| АктПриемкиСоставПоставки.Цена";
Результат = ЗапросСуммы.Выполнить().Выгрузить();
ИтогоНетто = Результат.Итог("Сумма");
Цена1="";
Поз=0;
Разделитель="";
Для Каждого Строка ИЗ Результат Цикл
Если Поз>0 Тогда
Разделитель="; ";
КонецЕсли;
Цена1=Цена1+Разделитель+Строка.Цена;
Поз=Поз+1;
КонецЦикла;
Цены=Цена1;
КонецПроцедуры
Показать
(16) megaandr, огромное спасибо за помощь, реально выручил. Еще спасибо за код, любопытно для меня использование ТЗ в запросах, эту тему мне тоже нужно копать. Переделал по своему , все теперь работает:
Надо же было так ступить, ведь даже не смотрел на то,что у меня в запросе творится. нужно учить матчасть.
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
ИтогоНетто1=0;
Для каждого СтрокаТЗ ИЗ СоставПоставки Цикл
Партия=СтрокаТЗ.Партия;
ИтогоНетто1=ИтогоНетто1+(СтрокаТЗ.МассаБрутто-Партия.МассаТары);
КонецЦикла;
ИтогоНетто=ИтогоНетто1;
ТЗ=СоставПоставки.Выгрузить(,"Цена");
ТЗ.Свернуть("Цена");
Цена1="";
Разделитель="";
Поз=0;
Для каждого Строка ИЗ ТЗ Цикл
Если Строка.Цена>0 Тогда
Если Поз>0 Тогда
Разделитель="; ";
КонецЕсли;
Цена1=Цена1+Разделитель+Строка.Цена;
Поз=Поз+1;
Конецесли;
КонецЦикла;
Цены=Цена1;
КонецПроцедуры
ПоказатьНадо же было так ступить, ведь даже не смотрел на то,что у меня в запросе творится. нужно учить матчасть.
Для отобравжение дополнительные данные в списках в обычном у элемента Таб. приложение есть Событие ПриВыводеСтроки
1. Надо добавить доп. колонку в таб.
2. в Процедуры ПриВыводеСтроки надо писать коды
ЗначениеДоп = "";
ОформлениеСтроки.Ячейки.ИмяДобКолонки.УстановитьТекст(ЗначениеДоп);
и все
1. Надо добавить доп. колонку в таб.
2. в Процедуры ПриВыводеСтроки надо писать коды
ЗначениеДоп = "";
ОформлениеСтроки.Ячейки.ИмяДобКолонки.УстановитьТекст(ЗначениеДоп);
и все
Пишу слишком поздно для этой темы, но все же может кто-то гуглит решение и в данный момент)
В частных случаях можно в обработчике "Перед записью" модуля объекта передать свойство через структуру ДополнительныеСвойства, так как она позволяет передать данные между обработчиками событий, например и заполнить свой реквизит сразу в этом обработчике, например:
А уже в обработчике "При записи" проверять наличие этого свойства в этой структуре:
Если вернет истину, то можно выполнять по условию какие-либо свои действия
В частных случаях можно в обработчике "Перед записью" модуля объекта передать свойство через структуру ДополнительныеСвойства, так как она позволяет передать данные между обработчиками событий, например и заполнить свой реквизит сразу в этом обработчике, например:
Если не ОрдераСозданы Тогда
ДополнительныеСвойства.Вставить("СоздатьОрдера",Истина);
ОрдераСозданы = Истина;
КонецЕсли;
А уже в обработчике "При записи" проверять наличие этого свойства в этой структуре:
Если ДополнительныеСвойства.Свойство("СоздатьОрдера") Тогда
//Свой код
КонецЕсли;
Если вернет истину, то можно выполнять по условию какие-либо свои действия
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот