7.7 Обработка передачи данных

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем TRABANT, 2 окт 2011.

  1. TopicStarter Overlay
    TRABANT
    Offline

    TRABANT

    Регистрация:
    17 сен 2011
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    Здраствуйте,ответьте на вопрос пожалуйста!
    Я написал код при помощи которого данные беруться из табличной части справочника 1 и заносяться в таблицу значений.
    Вопрос:Ка можно сделать так что бы данные переносились из созданой ТабЗн в табличную часть справочника2?

    Код:
     
    
    Процедура сформировать()
    
    Табзн = СоздатьОбъект ("таблицаЗначений"); 
    
    Табзн.НоваяКолонка("Код");
    Табзн.НоваяКолонка("Наименование");
    //Табзн.НоваяКолонка();	  
    
    спр = создатьобъект ("Справочник.тз1"); 
    спр.выбратьЭлементы();
    Пока спр.получитьэлемент()=1 Цикл
    ТабЗн.новаястрока();
    ТабЗн.Код = спр.Код;
    ТабЗн.наименование = спр.наименование;
    КонецЦикла;
    
    ТабЗн.ВыбратьСтроки();
    Пока ТабЗн.ПолучитьСтроку()=1 Цикл 
    Сообщить(ТабЗн.код);  
    Сообщить(ТабЗн.наименование);  
    КонецЦикла;
    
    КонецПроцедуры 
    
    
  2. TopicStarter Overlay
    TRABANT
    Offline

    TRABANT

    Регистрация:
    17 сен 2011
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    Код:
    	
    цель = создатьобъект ("Справочник.тз2"); 
    табЗн.выбратьстроки();   
    цель.выбратьэлементы();
    пока табЗн.получитьстроку()=1 цикл   
    
    цель.код = ТабЗн.Код;
    цель.наименование = табЗн.наменование;   
    
    конеццикла;
    
    
    
    и вот ошибка:(
    цель.код = ТабЗн.Код;
    {Обработка.новый1.Форма.Модуль(30)}: Не выбран элемент!

    все это дело должно происходить в оброботке.
    нажал на кнопку данные хоп хоп переместились из справочнкиа в справочник(или в документ)
  3. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Нужно вот так:
    Код:
    цель = создатьобъект ("Справочник.тз2"); 
    табЗн.выбратьстроки();   
    пока табЗн.получитьстроку()=1 цикл   
    Цель.Новый(); //вот в чем была ошибка - не создавали элемент
    цель.код = ТабЗн.Код;
    цель.наименование = табЗн.наменование;   
    
    конеццикла;
    
    
    но данный код сработает БЕЗОШИБОЧНО только ОДИН РАЗ.
    При повторной выгрузке возникнет ошибка уникальности...
    Т.е. вы будете ДВАЖДЫ создавать один и тот же элемент. Для того чтобы создавать только новые нужно немного видоизменить код

    Код:
    цель = создатьобъект ("Справочник.тз2"); 
    табЗн.выбратьстроки();   
    пока табЗн.получитьстроку()=1 цикл   
    Если Цель.НайтиПоКоду(ТабЗн.Код,0)=1 Тогда
    Продолжить;
    КонецЕсли;
    Цель.Новый(); //вот в чем была ошибка - не создавали элемент
    цель.код = ТабЗн.Код;
    цель.наименование = табЗн.наменование;   
    
    конеццикла;
    
    
    И еще момент. В первом справочнике у вас нет групп? Данный вариант переноса этот момент не учитывает....
  4. TopicStarter Overlay
    TRABANT
    Offline

    TRABANT

    Регистрация:
    17 сен 2011
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    Спасибо больше за подсказку!Я пока учусь,варинт с наличием групп было бы интересно увидеть :angry:
  5. TopicStarter Overlay
    TRABANT
    Offline

    TRABANT

    Регистрация:
    17 сен 2011
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    хммм не работает..:(

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

    Вложения:

    • беда.jpg
      Размер файла:
      1,4 МБ
      Просмотров:
      21
  6. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    А справочник ТЗ2 у вас случаем не подчиненный?
  7. TopicStarter Overlay
    TRABANT
    Offline

    TRABANT

    Регистрация:
    17 сен 2011
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    нет

    Вложения:

    • спр.JPG
      спр.JPG
      Размер файла:
      50,6 КБ
      Просмотров:
      11
  8. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Тьфу! Все же элементарно. Забыли записать элемент....

    Код:
    цель.Новый();
    цель.код = ТабЗн.код;
    цель.наименование= ТабЗн.наименование;
    Цель.Записать();
    
    
  9. TopicStarter Overlay
    TRABANT
    Offline

    TRABANT

    Регистрация:
    17 сен 2011
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    оооо заработало :D

    Теперь буду мучить как передать данные из справочника в документ :angry:
  10. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Аналогично.... Через параметр формы
  11. TopicStarter Overlay
    TRABANT
    Offline

    TRABANT

    Регистрация:
    17 сен 2011
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    Мне нужно будет писать код в модуле документа и в обработчике?

    Код:
    (обработчик)
    ОткрытьФорму("документ.новый1",ТабЗн);
    
    (документ)
    Процедура ПриОткрытии()
    ТабЗн = форма.Параметр;
    
    
    Как то так делать через параметр формы?
  12. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Да. Но правильнее передавать параметр в виде СпискаЗначений. Ведь не обязательно параметр будет талица. Вдруг вы захотите потом распечатывать документ не интерактивно
  13. TopicStarter Overlay
    TRABANT
    Offline

    TRABANT

    Регистрация:
    17 сен 2011
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    Я вот как реализовал дешего и сердито.Вроде работает..Нужно конечно потестить ещё..проблемы с уникальностью кажется будут.
    (код обработчика)
    Код:
    
    Процедура сформировать()  
    
    Табзн.НоваяКолонка("Код");
    Табзн.НоваяКолонка("Наименование");
    //Табзн.НоваяКолонка();      
    
    спр = создатьобъект ("Справочник.тз1"); 
    спр.выбратьЭлементы();
    Пока спр.получитьэлемент()=1 Цикл
    ТабЗн.новаястрока();
    ТабЗн.Код = спр.Код;
    ТабЗн.наименование = спр.наименование;
    КонецЦикла;
    //сообщалка в системный чат                                                             
    ТабЗн.ВыбратьСтроки();
    Пока ТабЗн.ПолучитьСтроку()=1 Цикл 
    Сообщить(ТабЗн.код);  
    Сообщить(ТабЗн.наименование);  
    КонецЦикла; 
    
    ОткрытьФорму("Документ.Новый1",Табзн);
    
    КонецПроцедуры
    
    
    
    

    (Код документа)
    Код:
    
    Процедура ПриОткрытии()
    ПриЗаписиПерепроводить(1);  
    
    Табзн=форма.параметр;  
    
    ЗагрузитьТабличнуюЧасть(ТабЗн);
    
    КонецПроцедуры
    
    
    
    
    Код:
     
    Процедура сформировать()  
    /////////спискозначений//////////////////////////
    спр = создатьобъект ("справочник.тз1");
    спр.выбратьэлементы();  
    
    пока спр.получитьэлемент()=1 Цикл   
    спзн.добавитьзначение(спр.Код);  
    спзн.добавитьзначение(спр.наименование);  
    КонецЦикла;
    
    открытьформу("Документ.Новый1",спзн);
    
    КонецПроцедуры; 
    
    
    
    Код:
    Процедура ПриОткрытии()
    ПриЗаписиПерепроводить(1);  
    ////////тест со списком значений////////
    спзн = форма.параметр; 
    номерстроки = форма.параметр.получитьзначение(1);     
    наименование = форма.параметр.получитьзначение(1);
    записать();	
    ///////////////////////////////////////
    КонецПроцедуры
    
    так попробовал с осписком значений но что то не вышло:(
  14. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Вы не допоняли. В качестве параметра передаем список значений содержащий таблицу значений.
    Код:
    //тут создаем ТЗ
    СЗ=СоздатьОбъект("СписокЗначений");
    СЗ.ДобавитьЗначение("Команда","ЗаполнитьТаблицу");
    СЗ.ДобавитьЗначение("Значение",Табзн);
    ОткрытьФорму("Документ.Новый1",СЗ);
    ....
    
    //в документе
    Процедура ПриОткрытии()
    Парам=Форма.Параметр;
    Если ТипЗначенияСтр(Парам)="СписокЗначений" Тогда
    //вот они плюшки 
    Если Парам.Получить("Команда")="ЗаполнитьТаблицу" Тогда
    ...
    ИначеЕсли Парам.Получить("Команда")="Напечатать" Тогда
    Печать();
    СтатусВозврата(0);
    Возврат; 
    КонецЕсли; 
    КонецЕсли;
    
    
    
    Теперь мы можем из любого места программы вызвать печать документа не открывая его

    Код:
    СЗ=СоздатьОбъект("СписокЗначений");
    СЗ.ДобавитьЗначение("Команда","Напечатать");
    ОткрытьФорму(ТекДок,СЗ);
    //где ТекДок - документ
    
    
    
  15. TopicStarter Overlay
    TRABANT
    Offline

    TRABANT

    Регистрация:
    17 сен 2011
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    можно глупый вопрос?Плохо спал сегодня туплю..
    Код:
    ... 
    Если Парам.Получить("Команда")="ЗаполнитьТаблицу" Тогда
    ...
    ИначеЕсли Парам.Получить("Команда")="Напечатать" Тогда
    ..
    
    
    где многотичие,что писать не пойму?
    Код:
    ...
    парам=("значение");
    наименование=парам.наименование;
    ...
    
    
    Так как то?


    Или там через получитьзанчение(); дык тоже не выходит..Я так ниразу не делал..ТабЗн он ругаеться что перем. не определена..

    или так?
    Код:
    ...
    Если Парам.Получить("Команда")="ЗаполнитьТаблицу" Тогда
    Парам=сз.Параметр;
    
    ИначеЕсли Парам.Получить("Команда")="Напечатать" Тогда
    ...
    
    
  16. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Код:
    
    Парам = СоздатьОбъект("СписокЗначений");
    Парам.Установить("Описание1", Значение1);
    Парам.Установить("Описание2", Значение2);
    Парам.Установить("Описание3", Значение3);
    //...
    Парам.Установить("Команда", "Напечатать");
    //...
    Если Парам.Получить("Команда")="ЗаполнитьТаблицу" Тогда
    //...
    
    
    
    
    
    
  17. TopicStarter Overlay
    TRABANT
    Offline

    TRABANT

    Регистрация:
    17 сен 2011
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    я сделал как угодник сказал что писать после тогда как именно значения передавать из тбслицы значений которая в списке значений?
  18. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Из СЗ нужно получить ТЗ и заполнить вашу табличную чать

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