|
не сохраняется комментарий в документе | ☑ | ||
---|---|---|---|---|
0
Веселый Джузеппе
28.12.19
✎
09:32
|
Доброго дня и хорошего настроения!
В преддверие праздника решил закрыть долги по работам и на банальной операции чуть не поехал кукухой) Есть обработка, которая в УПП меняет в режиме тонкого клиента меняет комментарий у дописанного документа Вызывается на все по кнопке &НаКлиенте Процедура КомандаВыполнитьУпаковкуСУказаниемВеса(Команда) ВыделенныеСтроки = Элементы.Упаковки.ВыделенныеСтроки; Если ВыделенныеСтроки.Количество() > 0 Тогда ВесПродукции = 0; КвалификаторыЧисла = Новый КвалификаторыЧисла(15, 3, ДопустимыйЗнак.Неотрицательный); ОписаниеЧисла = Новый ОписаниеТипов("Число", КвалификаторыЧисла); ВвестиЗначение(ВесПродукции, "Укажите вес (т), позиций: " + ВыделенныеСтроки.Количество(), ОписаниеЧисла); Если ВесПродукции > 0 Тогда // отладка Объект.ДокументВыпускаДляУпаковки.Комментарий "" Строка ВыполнитьУпаковкуНаСервере(ВесПродукции); КонецЕсли; КонецЕсли; КонецПроцедуры &НаСервере Процедура ВыполнитьУпаковкуНаСервере(ВесПродукции = 0) ТаблицаСерий = Объект.Упаковки.Выгрузить(); ТаблицаСерий.Очистить(); ВыделенныеСтроки = Элементы.Упаковки.ВыделенныеСтроки; Для каждого Стр Из ВыделенныеСтроки Цикл СтрокаТаблицыФормы = Объект.Упаковки.НайтиПоИдентификатору(Стр); НС = ТаблицаСерий.Добавить(); ЗаполнитьЗначенияСвойств(НС,СтрокаТаблицыФормы); КонецЦикла; Запрос = Новый Запрос("ВЫБРАТЬ | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура.ЕдиницаДляОтчетов.ЕдиницаПоКлассификатору) КАК ЕдиницаДляОтчетовЕдиницаПоКлассификатору |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.Ссылка В(&МассивНоменклатуры) | |ИМЕЮЩИЕ | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура.ЕдиницаДляОтчетов.ЕдиницаПоКлассификатору) > 1"); Запрос.УстановитьПараметр("МассивНоменклатуры", ТаблицаСерий.ВыгрузитьКолонку("Номенклатура")); Если НЕ Запрос.Выполнить().Пустой() Тогда Сообщить("Нельзя распределять вес по номенклатуратуре с разными единицами измерения"); Возврат; КонецЕсли; ПродукцияСНесколькимиВыпусками.Очистить(); пОбъект = РеквизитФормыВЗначение("Объект"); РезультатРаспределения = пОбъект.ВыполнитьУпаковку(ТаблицаСерий, ВесПродукции); ЗначениеВРеквизитФормы(пОбъект,"Объект"); Если РезультатРаспределения <> Неопределено Тогда Для каждого СтрокаУпаковкаСерии из РезультатРаспределения Цикл СтруктураВыпусков = ПолучитьСтруктуруВыпусковСерии(СтрокаУпаковкаСерии); Если СтруктураВыпусков.Количество() > 0 Тогда СтрокаУпаковкаСерии.КоличествоДокументовВыпуска = СтруктураВыпусков[0].КоличествоДокументовВыпуска; СтрокаУпаковкаСерии.КоличествоВыпуска = СтруктураВыпусков[0].КоличествоВыпуска; СтрокаУпаковкаСерии.КоличествоВыпускаВТоннах = СтруктураВыпусков[0].КоличествоВыпускаВТоннах; КонецЕсли; Если СтрокаУпаковкаСерии.КоличествоДокументовВыпуска = 1 ИЛИ СтрокаУпаковкаСерии.КоличествоУпаковано = СтрокаУпаковкаСерии.КоличествоВыпуска Тогда // один выпуск или упаковываем все, что было выпущено СкорректироватьЗначениеВесаВДокументахВыпуска(СтрокаУпаковкаСерии); КонецЕсли; КонецЦикла; КонецЕсли; // отладка Объект.ДокументВыпускаДляУпаковки.Комментарий "12345" Строка Элементы.ГруппаПозицииДляУточнения.Видимость = ПродукцияСНесколькимиВыпусками.Количество() > 0; КонецПроцедуры весь листинг не привожу, но суть в том, что в процедуре СкорректироватьЗначениеВесаВДокументахВыпуска, есть код (для теста упростил) пДокОбъект = Выборка[0].ДокументВыпуска.ПолучитьОбъект(); пДокОбъект.Комментарий = "1235"; пДокОбъект.Записать(РежимЗаписиДокумента.Запись); // Объект.ДокументВыпускаДляУпаковки суть проблемы в том, что когда в отладке возвращаюсь на клиент, тыкая F11 - комментарий "откатывается"! Я и я не могу понять с*ка почему! Шампанское не пил, программирую лет 10, но тут прям подвис, а задача требует решения до курантов! Прошу "свежего" взгляда! Спасибо и с наступающими все вас! |
|||
1
NcSteel
28.12.19
✎
09:37
|
Лень было читать, но предположу, что ОповеститьОбИзменении забы прописать, естественно его надо писать на клиенте.
|
|||
2
Многолетний Апельсин
28.12.19
✎
09:38
|
Комментарий теряется в "Объект.Комментарий"?
Если да - то надо обновить контекст формы, сделать "ЗначениеВРеквизитФормы(пДокОбъект,"Объект"); после записи пДокОбъект например. |
|||
3
Веселый Джузеппе
28.12.19
✎
09:39
|
(1) Меняться не на форме должно, а в базе данных
Т.е. проблема в том, что я меняю объект, записываю, но по окончанию процедуры он возвращается в исходное "положение" |
|||
4
shuhard
28.12.19
✎
09:41
|
(3) угу,
ты в модуле документа посмотри после записи, что коммент сменился |
|||
5
Веселый Джузеппе
28.12.19
✎
09:44
|
(4) в том то и дело, что в отладке видно, что объект изменен
я дохожу до конца процедур на сервере, уже после изменения и все ок как только падаю в процедуру на клиенте (кнопка) - данные в документе возвращаются к исходным |
|||
6
shuhard
28.12.19
✎
09:46
|
(5) а что видно в консоле запросов у этого документа после падения в кнопку ?
|
|||
7
Веселый Джузеппе
28.12.19
✎
09:49
|
(6) Отладка стоит на Объект.ДокументВыпускаПоследний (реквизит обработки)
1. клиент кнопка //Объект.ДокументВыпускаПоследний.Комментарий = "" 2. серверные вызов, где-то посередине меняется - //Объект.ДокументВыпускаПоследний.Комментарий = "1234" 3. возврат на клиент - //Объект.ДокументВыпускаПоследний.Комментарий = "" листинг я привел как есть, упрощена только процедура записи объета в ней запросом получается ссылка как в Объект.ДокументВыпускаПоследний (может быть несколько документов, но в моем случае только один меняется) ну и изменяется комментарий |
|||
8
Веселый Джузеппе
28.12.19
✎
09:52
|
(7) целиком выглядит так
&НаСервере Процедура СкорректироватьЗначениеВесаВДокументахВыпуска(СтрокаУпаковкаСерии) Запрос = Новый Запрос("ВЫБРАТЬ | _ВыпускПродукцииПоЗаказуНаПроизводствоПродукция.Ссылка КАК ДокументВыпуска, | _ВыпускПродукцииПоЗаказуНаПроизводствоПродукция.Количество, | _ВыпускПродукцииПоЗаказуНаПроизводствоПродукция.КоличествоВТоннах |ИЗ | Документ._ВыпускПродукцииПоЗаказуНаПроизводство.Продукция КАК _ВыпускПродукцииПоЗаказуНаПроизводствоПродукция |ГДЕ | _ВыпускПродукцииПоЗаказуНаПроизводствоПродукция.Ссылка.Проведен | И _ВыпускПродукцииПоЗаказуНаПроизводствоПродукция.Номенклатура = &Номенклатура | И _ВыпускПродукцииПоЗаказуНаПроизводствоПродукция.ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры | И _ВыпускПродукцииПоЗаказуНаПроизводствоПродукция.СерияНоменклатуры = &СерияНоменклатуры | |УПОРЯДОЧИТЬ ПО | ДокументВыпуска"); Запрос.УстановитьПараметр("Номенклатура", СтрокаУпаковкаСерии.Номенклатура); Запрос.УстановитьПараметр("ХарактеристикаНоменклатуры", СтрокаУпаковкаСерии.ХарактеристикаНоменклатуры); Запрос.УстановитьПараметр("СерияНоменклатуры", СтрокаУпаковкаСерии.СерияНоменклатуры); Выборка = Запрос.Выполнить().Выгрузить(); СтруктураОтбора = Новый Структура("Номенклатура, ХарактеристикаНоменклатуры, СерияНоменклатуры"); ЗаполнитьЗначенияСвойств(СтруктураОтбора, СтрокаУпаковкаСерии); ИндексВыборки = Выборка.Количество() - 1; ВесКРаспределению = СтрокаУпаковкаСерии.ВесАналитический; Пока ИндексВыборки >= 0 Цикл СтрокаВыборки = Выборка[ИндексВыборки]; ДокВыпуск = СтрокаВыборки.ДокументВыпуска.ПолучитьОбъект(); ДокВыпуск.Комментарий = "Тест: " + ТекущаяДата(); ДокВыпуск.Записать(РежимЗаписиДокумента.Запись); ЗначениеВРеквизитФормы(ДокВыпуск, "ДокументВыпускаПоследний"); ИндексВыборки = ИндексВыборки - 1; КонецЦикла; КонецПроцедуры |
|||
9
Веселый Джузеппе
28.12.19
✎
09:53
|
(8) ЗначениеВРеквизитФормы(ДокВыпуск, "ДокументВыпускаПоследний"); лишнее, это я пробовал (2)
|
|||
10
shuhard
28.12.19
✎
09:57
|
(7)[ну и изменяется комментарий]
т.е. в базу данных комментарий записан верно. что ты тогда дёргаешься ? перезаполни табличные части своей обработки через выборку запросом |
|||
11
Веселый Джузеппе
28.12.19
✎
10:04
|
(10) в том то и дело, что изменения в документе не фиксируются...
https://c2n.me/45jnIgw https://clip2net.com/s/45jnJ4l |
|||
12
Веселый Джузеппе
28.12.19
✎
10:37
|
Путем тестов сократил код, который ведет себя аналогично (11)
&НаСервере Процедура ВыполнитьУпаковкуНаСервере(ВесПродукции = 0) ТаблицаСерий = Объект.Упаковки.Выгрузить(); ТаблицаСерий.Очистить(); ВыделенныеСтроки = Элементы.Упаковки.ВыделенныеСтроки; Для каждого Стр Из ВыделенныеСтроки Цикл СтрокаТаблицыФормы = Объект.Упаковки.НайтиПоИдентификатору(Стр); НС = ТаблицаСерий.Добавить(); ЗаполнитьЗначенияСвойств(НС,СтрокаТаблицыФормы); КонецЦикла; Запрос = Новый Запрос("ВЫБРАТЬ | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура.ЕдиницаДляОтчетов.ЕдиницаПоКлассификатору) КАК ЕдиницаДляОтчетовЕдиницаПоКлассификатору |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.Ссылка В(&МассивНоменклатуры) | |ИМЕЮЩИЕ | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура.ЕдиницаДляОтчетов.ЕдиницаПоКлассификатору) > 1"); Запрос.УстановитьПараметр("МассивНоменклатуры", ТаблицаСерий.ВыгрузитьКолонку("Номенклатура")); Если НЕ Запрос.Выполнить().Пустой() Тогда Сообщить("Нельзя распределять вес по номенклатуратуре с разными единицами измерения"); Возврат; КонецЕсли; ПродукцияСНесколькимиВыпусками.Очистить(); пОбъект = РеквизитФормыВЗначение("Объект"); РезультатРаспределения = пОбъект.ВыполнитьУпаковку(ТаблицаСерий, ВесПродукции); ДокВыпуск = Объект.ДокументВыпускаДляУпаковки.ПолучитьОбъект(); ДокВыпуск.Комментарий = "Тест: " + ТекущаяДата(); ДокВыпуск.Записать(РежимЗаписиДокумента.Запись); Элементы.ГруппаПозицииДляУточнения.Видимость = ПродукцияСНесколькимиВыпусками.Количество() > 0; КонецПроцедуры &НаКлиенте Процедура КомандаВыполнитьУпаковкуСУказаниемВеса(Команда) ВыполнитьУпаковкуНаСервере(ВесПродукции); КонецПроцедуры не могу понять, в чем проблема!(( |
|||
13
Веселый Джузеппе
28.12.19
✎
10:40
|
похоже, проблема в следующем:
пОбъект = РеквизитФормыВЗначение("Объект"); РезультатРаспределения = пОбъект.ВыполнитьУпаковку(ТаблицаСерий, ВесПродукции); ЗначениеВРеквизитФормы(пОбъект,"Объект"); в процедуре заполняется ТЧ и передается на форму, но почему это не дает мне записать документы - непонятно |
|||
14
Веселый Джузеппе
28.12.19
✎
10:55
|
Вообщем в проблеме не разобрался, но получилось обойти ее, разбив серверную процедуру на 2 части. В первой заполняю реквизит формы, во второй обрабатываю его, записывая документы.
Код отработал без проблем. &НаКлиенте Процедура КомандаВыполнитьУпаковкуСУказаниемВеса(Команда) ВыполнитьУпаковкуНаСервере(ВесПродукции); ОбработатьВыпускиНаСервере(); КонецПроцедуры &НаСервере Процедура ОбработатьВыпускиНаСервере() Если РезультатРаспределения.Количество() > 0 Тогда Для каждого СтрокаУпаковкаСерии из РезультатРаспределения Цикл СтруктураВыпусков = ПолучитьСтруктуруВыпусковСерии(СтрокаУпаковкаСерии); Если СтруктураВыпусков.Количество() > 0 Тогда СтрокаУпаковкаСерии.КоличествоДокументовВыпуска = СтруктураВыпусков[0].КоличествоДокументовВыпуска; СтрокаУпаковкаСерии.КоличествоВыпуска = СтруктураВыпусков[0].КоличествоВыпуска; СтрокаУпаковкаСерии.КоличествоВыпускаВТоннах = СтруктураВыпусков[0].КоличествоВыпускаВТоннах; КонецЕсли; Если СтрокаУпаковкаСерии.КоличествоДокументовВыпуска = 1 ИЛИ СтрокаУпаковкаСерии.КоличествоУпаковано = СтрокаУпаковкаСерии.КоличествоВыпуска Тогда // один выпуск или упаковываем все, что было выпущено СкорректироватьЗначениеВесаВДокументахВыпуска(СтрокаУпаковкаСерии); Иначе ПроблемнаяСтр = ПродукцияСНесколькимиВыпусками.Добавить(); ЗаполнитьЗначенияСвойств(ПроблемнаяСтр, СтрокаУпаковкаСерии); КонецЕсли; КонецЦикла; КонецЕсли; Элементы.ГруппаПозицииДляУточнения.Видимость = ПродукцияСНесколькимиВыпусками.Количество() > 0; КонецПроцедуры |
|||
15
Franchiser
гуру
28.12.19
✎
20:32
|
ЗначениеВРеквизитФормы
|
|||
16
PR
29.12.19
✎
01:02
|
Гражданин, ты получил в форму объект и его курочишь
Потом ты вызываешь где-то код, который еще раз в отдельном виде получает из базы объект и его курочит И после этого вот ведь незадача твоя форма не обновляет комментарий, который ты записал где-то тихой ночью никому не сказав Ну вот и кто ты после этого? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |