![]() |
|
Не изменяются данные в табличной части обработки "Печать этикеток" УТ 10.3 | ☑ | ||
---|---|---|---|---|
0
new1snik
06.05.13
✎
10:31
|
Есть обработка "Печать этикеток", добавил в нее кнопку, по которой в табличную часть добавляется список номенклатуры из документа "Поступление товаров и услуг". В документе "Поступление товаров и услуг" указанно кол-во каждой номенклатуры.
Чтобы добавлять в табличную часть обработки использую переписанную процедуру. В процедуру передаем номенклатуру и ее кол-во Процедура ДобавлениеЭтикеток(Ном, Кол) ... Товары = ЗапросШтрихкоды.Выполнить().Выгрузить(); Для Каждого СтрокаТовара ИЗ Товары Цикл Если СтрокаТовара.Номенклатура = Ном Тогда Сообщить(СтрокаТовара.Количество); // Здесь изменяем кол-во этикеток в табличной части обработки СтрокаТовара.Количество = Кол; Сообщить(СтрокаТовара.Количество); КонецЕсли; КонецЦикла; ... КонецПроцедуры Но после выполнения этого участка кода измененные данные не обновляются в форме обработки. В чем моя ошибка? |
|||
1
Wobland
06.05.13
✎
10:37
|
в умолчании необходимости обновления?
|
|||
2
new1snik
06.05.13
✎
10:38
|
(1) Дико извиняюсь, но где это проверить?
|
|||
3
Wobland
06.05.13
✎
10:39
|
(2) зачем? обнови принудительно
|
|||
4
new1snik
06.05.13
✎
10:56
|
ЭтаФорма.Обновить();
Таким способом ничего не выходит. ЭтаФорма.ОбновитьОтображениеДанных(); Если так, что один элемент списка обновляется, потом вылазит сообщение, что элемент ОбновитьОтображениеДанных не найден. Как это сделать по уму? |
|||
5
Wobland
06.05.13
✎
10:57
|
а там про обновить больше ничего нет?
Описание варианта метода: Выполняет обновление указанной строки или группы строк табличного поля. |
|||
6
Defender aka LINN
06.05.13
✎
10:59
|
Казалось бы, при чем тут табличная часть? |
|||
7
new1snik
06.05.13
✎
11:01
|
(6) Я не правильно выразился? Если так, то извените, у меня опыта работы с 1с 2 недели.
(5) Метод объекта не обнаружен(ОбновитьОтображениеДанных) {Обработка.ПечатьЭтикеток.Форма.Форма.Форма(558)}: Метод объекта не обнаружен (ОбновитьОтображениеДанных) ЭтаФорма.ОбновитьОтображениеДанных(); Но при этом кол-во этикеток первой номенклатуры обновляется. |
|||
8
Defender aka LINN
06.05.13
✎
11:02
|
(7) Ты меняешь количество в некой таблице значений "Товары". А не в табличной части.
|
|||
9
new1snik
06.05.13
✎
11:05
|
(8) Тогда почему данные в табличной части обработки изменяются после ЭтаФорма.ОбновитьОтображениеДанных();
, хотя конечно только для одного элемента? |
|||
10
Wobland
06.05.13
✎
11:06
|
(9) обновление формы не влияет на данные в ТЧ обработки
|
|||
11
craxx
06.05.13
✎
11:06
|
(0) не совсем понял
товары - это тз или тч обработки? |
|||
12
new1snik
06.05.13
✎
11:08
|
(11)Получается что тз.
Товары = ЗапросШтрихкоды.Выполнить().Выгрузить(); |
|||
13
Wobland
06.05.13
✎
11:09
|
(12) и, выходит, нужно обновить строки ТП, которое эту ТЗ визуализирует?
|
|||
14
new1snik
06.05.13
✎
11:11
|
(13) Если так, то как это сделать?
|
|||
15
Wobland
06.05.13
✎
11:12
|
(14) а если не так?
|
|||
16
Wobland
06.05.13
✎
11:13
|
в любом случае, возврат к (5) будет полезен
|
|||
17
new1snik
06.05.13
✎
11:14
|
(15) Это не будет слишком наглым, могу скинуть более полную часть кода обработки, будет понятней что с чем связано?
|
|||
18
Wobland
06.05.13
✎
11:17
|
(17) слишком наглым не будет, будет ли понятней - неясно. я своё мнение уже высказал
|
|||
19
new1snik
06.05.13
✎
11:21
|
Выполняю эту процедуру в цикле, для всех записей в "Товары" в ПоступлениеТоваровИУслуг. На вход передаем номенклатуру и кол-во послупивших товаров
Процедура ДобавлениеЭтикеток(Ном, Кол) Если ПечататьЦену И Не ЗначениеЗаполнено(ТипЦены) Тогда Если ВнешнийЭлементНоменклатуры <> Истина Тогда Сообщить ("Не указан тип цен!"); КонецЕсли; Возврат; КонецЕсли; ЗапросШтрихкоды = Новый Запрос; ЗапросШтрихкоды.УстановитьПараметр("ТипШтрихкода", ТипШтрихкода); Если ЗначениеЗаполнено(ЭлементыФормы.Номенклатура.Значение) Тогда ЗапросШтрихкоды.УстановитьПараметр("Владелец", ЭлементыФормы.Номенклатура.Значение); КонецЕсли; ЗапросШтрихкоды.УстановитьПараметр("ЕдиницаПоКлассификатору", Единица); ЗапросШтрихкоды.УстановитьПараметр("ПустаяСерия", Справочники.СерииНоменклатуры.ПустаяСсылка()); ЗапросШтрихкоды.УстановитьПараметр("Качество", Качество); ЗапросШтрихкоды.УстановитьПараметр("ТипШтрихкода", ТипШтрихкода); ЗапросШтрихкоды.УстановитьПараметр("ТипыШтрихкода", ЭлементыФормы.ТипШтрихкода.СписокВыбора); ЗапросШтрихкоды.УстановитьПараметр("ЭтоГруппа", Истина); ЗапросШтрихкоды.УстановитьПараметр("Дата", ТекущаяДата()); ЗапросШтрихкоды.УстановитьПараметр("Валюта", Валюта); Если НЕ ВВалютахЦен Тогда Если НЕ ЗначениеЗаполнено(Валюта)Тогда Предупреждение("Не указана валюта для заполнения цен!"); Возврат; КонецЕсли; КурсВалюты = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(ТекущаяДата(), Новый Структура("Валюта", Валюта)); Если КурсВалюты.Курс = 0 тогда Предупреждение("Курс валюты отчета """ + Валюта.Наименование+""" на дату " + строка(ТекущаяДата())+" не определен или нулевой. Формирование этикеток невозможно."); Возврат; КонецЕсли; Если КурсВалюты.Кратность = 0 тогда Предупреждение("Кратность курса валюты отчета """ + Валюта.Наименование+""" на дату " + строка(ТекущаяДата())+" не определена или нулевая. Формирование этикеток невозможно."); Возврат; КонецЕсли; ЗапросШтрихкоды.УстановитьПараметр("КурсВалюты", КурсВалюты.Курс); КонецЕсли; Если ТипЦены.Рассчитывается Тогда ТипЦенБазовый = ТипЦены.БазовыйТипЦен; ПорядокОкругления = ТипЦены.ПорядокОкругления; ОкруглятьВБольшуюСторону = ТипЦены.ОкруглятьВБольшуюСторону; ПроцентСкидкиНаценки = ТипЦены.ПроцентСкидкиНаценки; ЗапросШтрихкоды.УстановитьПараметр("ТипЦены", ТипЦенБазовый); ЗапросШтрихкоды.УстановитьПараметр("ТипЦенРасчетный", ТипЦены); Иначе ЗапросШтрихкоды.УстановитьПараметр("ТипЦены", ТипЦены); КонецЕсли; // | Штрихкоды.Количество, Текст = "ВЫБРАТЬ | Штрихкоды.ТипШтрихкода, | Штрихкоды.Штрихкод, | Штрихкоды.ПредставлениеШтрихкода, | Штрихкоды.Владелец КАК Номенклатура, | Штрихкоды.ЕдиницаИзмерения, | Штрихкоды.ХарактеристикаНоменклатуры КАК Характеристика, | Штрихкоды.СерияНоменклатуры КАК Серия, | Штрихкоды.Качество, | ВЫБОР КОГДА Цены.Цена ЕСТЬ NULL | ИЛИ Цены.Цена = 0 ТОГДА 0 | ИНАЧЕ | Цены.Цена | КОНЕЦ КАК Цена, | Цены.ЕдиницаИзмерения КАК ЦеныЕдиница, | Цены.Валюта КАК Валюта, | Цены.ТипЦен КАК ТипЦен,"; Если ТипЦены.Рассчитывается Тогда Текст = Текст + " | Цены.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки,"; КонецЕсли; Текст = Текст + " | 1 КАК Количество |ИЗ | РегистрСведений.Штрихкоды КАК Штрихкоды | ЛЕВОЕ СОЕДИНЕНИЕ | (ВЫБРАТЬ | Рег.Номенклатура.Ссылка КАК Номенклатура, | Рег.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, | Рег.ТипЦен.Ссылка КАК ТипЦен, | Рег.Цена КАК Цена, | Рег.ЕдиницаИзмерения КАК ЕдиницаИзмерения, | Рег.Валюта КАК Валюта"; Если ТипЦены.Рассчитывается Тогда Текст = Текст + ", | ВЫБОР КОГДА ВложенныйЗапрос.ПроцентСкидкиНаценки = 0 | ИЛИ ВложенныйЗапрос.ПроцентСкидкиНаценки ЕСТЬ NULL | ТОГДА | 0 | ИНАЧЕ | ВложенныйЗапрос.ПроцентСкидкиНаценки | КОНЕЦ КАК ПроцентСкидкиНаценки |"; КонецЕсли; Текст = Текст + " | ИЗ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ТипЦен = (&ТипЦены)) КАК Рег"; Если ТипЦены.Рассчитывается Тогда Текст = Текст + " | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ЦеныНоменклатурыСрезПоследних.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки, | ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура, | ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры | ИЗ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних | | ГДЕ | ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦенРасчетный) КАК ВложенныйЗапрос | ПО Рег.Номенклатура = ВложенныйЗапрос.Номенклатура И Рег.ХарактеристикаНоменклатуры = ВложенныйЗапрос.ХарактеристикаНоменклатуры |"; КонецЕсли; Текст = Текст + " | ) КАК Цены | ПО(Штрихкоды.Владелец = Цены.Номенклатура) | И (Штрихкоды.ХарактеристикаНоменклатуры = Цены.ХарактеристикаНоменклатуры) | |ГДЕ | Штрихкоды.Владелец.ЭтоГруппа <> &ЭтоГруппа"; Если ЗначениеЗаполнено(ТипШтрихкода) Тогда Текст = Текст+" И | Штрихкоды.ТипШтрихкода = &ТипШтрихкода"; Иначе Текст = Текст+" И | Штрихкоды.ТипШтрихкода В (&ТипыШтрихкода)"; КонецЕсли; Если ТолькоВнутренние Тогда Текст = Текст + " И | ПОДСТРОКА(Штрихкоды.Штрихкод, 1, 1) = ""2"""; КонецЕсли; Если ЗначениеЗаполнено(ЭлементыФормы.Номенклатура.Значение) Тогда Текст = Текст+" И | Штрихкоды.Владелец "; Если ПолеВидаСравненияНоменклатура = ВидСравнения.Равно Тогда Текст = Текст+"="; ИначеЕсли ПолеВидаСравненияНоменклатура = ВидСравнения.НеРавно Тогда Текст = Текст+"<>"; ИначеЕсли ПолеВидаСравненияНоменклатура = ВидСравнения.ВСписке Тогда Текст = Текст+"В"; ИначеЕсли ПолеВидаСравненияНоменклатура = ВидСравнения.НеВСписке Тогда Текст = Текст+"НЕ В"; ИначеЕсли ПолеВидаСравненияНоменклатура = ВидСравнения.ВИерархии Тогда Текст = Текст+"В ИЕРАРХИИ"; ИначеЕсли ПолеВидаСравненияНоменклатура = ВидСравнения.НеВИерархии Тогда Текст = Текст+"НЕ В ИЕРАРХИИ"; КонецЕсли; Текст = Текст+" (&Владелец)"; КонецЕсли; Если ЗначениеЗаполнено(Единица) Тогда Текст = Текст+" И | Штрихкоды.ЕдиницаИзмерения.ЕдиницаПоКлассификатору = &ЕдиницаПоКлассификатору"; КонецЕсли; Если Характеристики Тогда Текст = Текст+" И | Штрихкоды.ХарактеристикаНоменклатуры"; Если Не ХарактеристикиЗаполненные Тогда Текст = Текст+" = "; Иначе Текст = Текст+" <> "; КонецЕсли; Текст = Текст+"ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)"; КонецЕсли; Если Серии Тогда Текст = Текст+" И | Штрихкоды.СерияНоменклатуры"; Если Не СерииЗаполненные Тогда Текст = Текст+" = "; Иначе Текст = Текст+" <> "; КонецЕсли; Текст = Текст+"&ПустаяСерия"; КонецЕсли; Если ЗначениеЗаполнено(Качество) Тогда Текст = Текст+" И | Штрихкоды.Качество = &Качество"; КонецЕсли; Текст = Текст+" |УПОРЯДОЧИТЬ ПО | Владелец |АВТОУПОРЯДОЧИВАНИЕ"; ЗапросШтрихкоды.Текст = Текст; Товары = ЗапросШтрихкоды.Выполнить().Выгрузить(); Для Каждого СтрокаТовара ИЗ Товары Цикл Если СтрокаТовара.Номенклатура = Ном Тогда Сообщить(СтрокаТовара.Количество); СтрокаТовара.Количество = Кол; Сообщить(СтрокаТовара.Количество); ЭтаФорма.ОбновитьОтображениеДанных(); ЭтаФорма.Обновить(); КонецЕсли; КонецЦикла; Если ЗначениеЗаполнено(ТипЦены) Тогда Если ТипЦены.Рассчитывается Тогда ВалютаРасчетная = ТипЦены.ВалютаЦены; КонецЕсли; КонецЕсли; Курс = Неопределено; Кратность = Неопределено; Для Каждого СтрокаТовара ИЗ Товары Цикл Если ЗначениеЗаполнено(ТипЦены) Тогда Если ЗначениеЗаполнено(СтрокаТовара.Цена) Тогда Если ТипЦены.Рассчитывается Тогда ВалютаТекущая = СтрокаТовара.Валюта; ПолученнаяЦена = Ценообразование.ПересчитатьЦенуПриИзмененииВалюты(СтрокаТовара.Цена, ВалютаТекущая, ВалютаРасчетная, Курс, Кратность, ТекущаяДата()); ПроцентСкидкиНаценки = ? (НЕ ЗначениеЗаполнено(СтрокаТовара.ПроцентСкидкиНаценки), ПроцентСкидкиНаценки, СтрокаТовара.ПроцентСкидкиНаценки); ПолученнаяЦена = ПолученнаяЦена * (1 + ПроцентСкидкиНаценки / 100); Иначе ПолученнаяЦена = СтрокаТовара.Цена; КонецЕсли; ПолученнаяЦена = Ценообразование.ОкруглитьЦену(ПолученнаяЦена, ТипЦены.ПорядокОкругления, ТипЦены.ОкруглятьВБольшуюСторону); СтрокаТовара.Цена = ПолученнаяЦена; Если ТипЦены.Рассчитывается Тогда СтрокаТовара.Валюта = ВалютаРасчетная; КонецЕсли; Если НЕ ВВалютахЦен И Валюта <> СтрокаТовара.Валюта Тогда ПолученнаяЦена = Ценообразование.ПересчитатьЦенуПриИзмененииВалюты(СтрокаТовара.Цена, СтрокаТовара.Валюта, Валюта, 0, 1, ТекущаяДата()); СтрокаТовара.Цена = ПолученнаяЦена; СтрокаТовара.Валюта = Валюта; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; Если Товары.Количество() = 0 тогда Предупреждение("По выбранным условиям отбора не найдено ни одного товара со штрихкодом."); КонецЕсли; КонецПроцедуры |
|||
20
new1snik
06.05.13
✎
12:11
|
(9) Обновление значения строки в табличном поле происходит если в коде написать какую-нибудь неверную функцию. Но как его обновить принудительно я так и не понял...
|
|||
21
Wobland
06.05.13
✎
12:14
|
(20) СП читал?
|
|||
22
new1snik
06.05.13
✎
12:16
|
(21) Я не нашел там ничего подходящего, или не понял, что оно мне подходит.
|
|||
23
new1snik
06.05.13
✎
12:20
|
(21) Для таблично поля с обновлением связан только метод ОбновитьСтроки()
|
|||
24
Wobland
06.05.13
✎
12:22
|
(23) это хорошо или плохо?
|
|||
25
new1snik
06.05.13
✎
12:29
|
(24) И как его применить, ведь нельзя же просто написать в процедуре:
ОбновитьСтроки(); Нужно пояснить, что обновляем строки именно в этом табличном поле. Как это указать? |
|||
26
Wobland
06.05.13
✎
12:29
|
(25) через элементы формы
|
|||
27
dva1c
06.05.13
✎
12:35
|
(25) В модуле формы пиши:
ЭлементыФормы.ТабличнаяЧасть.ОбновитьСтроки(); (26) +100 |
|||
28
new1snik
06.05.13
✎
12:35
|
ЭтаФорма.ЭлементыФормы.ТабличноеПолеТовары.ОбновитьСтроки();
Ок, код ошибок не выдает. Но данные не обновляются. |
|||
29
dva1c
06.05.13
✎
12:38
|
(28) Насколько я понял, у тя ТЗ и ТП живут отдельно. Так?
|
|||
30
new1snik
06.05.13
✎
12:39
|
(28) Или обновляет, но не то, что нужно.
Если помести в этот цикл : Товары = ЗапросШтрихкоды.Выполнить().Выгрузить(); Для Каждого СтрокаТовара ИЗ Товары Цикл Если СтрокаТовара.Номенклатура = Ном Тогда Сообщить(СтрокаТовара.Количество); СтрокаТовара.Количество = Кол; // Этот неправильный код ЭтаФорма.ЭлементыФормы.ТабличноеПолеТовары.ОбтьСтроки(); Сообщить(СтрокаТовара.Количество); КонецЕсли; КонецЦикла; То вылазит сообщение о ошибке и у первого элемента табличного поля значение Количество принимает правильное значение |
|||
31
new1snik
06.05.13
✎
12:42
|
(29) Видимо так
|
|||
32
Wobland
06.05.13
✎
12:44
|
(30) текст ошибки как правило содержит массу полезных сведений
|
|||
33
dva1c
06.05.13
✎
12:45
|
(31) Из СП
... Описание варианта метода: Выполняет обновление указанной строки или группы строк табличного поля. Описание: Обновляет табличное поле. Если параметр не указан, то выполняется обновление всех строк. Если указана строка табличного поля, то обновляется именно указанная строка. |
|||
34
new1snik
06.05.13
✎
12:48
|
(33) У меня не указан параметр
(32) Если я изначально пишу неправильный метод, то сообщение предсказуемо: {Обработка.ПечатьЭтикеток.Форма.Форма.Форма(492)}: Метод объекта не обнаружен (выаываыва) ЭтаФорма.ЭлементыФормы.ТабличноеПолеТовары.выаываыва(); |
|||
35
Wobland
06.05.13
✎
12:49
|
(34) перестань писать чушь, возьми себя в руки и обнови ТП. один раз. вне цикла
|
|||
36
new1snik
06.05.13
✎
12:55
|
(35) Без разницы из какого места обновлять табличную часть.
Видимо где то у меня в коде неправильно значения присваиваются. Потому что при возникновении ошибки при первом проходе цикла: Для Каждого СтрокаТовара ИЗ Товары Цикл Если СтрокаТовара.Номенклатура = Ном Тогда СтрокаТовара.Количество = Кол; КонецЕсли; КонецЦикла; Значение Количество в Табличном поле формы обработки равно значению Кол |
|||
37
hhhh
06.05.13
✎
13:30
|
(36) всё-таки Товары - это ведь не табличная часть. Говорили ведь.
|
|||
38
new1snik
06.05.13
✎
14:16
|
(37) Но товары ведь используются для похожих целей в другом участке процедуры:
Для Каждого СтрокаТовара ИЗ Товары Цикл Если ЗначениеЗаполнено(ТипЦены) Тогда Если ЗначениеЗаполнено(СтрокаТовара.Цена) Тогда Если ТипЦены.Рассчитывается Тогда ВалютаТекущая = СтрокаТовара.Валюта; ПолученнаяЦена = Ценообразование.ПересчитатьЦенуПриИзмененииВалюты(СтрокаТовара.Цена, ВалютаТекущая, ВалютаРасчетная, Курс, Кратность, ТекущаяДата()); ПроцентСкидкиНаценки = ? (НЕ ЗначениеЗаполнено(СтрокаТовара.ПроцентСкидкиНаценки), ПроцентСкидкиНаценки, СтрокаТовара.ПроцентСкидкиНаценки); ПолученнаяЦена = ПолученнаяЦена * (1 + ПроцентСкидкиНаценки / 100); Иначе ПолученнаяЦена = СтрокаТовара.Цена; КонецЕсли; ПолученнаяЦена = Ценообразование.ОкруглитьЦену(ПолученнаяЦена, ТипЦены.ПорядокОкругления, ТипЦены.ОкруглятьВБольшуюСторону); СтрокаТовара.Цена = ПолученнаяЦена; Если ТипЦены.Рассчитывается Тогда СтрокаТовара.Валюта = ВалютаРасчетная; КонецЕсли; Если НЕ ВВалютахЦен И Валюта <> СтрокаТовара.Валюта Тогда ПолученнаяЦена = Ценообразование.ПересчитатьЦенуПриИзмененииВалюты(СтрокаТовара.Цена, СтрокаТовара.Валюта, Валюта, 0, 1, ТекущаяДата()); СтрокаТовара.Цена = ПолученнаяЦена; СтрокаТовара.Валюта = Валюта; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; И если это не так, то как мне изменять значения в табличном поле? |
|||
39
Wobland
06.05.13
✎
14:32
|
(38) в чём беда? я понять не могу
|
|||
40
dva1c
06.05.13
✎
14:36
|
(38) До сих пор не въезжаешь?
|
|||
41
new1snik
06.05.13
✎
14:37
|
(39) Беда в том, что изменяя в цикле значения кол-ва этикеток в табличном поле обработки этим кодом:
Товары = ЗапросШтрихкоды.Выполнить().Выгрузить(); Для Каждого СтрокаТовара ИЗ Товары Цикл Если СтрокаТовара.Номенклатура = Ном Тогда Сообщить(СтрокаТовара.Количество); СтрокаТовара.Количество = Кол; Сообщить(СтрокаТовара.Количество); КонецЕсли; КонецЦикла; Изменения кол-ва не отображаются в форме. |
|||
42
new1snik
06.05.13
✎
14:38
|
(40) Нет, я с табличными полями работаю первый раз в жизни, а гул не слишком помогает, т.к я плохо представляю, что я делаю неправильно.
|
|||
43
Wobland
06.05.13
✎
14:40
|
ЭлементыФормы.КакТамТвоёПолеЗовётся.ОбновитьСтроки()
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |