logist @ Сегодня, 21:16
, Вот теперь понимаю, что Вы меня неправильно поняли... Речь идет не о реквизите документа РеализацияТоваровУслуг. А именно о Реквизите "Родительского" Документа ЗаказПокупателя:
logist @ Сегодня, 19:44
, Я новичок. Правильно я понимаю - реквизит списка - это реквизит документа? Если да, то так-то работает... Если нет, подскажите, как его создать?
В Документа ЗаказПокупателя создан дополнительный реквизит ЭтапыПродажи. Выведен в колонку отдельно созданную ФормыСписка ЗаказаПокупателя, где по значению данного реквизита произведен отбор:
Vzonder @ Сегодня, 20:03
, Разобрался как менять цвет в колонке.
В табличном поле включаю процедуру СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
В ней:
Если ДанныеСтроки.Ссылка.ДокументГотов = Истина Тогда ОформлениеСтроки.Ячейки.ДокументГотов.ЦветФона = Новый Цвет(255, 78, 170); Иначе ОформлениеСтроки.Ячейки.ДокументГотов.ЦветФона = Новый Цвет(65, 238, 255);
Хочется вывести картинку в ячейку строки ФормыСписка Документа, которая при изменения значения в реквизите, будет меняться на другую или третью.. Но пока и одну вывести не могу.
В процедуру СписокПриПолученииДанных(Элемент, ОформленияСтрок) присал следующий код:
Для Каждого ОформлениеСтроки ИЗ ОформленияСтрок Цикл
Копии = ""; ЭтоДокумент = ЗначениеЗаполнено(Объект) И Метаданные.Документы.Содержит(Объект.Метаданные()); Если ЭтоДокумент И ОбщегоНазначения.ЕстьРеквизитДокумента("Организация", Объект.Метаданные()) Тогда Копии = УправлениеЭлектроннойПочтой.ОпределитьАдресПолучателя(Объект.Организация);
КонецЕсли;
И соответственно:
спКипии = Новый СписокЗначений; спКипии.Добавить(Копии, "Обязательная Копия обратно!!!");
СтруктураНовогоПисьма.Вставить("Копии", спКипии);
Все работает великолепно, и тут выясняется, что счета, из ЗаказПокупателя - прекрасно проставляет А Торг12 из РеализацияТоваровУслуг - нет ((((
Все отлично заработало!!! УРА. Простите меня за тупость. Я новичок нулевого уровня... Конфигуратор открыл впервые в конце декабря. Пришлось, кризис и сокращения и вот я поневоле. пытаюсь облегчить жизнь сотрудникам в отделе...
{ОбщаяФорма.ПечатьДокументов.Форма(120,17)}: Процедура или функция с указанным именем не определена (ОпределитьАдресПолучателя) Адрес = <<?>>ОпределитьАдресПолучателя(Объект.Контрагент); (Проверка: Толстый клиент (обычное приложение))
Насколько я могу понимать, наименование контрагента имеется в табличной части, в представлении. Возможно его от туда вытащить? В макете он выражен так: <ТекстПокупатель> <ПредставлениеПолучателя> На всякий - прилагаю весть код:
/////////////////////////////////////////////////////////////////////////////// // ПЕРЕМЕННЫЕ МОДУЛЯ Перем Объект Экспорт; // Объект, который печатается Перем ОбъектПредставление Экспорт; // Представление объекта. Используется для формирования заголовка, имен сохраняемых файлов и т.п. Если не задано, то будет построено по "Объект" Перем ДополнительноКПредставлению Экспорт; // Строка, которая будет выведена дополнительно в конец заголовка формы Перем Принтеры; // Список установленных в системе принтеров Перем ИмяТекПринтера; // Имя принтера (как оно установлено в системе) на который будет осуществляться вывод
//////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ
Функция ПолучитьПредставление(Объект)
//+CRM Если Объект = Неопределено Тогда Возврат ""; КонецЕсли; //-CRM
// Определим тип переданного нам объекта (для всех "объектов" получим ссылки на них) Попытка ТипЗнчОбъекта = ТипЗнч(Объект.Ссылка); Исключение ТипЗнчОбъекта = ТипЗнч(Объект); КонецПопытки;
// Определим представление в зависмоти от типа переданного нам объекта Представление = ""; Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнчОбъекта) Тогда Представление = дкПолучитьПредставление(Объект); ИначеЕсли Справочники.ТипВсеСсылки().СодержитТип(ТипЗнчОбъекта) Тогда Представление = Объект.Метаданные().Синоним; КонецЕсли;
Возврат Представление; КонецФункции
// Приводит произвольную строку к идентификатору, который затем можно использовать как ключ структуры // Преобразование выполняется разрушающим способом (обратное преобразование невозможно) Функция обСтрокуКID(Стр) Экспорт Ст=обСтрокаПоМаске(Стр,"_0123456789 |ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz |АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯабвгдеёжзийклмнопрстуфхцчшщьыъэюя"); Возврат ?(Найти("0123456789",Лев(Ст,1))>0,"_"+Ст,Ст); КонецФункции // обСтрокуКID()
// Функция возвращает строку символов, полученную из исходной <Стр> GOAN // заменой всех символов, не входящих в <Маска> на символ <Симв> Функция обСтрокаПоМаске(Стр,Маска="",Симв="") Экспорт Ст=""; Если ПустаяСтрока(Маска) Тогда Возврат Ст; КонецЕсли; Для Сч=1 По СтрДлина(Стр) Цикл Сим=Сред(Стр,Сч,1); Если Найти(Маска,Сим)>0 Тогда Ст=Ст+Сим; Иначе Ст=Ст+Симв; КонецЕсли; КонецЦикла; Возврат Ст; КонецФункции // обСтрокаПоМаске
// Возвращает представление для документа // Параметры // ЭтотОбъект - <ДокументСсылка> или <ДокументОбъект> // АльтернативноеНазвание - Строка, используется, если хотим заменить синоним документа // Возвращаемое значение: // Строка - Строка представления документа Функция дкПолучитьПредставление(ЭтотОбъект, АльтернативноеНазвание = "") Экспорт Попытка ТекстПредставления=?(ПустаяСтрока(АльтернативноеНазвание), ЭтотОбъект.Метаданные().Синоним, АльтернативноеНазвание)+" № "+СокрЛП(ЭтотОбъект.Номер)+" от "+Формат(ЭтотОбъект.Дата,"ДФ=dd.MM.yyyy"); Исключение ТекстПредставления="Неправильный тип объекта!"; КонецПопытки; Возврат ТекстПредставления; КонецФункции // ПолучитьПредставление()
//////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ - ДЕЙСТВИЯ КОМАНДНЫХ ПАНЕЛЕЙ ФОРМЫ
// Процедура отправляет отчет по электронной почте в виде табличного документа mxl Процедура ДействияФормыОтправитьПоEmail(Кнопка) РасширениеФайла = ""; ТипПересылаемогоФайла = Неопределено; Если Кнопка.Имя = "ОтправитьКакMXL" Тогда ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.MXL; РасширениеФайла = ".mxl"; ИначеЕсли Кнопка.Имя = "ОтправитьКакHTML" Тогда ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.HTML; РасширениеФайла = ".html"; ИначеЕсли Кнопка.Имя = "ОтправитьКакXLS" Тогда ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.XLS97; РасширениеФайла = ".xls"; ИначеЕсли Кнопка.Имя = "ОтправитьКакPDF" Тогда ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.PDF; РасширениеФайла = ".pdf"; Иначе Возврат; КонецЕсли; НаименованиеПечатнойФормы = СтрЗаменить(ОбъектПредставление,".","_");
// сохраним ПФ во временный каталог ИмяФайлаСообщения = КаталогВременныхФайлов() + НаименованиеПечатнойФормы + РасширениеФайла; Если ТипЗнч(ТипПересылаемогоФайла) = Тип("ТипФайлаТабличногоДокумента") Тогда ЭлементыФормы.ТабличныйДокумент.Записать(ИмяФайлаСообщения, ТипПересылаемогоФайла); КонецЕсли; // //+CRM Если НЕ Константы.ИспользованиеВстроенногоПочтовогоКлиента.Получить() Тогда
СтруктураПараметров = Новый Структура(); СтруктураПараметров.Вставить("Тема", НаименованиеПечатнойФормы);
СтруктураНовогоПисьма = Новый Структура(); СтруктураНовогоПисьма.Вставить("Тема",НаименованиеПечатнойФормы);
СтруктураПисьма = УправлениеЭлектроннойПочтой.НаписатьПисьмо(глЗначениеПеременной("глТекущийПользователь"), СтруктураНовогоПисьма,,,,,,); Если СтруктураПисьма = Неопределено Тогда Возврат КонецЕсли; ВложенияПисьмаТЗ = СтруктураПисьма.Форма.ВложенияПисьмаТЗ.Добавить(); Файл = Новый Файл(ИмяФайлаСообщения); ВложенияПисьмаТЗ.ИмяФайла = Файл.Имя; ВложенияПисьмаТЗ.Наименование = ОбъектПредставление; Попытка ВложенияПисьмаТЗ.Данные = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ИмяФайлаСообщения), Новый СжатиеДанных); Исключение ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки()); КонецПопытки; УдалитьФайлы(ИмяФайлаСообщения); КонецЕсли; //-CRM
КонецПроцедуры // ДействияФормыОтправитьПоEmail()
// Процедура сохраняет табличный документ в формате MXL под введенным пользователем именем файла Процедура ДействияФормыСохранитьКакMXL(Кнопка)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); Диалог.Заголовок = "Сохранение табличного документа"; Диалог.Фильтр = "Табличный документ (*.mxl)|*.mxl"; Диалог.Расширение = "mxl"; Диалог.ПолноеИмяФайла = СтрЗаменить(ОбъектПредставление,".","_"); Диалог.Каталог = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"),"ОсновнойКаталогФайлов"); Если Диалог.Выбрать() Тогда Если НЕ ПустаяСтрока(Диалог.ПолноеИмяФайла) Тогда ЭлементыФормы.ТабличныйДокумент.Записать(Диалог.ПолноеИмяФайла, ТипФайлаТабличногоДокумента.MXL); КонецЕсли; КонецЕсли;
КонецПроцедуры
// Процедура сохраняет табличный документ в формате HTML под введенным пользователем именем файла Процедура ДействияФормыСохранитьКакHTML(Кнопка)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); Диалог.Заголовок = "Сохранение веб-страницы"; Диалог.Фильтр = "Веб-страница (*.html)|*.html"; Диалог.Расширение = "html"; Диалог.ПолноеИмяФайла = СтрЗаменить(ОбъектПредставление,".","_"); Диалог.Каталог = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"),"ОсновнойКаталогФайлов"); Если Диалог.Выбрать() Тогда Если НЕ ПустаяСтрока(Диалог.ПолноеИмяФайла) Тогда ЭлементыФормы.ТабличныйДокумент.Записать(Диалог.ПолноеИмяФайла, ТипФайлаТабличногоДокумента.HTML); КонецЕсли; КонецЕсли;
КонецПроцедуры // ДействияФормыСохранитьКакHTML()
Процедура ДействияФормыСохранитьКакXLS(Кнопка)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); Диалог.Заголовок = "Сохранение документа Excel"; Диалог.Фильтр = "Документ Excel (*.xls)|*.xls"; Диалог.Расширение = "xls"; Диалог.ПолноеИмяФайла = СтрЗаменить(ОбъектПредставление,".","_"); Диалог.Каталог = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"),"ОсновнойКаталогФайлов"); Если Диалог.Выбрать() Тогда Если НЕ ПустаяСтрока(Диалог.ПолноеИмяФайла) Тогда ЭлементыФормы.ТабличныйДокумент.Записать(Диалог.ПолноеИмяФайла, ТипФайлаТабличногоДокумента.XLS97); КонецЕсли; КонецЕсли;
КонецПроцедуры
// Процедура сохраняет табличный документ в формате PDF под введенным пользователем именем файла Процедура ДействияФормыСохранитьКакPDF(Кнопка)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); Диалог.Заголовок = "Сохранение документа PDF"; Диалог.Фильтр = "Документ PDF (*.pdf)|*.pdf"; Диалог.Расширение = "pdf"; Диалог.ПолноеИмяФайла = СтрЗаменить(ОбъектПредставление,".","_"); Диалог.Каталог = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"),"ОсновнойКаталогФайлов"); Если Диалог.Выбрать() Тогда Если НЕ ПустаяСтрока(Диалог.ПолноеИмяФайла) Тогда ЭлементыФормы.ТабличныйДокумент.Записать(Диалог.ПолноеИмяФайла, ТипФайлаТабличногоДокумента.PDF); КонецЕсли; КонецЕсли; КонецПроцедуры
// Процедура печатает табличный документ на выбраном принтере Процедура ОсновныеДействияФормыПечать(Кнопка) ЭлементыФормы.ТабличныйДокумент.ИмяПринтера = ИмяТекПринтера; ЭкземпляровНаСтранице=0;//обПраво("КоличествоСтраницНаЛисте",глПрава); Если ЭкземпляровНаСтранице<>0 И ЭкземпляровНаСтранице<>1 И ЭкземпляровНаСтранице<>2 Тогда ЭкземпляровНаСтранице=0; КонецЕсли; ЭлементыФормы.ТабличныйДокумент.ЭкземпляровНаСтранице=ЭкземпляровНаСтранице; ЭлементыФормы.ТабличныйДокумент.Напечатать(НЕ ПустаяСтрока(ИмяТекПринтера)); ЧислоКопий = ЭлементыФормы.ТабличныйДокумент.КоличествоЭкземпляров; КонецПроцедуры
// Получает список принтеров установленных в системе и предлагает пользователю // выбрать принтер для печати Процедура ОсновныеДействияФормыСписокПринтеров(Кнопка) // Посмотрим был ли ранее составлен список принтеров, которые установлены в системе, если нет, тогда попытаемся получить его Если ТипЗнч(Принтеры) <> Тип("СписокЗначений") Тогда Принтеры = Новый СписокЗначений; Состояние("Составляется список принтеров. Подождите."); Попытка Locator = Новый COMОбъект("WbemScripting.SWbemLocator"); Сервисы = Locator.ConnectServer("."); Объекты = Сервисы.InstancesOf("Win32_Printer");
// Теперь переберем все принтеры системы Для каждого Принтер из Объекты Цикл ИмяПринтера = Принтер.Name; Пока Найти(ИмяПринтера,"\") > 0 Цикл ИмяПринтера = Сред(ИмяПринтера, Найти(ИмяПринтера,"\")+1); КонецЦикла; ИмяПринтера = СокрЛП(ИмяПринтера);
// Предложим пользователю выбрать один из принтеров Результат = ВыбратьИзМеню(Принтеры,ЭлементыФормы.кнВспомогательная); Если Результат = Неопределено Тогда Возврат; КонецЕсли;
// Установим пометку у "текушего" принтера в списке Принтеры.ЗаполнитьПометки(ЛОЖЬ); Результат.Пометка = ИСТИНА;
// Обработаем результат выбора ИмяТекПринтера = ?(Результат.Значение = "ДиалогВыбораПринтера","",Результат.Значение); ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Печать.Текст = "Печать"+?(ПустаяСтрока(ИмяТекПринтера),""," на <"+Результат.Представление+">");
// Произведем эмуляцию нажатия клавишь. По ходу дела это единственный способ открыть окно просмотра печати WHSShell = Новый COMОбъект("WScript.Shell"); WHSShell.SendKeys("%"); WHSShell.SendKeys("~"); WHSShell.SendKeys("{DOWN 10}"); WHSShell.SendKeys("~"); КонецПроцедуры
//////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ, ВЫЗЫВАЕМЫЕ ИЗ ЭЛЕМЕНТОВ ФОРМЫ
// "Вспомним" о том, на каком принтере в последний раз печатали ИмяТекПринтера = ЭлементыФормы.ТабличныйДокумент.ИмяПринтера; ПредставлениеТекПринтера = ИмяТекПринтера; Пока Найти(ПредставлениеТекПринтера,"\") > 0 Цикл ПредставлениеТекПринтера = Сред(ПредставлениеТекПринтера, Найти(ПредставлениеТекПринтера,"\")+1); КонецЦикла; ПредставлениеТекПринтера = СокрЛП(ПредставлениеТекПринтера);
// Допишем имя текущего принтера к кнопке "Печать" и подготовим вспомогательную кнопку ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Печать.Текст = "Печать" + ?(ПустаяСтрока(ИмяТекПринтера),""," на <"+ПредставлениеТекПринтера+">"); ЭлементыФормы.кнВспомогательная.Заголовок = ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Печать.Текст; ЭлементыФормы.кнВспомогательная.Лево = ЭлементыФормы.кнВспомогательная.Лево - 1; // необходимо чтобы установилать "автоширина" кнопки ЭлементыФормы.кнВспомогательная.Лево = ЭлементыФормы.кнВспомогательная.Лево + 1 - (ЭлементыФормы.кнВспомогательная.Ширина - 46) + 1;
// Если табличный документ в режиме "Только просмотр", то сделаем серыми несколько кнопок ДоступностьКнопок = НЕ ЭлементыФормы.ТабличныйДокумент.ТолькоПросмотр; // ЭлементыФормы.ДействияФормы.Кнопки.ОткрытьВExcel .Доступность = ДоступностьКнопок; ЭлементыФормы.ДействияФормы.Кнопки.СохранитьКакMXL .Доступность = ДоступностьКнопок; ЭлементыФормы.ДействияФормы.Кнопки.СохранитьКакHTML.Доступность = ДоступностьКнопок; Для каждого ТекКнопка Из ЭлементыФормы.ДействияФормы.Кнопки.ОтправитьПоEmail.Кнопки Цикл ТекКнопка.Доступность = ДоступностьКнопок; КонецЦикла; КонецПроцедуры
Если отправлять письмо из ФормыЭлемена Контрагента, то все отлично. В Кому вписывается адрес из представления Адрес электронной почты контрагента для обмена электронными документами. Причем отлично работает как на встроенном клиенте, так и на внешнем (outlook) Если нужно отправить письмо из документа, то тут проблема. Пустое поля. Прошарил инет: есть способ, который подходит для УП 10.3, но не подходит для нас, т.к у нас своя форма печати, в ней процедура:
Процедура ДействияФормыОтправитьПоEmail(Кнопка) РасширениеФайла = ""; ТипПересылаемогоФайла = Неопределено; Если Кнопка.Имя = "ОтправитьКакMXL" Тогда ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.MXL; РасширениеФайла = ".mxl"; ИначеЕсли Кнопка.Имя = "ОтправитьКакHTML" Тогда ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.HTML; РасширениеФайла = ".html"; ИначеЕсли Кнопка.Имя = "ОтправитьКакXLS" Тогда ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.XLS97; РасширениеФайла = ".xls"; ИначеЕсли Кнопка.Имя = "ОтправитьКакPDF" Тогда ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.PDF; РасширениеФайла = ".pdf"; Иначе Возврат; КонецЕсли;
НаименованиеПечатнойФормы = СтрЗаменить(ОбъектПредставление,".","_"); // сохраним ПФ во временный каталог ИмяФайлаСообщения = КаталогВременныхФайлов() + НаименованиеПечатнойФормы + РасширениеФайла; Если ТипЗнч(ТипПересылаемогоФайла) = Тип("ТипФайлаТабличногоДокумента") Тогда ЭлементыФормы.ТабличныйДокумент.Записать(ИмяФайлаСообщения, ТипПересылаемогоФайла); КонецЕсли;
Если НЕ Константы.ИспользованиеВстроенногоПочтовогоКлиента.Получить() Тогда СтруктураПараметров = Новый Структура(); СтруктураПараметров.Вставить("Тема", НаименованиеПечатнойФормы); УправлениеЭлектроннойПочтой.ОткрытьПисьмоПочтовогоКлиентаОперационнойСистемы(СтруктураПараметров); Иначе СтруктураНовогоПисьма = Новый Структура(); СтруктураНовогоПисьма.Вставить("Тема",НаименованиеПечатнойФормы); СтруктураПисьма = УправлениеЭлектроннойПочтой.НаписатьПисьмо(глЗначениеПеременной("глТекущийПользователь"), СтруктураНовогоПисьма,,,,,,); Если СтруктураПисьма = Неопределено Тогда Возврат КонецЕсли; ВложенияПисьмаТЗ = СтруктураПисьма.Форма.ВложенияПисьмаТЗ.Добавить(); Файл = Новый Файл(ИмяФайлаСообщения); ВложенияПисьмаТЗ.ИмяФайла = Файл.Имя; ВложенияПисьмаТЗ.Наименование = ОбъектПредставление; Попытка ВложенияПисьмаТЗ.Данные = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ИмяФайлаСообщения), Новый СжатиеДанных); Исключение ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки()); КонецПопытки; УдалитьФайлы(ИмяФайлаСообщения); КонецЕсли; КонецПроцедуры // ДействияФормыОтправитьПоEmail()
Все великолепно работает, кроме вышеописанной проблемки.
Поковыряв, своими неопытными рученками нашел где формируется адрес:
Общий модуль УправлениеЭлектроннойПочтой:
// Функция определяет адрес электронной почты объекта // // Параметры // Объект - СправочникСсылка, для которого необходимо определить адрес электронной почты // Функция ОпределитьАдресПолучателя(Объект) Экспорт
Адрес = ""; ТаблицаЗапроса = Запрос.Выполнить().Выгрузить(); ТаблицаЗапроса.Индексы.Добавить("ЗначениеПоУмолчанию"); Если ТаблицаЗапроса.Количество() > 0 Тогда СтрокаПоУмолчанию = ТаблицаЗапроса.Найти(Истина, "ЗначениеПоУмолчанию"); Если СтрокаПоУмолчанию <> Неопределено Тогда Адрес = СтрокаПоУмолчанию.Представление; Иначе Адрес = ТаблицаЗапроса[0].Представление; КонецЕсли; КонецЕсли;
Возврат Адрес;
КонецФункции
Пожалуйста, помогите, изменить запрос так, чтобы вписывался адрес электронки текущего Контрагента из заказа покупателя. И если возможно, и из РеализацииТоваровУслуг. А если возможно, то Ваще из любого документа имеющего Контрагента.
Есть необходимость записывать 2 (возможно более) реквизита в один.
Предположим есть Реквизит1 он отражается в ПолеРеквизита1 и Реквизит2 который в ПолеРеквизита2. По аналогии ФормаЭлемента Справочника КонтактныеЛица сделал Представление. Только оно работает, лишь, когда вносишь значения вручную. К каждому полю прикручивается процедура ПриИзменении… Но, дело в том, что реквизиты Реквизит1 и Реквизит2 изменяются в других справочниках. Заходя в форму справочника представление не обновляется…
Научите, пожалуйста, как сделать свое представление. Весь инет облазил, не нашел.
РеализацияОбъект = Документы.РеализацияТоваровУслуг.НайтиПоНомеру(НомерДок, ДатаРеализ); Если НЕ РеализацияОбъект.Пустая() Тогда РеализацияОбъект.ПолучитьОбъект().ПолучитьФорму("ФормаДокумента_AnytosЛогистикаПечать").Открыть();
КонецЕсли;
КонецПроцедуры
Посмотрите, пожалуйста, учитывая мой нулевой уровень, предполагаю, что мог криво написать.
Идея такая, если в полях корректно отражается номер реализации, то нажатием кнопки, вызывается форма документа РеализацияТоваровУслуг ФормаДокумента_AnytosЛогистикаПечат (специально облегченныя). В форме ФормаДокумента_AnytosЛогистикаПечать в процедуре ПриОткрытии
Дата = ТекущаяДата(); Записать(); УниверсальныеМеханизмы.ОткрытьФормуВыбораПечатныхФормОбъекта(ЭтотОбъект, ЭтаФорма); Закрыть();
Т.е. меняется Дата реализации на текущую и Выводится форма выбора печатных форм.
1С 8.2 УТ 10.3 Имеется форма документа (ЗаказПокупателя) В нее необходимо вывести Номер и дату реализации ( в поле ПолеРеализацияТоваровУслуг и ПолеДатаРеализации соответственно).
Не нашел реквизитов Номер и Дата у документа реализация, поэтому решил выводить запросом. Например запрос Номера:
Процедура ОтборРеализация()
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РеализацияТоваровУслуг.Номер |ИЗ | Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг |ГДЕ | РеализацияТоваровУслуг.Номер = &Номер";
1С 8.2 УТ 10.3 На примере справочника станций метро Москвы. Имеется справочник Метро. В нем 2 реквизита: Станция и Ветка.
Если на форму документа (например, Заказ покупателя) выводить поле с одним реквизитом, то проблем не возникает. А как вывести два реквизита справочника из одной записи. Т.е. на форму документа выводится два поля, в одном отражается Станция, во втором Ветка (именно та, что была присвоена Станции в справочнике Метро) ?
Хочется сделать справочник, с перечислением Станций и Веток Московского Метрополитена. Реализовано по аналогии справочника КонтактныеЛицаКонтрагентов
В форме справочника два поля (с выпадающим списком) с реквизитами (Станция и Ветка) и представление в котором эти реквизиты записываются через пробел.
Все замечательно, вот только длиннннновато получается: Нахимовский проспект Серпуховско-Тимирязевская )))))
Подскажите, как можно (наиболее просто) реализовать запись Линии (ветки) другим способом? Например: Цвет текста ветки (вместо название ветки вносится символ “-” с соответствующим цветом) Цветом текста в названии станции Картинка – в поле ветка выбирается маленькая картинка (квадратик нужного цвета, соответствующего ветке), который в свою очередь отражается в представлении через пробел рядом со станцией. Цвет поля представления. Иное
Любой способ передачи цвета, который можно записать в реквизит представления, который в свою очередь можно будет использовать для отражения на формах, формах списка и табличных полях.
Создал в форме Справочника Контрагента табличное поле, по абсолютной аналогии с ВидыДеятельности, с соответствующем набором реквизитов, Табличной частью и реквизитами.
Поэтому, чтобы не городить огород, на примере ВидыДеятельности и задам вопрос:
На форме создал поле ввода: ПолеОсновнойВидДеятельности, подключил реквизит ОсновнойВидДеятельности, и включил кнопку выбора.
Теперь в ПолеОсновнойВидДеятельности можно выбирать элементы из СправочникСсылка.ВидыДеятельностиКонтрагентов.
При этом в Табличном поле ВидыДеятельности в имеющихся строках выбирается основной вид деятельности (подсвечивая шрифт жирным) в уже добавленных.
Возникла необходимость добавлять элементы (подобно действию кнопки добавить), путем выбора значения в ПолеОсновнойВидДеятельности. Т.е. при отсутствии элемента, он автоматически добавляется в табличное поле ВидыДеятельности.
Понимаю, что в процедуре Процедура ПолеОсновнойВидДеятельности ПриИзменении(Элемент) необходимо задать запрос, который сравнит содержимое и если в списке строк не найдет элемент, то его добавит.
И тут у меня полный тупняк. Вот какая…. Получается:
Если РезультатЗапроса.Пустой() Тогда Предупреждение(" не найден!!!!");
Иначе Предупреждение("ОК!");
ЭлементыФормы.ВидыДеятельности.ДобавитьСтроку(); // Сломал голову, как добавить в строчку элемент
КонецЕсли; КонецПроцедуры
Пожалуйста, подскажите как правильно написать запрос, чтобы при отсутствии указанного в ПолеОсновнойВидДеятельности автоматическое добавление элемента?
И объясните, пожалуйста, как правильно написать, чтобы добавлялась не только новая строка, но и автоматически вставлялся элемент из справочника ВидыДеятельностиКонтрагентов?
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!