![]() |
|
УТ 11.4 РегистрацияИПодборСерий | ☑ | ||
---|---|---|---|---|
0
dubov
19.11.24
✎
09:22
|
Добрый день!
Нужна помощь, Попросили изменить стандартную обработку добавить функционал загрузки серийных номеров через Excel и обязательно через сервер(Не спрашивайте почему, не знаю чем предложенный вариант на клиенте не понравился). Серийные номера стали загружаться код рабочий для загрузки. Но при нажатии на кнопку "Завершить" выдает ошибку: Ошибка при вызове метода контекста (ПоместитьВоВременноеХранилище)
{Расширение1 Обработка.ПодборСерийВДокументы.Форма.РегистрацияИПодборСерийПоОднойСтрокеТоваров.Форма(336)}:ПоместитьВоВременноеХранилище(ТаблицаВозврата,АдресВоВременномХранилище); {Обработка.ПодборСерийВДокументы.Форма.РегистрацияИПодборСерийПоОднойСтрокеТоваров.Форма(1037)}:Если Не СохранитьВводСерийСервер() Тогда по причине: Недействительный адрес или не найден родительский сеанс задания Вот код моей обработки: &НаКлиенте Процедура ЗагрузитьФайл2(Команда) ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогВыбора.Заголовок = "Выберите файл"; Если ДиалогВыбора.Выбрать() Тогда ИмяФайла = ДиалогВыбора.ПолноеИмяФайла; ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ИмяФайла); // Получаем двоичные данные нашего файла АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанныеФайла); // помещаем двоичные данные на сервер // Хранилище и получаем его адрес ЗагрузитьНаСервере(АдресВоВременномХранилище); Элементы.Серии.ДобавитьСтроку(); ТекущиеДанные = Элементы.Серии.ТекущиеДанные; Элементы.Серии.ЗакончитьРедактированиеСтроки(Ложь); СерииПриИзменении(Неопределено); КонецЕсли; КонецПроцедуры &НаСервере Процедура ЗагрузитьНаСервере(АдресВХ) ТабДок = Новый ТабличныйДокумент; ДанныеВХ = ПолучитьИзВременногоХранилища(АдресВХ); // Получаем данные по указанному адресу из ВХ ПутьКФайлуНаСервере = ПолучитьИмяВременногоФайла("xlsx"); // Получаем путь к файлу на сервере ДанныеВХ.Записать(ПутьКФайлуНаСервере); Попытка ТабДок.Прочитать(ПутьКФайлуНаСервере, СпособЧтенияЗначенийТабличногоДокумента.Значение); Исключение Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Не удалось прочитать указанный файл по причине: " + ОписаниеОшибки(); Сообщение.Сообщить(); Возврат; КонецПопытки; КоличествоСтрок = ТабДок.ВысотаТаблицы; ДанныеФайла = Новый ТаблицаЗначений; ДанныеФайла.Колонки.Добавить("Номер"); ДанныеФайла.Колонки.Добавить("Количество",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15,3,ДопустимыйЗнак.Неотрицательный))); ДанныеФайла.Колонки.Добавить("КоличествоУпаковок",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15,3,ДопустимыйЗнак.Неотрицательный))); Для НомерСтроки = 1 По КоличествоСтрок Цикл СтрокаДанных = ДанныеФайла.Добавить(); СтрокаДанных.Номер = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 1).ТекущаяОбласть.Текст; СтрокаДанных.Количество = 1; СтрокаДанных.КоличествоУпаковок = 1; Сообщить(СтрокаДанных.Номер + " Количество " + СтрокаДанных.Количество + " КоличествоУпаковок " + СтрокаДанных.КоличествоУпаковок); КонецЦикла; Для Каждого Строка Из ДанныеФайла Цикл НоваяСтрока = Объект.Серии.Добавить(); Номер = Строка.Номер; НоваяСтрока.Номер = Формат(Номер, "ЧЦ=8; ЧВН=; ЧГ="); НоваяСтрока.Количество = Строка.Количество; НоваяСтрока.КоличествоУпаковок = Строка.КоличествоУпаковок; КонецЦикла; КонецПроцедуры // ЗагрузитьНаСервере() А вот стандартный который ругается на временное хранилище: Функция СохранитьВводСерийСервер(СтрокаДляЗаписи) Если Объект.Серии.Количество() > 0 Тогда ПоследняяСтрока = Объект.Серии[Объект.Серии.Количество()-1]; Если Не ЗначениеЗаполнено(ПоследняяСтрока.Серия) И Не ЗначениеЗаполнено(ПоследняяСтрока.Номер) И Не ЗначениеЗаполнено(ПоследняяСтрока.НомерКИЗГИСМ) И Не ЗначениеЗаполнено(ПоследняяСтрока.ГоденДо) И Не ЗначениеЗаполнено(ПоследняяСтрока.ДатаПроизводства) И Не ЗначениеЗаполнено(ПоследняяСтрока.ПроизводительЕГАИС) И Не ЗначениеЗаполнено(ПоследняяСтрока.Справка2ЕГАИС) И Не ЗначениеЗаполнено(ПоследняяСтрока.ПроизводительВЕТИС) И Не ЗначениеЗаполнено(ПоследняяСтрока.ЗаписьСкладскогоЖурналаВЕТИС) И Не ЗначениеЗаполнено(ПоследняяСтрока.ИдентификаторПартииВЕТИС) И Не ЗначениеЗаполнено(ПоследняяСтрока.МаксимальнаяРозничнаяЦенаМОТП) И (ПоследняяСтрока.КоличествоУпаковок = 1 Или ПоследняяСтрока.КоличествоУпаковок = 0) Тогда Объект.Серии.Удалить(ПоследняяСтрока); КонецЕсли; КонецЕсли; ПараметрыПроверки = Новый Структура("Номенклатура,Упаковка,ЭтоМаркировкаТоваровГИСМ,ЭтоМаркировкаПерсонифицированнымиКиЗ, |ЭтоМаркировкаОстатковГИСМ,ЭтоПоступлениеИзТаможенногоСоюза,ПроверятьЗаполнениеНомера, |ТолькоРедактированиеКоличества"); ЗаполнитьЗначенияСвойств(ПараметрыПроверки, ЭтаФорма); ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыПроверки, НастройкиИспользованияСерий); Объект.ПараметрыПроверки = Новый ФиксированнаяСтруктура(ПараметрыПроверки); Если НЕ (ПроверитьЗаполнение() И УправлениеСвойствамиУТ.ПроверитьЗаполнениеДополнительныхРеквизитов(ЭтаФорма, "Объект.Серии")) Тогда Возврат Ложь; КонецЕсли; НайтиЗарегистрированныеСерии(); ТаблицаВозврата = Новый ТаблицаЗначений; ТаблицаВозврата.Колонки.Добавить("Серия",Новый ОписаниеТипов("СправочникСсылка.СерииНоменклатуры")); ТаблицаВозврата.Колонки.Добавить("Количество",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15,3,ДопустимыйЗнак.Неотрицательный))); ТаблицаВозврата.Колонки.Добавить("КоличествоУпаковок",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15,3,ДопустимыйЗнак.Неотрицательный))); КоэффициентИсходнойУпаковки = Справочники.УпаковкиЕдиницыИзмерения.КоэффициентУпаковки(ИсходнаяУпаковка, Номенклатура); Для Каждого СтрТабл Из Объект.Серии Цикл Если СтрТабл.Количество > 0 Или ТолькоРедактированиеКоличества Тогда // В режиме ТолькоРедактированиеКоличества нужно также вернуть строки с нулевым количеством СохранитьСериюПоСтроке(СтрТабл); НоваяСтрока = ТаблицаВозврата.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрТабл); НоваяСтрока.КоличествоУпаковок = НоваяСтрока.Количество / КоэффициентИсходнойУпаковки; КонецЕсли; КонецЦикла; Если ПараметрыУказанияСерий.ИмяТЧТовары = ПараметрыУказанияСерий.ИмяТЧСерии И ТаблицаВозврата.Количество() = 0 Тогда НоваяСтрока = ТаблицаВозврата.Добавить(); НоваяСтрока.КоличествоУпаковок = Количество; СтруктураРеквизитов = Новый Структура("Упаковка,Номенклатура", Упаковка, Номенклатура); СтруктураДействий = Новый Структура("ПересчитатьКоличествоЕдиниц", СтруктураРеквизитов); ОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(НоваяСтрока, СтруктураДействий, Неопределено); КонецЕсли; ПоместитьВоВременноеХранилище(ТаблицаВозврата,АдресВоВременномХранилище); Модифицированность = Ложь; Возврат Истина; КонецФункции Помогите понять что не так сделал. |
|||
1
dubov
19.11.24
✎
08:39
|
На это прошу не обращать внимание
закомментировано: Элементы.Серии.ДобавитьСтроку(); ТекущиеДанные = Элементы.Серии.ТекущиеДанные; Элементы.Серии.ЗакончитьРедактированиеСтроки(Ложь); СерииПриИзменении(Неопределено); |
|||
2
Admin_Net_1C
19.11.24
✎
13:09
|
Функция СохранитьВводСерийСервер(СтрокаДляЗаписи) --- здесь есть параметр
в тексте ошибки: {Обработка.ПодборСерийВДокументы.Форма.РегистрацияИПодборСерийПоОднойСтрокеТоваров.Форма(1037)}:Если Не СохранитьВводСерийСервер() Тогда вызов функции без параметра. Возможно в этом дело? |
|||
3
dubov
19.11.24
✎
13:49
|
(2) Сомневаюсь, т.к. это стандартный код 1С
&НаКлиенте Процедура ЗавершитьВводСерий(Команда) ОчиститьСообщения(); Если Не СохранитьВводСерийСервер() Тогда Возврат; КонецЕсли; Если Не Модифицированность Тогда Закрыть(АдресВоВременномХранилище); КонецЕсли; КонецПроцедуры дальше идет Функция СохранитьВводСерийСервер(СтрокаДляЗаписи) Т.е. При нажатии кнопки Завершить выполняется Команда ЗавершитьВводСерий(Команда), а из нее уже выходит СохранитьВводСерийСервер() и вот в серверной выдает такую ошибку. Попробовал уже и Массивом через сервер но, ошибка не меняется. А все началось с серверной процедуры и временногоХранилища. Т.к. при добавлении клиентского кода таких проблем нет. |
|||
4
Волшебник
19.11.24
✎
13:48
|
(3) не надо делать культа из типового кода
|
|||
5
dubov
19.11.24
✎
13:50
|
(2) Может нужно закрыть хранилище или из него данные удалить, пробовал УдалитьИзВременногоХранилища(АдресВХ);, не помогло.
Буду рад любым предложения. И это Обработка РегистрацияИПодборСирийПоОднойСтрокеТоваров УТ11.4 |
|||
6
dubov
19.11.24
✎
13:50
|
(4) Можно отредактировать типовой код, знать бы в какую сторону.
|
|||
7
Волшебник
20.11.24
✎
12:58
|
(6) Типовой код пишут такие же люди, а иногда и не люди.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |