Изменение реквезита табличной части
Пытаюсь перенести документ перемещение из одной конфигурации в другую в документ оприходование. В документе перемещения есть цена, но мне нужно, что бы цена бралась не из документа перемещение, а из установки цен номенклатуры. Запрос я написал, который нужно значение возвращает, но не могу его записать, пробовал записать в ПГКС в события перед выгрузкой/при выгрузке следующий код
Но возникает ошибка в обработчике события ПриВыгрузке (объекта коллекции)
3 поставлено для простоты, в дальнейшем будет использован запрос для получения цены.
Ошибка при выгрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(7996)}: Ошибка в обработчике события ПриВыгрузке (объекта коллекции)
Как это исправить?
ОбъектКоллекции.цена=3;
Но возникает ошибка в обработчике события ПриВыгрузке (объекта коллекции)
3 поставлено для простоты, в дальнейшем будет использован запрос для получения цены.
Ошибка при выгрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(7996)}: Ошибка в обработчике события ПриВыгрузке (объекта коллекции)
Как это исправить?
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Таки да, определил коллекцию объектов в ПКГС получился такой код и вполне себе нормально перенеслось.
Табл = Источник.Состав;
КоллекцияОбъектов =Новый ТаблицаЗначений;
КоллекцияОбъектов.Колонки.Добавить().Имя="ЕдиницаИзмерения";
КоллекцияОбъектов.Колонки.Добавить().Имя="Количество";
КоллекцияОбъектов.Колонки.Добавить().Имя="Номенклатура";
КоллекцияОбъектов.Колонки.Добавить().Имя="Коэффициент";
КоллекцияОбъектов.Колонки.Добавить().Имя="Цена";
КоллекцияОбъектов.Колонки.Добавить().Имя="Сумма";
КоллекцияОбъектов.Колонки.Добавить().Имя="ЦенаПродажи";
КоллекцияОбъектов.Колонки.Добавить().Имя="СуммаПродажи";
Для Каждого Строка Из Табл Цикл
НовСтрока = КоллекцияОбъектов.Добавить();
НовСтрока.ЕдиницаИзмерения = Строка.ЕдиницаИзмерения;
НовСтрока.Количество = Строка.Количество;
НовСтрока.Номенклатура = Строка.Товар;
Запрос=Новый Запрос; //Возвращает цену товара из документов установка цен номенклатуры
Запрос.Текст="ВЫБРАТЬ
| УстановкаЦенНоменклатуры.Состав.(
| Товар,
| Цена
| )
|ИЗ
| Документ.УстановкаЦенНоменклатуры КАК УстановкаЦенНоменклатуры
|ГДЕ
| УстановкаЦенНоменклатуры.Состав.Товар= &Товар
| И УстановкаЦенНоменклатуры.Дата <= &ДатаДокумента
| И УстановкаЦенНоменклатуры.Проведен = ИСТИНА
|
|УПОРЯДОЧИТЬ ПО
| УстановкаЦенНоменклатуры.Дата УБЫВ" ;
Запрос.УстановитьПараметр("Товар", Строка.Товар);
Запрос.УстановитьПараметр("ДатаДокумента",Источник.Дата);
Выборка=Запрос.Выполнить().Выгрузить();
Попытка
Цена=Выборка[0][0][0][1];
Исключение Цена= 0;
КонецПопытки;
НовСтрока.Коэффициент=Строка.ЕдиницаИзмерения.Коэффициент;
НовСтрока.Цена = Цена;
НовСтрока.Сумма = Цена*Строка.Количество;
НовСтрока.ЦенаПродажи = Цена;
НовСтрока.СуммаПродажи= Цена*Строка.Количество;
КонецЦикла;
Табл = Источник.Состав;
КоллекцияОбъектов =Новый ТаблицаЗначений;
КоллекцияОбъектов.Колонки.Добавить().Имя="ЕдиницаИзмерения";
КоллекцияОбъектов.Колонки.Добавить().Имя="Количество";
КоллекцияОбъектов.Колонки.Добавить().Имя="Номенклатура";
КоллекцияОбъектов.Колонки.Добавить().Имя="Коэффициент";
КоллекцияОбъектов.Колонки.Добавить().Имя="Цена";
КоллекцияОбъектов.Колонки.Добавить().Имя="Сумма";
КоллекцияОбъектов.Колонки.Добавить().Имя="ЦенаПродажи";
КоллекцияОбъектов.Колонки.Добавить().Имя="СуммаПродажи";
Для Каждого Строка Из Табл Цикл
НовСтрока = КоллекцияОбъектов.Добавить();
НовСтрока.ЕдиницаИзмерения = Строка.ЕдиницаИзмерения;
НовСтрока.Количество = Строка.Количество;
НовСтрока.Номенклатура = Строка.Товар;
Запрос=Новый Запрос; //Возвращает цену товара из документов установка цен номенклатуры
Запрос.Текст="ВЫБРАТЬ
| УстановкаЦенНоменклатуры.Состав.(
| Товар,
| Цена
| )
|ИЗ
| Документ.УстановкаЦенНоменклатуры КАК УстановкаЦенНоменклатуры
|ГДЕ
| УстановкаЦенНоменклатуры.Состав.Товар= &Товар
| И УстановкаЦенНоменклатуры.Дата <= &ДатаДокумента
| И УстановкаЦенНоменклатуры.Проведен = ИСТИНА
|
|УПОРЯДОЧИТЬ ПО
| УстановкаЦенНоменклатуры.Дата УБЫВ" ;
Запрос.УстановитьПараметр("Товар", Строка.Товар);
Запрос.УстановитьПараметр("ДатаДокумента",Источник.Дата);
Выборка=Запрос.Выполнить().Выгрузить();
Попытка
Цена=Выборка[0][0][0][1];
Исключение Цена= 0;
КонецПопытки;
НовСтрока.Коэффициент=Строка.ЕдиницаИзмерения.Коэффициент;
НовСтрока.Цена = Цена;
НовСтрока.Сумма = Цена*Строка.Количество;
НовСтрока.ЦенаПродажи = Цена;
НовСтрока.СуммаПродажи= Цена*Строка.Количество;
КонецЦикла;
О Господи, какой ужас!
Для каждой строки документа вызывается запрос(!), который выбирает все установки цен без разбора(!!) (без проверки вида цен).
ИМХО верным и элегантным решением было бы (как предложил выше Acort) сделать все одним запросом, в котором соединить таблицу товаров и регистр сведений ЦеныНоменклатуры (т.к. Установка цен пишет в него) и выгрузить результат сразу в КоллекциюОбъектов
Для каждой строки документа вызывается запрос(!), который выбирает все установки цен без разбора(!!) (без проверки вида цен).
ИМХО верным и элегантным решением было бы (как предложил выше Acort) сделать все одним запросом, в котором соединить таблицу товаров и регистр сведений ЦеныНоменклатуры (т.к. Установка цен пишет в него) и выгрузить результат сразу в КоллекциюОбъектов
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот