Как из документа вызвать обработку, чтобы та заполнила табличную часть этого документа?
&НаКлиенте
Процедура ММЗагрузитьТаблицуИзExcelПосле(Команда)
Если Объект.Ссылка.Пустая() Тогда
Сообщить("Нельзя вызывать из несохраненного документа");
Сообщить(Модифицированность);
КонецЕсли;
Форма = ПолучитьФорму("Обработка.ЗагрузкаИзExcel.Форма.Форма", );
Форма.Объект.Док = Объект.Ссылка;
Форма.Открыть();
//ММЗагрузитьТаблицуИзExcelПослеНаСервере();
КонецПроцедуры
Показать*****
Нстр = Объект.Док.Запасы.Добавить();
Нстр.Номенклатура = Номенклатура;
Объект недоступен для изменения!
По теме из базы знаний
- Перенос данных из БП 3.0 в УТ 11 / КА 2 / ERP 2. Переносятся начальные остатки, документы и справочники
- Перенос данных из УПП 1.3 / КА 1.1 в БП 3. Переносятся документы, справочники и начальные остатки
- Перенос данных и обмен из УТ 10.3 в УТ 11 / КА 2 / ERP 2. Переносятся документы, справочники и остатки
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2/3.0
- Загрузка чеков в 1С из ФНС в документы БП, УНФ, ERP, КА и УТ
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Так передавай значение при закрытии формы обработки и в обработке оповещения / выбора заполняй в форме самого документа по переданной таблице товаров (таблице значений, помещенной во временное хранилище)
в форме документа ловишь событие, получаешь таблицу и заполняешь товары
ОповеститьОВыборе(ПоместитьДанныеВоВременноеХранилище());
&НаСервере
Функция ПоместитьДанныеВоВременноеХранилище()
Возврат ПоместитьВоВременноеХранилище(Объект.Товары.Выгрузить()); // Обработка загрузки из Excel, переименовать названия
КонецФункции
в форме документа ловишь событие, получаешь таблицу и заполняешь товары
(6) Вроде все получилось, даже отладчик говорит что строки создаются
но после серверного метода выходит вот такое
Ошибка при установке значения атрибута контекста (Объект)
{Доработки_М
Обработка.ЗагрузкаИзExcel.Форма.Форма.Форма(302)}:ЗагрзитьФайлЭксельНаСервере(АдресВХ,ВладелецФормы.Объект);
[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
Нельзя изменять поле, содержащее объект данных формы
[ОшибкаИспользованияВстроенногоЯзыка]
но после серверного метода выходит вот такое
Ошибка при установке значения атрибута контекста (Объект)
{Доработки_М
Обработка.ЗагрузкаИзExcel.Форма.Форма.Форма(302)}:ЗагрзитьФайлЭксельНаСервере(АдресВХ,ВладелецФормы.Объект);
[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
Нельзя изменять поле, содержащее объект данных формы
[ОшибкаИспользованияВстроенногоЯзыка]
&НаКлиенте
Процедура ЗагрзитьФайлЭксель(Команда)
Если Не ЗначениеЗаполнено(Объект.ФайлЭксель) Тогда
Возврат;
КонецЕсли;
ДД = Новый ДвоичныеДанные(Объект.ФайлЭксель);
АдресВХ = ПоместитьВоВременноеХранилище(ДД);
ЗагрзитьФайлЭксельНаСервере(АдресВХ,ВладелецФормы.Объект);
КонецПроцедуры
******************
&НаСервере
Процедура ЗагрзитьФайлЭксельНаСервере(АдресВХ,Док)
****************
Для каждого ТекШтрихкод Из СтруктураДанные.МассивШтрихкодов Цикл
ДанныеШтрихкода = СтруктураДанные.ДанныеПоШтрихкодам[ТекШтрихкод.Штрихкод];
Если ДанныеШтрихкода.Количество()>0 Тогда
//Попытка
ДанныеШтрихкода = СтруктураДанные.ДанныеПоШтрихкодам[ТекШтрихкод.Штрихкод];
Номенклатура = ДанныеШтрихкода[0].Номенклатура;
Нстр = Док.Запасы.Добавить();
Нстр.Номенклатура = Номенклатура;
А=А+1;
Если А=5 Тогда
Прервать
КонецЕсли;
Показать
(10)
дак у меня изначально так было
ЗагрзитьФайлЭксельНаСервере(АдресВХ,ВладелецФормы.Объект);
&НаСервере
Процедура ЗагрзитьФайлЭксельНаСервере(АдресВХ,Док)
Нстр = Док.Запасы.Добавить();
Нстр.Номенклатура = Номенклатура;
попробовал так:
НоваяСтрока = ВладелецФормы.Объект.Запасы.Добавить();
свойство недоступно на сервере
ВладелецФормы.Объект
дак у меня изначально так было
ЗагрзитьФайлЭксельНаСервере(АдресВХ,ВладелецФормы.Объект);
&НаСервере
Процедура ЗагрзитьФайлЭксельНаСервере(АдресВХ,Док)
Нстр = Док.Запасы.Добавить();
Нстр.Номенклатура = Номенклатура;
попробовал так:
НоваяСтрока = ВладелецФормы.Объект.Запасы.Добавить();
свойство недоступно на сервере
на будущее может кто споткнётся
&НаКлиенте
Процедура ВыборСчетаЗавершение(Значение, ДопПараметры) Экспорт
Если ЗначениеЗаполнено(Значение) Тогда
Дата = ?(ЗначениеЗаполнено(ВладелецФормы.Объект.Дата), ВладелецФормы.Объект.Дата, ТекущаяДата());
Строки = ЗаполнитьНаСервере(Значение, ВладелецФормы.Объект.Склад, ВладелецФормы.Объект.Организация, Дата);
Для каждого Строка Из Строки Цикл
НоваяСтрока = ВладелецФормы.Объект.Материалы.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
//Сообщить("Добавлен "+строка.Номенклатура+", "+Строка.Количество);
КонецЦикла;
ВладелецФормы.ОбновитьОтображениеДанных();
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ЗаполнитьНаСервере(Счет,Склад,Организация,Дата)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Счет", Счет);
Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("Дата", Дата);
ТекстЗапроса = "ВЫБРАТЬ
| ХозрасчетныйОстатки.Счет КАК Счет,
| ХозрасчетныйОстатки.Субконто1 КАК Субконто1,
| ХозрасчетныйОстатки.Субконто3 КАК Субконто3,
| ХозрасчетныйОстатки.Организация КАК Организация,
| СУММА(ХозрасчетныйОстатки.КоличествоОстаток) КАК КоличествоОстаток,
| СУММА(ХозрасчетныйОстатки.КоличествоОстатокДт) КАК КоличествоОстатокДт,
| СУММА(ХозрасчетныйОстатки.КоличествоОстатокКт) КАК КоличествоОстатокКт,
| СУММА(ХозрасчетныйОстатки.КоличествоРазвернутыйОстатокДт) КАК КоличествоРазвернутыйОстатокДт,
| СУММА(ХозрасчетныйОстатки.КоличествоРазвернутыйОстатокКт) КАК КоличествоРазвернутыйОстатокКт
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(
| &Дата,
| Счет = &Счет,
| ,
| Субконто3 = &Склад
| И Организация = &Организация) КАК ХозрасчетныйОстатки
|
|СГРУППИРОВАТЬ ПО
| ХозрасчетныйОстатки.Счет,
| ХозрасчетныйОстатки.Субконто1,
| ХозрасчетныйОстатки.Субконто3,
| ХозрасчетныйОстатки.Организация
|
|ИМЕЮЩИЕ
| СУММА(ХозрасчетныйОстатки.КоличествоОстатокДт) > 0";
Запрос.Текст = ТекстЗапроса;
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Строки = Новый Массив();
Пока Выборка.Следующий() Цикл
НоваяСтрока = Новый Структура("Номенклатура,ЕдиницаИзмерения,Коэффициент,Количество,Счет,ОтражениеВУСН");
НоваяСтрока.Номенклатура = Выборка.Субконто1;
НоваяСтрока.ЕдиницаИзмерения = Выборка.Субконто1.ЕдиницаИзмерения;
НоваяСтрока.Коэффициент = 1;
НоваяСтрока.Количество = Выборка.КоличествоОстатокДт;
НоваяСтрока.Счет = Выборка.Счет;
НоваяСтрока.ОтражениеВУСН = Перечисления.ОтражениеВУСН.Принимаются;
Строки.Добавить(НоваяСтрока);
КонецЦикла;
Возврат Строки;
КонецФункции
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот