7.7 Табличная Часть

Тема в разделе "Общие вопросы "1С:Предприятие 7.7"", создана пользователем privet, 27 сен 2011.

  1. TopicStarter Overlay
    privet
    Offline

    privet Опытный в 1С

    Регистрация:
    5 апр 2011
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    ТиС 7.7, в общем вопрос возник, как можно обратиться к Табличной Части документа(Извените если глупый вопрос, но в поисковиках что то не нашла) .для добавления значения из ТЗ в столбец.
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Сначала нужно получить саму строку (скажем через метод ПолучитьСтрокуПоНомеру) затем - непосредственно обращайтесь к реквизиту
  3. TopicStarter Overlay
    privet
    Offline

    privet Опытный в 1С

    Регистрация:
    5 апр 2011
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    пыталась так не получается(( в цикле обращаюсь он записывает инфу тока в одну строку все остальные игнорирует, а обращалась так ТекущийДокумент().ПолучитьСтрокуПоНомеру(НомерСтроки) - это правильно?
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Не вижу кода но думаю что нет... Нужно создать объект типа документ. Найти документ по ссылке и затем уже производить манипуляции. Покажите как вы делаете
  5. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    Код:
    Процедура Сформировать()
    ТЗ = СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("РеквизитТЧ");
    Док = СоздатьОбъект("Документ.СчетОтПоставщика");
    Если Док.НайтиПоНомеру("123")  = 1 Тогда
    Док.ВыбратьСтроки();
    Пока Док.ПолучитьСтроку() = 1 Цикл
    ТЗ.НоваяСтрока();
    ТЗ.Реквизит = Док.РеквизитТЧ;
    КонецЦикла;
    
    КонецЕсли;
    
    КонецПроцедуры
    
  6. TopicStarter Overlay
    privet
    Offline

    privet Опытный в 1С

    Регистрация:
    5 апр 2011
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Вот что написала(процедура вызывается по кнопке в документе Реализация):

    Код:
    Процедура Поставщик() 
    
    СпрКонт=СоздатьОбъект("Справочник.Контрагенты");
    
    Рег=СоздатьОбъект("Регистр.ПартииНаличие"); 
    ТабЗнач=СоздатьОбъект("ТаблицаЗначений");
    ТабЗнач.НоваяКолонка("Поставщик");
    
    Если Рег.ВыбратьДвиженияДокумента(ТекущийДокумент())=1 Тогда
    
    Пока (Рег.ПолучитьДвижение()=1)  Цикл 
    
    
    Рез=СокрЛП(СформироватьИнформациюОПартии(Рег.Партия));
    
    ТабЗнач.НоваяСтрока();
    ТабЗнач.Поставщик=Рез;
    
    КонецЦикла;
    КонецЕсли;
    
    Для НомерСтроки=1 По ТекущийДокумент().КоличествоСтрок() Цикл 
    
    ТекущийДокумент().ПолучитьСтрокуПоНомеру(НомерСтроки);
    
    если СпрКонт.НайтиПоНаименованию(Рез,0,1)=1 тогда
    Поставщик=СпрКонт.ТекущийЭлемент();	 
    КонецЕсли; 
    
    
    Если НомерСтроки=ТекущийДокумент().КоличествоСтрок() тогда
    Прервать;
    КонецЕсли;
    
    КонецЦикла;
    Конецпроцедуры[code]
    
    [/code]
  7. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    не совсем понял смысл кода, но вроде должно работать

    Код:
        Для i=1 По КоличествоСтрок() Цикл 
    
    ПолучитьСтрокуПоНомеру(i);
    
    Если СпрКонт.НайтиПоНаименованию(СокрЛП(Рез),0,1)=1 Тогда
    Поставщик=СпрКонт.ТекущийЭлемент(); 
    Иначе
    Сообщить("Не найден контрагент "+СокрЛП(Рез));
    КонецЕсли; 
    КонецЦикла;
    
    
    
    
    Поставщик - это реквизит табличной части?
  8. TopicStarter Overlay
    privet
    Offline

    privet Опытный в 1С

    Регистрация:
    5 апр 2011
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Да, Поставщик реквизит ТЧ, попробовала использовать ваш код, помогло, теперь записывает информацию , но тока первое значение из ТЗ и во все строки ((( причем почему то идет зацикливание, если не использовать код:
    Код:
    		Если НомерСтроки=КоличествоСтрок() тогда
    Прервать;
    КонецЕсли;
    
    а если его использовать, записывается информация в реквизит тока через строчку(((
  9. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    вообще "НомерСтроки" - это атрибут документа, зарезервированное слово.. то что везде Поставщик оказался одинаковым - так это и понятно, потому что "Рез=СокрЛП(СформироватьИнформациюОПартии(Рег.Партия));" уже определили перед циклом строкам и ТЗ тут вообще нигде не используется..
    Я бы:
    1) Попытался понять что делает функция "СформироватьИнформациюОПартии(Рег.Партия)"
    2) использовал другой цикл по строкам, как писал выше ("ВыбратьСтроки(); Пока ПолучитьСтроку() = 1 ...")
    3) убрал бы первый цикл в вашем коде, а в цикле по строкам вычислял бы ваш "Рез"
  10. TopicStarter Overlay
    privet
    Offline

    privet Опытный в 1С

    Регистрация:
    5 апр 2011
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    1) от туда берется информация по поставщику
    2) Использовала, все равно зацикливание, причем берет номер строки только четный((
    3) цикл необходим, без него не работает функция "СформироватьИнформациюОПартии(Рег.Партия)"

    Почему он выбирает только четные строки, никак не пойму???? :angry:
  11. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    чудес не бывает и я вам это сейчас докажу.
    скидывайте код СформироватьИнформациюОПартии()
  12. TopicStarter Overlay
    privet
    Offline

    privet Опытный в 1С

    Регистрация:
    5 апр 2011
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Решила полность скинуть весь код. Вот...
    Код:
           Функция СформироватьИнформациюОПартии(Партия)
    Перем Результат;
    СпрКонт=СоздатьОбъект("Справочник.Контрагенты");              
    Результат="";
    
    Если ПустоеЗначение(Партия)=1 Тогда
    Возврат(Результат);
    КонецЕсли; 
    
    Если ПустоеЗначение(Партия.Поставщик)=0 Тогда
    Результат=?(Результат="","",Результат+РазделительСтрок);
    Результат=Результат+СокрЛП(Партия.Поставщик);
    КонецЕсли;
    Сообщить("Поставщик:     "+Результат); 
    
    Возврат(Результат);
    
    КонецФункции // СформироватьИнформациюОПартии()
    
    Процедура Поставщик() 
    с=0;
    СпрКонт=СоздатьОбъект("Справочник.Контрагенты");
    Рег=СоздатьОбъект("Регистр.ПартииНаличие"); 
    ТабЗнач=СоздатьОбъект("ТаблицаЗначений"); 
    ТабЗнач.НоваяКолонка("Номер");
    ТабЗнач.НоваяКолонка("Поставщик");
    
    Если Рег.ВыбратьДвиженияДокумента(ТекущийДокумент())=1 Тогда
    
    Пока (Рег.ПолучитьДвижение()=1)  Цикл 
    с=с+1;
    Рез=СокрЛП(СформироватьИнформациюОПартии(Рег.Партия));
    ТабЗнач.НоваяСтрока();
    ТабЗнач.Номер=с;
    ТабЗнач.Поставщик=Рез;
    КнецЦикла;
    КонецЕсли;
    
    ВыбратьСтроки(); 
    Пока ПолучитьСтроку()=1 Цикл 
    Табзнач.ВыбратьСтроки();
    Пока ТабЗнач.ПолучитьСтроку()=1 Цикл
    Если НомерСтроки=ТабЗнач.Номер <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/тогда')">тогда	</span>
    если СпрКонт.НайтиПоНаименованию(СокрЛП(ТабЗнач.Поставщик),0,1)=1 тогда
    Поставщик=СпрКонт.ТекущийЭлемент();
    иначе 
    Сообщить("Поставщик не найден "+Рез);
    КонецЕсли;  
    конецЕсли;
    КонецЦикла;
    КонецЦикла;
    
    Конецпроцедуры
    
  13. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Странная трактовка
    Код:
    Результат=?(Результат="","",Результат+РазделительСтрок);
    
    
    Если пустая строка - пустую и возвращаем...
    Смысл вообще лепить функцию когда можно так:
    Код:
    Рез=Рег.Партия.Поставщик;
    
    
  14. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    Давно не работал с типовыми, но мое видение такое:

    Код:
    Функция СформироватьИнформациюОПартии(Партия)
    Перем Результат;
    Результат="";
    Если ПустоеЗначение(Партия)=1 Тогда
    Возврат(Результат);
    КонецЕсли; 
    
    Если ПустоеЗначение(Партия.Поставщик)=0 Тогда
    Результат=Партия.Поставщик;
    КонецЕсли;
    Сообщить("Поставщик:     "+Результат); 
    
    Возврат(Результат);
    КонецФункции // СформироватьИнформациюОПартии()
    
    Процедура Поставщик() 
    с=0;
    СпрКонт=СоздатьОбъект("Справочник.Контрагенты");
    Рег=СоздатьОбъект("Регистр.ПартииНаличие"); 
    
    Если Рег.ВыбратьДвиженияДокумента(ТекущийДокумент())=1 Тогда
    Пока (Рег.ПолучитьДвижение()=1)  Цикл 
    с=с+1;
    Рез=СформироватьИнформациюОПартии(Рег.Партия);
    ПолучитьСтрокуПоНомеру(с);
    Поставщик=Рез;
    КонецЦикла;
    КонецЕсли;
    Конецпроцедуры
    
    
    
    
    надеюсь номера строк при проведении совпадают с движениями.. А вообще если это Комплексная или ТиС то вроде пратия есть в ТЧ

    +
  15. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    В первом посте ТиС.
    Да, такой реквизит есть в ТЧ, но он как правило пустой (автовыбор)
  16. TopicStarter Overlay
    privet
    Offline

    privet Опытный в 1С

    Регистрация:
    5 апр 2011
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    АААА, все заработало, СПАСИБО! :angry:

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