|
|
|
УТ 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) Типовой код пишут такие же люди, а иногда и не люди.
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |