Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 15:25

Ссылка на документ из таблицы значений

Автор v.kh, 06 апр 2015, 08:26

0 Пользователей и 1 гость просматривают эту тему.

v.kh

Здравствуйте, вопрос, наверное, будет совсем простой, но я только начинаю изучать 1С и с данным вопросом возникли трудности. В 1С 8.3 имеется таблица значений на форме внешней обработки. Тип ячейки таблицы первой колонки - ссылка на документ. Пользователь выбирает документ и он отображается в ячейке. Мне нужно из этой ячейки получить тип документа, выбранный пользователем, номер документа и дату документа. Подскажите пожалуйста как мне получить эти данные. Спасибо.

LexaK

на клиенте (тонком), свойства объекта, недоступны через точку, но их можно получить с сервера с помощью функции, вот простой вариант (пример с номенклатурой, легко заменить на ваш документ)


&НаКлиенте
Процедура ПереченьНоменклатурыПриАктивизацииСтроки(Элемент)
лкТов = Элементы.ПереченьНоменклатуры.ТекущиеДанные.Номенклатура;
//получаем с сервера ПРОСТЫЕ (дата, строка, число, ссылка, ...) свойства из ссылки на объект
лкСвт = ПолучитьСвойства(лкТов,"Код,Наименование");
Сообщить("" + ТипЗнч(лкТов) + ", " + лкСвт.Код + ", " + лкСвт.Наименование);
КонецПроцедуры

&НаСервере
Функция ПолучитьСвойства(лкСсылка,лкПоля)
лкСвойства = Новый Структура(лкПоля);
ЗаполнитьЗначенияСвойств(лкСвойства,лкСсылка);
возврат лкСвойства;
КонецФункции



если объекты большие, оптимальнее, для получения только нужных свойств использовать запрос,
но это наверно пока еще очень сложно для вас.
если помогло нажмите: Спасибо!

vitasw

Цитата: LexaK от 06 апр 2015, 09:45лкСвт = ПолучитьСвойства(лкТов,"Код,Наименование");

Оригинально. очередной раз убеждаюсь в универсальности ЗаполнитьЗначенияСвойств

v.kh

Цитата: LexaK от 06 апр 2015, 09:45
на клиенте (тонком), свойства объекта, недоступны через точку, но их можно получить с сервера с помощью функции, вот простой вариант (пример с номенклатурой, легко заменить на ваш документ)


&НаКлиенте
Процедура ПереченьНоменклатурыПриАктивизацииСтроки(Элемент)
лкТов = Элементы.ПереченьНоменклатуры.ТекущиеДанные.Номенклатура;
//получаем с сервера ПРОСТЫЕ (дата, строка, число, ссылка, ...) свойства из ссылки на объект
лкСвт = ПолучитьСвойства(лкТов,"Код,Наименование");
Сообщить("" + ТипЗнч(лкТов) + ", " + лкСвт.Код + ", " + лкСвт.Наименование);
КонецПроцедуры

&НаСервере
Функция ПолучитьСвойства(лкСсылка,лкПоля)
лкСвойства = Новый Структура(лкПоля);
ЗаполнитьЗначенияСвойств(лкСвойства,лкСсылка);
возврат лкСвойства;
КонецФункции



если объекты большие, оптимальнее, для получения только нужных свойств использовать запрос,
но это наверно пока еще очень сложно для вас.

Спасибо большое за помощь, все получилось, получила все нужные данные.
Добавлено: 06 апр 2015, 12:00


Подскажите пожалуйста еще как сделать так, чтобы прикреплялось значение типа документа, к примеру:
Я получила тип документа: НазваниеДокумента = ТипЗнч(лкТов);
Теперь мне нужно к нему обратиться на сервере ДокТип = Документы.НазваниеДокумента;
И вот именно здесь мне пишет 1С, что поле НазваниеДокумента на существует... Как правильно это сделать, чтобы это все соединялось вместе?

   

Dethmontt

Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

vitasw

Ну обратитесь вы к нему, а дальше что? контекст обращения непонятен.

LexaK

Цитировать
Подскажите пожалуйста еще как сделать так, чтобы прикреплялось значение типа документа, к примеру:
Я получила тип документа: НазваниеДокумента = ТипЗнч(лкТов);
Теперь мне нужно к нему обратиться на сервере ДокТип = Документы.НазваниеДокумента;
И вот именно здесь мне пишет 1С, что поле НазваниеДокумента на существует... Как правильно это сделать, чтобы это все соединялось вместе?

Давайте начнем с начала! У вас вообще какая задача, что вы хотите сделать с/из Ссылки документа?
Сама ссылка уже содержит в себе Тип документа, Номер и Дата!

пример:
Сборка компьютера 000000003 от 11.01.2012 22:20:17
где
Сборка компьютера - Тип документа (синоним)
000000003 - Номер
11.01.2012 22:20:17 - Дата

