Talkman @ Сегодня, 16:42
, Добавить поле рисунок передать свою картинку. Аналогія с подптсями и печатями. Можно посмотреть в конфигурациях на управляемых формах
kostya77 @ Сегодня, 9:16
, Такое реализовано у нас для договоров через обработку прикрепленные файлы. Создан каталог для хранения файлов. Выбераем файл
//1 строка - тип //2 строка - длина //3 строка - точность //4 строка - ИД вида объекта //5 строка - флаг неотр. (?) //6 строка - флаг разделения триад (?) //7 строка - ИД объекта Функция ПолучитьИДобъекта(Объект) Перем Стр; Стр=ЗначениеВСтрокуВнутр(Объект); СЗ=СоздатьОбъект("СписокЗначений"); СЗ.ИзСтрокиСРазделителями(Сред(Стр,2,СтрДлина(Стр)-2)); Для Сч=1 По 7 Цикл Если (Сч=4) или (Сч=7) Тогда ДесИД=СЗ.ПолучитьЗначение(Сч); СЗ.УстановитьЗначение(Сч,_IdToStr(ДесИД)); КонецЕсли; КонецЦикла; Возврат СЗ; КонецФункции
//******************************************* Процедура СоздатьКаталогОбъекта() СЗ=ПолучитьИДобъекта(Объект); //Проверим, существует ли каталог для прикрепляемых файлов КаталогФайлов=КаталогИБ()+"Files\"; // "1MZ" - док.Договор Если СокрЛП(СЗ.ПолучитьЗначение(4)) = "1MZ" Тогда КаталогФайлов=КаталогИБ()+"Files\"; КонецЕсли; Если ФС.СуществуетФайл(КаталогФайлов)=0 Тогда //Если каталога нет, ФС.СоздатьКаталог(КаталогФайлов); //то создадим его. КонецЕсли; //Проверим, существует ли каталог для записи файлов объектов данного типа КаталогТипаОбъекта=КаталогФайлов+СокрЛП(СЗ.ПолучитьЗначение(1))+"\"; Если ФС.СуществуетФайл(КаталогТипаОбъекта)=0 Тогда //Если каталога нет, ФС.СоздатьКаталог(КаталогТипаОбъекта); //то создадим его. КонецЕсли; //Проверим, существует ли каталог для записи файлов объектов данного вида КаталогВидаОбъекта=КаталогТипаОбъекта+СокрЛП(СЗ.ПолучитьЗначение(4))+"\"; Если ФС.СуществуетФайл(КаталогВидаОбъекта)=0 Тогда //Если каталога нет, ФС.СоздатьКаталог(КаталогВидаОбъекта); //то создадим его. КонецЕсли; //Проверим, существует ли каталог для записи файлов этого объекта КаталогОбъекта=КаталогВидаОбъекта+СокрЛП(СЗ.ПолучитьЗначение(7))+"\"; Если ФС.СуществуетФайл(КаталогОбъекта)=0 Тогда //Если каталога нет, ФС.СоздатьКаталог(КаталогОбъекта); //то создадим его. КонецЕсли; КонецПроцедуры
//********************************************* Процедура ВыбратьФайл() ТекКат=""; ИмяФайла=""; ИмяФайла1=""; Если ФС.ВыбратьФайл(0,ИмяФайла,ТекКат,"Выберите файл:",,,120)=1 Тогда Если ФС.СуществуетФайл(КаталогОбъекта)=0 Тогда СоздатьКаталогОбъекта(); КонецЕсли; //Приведём длину имени файла в соответствие... МаксДлИмениФайла=120; ПозРасш=НайтиПослВх(ИмяФайла,"."); РасшФайла=Прав(ИмяФайла,СтрДлина(ИмяФайла)-ПозРасш); НазвФайла=Лев(ИмяФайла,Мин(ПозРасш-1,МаксДлИмениФайла-СтрДлина(РасшФайла)-1)); ИмяФайла1=НазвФайла+"."+РасшФайла; //Проверим, есть ли такой файл в папке... Если ФС.СуществуетФайл(КаталогОбъекта+ИмяФайла)=1 Тогда //Проверим наличие файла с таким же именем в каталоге приёмнике Если Не(Вопрос("Файл с именем "+ИмяФайла+" |в каталоге "+КаталогОбъекта+" уже существует! |Перезаписать файл "+ИмяФайла+"?","Да+Нет+Отмена",30)="Да") Тогда Возврат; КонецЕсли; КонецЕсли; Если ФС.СуществуетФайл(КаталогОбъекта+"files.vtf")=0 Тогда СоздатьКаталогОбъекта(); КонецЕсли; //Копируем файл в папку... ФС.КопироватьФайл(ТекКат+ИмяФайла,КаталогОбъекта+ИмяФайла1,0); Иначе Возврат; КонецЕсли; КонецПроцедуры
Есль такой вариант (но я не проверял): Добавь в док реквизит текстовый и кнопку на форму для выбора файла, при выборе файла в реквизит попадает путь + имя файла , а на кнопку открытия вешай :
// Модуль "закрываемой" формы: &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) Если ПараметрыЗаписи.Свойство("Сообщения") Тогда ПустойУИД = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); Для Каждого Элемент Из ПараметрыЗаписи.Сообщения Цикл Сообщение = Элемент; Сообщение.ИдентификаторНазначения = ПустойУИД; Сообщение.Сообщить(); КонецЦикла; КонецЕсли; КонецПроцедуры
&НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) ПараметрыЗаписи.Вставить("Сообщения", ПолучитьСообщенияПользователю(Истина)); // удаляем после получения КонецПроцедуры
// Код вывода сообщения (в серверных процедурах) // ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Сообщение");
вот еще нашел на infostart.ru
//Как показать пользователю некритические информационные сообщения если он нажал "Записать и закрыть" или "Провести и закрыть". //Бывают ситуации когда необходимо сообщить пользователю информацию, не вызванную исключительной ситуацией, т.е. ошибкой.
//И все бы хорошо, если бы пользователь не нажимал кнопки "Записать и закрыть" или "Провести и закрыть". В этом случае, если сообщение вызвано исключительной ситуацией, то оно отобразится //и форма не закроется. Но в случае, если сообщение информационное, т.е. запись или проведение завершились удачно, то сообщение на доли секунды выведется в окно сообщений формы //и закроется вместе с ней. Плохо.
//Искал по форумам решение, но так и не нашел того, что мне бы подошло. Обработчик ожидания не хочу для этого использовать. Решение с перенаправлением //сообщения в окно приложения путем активации поочередно окон в моей версии платформы работать корректно не захотело.
//В итоге реализовал так (для записи элемента справочника, для документов реализация будет подобной же):
//1. В форме элемента создал реквизит МассивСообщений типа СписокЗначений для хранения перехваченных с сервера сообщений пользователю.
//Записываем сообщения в список значений (реквизит формы МассивСообщений) Для Сч = 0 По ФиксМассивСообщений.Количество() - 1 Цикл МассивСообщений.Добавить(ФиксМассивСообщений.Получить(Сч)); КонецЦикла; КонецПроцедуры
//3. Процедура ПослеЗаписи()
&НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи)
//Если сообщения есть, то инициируем их показ пользователю Если МассивСообщений.Количество() > 0 Тогда ПоказатьСообщенияПользователю(); МассивСообщений.Очистить(); КонецЕсли; КонецПроцедуры
//4. Создал процедуру ПоказатьСообщенияПользователю()
&НаКлиенте Процедура ПоказатьСообщенияПользователю() Для Каждого Сообщение Из МассивСообщений Цикл
//Сообщения показываем в виде предупреждений, т.к. пока пользователь не нажмет "Ок" форма не закроется. Т.е. только так мы достигаем цели,
//чтобы пользователь увидел сообщения перед закрытием формы Предупреждение("" + Сообщение.Значение.Текст); КонецЦикла; КонецПроцедуры
//Все вышеописанные процедуры описаны в модуле формы.
Если КонтрагентДляОтбора.Выбран()>0 Тогда УстановитьОтбор("Контрагент", КонтрагентДляОтбора); КонтрагентДляОтбора = КонтрагентДляОтбора.ТекущийЭлемент(); Иначе УстановитьОтбор(""); КонецЕсли;
Если ПустоеЗначение(ВидДокументаДляОтбора) = 1 Тогда ВидДокументаДляОтбора=1; КонецЕсли; УстановитьОтбор(СписокВидовДокументов.ПолучитьЗначение(ВидДокументаДляОтбора), );
Если АвторДляОтбора.Выбран()>0 Тогда УстановитьОтбор("Автор", АвторДляОтбора); АвторДляОтбора = АвторДляОтбора.ТекущийЭлемент(); Иначе УстановитьОтбор(""); КонецЕсли;
Если ФирмаДляОтбора.Выбран()>0 Тогда УстановитьОтбор("Фирма", ФирмаДляОтбора); ФирмаДляОтбора = ФирмаДляОтбора.ТекущийЭлемент(); Иначе УстановитьОтбор(""); КонецЕсли;
Если ВидОтбора.ТекущаяСтрока() = 6 Тогда // нет быстрого отбора Возврат; КонецЕсли;
ЗначениеИзменилось=0;
Если ВидОтбора.ТекущаяСтрока() = 1 Тогда СтароеЗначение=КонтрагентДляОтбора; ВыбЗначение = СоздатьОбъект("Справочник.Контрагенты"); Если ВыбЗначение.Выбрать("Выбор контрагента","Форма списка")=1 Тогда КонтрагентДляОтбора = ВыбЗначение; Если ВыбЗначение<>СтароеЗначение Тогда ЗначениеИзменилось=1; КонецЕсли; КонецЕсли;
ИначеЕсли ВидОтбора.ТекущаяСтрока() = 2 Тогда СтароеЗначение=ВидДокументаДляОтбора; Если ПустоеЗначение(ВидДокументаДляОтбора)>0 Тогда ВыбЗначение = ""; Иначе ВыбЗначение = СписокВидовДокументов.ПолучитьЗначение(ВидДокументаДляОтбора); КонецЕсли; СписокВидовДокументов.ВыбратьЗначение(ВыбЗначение,"Выбор вида документов",,,0); ВидДокументаДляОтбора = СписокВидовДокументов.НайтиЗначение(ВыбЗначение); Если ВидДокументаДляОтбора<>СтароеЗначение Тогда ЗначениеИзменилось=1; КонецЕсли;
ИначеЕсли ВидОтбора.ТекущаяСтрока() = 3 Тогда СтароеЗначение=АвторДляОтбора; ВыбЗначение = СоздатьОбъект("Справочник.Пользователи"); Если ВыбЗначение.Выбрать("Выбор автора","Форма списка")=1 Тогда АвторДляОтбора = ВыбЗначение; Если ВыбЗначение<>СтароеЗначение Тогда ЗначениеИзменилось=1; КонецЕсли; КонецЕсли;
ИначеЕсли ВидОтбора.ТекущаяСтрока() = 4 Тогда СтароеЗначение=ТипДляОтбора; Если ПустоеЗначение(ТипДляОтбора)>0 Тогда ВыбЗначение = ""; Иначе ВыбЗначение = ТипыУчета.ПолучитьЗначение(ТипДляОтбора); КонецЕсли; ТипыУчета.ВыбратьЗначение(ВыбЗначение,"Выбор типа учета",,,0); ТипДляОтбора = ТипыУчета.НайтиЗначение(ВыбЗначение); Если ТипДляОтбора<>СтароеЗначение Тогда ЗначениеИзменилось=1; КонецЕсли;
ИначеЕсли ВидОтбора.ТекущаяСтрока() = 5 Тогда СтароеЗначение=ФирмаДляОтбора; ВыбЗначение = СоздатьОбъект("Справочник.Фирмы"); Если ВыбЗначение.Выбрать("Выбор фирмы","Форма списка")=1 Тогда ФирмаДляОтбора = ВыбЗначение; Если ВыбЗначение<>СтароеЗначение Тогда ЗначениеИзменилось=1; КонецЕсли; КонецЕсли;
КонецЕсли;
Если ЗначениеИзменилось=1 Тогда ПриУстановкеБыстрогоОтбора(); КонецЕсли;
lals @ Сегодня, 8:16
, це текстове поле у формі журналу? чи це таблиця значень?
В мене є таке рішення: Є документ "Заявка" в ньому три реквізити "замовив", "дозволив", "отримав". в журналі заявок є три текстових полів "замовив", "дозволив", "отримав". встановлено картинку. і в залежності від реквізитів документу виводю піктограму.
в текстовому полі "замовив" ставлю таку формулу ?(ТекущийДокумент.Выбран()=0,"",?(ТекущийДокумент.МеткаЗаказал=1,2,1)) і аналогічно по іншим
Процедура ПриВыбореИмениФайла() Поз=Найти(ФайлЗагрузки,"."); Если (Поз=0) Или (Поз>8) Тогда ФайлЗагрузки=СокрП(Лев(СокрЛ(ФайлЗагрузки),10))+". XLS"; Иначе ФайлЗагрузки=СокрЛП(Лев(ФайлЗагрузки,Поз)+"XLS"); КонецЕсли; КонецПроцедуры
burza @ Сегодня, 19:19
, Создать временный файл копированием, прочитать ,сделать все что надо. Потом удалить временный файл, по аналогии как импорт банковских выписок делают, там файлы тоже имеют разные названия
//Установить флаг участия регистра во временном расчете. //Рассчитать все регистры с установленным флагом временного расчета на конец события Если (Конт.СравнитьТА() = - 1) Тогда //если дата и время документа меньше даты и времени ТА итогов. Рег.ВременныйРасчет(1); РассчитатьРегистрыПо(Конт.ТекущийДокумент()); ТекущийОстаток = Рег.Остаток(Фирма,ТМЦ,МестоХранения,"ОстатокТовара"); ИначеЕсли (Конт.СравнитьТА() = - 2) И (Конт.ДатаДок < ПолучитьДатуТА()) Тогда //в случае, если новый документ, который сравнивается с ТА, Рег.ВременныйРасчет(1); //еще не записан - то есть он еще не имеет никакой позиции РассчитатьРегистрыПо(Конт.ДатаДок); // на оси времени. ТекущийОстаток = Рег.Остаток(Фирма,ТМЦ,МестоХранения,"ОстатокТовара"); ИначеЕсли (Конт.СравнитьТА() = 0) Тогда //если дата и время документа равны дате и времени ТА итогов. ТекущийОстаток = Рег.Остаток(Фирма,ТМЦ,МестоХранения,"ОстатокТовара"); ИначеЕсли (Конт.СравнитьТА() = + 1) Тогда //если дата и время документа больше даты и времени ТА итогов. ТекущийОстаток = Рег.Остаток(Фирма,ТМЦ,МестоХранения,"ОстатокТовара"); КонецЕсли;
Ниже описан порядок действий для добавления "скрепки" (присоединение файлов) к новому документу "НашНовыйДокумент" (как пример).
1. Копируем справочник с наименованием содержащим на конце словосочетание "ПрисоединенныеФайлы". Например "АвансовыйОтчетПрисоединенныеФайлы".
2. Меняем наименование так, чтобы префикс точно соответствовал наименованию документа, а окончание содержало "ПрисоединенныеФайлы". В нашем случае: "НашНовыйДокументПрисоединенныеФайлы".
3. Меняем ТИП у реквизита "ВладелецФайла" справочника "НашНовыйДокументПрисоединенныеФайлы" на "НашНовыйДокумент".
4. Включаем в состав определяемых типов "ПрисоединенныйФайл" и "ПрисоединенныйФайлОбъект" наш новый справочник "НашНовыйДокументПрисоединенныеФайлы".
5. Расширим состав определяемого типа "ВладелецПрисоединенныхФайлов" нашим документом (ДокументСсылка) "НашНовыйДокумент".
6. Расширим состав типов свойства "Источник" у подписки "ПереопределитьПолучаемуюФормуПрисоединенногоФайла", включив в него справочник "НашНовыйДокументПрисоединенныеФайлы".
7. Расширим состав типов свойства "Источник" подписки УстановитьПометкуУдаленияПрисоединенныхФайловДокументов, включив в него наш новый документ (ДокументОбъект) "НашНовыйДокументПрисоединенныеФайлы".
8. Расширим состав общей команды "ПрисоединенныеФайлы" и "ПрисоединенныеФайлыБП", включив в него наш новый документ (ДокументСсылка).
RedCat77 @ Сегодня, 11:45
, а как-то в исключения 1С нельзя добавить? Чтоб антивир вообще не реагировал на 1с. Ничего подходящего в инете не нашел, только совет отключить брандмауэр
Xmdrug @ Сегодня, 15:22
, Ну ручной операцией можно. Но это только по счетам, а вот по регистрам надо другим документом типа корректировка регистров. Другого ничего не нашел в утп. Надо читать литературу.
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!