|   |   | 
| 
 | не сохраняется комментарий в документе | ☑ | ||
|---|---|---|---|---|
| 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 | 
        Гражданин, ты получил в форму объект и его курочишь
 Потом ты вызываешь где-то код, который еще раз в отдельном виде получает из базы объект и его курочит И после этого вот ведь незадача твоя форма не обновляет комментарий, который ты записал где-то тихой ночью никому не сказав Ну вот и кто ты после этого? | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |