Программное заполнение Установки цен номенклатуры
Здравствуйте. Пытаюсь программно при помощи внешней обработки в режиме "ЗаполнениеОбъекта" заполнить цены в документе УстановкаЦенНоменклатуры прямо из формы в УТ 11.4 УФ. Написал для начала самый простой код
По сообщениям вижу, что цена меняется, но в документе в табличной части всё остается по старому. Каким образом "обновить" табличную часть, чтобы отобразились новые цены? Ну или может подскажите, как правильно заполнить цены табличной части?
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) экспорт
Для каждого стр из ВладелецФормы.Объект.Товары цикл
Если ОбщегоНазначенияУТВызовСервера.ЗначениеРеквизитаОбъекта(Стр.ВидЦены,"Наименование") = "Оптовая" Тогда
Стр.Цена = 100;
Сообщить(стр.цена);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
ПоказатьПо сообщениям вижу, что цена меняется, но в документе в табличной части всё остается по старому. Каким образом "обновить" табличную часть, чтобы отобразились новые цены? Ну или может подскажите, как правильно заполнить цены табличной части?
По теме из базы знаний
- Документ установки цен номенклатуры. Старая цена + остатки. УТ 10.3
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2
- Установка цен на сервере
- Распознавание и загрузка сканов в 1С "одним нажатием": УПД, ТОРГ-12, накладные, счета, номенклатура, заказы и т.д.
- «Мониторинг цен» – сервис для отслеживания цен конкурентов на ведущих маркетплейсах России
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) ваш код вот в принципе не меняет цену в документе!
код - даже коментировать не могу - что он делает....
Если вы хотите поменять что-то в документе программно- зачем вы в форму то лезете?
Получайте документ из ссылки, обращайтесь к табличной части, меняйте цены , сохраняйте...
Форма тут при чем?
код - даже коментировать не могу - что он делает....
Если вы хотите поменять что-то в документе программно- зачем вы в форму то лезете?
Получайте документ из ссылки, обращайтесь к табличной части, меняйте цены , сохраняйте...
Форма тут при чем?
(2), смотрите, пользователь интерактивно создает документ УстановкаЦенНоменклатуры, подбирает нужный ему товар, далее нужно, чтобы он нажал на выполнение обработки, подключенной к документу и путем определенных формул ему проставились цены в подобранные товары
(9) попробуйте предложенное решение - оно рабочее, а для того чтобы не открывалась форма обработки заполнения, в процедуре при открытии выполните запуск процедуры заполнения на клиенте, после прочитать форму владелец, затем Закрыть().
Форма документа установки цен непростая, это кросс таблица по видам цен, она не перерисуется если заполнить через ВладелецФормы, а через запись документа и Прочитать() без проблем
Форма документа установки цен непростая, это кросс таблица по видам цен, она не перерисуется если заполнить через ВладелецФормы, а через запись документа и Прочитать() без проблем
(10) пробую по вашему примеру
Показывает ошибку
Если Реквизит не на форму добавить, а в обработку, тогда ругается
Если написать
Тогда обработка запускается, но при выполнении ругается
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если ВладелецФормы<>Неопределено Тогда
СсылкаНаДокЦен=ВладелецФормы.Объект.Ссылка;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьЦеныНаСервере()
ДокЦен = СсылкаНаДокЦен.ПолучитьОбъект();
Для Каждого Стр из ДокЦен.Товары Цикл
Если ОбщегоНазначенияУТВызовСервера.ЗначениеРеквизитаОбъекта(Стр.ВидЦены,"Наименование") = "Оптовая" Тогда
Стр.Цена = 100;
КонецЕсли;
КонецЦикла;
ДокЦен.Записать();
КонецПроцедуры
&НаКлиенте
Процедура УстановитьЦены(Команда)
УстановитьЦеныНаСервере();
Если ВладелецФормы<>Неопределено Тогда
ВладелецФормы.Прочитать();
КонецЕсли;
ПоказатьОповещениеПользователя("Готово");
КонецПроцедуры
ПоказатьПоказывает ошибку
{ВнешняяОбработка.УстановкаЦенНоменклатуры.Форма.Форма.Форма(6)}: Ошибка при установке значения атрибута контекста (СсылкаНаДокЦен)
СсылкаНаДокЦен=ВладелецФормы.Объект.Ссылка;
по причине:
Нельзя изменять поле, содержащее объект данных формы
Нельзя изменять поле, содержащее объект данных формы
Если Реквизит не на форму добавить, а в обработку, тогда ругается
{ВнешняяОбработка.УстановкаЦенНоменклатуры.Форма.Форма.Форма(13,11)}: Переменная не определена (СсылкаНаДокЦен)
ДокЦен = <<?>>СсылкаНаДокЦен.ПолучитьОбъект(); (Проверка: Сервер)
Если написать
ДокЦен = Объект.СсылкаНаДокЦен.ПолучитьОбъект();
Тогда обработка запускается, но при выполнении ругается
Метод объекта не обнаружен (ПолучитьОбъект)
{ВнешняяОбработка.УстановкаЦенНоменклатуры.Форма.Форма.Форма(13)}: ДокЦен = Объект.СсылкаНаДокЦен.ПолучитьОбъект();
(13) Спасибо. Пример помог (переписал по своему, вместо открытия формы выполнил запуск клиентского метода, но суть от этого не поменялась), печально только что приходится записывать документ. Пытался заполнить ТОЛЬКО форму, чтобы юзвери могли закрыть её ДО записи дока (если нажали кнопку случайно :\ ), но не взлетело.
(4) документ пользователь создает интерактивно и подбирает нужный ему товар интерактивно, от обработки требуется лишь проставить цены в подобранные товары на форме в данном документе, а не в ранее созданные. Я не против и серверными функциями воспользоваться, подскажите как?)
Уже попробовал по другому варианту. Вот код модуля обработки
Вот код формы
Всё равно не меняются цены в форме документа... Подскажите, пожалуйста, как же все же изменить цены в открытом документе УстановкаЦенНоменклатуры?
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();
ПараметрыРегистрации.Наименование = НСтр("ru='Установка цен номенклатуры");
ПараметрыРегистрации.Информация = НСтр("ru='Установка цен номенклатуры по заданному курсу валюты'");
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.Назначение.Добавить("Документ.УстановкаЦенНоменклатуры");
Команда = ПараметрыРегистрации.Команды.Добавить();
Команда.Идентификатор = "УстановитьЦены";
Команда.Представление = "Установить цены";
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
Возврат ПараметрыРегистрации;
КонецФункции
ПоказатьВот код формы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ОбъектНазначения = Параметры.ОбъектыНазначения[0];
КонецПроцедуры
&НаКлиенте
Процедура УстановитьЦены(Команда)
ФормаДокумента = ВладелецФормы;
ОбъектДокумента = ФормаДокумента.Объект;
ЗаполнитьДокументНаСервере(ОбъектДокумента);
КопироватьДанныеФормы(ОбъектДокумента, ФормаДокумента.Объект);
ФормаДокумента.Модифицированность = Истина;
Закрыть();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДокументНаСервере(ОбъектДокумента)
Для каждого Стр Из ОбъектДокумента.Товары Цикл
Если ОбщегоНазначенияУТВызовСервера.ЗначениеРеквизитаОбъекта(Стр.ВидЦены,"Наименование") = "Оптовая" Тогда
Стр.Цена = 100;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
ПоказатьВсё равно не меняются цены в форме документа... Подскажите, пожалуйста, как же все же изменить цены в открытом документе УстановкаЦенНоменклатуры?
(14) У тебя на форме установки цен есть элемент под названием ДеревоЦен.
Именно он и отражает цены на форме. А заполняется это дерево при открытии формы.
Если хочешь обновить цены после изменения их в документе, нужно принудительно обновить дерево цен на клиенте.
Где-то вот тут:
Именно он и отражает цены на форме. А заполняется это дерево при открытии формы.
Если хочешь обновить цены после изменения их в документе, нужно принудительно обновить дерево цен на клиенте.
Где-то вот тут:
&НаКлиенте
Процедура УстановитьЦены(Команда)
ФормаДокумента = ВладелецФормы;
ОбъектДокумента = ФормаДокумента.Объект;
ЗаполнитьДокументНаСервере(ОбъектДокумента);
ОбновитьДеревоЦен(ФормаДокумента);
...
&НаКлиенте
Процедура ОбновитьДеревоЦен(Команда)
...
КонецПроцеДуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот