8.х Работа с табличными частями

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

  1. TopicStarter Overlay
    andrenko
    Offline

    andrenko Опытный в 1С

    Регистрация:
    20 ноя 2008
    Сообщения:
    310
    Симпатии:
    0
    Баллы:
    26
    Еще один глупый вопрос:)
    Есть табличное поле документа. Как в нем добавить новую строку и внести туда определенную запись? А то бьюсь уже второй день, строки создаются, а как туда что-то записать - не пойму:(
  2. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Вы уж определитесь: табличная часть или табличное поле :)
  3. Вселенная
    Offline

    Вселенная Опытный в 1С

    Регистрация:
    4 ноя 2009
    Сообщения:
    176
    Симпатии:
    0
    Баллы:
    26
    Код:
     Док=Документы.ПоступлениеТоваровУслуг.НайтиПоНомеру(Номер,Дата);
    
    СтруктураШапкиДокумента.Вставить("СуммаДокумента",Док.СуммаДокумента);
    СтруктураШапкиДокумента.Вставить("ОтложенныйНДС_СуммаБезНДС",сюда нужен реквизит ТЧ);
    
    
    Как вставить в структуру поле ТЧ? :unsure:
  4. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Нууу... раз у вас есть "СтруктураШапкиДокумента", то уж должна быть, или создавайте "СтруктуруПолей". см. в типовых.
    Напр.
    Код:
    Функция СформироватьСтруктуруПолейТовары() Экспорт
    
    СтруктураПолей = Новый Структура;
    СтруктураПолей.Вставить("Номенклатура"                , "Номенклатура");
    СтруктураПолей.Вставить("Количество"                  , "Количество * Коэффициент /Номенклатура.ЕдиницаХраненияОстатков.Коэффициент");
    СтруктураПолей.Вставить("Сумма"                       , "Сумма");
    СтруктураПолей.Вставить("СтавкаНДС"                   , "СтавкаНДС");
    СтруктураПолей.Вставить("НДС"                         , "СуммаНДС");
    СтруктураПолей.Вставить("ХарактеристикаНоменклатуры"  , "ХарактеристикаНоменклатуры");
    СтруктураПолей.Вставить("СерияНоменклатуры"           , "СерияНоменклатуры");
    СтруктураПолей.Вставить("ВестиПартионныйУчетПоСериям" , "Номенклатура.ВестиПартионныйУчетПоСериям");
    
    Возврат СтруктураПолей;
    
    КонецФункции // СформироватьСтруктуруПолейТовары()
    
    
    
    
    А вообще, дайте побольше кода
  5. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    BabySG прав, существует разница между табличной частью и табличным полем.

    из книги 1C Предприятие 8.1 Простые примеры разработки
    Добавление строки в табличную часть документа
    Код:
    ОбъектДок = Док.ПолучитьОбъект();
    
    НоваяСтрока = ОбъектДок.Товары.Добавить();
    
    // Заполнить значения реквизитов.
    НоваяСтрока.Количество = 10;
    НоваяСтрока.Цена = 55;
    //	...	
    
    // Записать документ.	
    ОбъектДок.Записать();
    
    так как табличное поле - это элемент то формы, то
    Код:
    	ЭлементыФормы.Товар.ДобавитьСтроку();
    СтрокаТЧ = ЭлементыФормы.Товар.ТекущиеДанные;
    СтрокаТЧ.Количество = 20;
    
  6. Taiska
    Offline

    Taiska

    Регистрация:
    26 фев 2009
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Добрый день!
    Вопрос тоже по созданию строки в табличной части документа. Но не получается сделать в цикле.
    Говорит "Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных (возможно, запись была изменена или удалена)!" при записи. Отладка показала, что при следующем вхождении в условие в цикле, при добавлении строки, номер ей дается тот же, что и при первом... То есть раз делает, на второй номер следующий не хочет давать.
    Подскажите, пожалуйста, что не так и как с этим бороться.
    Код внешней обработки:
    Код:
    Прием=документы.ПриемНаРаботуВОрганизацию.НайтиПоНомеру("00000000001",ТекущаяДата());
    Прием=Документы.ПриемНаРаботуВОрганизацию.Выбрать();
    прием.следующий();
    ВыборкаРаботников=прием.РаботникиОрганизации;
    колстр=выборкаРаботников.Количество();
    Для р=0 по колстр-1 цикл
    фл=0;
    сотр=выборкаРаботников.Получить(р).Сотрудник;
    подразделение=выборкаРаботников.Получить(р).ПодразделениеОрганизации;
    должность=выборкаРаботников.Получить(р).Должность;
    ВыборкаСхемМотивации=РегистрыСведений.СхемыМотивацииРаботников.Выбрать();
    Пока ВыборкаСхемМотивации.следующий() Цикл
    Если (((подразделение=ВыборкаСхемМотивации.Подразделение)
    И(Должность=ВыборкаСхемМотивации.Должность))
    Или ((ВыборкаСхемМотивации.Подразделение=Неопределено) 
    И (Должность=ВыборкаСхемМотивации.Должность))) Тогда
    Фл=0;
    Для каждого С из прием.ОсновныеНачисления Цикл
    Если (С.сотрудник=Сотр)И(С.ВидРасчета=ВыборкаСхемМотивации.видрасчета) Тогда
    фл=1;
    прервать;
    КонецЕсли;
    КонецЦикла;
    Если фл=0 Тогда 
    объект=прием.ПолучитьОбъект();
    Строка=объект.ОсновныеНачисления.Добавить();
    Строка.Сотрудник=Сотр;
    Строка.физлицо=Сотр.Физлицо;
    Строка.ВидРасчета=ВыборкаСхемМотивации.видрасчета;
    Строка.Показатель1=ВыборкаСхемМотивации.Показатель1;
    //.... прочие присвоения
    объект.Записать(); // вот тут ругается при втором вхождении в условие  
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла; 
    
  7. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Не обращая внимание на ужасный код...
    вынесите получение объекта до всех циклов, запись объекта после всех циклов.
    Но, видимо, весь код неправилен.
    Здесь все ваши проверки и обходы можно запросом вытянуть.
  8. Taiska
    Offline

    Taiska

    Регистрация:
    26 фев 2009
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    если за циклы выносить, то он сохраняет только 1 добавленную строку - которую последнюю найдет. а мне надо много строчек добавить, которых не хватает...
    а код ужасный, потому что самоучка и до запросов руки не дошли. :( каюсь, понимаю, что наверняка красивее можно написать
  9. Абырвалг
    Offline

    Абырвалг Опытный в 1С

    Регистрация:
    8 дек 2009
    Сообщения:
    112
    Симпатии:
    1
    Баллы:
    29
    А вы и
    Код:
    объект=прием.ПолучитьОбъект();
    
    
    Тоже за цикл попробуйте вынести.
  10. Taiska
    Offline

    Taiska

    Регистрация:
    26 фев 2009
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    та же ошибка
  11. Абырвалг
    Offline

    Абырвалг Опытный в 1С

    Регистрация:
    8 дек 2009
    Сообщения:
    112
    Симпатии:
    1
    Баллы:
    29
    Показывайте новый код, посмотрим куда вы вынесли эти записи.

    И
    "//.... прочие присвоения"
    втавляйте тоже, а то мало ли что там... :)
  12. Taiska
    Offline

    Taiska

    Регистрация:
    26 фев 2009
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    А чего там вставлять-то... там 9 вариантов вставки получения объекта и его записи, я их все попробовала. варианта результата при этом два: он новую строку вставляет с номером, что и предыдущую, либо в результате в сохраненном документе я получаю только одну последне-добавленную сохраненную строку :(
    Че-то я совсем "дурак", и без запросов сложжных живу, и строки у меня неправильно добавляются...
  13. Абырвалг
    Offline

    Абырвалг Опытный в 1С

    Регистрация:
    8 дек 2009
    Сообщения:
    112
    Симпатии:
    1
    Баллы:
    29
    Ну вы не хотите показывать свой код, я не хочу гадать на кофейной гуще. Так что мучайтесь сами :unsure:
    Возможно и дурак, но я склонен думать, что дело в бесконечном количестве времени у вас :aua: . Запросы они не сложные, они облегчают жизнь программиста раз в ТЫЩУ. Понимаете изучение запросов, способов и методов программирования - это затрата время сейчас - экономия времени в будущем, так как у вас времени ОЧЕНЬ много, то советую бояться запросов как огня, строить непонятные для самой себя циклы и выборки и потом долго и нудно отлаживать это всё :smile:
  14. Taiska
    Offline

    Taiska

    Регистрация:
    26 фев 2009
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    а тут все нашла, все заработало. :unsure:

    спасибо за участие!
    ушла изучать запросы.... :smile:
  15. Taiska
    Offline

    Taiska

    Регистрация:
    26 фев 2009
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    ну блин. запрос-не запорс, все равно ж потом по выборке циклом шлепать. ..
  16. Абырвалг
    Offline

    Абырвалг Опытный в 1С

    Регистрация:
    8 дек 2009
    Сообщения:
    112
    Симпатии:
    1
    Баллы:
    29
    Ну так то ли по циклу пробежаться и добавить строки, то ли вот такие изыскания изобретать:
    Код:
    			Если (((подразделение=ВыборкаСхемМотивации.Подразделение)
    И(Должность=ВыборкаСхемМотивации.Должность))
    Или ((ВыборкаСхемМотивации.Подразделение=Неопределено) 
    И (Должность=ВыборкаСхемМотивации.Должность))) Тогда
    Фл=0;
    Для каждого С из прием.ОсновныеНачисления Цикл
    Если (С.сотрудник=Сотр)И(С.ВидРасчета=ВыборкаСхемМотивации.видрасчета) Тогда
    фл=1;
    прервать;
    КонецЕсли;
    КонецЦикла;
    Если фл=0 Тогда 
    
    А за такое:
    Код:
    Для каждого С из прием.ОсновныеНачисления Цикл
    
    Вообще, по жопе бы надавал...

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