8.х Вывод данных из документа в справочник

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

  1. TopicStarter Overlay
    Asaena
    Offline

    Asaena

    Регистрация:
    30 ноя 2009
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте. Хочу вывести в табличную часть Медосмотры справочника Инвалиды даты медосмотров из документов Медосмотры. Вот что написал. Не работает. Наверное из-за того что бред :)
    Код:
    Процедура ПослеЗаписи()
    Выборка = Справочники.Инвалиды.Выбрать();
    Если СокрЛП(ФИО) = СокрЛП(Выборка.Наименование) тогда
    НоваяСтрока = Справочники.Инвалиды.Медосмотры.Добавить();
    НоваяСтрока.Дата = Дата; 
    КонецЕсли;
    КонецПроцедуры
    
    
    Ни в книгах ни в инете подобных примеров не нашел. Кто-нибудь может подсказать как это сделать ?
  2. Senya
    Offline

    Senya Опытный в 1С

    Регистрация:
    6 июн 2006
    Сообщения:
    594
    Симпатии:
    0
    Баллы:
    26
    Ну во-первых, есть ошибка в коде, надобно так
    Код:
    Процедура ПослеЗаписи()
    Выборка = Справочники.Инвалиды.Выбрать();
    Пока Выборка.Следующий() Цикл
    Если СокрЛП(ФИО) = СокрЛП(Выборка.Наименование) тогда
    НоваяСтрока = Справочники.Инвалиды.Медосмотры.Добавить();
    НоваяСтрока.Дата = Дата; 
    Прервать;
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
    
    
    Во-вторых, это нерационально. Лучше получит сразу ссылку на элемент справочника Инвалиды, например так:

    Код:
    ВыбЭлемент = Справочники.Инвалиды.НайтиПоНаименованию(СокрЛП(ФИО));
    Если ВыбЭлемент <> Справочники.Инвалиды.ПустаяСсылка()  Тогда
    СпОбъект = ВыбЭлемент.ПолучитьОбъект();
    НоваяСтрока = СпОбъект.Медосмотры.Добавить();
    НоваяСтрока.Дата = Дата; 
    КонецЕсли;
    
    Успехов.
  3. TopicStarter Overlay
    Asaena
    Offline

    Asaena

    Регистрация:
    30 ноя 2009
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    Код:
     ВыбЭлемент = Справочники.Инвалиды.НайтиПоНаименованию(СокрЛП(ФИО));
    Если ВыбЭлемент <> Справочники.Инвалиды.ПустаяСсылка()  Тогда
    СпОбъект = ВыбЭлемент.ПолучитьОбъект();
    НоваяСтрока = СпОбъект.Медосмотры.Добавить();
    НоваяСтрока.Дата = Дата; 
    КонецЕсли;
    
    Спасибо за ответ, но записи не добавляет. Может есть какие-нибудь тонкости ?
  4. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    А кто записывать будет изменнния??

    СпОбъект = ВыбЭлемент.ПолучитьОбъект();
    НоваяСтрока = СпОбъект.Медосмотры.Добавить();
    НоваяСтрока.Дата = Дата;

    спрОбъект.Записать();
  5. TopicStarter Overlay
    Asaena
    Offline

    Asaena

    Регистрация:
    30 ноя 2009
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    Senya, tirk большое спасибо
  6. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Советую переписать все пока не поздно. Создать регистр сведений, который заполняется при проведении документов. А в форме элемента справочника просто показывать информацию из регистра.
  7. Senya
    Offline

    Senya Опытный в 1С

    Регистрация:
    6 июн 2006
    Сообщения:
    594
    Симпатии:
    0
    Баллы:
    26
    Согласен. Но пусть пробует по простому.
  8. TopicStarter Overlay
    Asaena
    Offline

    Asaena

    Регистрация:
    30 ноя 2009
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    Это сделал.
    А вот тут можно поподробнее ? где это прописывать ? я просто с регистрами почти не работал :unsure:
  9. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    Создаешь регистр сведений и потом по аналогии с отображением контактной информации в карточке контрагента делаешь
  10. TopicStarter Overlay
    Asaena
    Offline

    Asaena

    Регистрация:
    30 ноя 2009
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    Вот, посмотрите, пожалуйста:
    Код:
    	ВыборкаЗаписей = РегистрыСведений.Сведения_о_медосмотрах.Выбрать();
    Пока ВыборкаЗаписей.Следующий() цикл
    Если ВыборкаЗаписей.Инвалид = ЭлементыФормы.Наименование тогда
    НоваяСтрока = Справочники.Инвалиды.Медосмотры.Добавить();
    НоваяСтрока.Дата = ВыборкаЗаписей.Дата;
    НоваяСтрока.Общее_заключение = ВыборкаЗаписей.Заключение;
    Справочники.Инвалиды.Медосмотры.Записать();
    КонецЕсли;
    КонецЦикла;
    
    Не добавляет записи в табл часть =(
  11. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Не так не пойдет
    Код:
    ВыборкаЗаписей = РегистрыСведений.Сведения_о_медосмотрах.Выбрать();
    Пока ВыборкаЗаписей.Следующий() цикл
    Если ВыборкаЗаписей.Инвалид = ЭлементыФормы.Наименование тогда
    НоваяСтрока = Медосмотры.Добавить();
    НоваяСтрока.Дата = ВыборкаЗаписей.Дата;
    НоваяСтрока.Общее_заключение = ВыборкаЗаписей.Заключение;
    Записать();
    КонецЕсли;
    КонецЦикла;
    
    
    Но когда говорилось о регистре сведений, имелось в виду не то. Инвалид в регистре должен быть ссылкой на справочник Инвалиды, а потом просто надо добавить табличное поле в справочник и связать его с данными регистра сведений и указать связь по владельцу. Там и программировать ничего не надо.
  12. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    Надо использовать МенеджерЗаписиВРегистр

    Менеджер = РегистрыСведений.Сведения_о_медосмотрах.СоздатьМенеджерЗаписи();
    Менеджер.Инвалид = СсылкаНаИнвалида ;// Которая в карточке
    Менеджер.Дата = Дата;
    Менеджер.Общее_заключение = Общее_заключение;
    Менджер.Записать();
  13. TopicStarter Overlay
    Asaena
    Offline

    Asaena

    Регистрация:
    30 ноя 2009
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    прочитал в синтакс-помощнике, что менеджерзаписи
    а у меня используется регистратор - документ Медосмотры.
  14. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    Ттак если у тебя подчинен регистратору то тоже почти тоже самое только в модуле документа

    Процедура ОбработкаПроведения()

    //
    Движение= Движения.Сведения_о_медосмотрах.Добавить();
    Движение.Инвалид = СсылкаНаИнвалида ;// Которая в карточке
    Движение.Дата = Дата;
    Движение.Общее_заключение = Общее_заключение;
  15. TopicStarter Overlay
    Asaena
    Offline

    Asaena

    Регистрация:
    30 ноя 2009
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    Сделал этим способом (с движениями что-то вообще никак =(), но выводит в табличную часть все записи регистра. Как сделать чтобы выводил только записи инвалида, которому принадлежит карточка ? Связь по владельцу указал по наименованию... :unsure:
  16. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    В процедуре ПриОткрытии вставь:
    Код:
    СрокиПоставки.Отбор.Инвалид .Значение = Ссылка;
    СрокиПоставки.Отбор.Инвалид .Использование = Истина;
    
    
    
    СрокиПоставки - это идентификатор табличного поля
  17. TopicStarter Overlay
    Asaena
    Offline

    Asaena

    Регистрация:
    30 ноя 2009
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    Спасибо !
  18. TopicStarter Overlay
    Asaena
    Offline

    Asaena

    Регистрация:
    30 ноя 2009
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте еще раз ! Помогите, пожалуйста, сделать, чтобы при запуске 1С Предприятие выводилось сообщение о медосмотрах на эту неделю, т.е. на предстоящие 7 дней. Вот что написал
    Код:
    Процедура ПриНачалеРаботыСистемы();
    НаборЗаписей = РегистрыСведений.Сведения_о_медосмотрах.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Регистратор.Установить("Медосмотр");
    НаборЗаписей.Прочитать();
    Для каждого Запись из НаборЗаписей Цикл
    Если Запись.Дата_след - ТекущаяДата() < 7 тогда
    Сообщить (Строка(Запись.Дата_след) + " ");
    КонецЕсли
    КонецЦикла;
    КонецПроцедуры 
    
    
  19. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Для этого проще запрос написать.
    Да и эта строка смущает:
    Код:
    НаборЗаписей.Отбор.Регистратор.Установить("Медосмотр");
    
    Что она делает по Вашему?
  20. TopicStarter Overlay
    Asaena
    Offline

    Asaena

    Регистрация:
    30 ноя 2009
    Сообщения:
    26
    Симпатии:
    0
    Баллы:
    1
    Честно - не знаю. Так было написано в книге "Простые примеры разработки", в вопросе про то как считать записи из регистра сведений.

    Вот, написал запрос, но он не работет :) ругается на вычитание дат...
    Код:
    Процедура ПриНачалеРаботыСистемы();
    Тек_дата = ТекущаяДата(); 
    
    Форма1=ПолучитьОбщуюФорму("Общая"); 
    Форма1.Открыть();
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |	Дата_след
    |ИЗ
    |	РегистрСведений.Сведения_о_медосмотрах КАК Сведения_о_медосмотрах
    |
    |ГДЕ
    |	(Дата_след - &Элем) < 7 
    |СГРУППИРОВАТЬ ПО
    |	Дата_след";
    
    Запрос.УстановитьПараметр("Элем", Тек_дата);
    
    Результат = Запрос.Выполнить();
    Сообщить(Результат + " ");
    КонецПроцедуры       
    
    

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