|
Идентификатор "ДанныеФормыКоллекция" УТ 3.1 | ☑ | ||
---|---|---|---|---|
0
Casper211
15.11.16
✎
18:07
|
В модуле менеджера такой код
СтрокаТовары = Объект.Товары.НайтиПоИдентификатору(Идентификатор); Объект.Товары -ДанныеФормыКоллекция (то есть данные ТЧ Товары объекта).А я использую внешнюю обработку, выбираю ссылку на документ (заказ клиента), получаю объект (его табличную часть).И дальше по коду должен выполняться вот это СтрокаТовары = Объект.Товары.НайтиПоИдентификатору(Идентификатор); Как мне переделать "ДокументТабличнаяЧасть.ЗаказКлиента.Товары" вместо "Объект.Товары" чтобы он стал ДанныеФормыКоллекция и нашло идентификатор?? |
|||
1
DrShad
15.11.16
✎
18:37
|
тебе нужна форма
|
|||
2
Casper211
15.11.16
✎
18:43
|
(1) объекта? (Заказа клиента)
|
|||
3
Casper211
15.11.16
✎
18:45
|
но ПолучитьФорму()
Доступность: Толстый клиент. |
|||
4
Casper211
15.11.16
✎
18:56
|
(1) РеквизитФормыВЗначение () и ДанныеФормыВзначение () это не в ту сторону?
|
|||
5
Casper211
16.11.16
✎
10:09
|
(1) ап
|
|||
6
Casper211
16.11.16
✎
10:10
|
или может я плохо объяснил что мне нужно?
|
|||
7
Casper211
16.11.16
✎
10:50
|
Кнопка в заказе клиента: вызывает форму перечисления и передает данные обратно для заказа
&НаКлиенте Процедура ЗаполнитьОбеспечение(Команда) ПараметрыПроверки = ОбеспечениеКлиентСервер.ИнициализироватьПараметрыПроверкиЗаполнения(); Если ОбеспечениеКлиентСервер.ПроверитьЗаполнение( Объект, Объект.Товары, Элементы.Товары.ВыделенныеСтроки, ПараметрыПроверки, Неопределено, Объект.Склад) Тогда ПараметрыФормы = Новый Структура("Тип", ТипЗнч("Объект.Ссылка")); ОткрытьФорму("Перечисление.ВариантыОбеспечения.Форма.ИсполнениеЗаказа", ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор); КонецЕсли; КонецПроцедуры после того как получили данные выполняем &НаКлиенте Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) Если ИсточникВыбора.ИмяФормы = "Перечисление.ВариантыОбеспечения.Форма.ИсполнениеЗаказа" Тогда Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение); Если Детали.Ошибки <> Неопределено Тогда ОчиститьСообщения(); ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Детали.Ошибки); КонецЕсли; ПоказатьОповещениеПользователя(ОбеспечениеКлиентСервер.ТекстЗаполнениеОбеспечения(), , Детали.Оповещение); СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); НДСИсходящийКлиент.СброситьПроверитьФлагПерерасчетПроизведен(ЭтаФорма); &НаСервере Функция ЗаполнитьОбеспечениеВУстановленномПорядке(ПереченьВариантов) //Описание особенностей формы - дату отгрузки работ необходимо брать из поля "Дата отгрузки". ПутиКДанным = Новый Соответствие(); ПутиКДанным.Вставить("ДатаОтгрузкиРабот", "ДатаОтгрузки"); ПараметрыЗаполнения = Новый Структура("СтатусКВыполнению, ГруппаСкладов, МенеджерРегистра", Объект.Статус <> Перечисления.СтатусыЗаказовКлиентов.НеСогласован, Объект.Склад, РегистрыНакопления.ЗаказыКлиентов); Таблица = ОбеспечениеСервер.ТаблицаЗаполнениеОбеспечения( Элементы.Товары.ВыделенныеСтроки, Объект, Объект.Товары, ПутиКДанным, ПереченьВариантов, ПараметрыЗаполнения); //Перенос результатов в документ. ТекстОповещения = Документы.ЗаказКлиента.ЗаполнитьВариантОбеспечения(Объект, ЭтаФорма, "СтрокиТовары", Таблица, ПараметрыУказанияСерий, ЗависимыеРеквизиты()); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); СтруктураИтогов = Новый Структура("РазличныеСклады, ЕстьИзЗаказов, ТолькоНеТребуется"); ОбойтиТаблицуОбновитьЗависимыеРеквизиты(СтруктураИтогов); Возврат Новый Структура("Ошибки, Оповещение", Неопределено, ТекстОповещения); КонецФункции и вот здесь где "Объект.Товары," - ДанныеФормыВзначение Таблица = ОбеспечениеСервер.ТаблицаЗаполнениеОбеспечения( Элементы.Товары.ВыделенныеСтроки, Объект, Объект.Товары, ПутиКДанным, ПереченьВариантов, ПараметрыЗаполнения); а я будучи с внешней обработки получаю ссылку на документ - могу получить объект, но как сделать из "ДокументТабличнаяЧасть.ЗаказКлиента.Товары" -ДанныеФормыКоллекция. Чтобы удовлетворить методы описанные в функции Объект.Товары.НайтиПоИдентификатору(ВыделеннаяСтрока.Идентификатор); //Заполнение обеспечения для выделенных строк заказа Функция ТаблицаЗаполнениеОбеспечения(ИдентификаторыСтрок, Объект, ТабЧасть, ПутиКДанным, ПереченьВариантов, Параметры = Неопределено) Экспорт СтатусКВыполнению = Истина; ГруппаСкладов = Неопределено; МенеджерРегистра = Неопределено; Если Параметры <> Неопределено Тогда Если Параметры.Свойство("СтатусКВыполнению") Тогда СтатусКВыполнению = Параметры.СтатусКВыполнению; КонецЕсли; Если Параметры.Свойство("ГруппаСкладов") Тогда ГруппаСкладов = Параметры.ГруппаСкладов; КонецЕсли; Если Параметры.Свойство("МенеджерРегистра") Тогда МенеджерРегистра = Параметры.МенеджерРегистра; КонецЕсли; КонецЕсли; //Таблица выделенных строк табличной части. ТаблицаВыделенныеСтроки = ВыделенныеСтрокиВТаблицу(ТабЧасть, ИдентификаторыСтрок, Объект, ПутиКДанным); КодыСтрок = Новый Массив(); Для Каждого ВыделеннаяСтрока Из ТаблицаВыделенныеСтроки Цикл Строка = ТабЧасть.НайтиПоИдентификатору(ВыделеннаяСтрока.Идентификатор); Строка.Количество = 0; КодыСтрок.Добавить(Строка.КодСтроки); КонецЦикла; ТаблицаОформлено = МенеджерРегистра.ТаблицаОформлено(Объект.Ссылка, КодыСтрок); //Таблица невыделенных строк табличной части. ТаблицаНевыделенныеСтроки = СтрокиВТаблицу(ТабЧасть, Объект, ПутиКДанным); Для Каждого ВыделеннаяСтрока Из ТаблицаВыделенныеСтроки Цикл Строка = ТабЧасть.НайтиПоИдентификатору(ВыделеннаяСтрока.Идентификатор); Строка.Количество = ВыделеннаяСтрока.Количество; КонецЦикла; Результат = ТаблицаЗаполнениеОбеспеченияУниверсальный( ТаблицаВыделенныеСтроки, ПереченьВариантов, ТаблицаОформлено, ТаблицаНевыделенныеСтроки, Объект.Ссылка, ГруппаСкладов); Возврат Результат; КонецФункции То есть "ДокументТабличнаяЧасть.ЗаказКлиента.Товары" не имеет "НайтиПоИдентификатору" |
|||
8
DrShad
16.11.16
✎
10:56
|
а как ты это получаешь?
Элементы.Товары.ВыделенныеСтроки |
|||
9
Casper211
16.11.16
✎
10:59
|
(8) я заменяю на все строки
|
|||
10
Casper211
16.11.16
✎
11:00
|
в самом заказе можно выбрать какие строки мы хотим, а программно надо все
|
|||
11
Casper211
16.11.16
✎
11:01
|
(8) и я сделал вот так
Числа = Новый Массив; Для каждого СтрокаТЧЗаказов Из Объект.Реквизит1.Товары Цикл Числа.Добавить(СтрокаТЧЗаказов.НомерСтроки - 1); КонецЦикла; |
|||
12
Casper211
16.11.16
✎
11:04
|
(8) я пробовал скопировать форму и нанести ее на обработку, но это не правильно. Оно то заработает, найдет результаты таблицы. Но как я потом запишу изменения в ТЧ?
ТекстОповещения = Документы.ЗаказКлиента.ЗаполнитьВариантОбеспечения(ОбъектЗаказа, ЭтаФорма, "СтрокиТовары", Таблица,,); там также имеются СтрокаТовары = Объект.Товары.НайтиПоИдентификатору(Идентификатор); Функция ЗаполнитьВариантОбеспечения(Объект, Форма, Операция, ДанныеЗаполнения, ПараметрыУказанияСерий = Неопределено, ЗависимыеРеквизиты = Неопределено) Экспорт СкладГруппа = Справочники.Склады.ЭтоГруппаИСкладыИспользуютсяВТЧДокументовПродажи(Объект.Склад); СтруктураДействий = Новый Структура; СтруктураДействий.Вставить("ПересчитатьКоличествоУпаковок"); Реквизиты = "Сумма, СуммаНДС, СуммаСНДС, СуммаРучнойСкидки, СуммаАвтоматическойСкидки"; СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.СтруктураПересчетаСуммы(Реквизиты, ЗависимыеРеквизиты); Если Форма <> Неопределено Тогда СтруктураДействий.Вставить("ПроверитьЗаполнитьСклад", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСкладаВСтрокеТЧ(Объект, СкладГруппа)); КонецЕсли; КэшированныеЗначения = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения(); ЗаполнитьДатыОтгрузки = Ложь; ДатаПоУмолчанию = Макс(НачалоДня(ТекущаяДата()), Объект.ЖелаемаяДатаОтгрузки); ТекСтрокаТовары = Неопределено; Идентификатор = Неопределено; СтарыеЗначения = ОбеспечениеКлиентСервер.КлючОбеспечения(); НовыеЗначения = ОбеспечениеКлиентСервер.КлючОбеспечения(); Счетчик = 0; Добавлено = 0; Для Каждого СтрокаОбеспечения Из ДанныеЗаполнения Цикл //Выбор существующей, либо добавление новой строки. Если Идентификатор <> СтрокаОбеспечения.Идентификатор Тогда Идентификатор = СтрокаОбеспечения.Идентификатор; Если Операция = "СтрокаТовары" Или Операция = "СтрокиТовары" Или Операция = "Заказ" Тогда СтрокаТовары = Объект.Товары.НайтиПоИдентификатору(Идентификатор); ИначеЕсли Операция = "ИндексыСтрок" Тогда СтрокаТовары = Объект.Товары[Идентификатор + Добавлено]; КонецЕсли; ТекСтрокаТовары = СтрокаТовары; ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммы(СтруктураПересчетаСуммы); ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьСтруктуруПересчетаСуммы(СтруктураПересчетаСуммы, ТекСтрокаТовары); Иначе ТекСтрокаТовары = Объект.Товары.Вставить(Объект.Товары.Индекс(ТекСтрокаТовары) + 1); ЗаполнитьЗначенияСвойств(ТекСтрокаТовары, СтрокаТовары); ТекСтрокаТовары.КодСтроки = 0; Добавлено = Добавлено + 1; КонецЕсли; //Заполнение полей обеспечения. ЗаполнитьЗначенияСвойств(СтарыеЗначения, ТекСтрокаТовары); Если СтрокаОбеспечения.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.ОтгрузитьОбособленно Тогда ТекСтрокаТовары.Назначение = Объект.Назначение; Иначе ТекСтрокаТовары.Назначение = Справочники.Назначения.ПустаяСсылка(); КонецЕсли; ЗаполнитьЗначенияСвойств(ТекСтрокаТовары, СтрокаОбеспечения, "Количество, ВариантОбеспечения, Склад"); Если Объект.НеОтгружатьЧастями Тогда ДатаПоУмолчанию = Макс(СтрокаОбеспечения.ДатаОтгрузки, ДатаПоУмолчанию); Если Операция = "Заказ" Или Операция = "ИндексыСтрок" Или ДатаПоУмолчанию > Объект.ДатаОтгрузки Тогда Объект.ДатаОтгрузки = ДатаПоУмолчанию; ЗаполнитьДатыОтгрузки = Истина; КонецЕсли; Иначе ТекСтрокаТовары.ДатаОтгрузки = Макс(СтрокаОбеспечения.ДатаОтгрузки, ДатаПоУмолчанию); КонецЕсли; ЗаполнитьЗначенияСвойств(НовыеЗначения, ТекСтрокаТовары); ОбеспечениеКлиентСервер.СчетИзменений(Счетчик, СтарыеЗначения, НовыеЗначения); ОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(ТекСтрокаТовары, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ДобавитьСтрокуДляПересчетаСуммы(СтруктураПересчетаСуммы, ТекСтрокаТовары); КонецЦикла; ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммы(СтруктураПересчетаСуммы); Если ПараметрыУказанияСерий = Неопределено Тогда ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(НоменклатураСервер.ПараметрыУказанияСерий(Объект, Документы.ЗаказКлиента)); КонецЕсли; НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий); Если ЗаполнитьДатыОтгрузки Тогда ОбеспечениеСервер.ЗаполнитьРеквизитВКоллекции(Объект.Товары, "ДатаОтгрузки", Объект.ДатаОтгрузки); КонецЕсли; Если Операция = "СтрокаТовары" Или Операция = "СтрокиТовары" Или Операция = "Заказ" Тогда Форма.Модифицированность = Истина; КонецЕсли; Возврат ОбеспечениеКлиентСервер.ТекстОбработаноСтрок(Счетчик); КонецФункции |
|||
13
Casper211
16.11.16
✎
11:05
|
ошибся не "скопировать форму" а скопировать таблицу значений (и что на форме в заказах) в обработку
|
|||
14
Casper211
16.11.16
✎
11:25
|
или можно как-то по другому это сделать? если у меня будут данные, которые необходимо изменить. Как проверить что мои данные будут соответствовать именно этой строке в ТЧ ?? и перезаписать?
|
|||
15
Casper211
16.11.16
✎
11:31
|
по индексу?
|
|||
16
DrShad
16.11.16
✎
12:19
|
не буду во все вникать, на почту кину обработку заполнения ТЧ на УФ - там есть в модуле формы кусок кода который получает форму открытого документа, разберешься или если что пиши
|
|||
17
DrShad
16.11.16
✎
12:20
|
гы, а на твою почту письма не уходят
|
|||
18
DrShad
16.11.16
✎
12:21
|
мое имя скайп drshad, стукнись
|
|||
19
Casper211
16.11.16
✎
12:23
|
(16) Спасибо. который из них? их там много. Мой taras18taras
|
|||
20
Casper211
16.11.16
✎
12:24
|
(18) А если документ будет закрыт, я смогу получити форму ?? Или надо будет программно открыть, получить и тогда закрыть?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |