Имя: Пароль:
1C
1С v8
Идентификатор "ДанныеФормыКоллекция" УТ 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) А если документ будет закрыт, я смогу получити форму ?? Или надо будет программно открыть, получить и тогда закрыть?