8.х Табличное поле

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем vika, 13 дек 2006.

  1. TopicStarter Overlay
    vika
    Offline

    vika

    Регистрация:
    13 дек 2006
    Сообщения:
    43
    Симпатии:
    0
    Баллы:
    1
    Подскажите пожалуйста! Я новичок в 1С. Версия 8.0.
    У меня документ - Поставка товаров. В этом документе табличная часть - Контейнера. И мне нужно , чтоб у каждого контейнера, т е элемента табличной части , была своя табличная часть - Товары.Т к это невозможно и такой вложенности нет, я решила добавить табличную часть - Товары , где кроме нужных реквизитов добавить еще и реквизит - номер контейнера. А затем в форме по кнопке выбирать грузы только нужного контейнера.
    Для этого я ,идя по записям табличной части и анализируя их , подходящие заталкиваю в таблицу значений. А затем эту таблицу значений загружаю в табличное поле. Вроде все ОК, записи нужные, но вот они почему-то не корректируются. Хотя Доступность=истина. Не подскажите , в чем тут дело?

    И может есть еще какое-нибудь другое решение такой задачи?
  2. Greck
    Offline

    Greck Опытный в 1С

    Регистрация:
    11 дек 2006
    Сообщения:
    94
    Симпатии:
    0
    Баллы:
    26
    Так насколько я понимаю, после редактирования строк таблицы значений, необходимо эти строки записать обратно в табличную часть документа... а иначе изменения не сохранятся..???
  3. TopicStarter Overlay
    vika
    Offline

    vika

    Регистрация:
    13 дек 2006
    Сообщения:
    43
    Симпатии:
    0
    Баллы:
    1
    Именно так, но до этого не доходим, т к данные не корректируются, как будто доступ только на чтение. :unsure:
  4. Pilgrim
    Offline

    Pilgrim Опытный в 1С

    Регистрация:
    13 сен 2006
    Сообщения:
    242
    Симпатии:
    0
    Баллы:
    26
    Не знаю как такое решение, возможно я не так понял задачу. Делаешь вторую табличку товары (соответственно вторую табличную часть), где помимо всех полей добавляешь поле НомерСтрокиКонтейнера (например). Дальше на табличке Контейнеры на событие АктивацияСтроки и на ОткрытиеФормы, если они у тебя на одной странице ставишь отбор НомерСтрокиКонтейнера = Контейнеры.ТекущаяСтрока.НомерСтроки. И ещё при добавлении новой строки не забудь проставлять значение НомерСтрокиКонтейнера = Контейнеры.ТекущаяСтрока.НомерСтроки, а то под отбор не будет попадать. Вот примерно так.
  5. TopicStarter Overlay
    vika
    Offline

    vika

    Регистрация:
    13 дек 2006
    Сообщения:
    43
    Симпатии:
    0
    Баллы:
    1
    Спасибо большое! Именно так я и решила. Вывожу всю табличную часть - Товары контейнеров и отбором высвечиваю нужные. Все работает и корректируется. Но вот почему , когда источником табличного поля назначается таблица значений, то данные не корректируются? :unsure: Просто я только начинаю писать на 1С и хотелось бы понять все тонкости. На другом языке я могу для таблицы- Grida назначить любой источник и рассписать колонки как мне больше нравится. И на чтение, и на запись, а здесь я не понимаю чего-то. Хотелось бы узнать. Или таблица значений как источник применяется только для просмотра и выбора , а для корректировки иные средства? B)
  6. Greck
    Offline

    Greck Опытный в 1С

    Регистрация:
    11 дек 2006
    Сообщения:
    94
    Симпатии:
    0
    Баллы:
    26
    так как я тоже новичек, не постесняюсь спросить элементарный вопрос... у меня есть в документе табличное поле... как мне при проведении документа "идти" по строкам табличного поля, и для каждой строки табличного поля, делать запись с ТаблицуДвижений Регистра сведений?
  7. Pilgrim
    Offline

    Pilgrim Опытный в 1С

    Регистрация:
    13 сен 2006
    Сообщения:
    242
    Симпатии:
    0
    Баллы:
    26
    Если у тебя источнико данных для табличного поля служит табличная часть документа, то можно идти по ним например таким циклом
    Для каждого СтрТабличнойЧасти из ТабличнаяЧасть Цикл
    НовоеДвижение = Движения.РегистрСведений.Добавить();
    НовоеДвижение.Контрагент = СтрТабличнойЧасти.Контрагент;
    КонецЦмкла;
  8. Greck
    Offline

    Greck Опытный в 1С

    Регистрация:
    11 дек 2006
    Сообщения:
    94
    Симпатии:
    0
    Баллы:
    26
    Спасибо, как запустить цикл не знал. Спасибо еще раз. Результат:

    Код:
    Для каждого СтрТабличнойЧасти из Участники Цикл
    //// Заполним таблицу движений Участники.
    НоваяСтрокаУчастники = ТаблицаДвиженийУчастники.Добавить();
    НоваяСтрокаУчастники.Организация = Организация;
    НоваяСтрокаУчастники.НомерУчастника = СтрТабличнойЧасти.Номер;
    НоваяСтрокаУчастники.РазмерДоли = СтрТабличнойЧасти.РазмерДоли;
    НоваяСтрокаУчастники.ОрганизацияРесурс=  СтрТабличнойЧасти.Участник;
    
    НаборДвиженийУчастники.мПериод = Дата;
    НаборДвиженийУчастники.мТаблицаДвижений = ТаблицаДвиженийУчастники;    
    КонецЦикла;
    
  9. Greck
    Offline

    Greck Опытный в 1С

    Регистрация:
    11 дек 2006
    Сообщения:
    94
    Симпатии:
    0
    Баллы:
    26
    Хех, не долго я без вас разрабатывал, а как правильней теперь данные эти из оегистра сведений получить? Хочу чтобы при создании нового документа я там выбирал Организацию допустим и в табличное поле Участники выгружался "срезпоследних" данных по этой организации? Я делаю выборку из регистра Сведений:

    Код:
        Отбор = Новый Структура("Организация");
    Отбор.Организация = Организация;
    СрезПоследних = РегистрыСведений.СоставУчастников.СрезПоследних(Дата(Год(Дата),Месяц(Дата),(день(дата)-1)), Отбор);
    
    Если СрезПоследних.Количество() > 0 Тогда
    
    //Тут по идее должно быть заполение Табличного поля документа данными из Регистра сведений
    
    КонецЕсли;
    
    Вот немного подумал и прикрутил на событие изменения значения Организации в документе:


    Код:
    //Получение среза последних значений из Регистра сведений Участники
    Отбор = Новый Структура("Организация");
    Отбор.Организация = Организация;
    СрезПоследних = РегистрыСведений.СоставУчастников.СрезПоследних(Дата(Год(Дата),Месяц(Дата),(день(дата)-1)), Отбор);
    
    индекс = 0;
    Если СрезПоследних.Количество() > 0 Тогда
    Для каждого СтрТабличнойЧасти из СрезПоследних Цикл
    НоваяСтрокаУчастники = Участники.Добавить();
    НоваяСтрокаУчастники.Номер = СрезПоследних[индекс].НомерУчастника;
    НоваяСтрокаУчастники.Участник = СрезПоследних[индекс].ОрганизацияРесурс;
    НоваяСтрокаУчастники.РазмерДоли = СрезПоследних[индекс].РазмерДоли;
    индекс=индекс+1;
    КонецЦикла;        
    КонецЕсли;
    //КОНЕЦ Получение среза последних значений из Регистра сведений Участники
    
  10. Pilgrim
    Offline

    Pilgrim Опытный в 1С

    Регистрация:
    13 сен 2006
    Сообщения:
    242
    Симпатии:
    0
    Баллы:
    26
    Ну вот, все прикрутил, значит все сам уже можешь :unsure:

Поделиться этой страницей