чего с чем и для чего вы хотите соединить?
пример нарисуйте!
если помогло нажмите: Спасибо!

v.kh

Цитата: LexaK от 06 апр 2015, 13:41
Цитировать
Подскажите пожалуйста еще как сделать так, чтобы прикреплялось значение типа документа, к примеру:
Я получила тип документа: НазваниеДокумента = ТипЗнч(лкТов);
Теперь мне нужно к нему обратиться на сервере ДокТип = Документы.НазваниеДокумента;
И вот именно здесь мне пишет 1С, что поле НазваниеДокумента на существует... Как правильно это сделать, чтобы это все соединялось вместе?

Давайте начнем с начала! У вас вообще какая задача, что вы хотите сделать с/из Ссылки документа?
Сама ссылка уже содержит в себе Тип документа, Номер и Дата!

пример:
Сборка компьютера 000000003 от 11.01.2012 22:20:17
где
Сборка компьютера - Тип документа (синоним)
000000003 - Номер
11.01.2012 22:20:17 - Дата

чего с чем и для чего вы хотите соединить?
пример нарисуйте!

Моя задача заключается в создании внешней обработки для рассылки электронных писем из 1С 8.3. Документ, который хочет отправить пользователь по электронной почте прикрепляется в данную таблицу значений. В обработке мне необходимо получить информацию о том, какой именно документ указал пользователь, далее я формирую данный документ в табличный документ (беру макет документа и заполняю данными, как на печать), записываю его в формате, указанном пользователем (pdf или ексель) и отправляю адресату.
Во внешней обработке у меня есть процедура записи в ексель, туда я должна передать данные о документе (тип документа, дата и номер), выбранном пользователе, сформировать этот документ и сохранить в ексель, ну и далее отправить. Вот сама процедура:
&НаСервере
Процедура ЭкспортВЭксельНаСервере(Путь,дата, номер, тип)
         
   ПутьКФайлу = Путь;
      
   ДокТип = Документы.тип;      
   НомерДокумента = номер;
        ДатаДокумента = дата;   
   ДокСсылка = ДокТип.НайтиПоНомеру(НомерДокумента,ДатаДокумента).Ссылка;
   Док = ДокСсылка.ПолучитьОбъект();
   ДокТЧ = Док.ТЧ;
      
   Макет = Обработки.РассылкаЭлектронныхДокументов.ПолучитьМакет("МакетУчебныйПланДФО");
   
    //заголовок
   ОблЗаголовок = Макет.ПолучитьОбласть("Заголовок");
   ТаблицаСохранение.Вывести(ОблЗаголовок);

   //шапка
   ОблШапка = Макет.ПолучитьОбласть("Шапка");
   ОблШапка.Параметры.Заполнить(Док);
   ТаблицаСохранение.Вывести(ОблШапка);

   //шапка табличной части
   ОблТЧШапка = Макет.ПолучитьОбласть("ТЧШапка");
   ТаблицаСохранение.Вывести(ОблТЧШапка);

   //табличная часть
   ОблТЧ = Макет.ПолучитьОбласть("ТЧ");
   Для Каждого ТекСтрока из ДокТЧ Цикл
   ОблТЧ.Параметры.Заполнить(ТекСтрока);
   ТаблицаСохранение.Вывести(ОблТЧ);
   КонецЦикла;

   //подвал
   ОблПодвал = Макет.ПолучитьОбласть("Подвал");
   ОблПодвал.Параметры.Заполнить(Док);
   ТаблицаСохранение.Вывести(ОблПодвал);
   
   
   ТаблицаСохранение.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX);
КонецПроцедуры

Номер и дату я получила так как вы мне писали выше, вот как теперь увязать имя документа, именно указанного пользователем через точку с объектом Документы, я что-то не допонимаю... Мне получается нужен не синоним документа, а имя его, как оно указано... А еще тоже самое, передаю Путь в процедуру, к примеру, название документа и как сделать чтобы было "D://"+путь+".xlsx", где Путь какая-то строка, к примеру название документа... Может быть это все и просто, но я запуталась...

vitasw

Ужос. Стратегия выполнения задания - правильная. А вот тактика конкретного исполнения - отвратительная. У вас изначально таблица заполнена ссылками на документ - так печатайте себе из ссылок.

v.kh

Цитата: vitasw от 06 апр 2015, 15:56
Ужос. Стратегия выполнения задания - правильная. А вот тактика конкретного исполнения - отвратительная. У вас изначально таблица заполнена ссылками на документ - так печатайте себе из ссылок.

Может быть тактика исполнения у меня и отвратительная, но я же только учусь. Это мое первое задание в 1С, поэтому и обращаюсь за помощью...

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск