|
Как создать файл в папке на сервере, которому нет доступа с клиентских машин? | ☑ | ||
---|---|---|---|---|
0
bek_bassar
30.04.14
✎
15:08
|
Всем привет.
Конфа самописная, клиент-серверный вариант,1С:Предприятие 8.2 (8.2.15.310). Вот хочу реализовать такой механизм: На форме есть кнопочка при нажатии которой программа должна создать текстовый файл в папке. Эта папка не доступна клиентам, доступна только серверу. Как передать команду создания файлика серверу, что бы файл создался непосредственно на сервере? |
|||
2
Maxus43
30.04.14
✎
15:09
|
&НаКлиенте
... CоздатьФайлНаСервере(); &НаСервере CоздатьФайлНаСервере() ... //Создаём на здоровье |
|||
3
ДенисЧ
30.04.14
✎
15:10
|
&НаКлиенте
Процедура СоздатьФайлНаСервере() серверСоздать(); КОнецПроцедуры &НаСервере Процедура серверСоздать() т = Новый ТекстовыйДокумент; т.ДобавитьСтроку("Я файл!"); т.Записать("d:\документ.txt"); КонецПроцедуры |
|||
4
Maxus43
30.04.14
✎
15:11
|
а может обычное приложение?
в общий модуль с галками Сервер, Вызов сервера вам дорога |
|||
5
bek_bassar
30.04.14
✎
15:15
|
забыл сказать клиенты работаю на веб интерфейсе.
|
|||
6
bek_bassar
30.04.14
✎
15:16
|
(2) (3) я так и делаю.
|
|||
7
Адинэснег
30.04.14
✎
15:16
|
какая разница? тут главное windows пользователям порезать доступ к той папочке, а пользователю, под которым 1С крутится - разрешить
|
|||
8
bek_bassar
30.04.14
✎
15:17
|
&НаКлиенте
Процедура ВыгрузитьНаКассу(Команда) ВыгрузитьНаКассуСервер(); КонецПроцедуры &НаСервере Процедура ВыгрузитьНаКассуСервер() МожноЗаписатьФайл = Ложь; ТекстДанные = Новый ТекстовыйДокумент; ТекстФайлФлаг = Новый ТекстовыйДокумент ............ |
|||
9
Kamas
30.04.14
✎
15:17
|
(6) и что пишет что происходит
|
|||
10
bek_bassar
30.04.14
✎
15:19
|
(9) в коде я проверяю доступен ли каталог
.............. Если НЕ ЗначениеЗаполнено(Файл.Путь) Тогда Сообщить("Каталог обмена не доступен!!! Обратиетсь к системному администратору"); Возврат ......... соответственно выходит мое сообщение |
|||
11
bek_bassar
30.04.14
✎
15:21
|
(7) попробую
|
|||
12
Maxus43
30.04.14
✎
15:21
|
(10) явно вызывай с параметром ВыгрузитьНаКассуСервер(ПутьКФайлу);
|
|||
13
Адинэснег
30.04.14
✎
15:24
|
(12)бгг, да да, ВыгрузитьНаКассуСервер("c:\windows")
|
|||
14
Maxus43
30.04.14
✎
15:25
|
где файл то? на клиенте в даннывй момент? и надо его на сервер записать? во временное хранилище пихай, передавай на сервер путь к хранилищу и записывай на той стороне
|
|||
15
Kamas
30.04.14
✎
15:28
|
(14) да нет кажется он так (файл) собирается плюс не особо понятно что" МожноЗаписатьФайл = Ложь;"
|
|||
16
bek_bassar
30.04.14
✎
15:29
|
Вот полностью код
&НаСервере Процедура ВыгрузитьНаКассуСервер() МожноЗаписатьФайл = Ложь; ТекстДанные = Новый ТекстовыйДокумент; ТекстФайлФлаг = Новый ТекстовыйДокумент; //ТЧКассы = Объект.Подразделение.Кассы ; ///Здесь доработать: получить список касс по подразделению текущего пользователя //Получим список действующих ТекПользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); ПользовательИБ = Справочники.ПользователиИБ.НайтиПоНаименованию(ТекПользователь); ТЧКассы = ПользовательИБ.Подразделение.Кассы; Запрос1 = Новый Запрос; Запрос1.Текст ="ВЫБРАТЬ | Пользователи.Наименование, | Пользователи.Профиль, | Пользователи.Подразделение, | Пользователи.Пароль, | Пользователи.Штрихкод, | Пользователи.Заблокировать, | Пользователи.НадоВыгрузить, | Пользователи.Ссылка, | Пользователи.КодВыгрзуки КАК Код |ИЗ | Справочник.Пользователи КАК Пользователи |ГДЕ | Пользователи.НадоВыгрузить = ИСТИНА | И Пользователи.Заблокировать = ЛОЖЬ | И Пользователи.Подразделение = &Подразделение" ; Запрос1.УстановитьПараметр("Подразделение" ,ПользовательИБ.Подразделение); Результат1 = Запрос1.Выполнить(); ВыборкаДействующие = Результат1.Выгрузить(); //Получим список не действующих Запрос2 = Новый Запрос; Запрос2.Текст ="ВЫБРАТЬ | Пользователи.Наименование, | Пользователи.Профиль, | Пользователи.Подразделение, | Пользователи.Пароль, | Пользователи.Штрихкод, | Пользователи.Заблокировать, | Пользователи.НадоВыгрузить, | Пользователи.Ссылка, | Пользователи.КодВыгрзуки КАК Код |ИЗ | Справочник.Пользователи КАК Пользователи |ГДЕ | Пользователи.НадоВыгрузить = ИСТИНА | И Пользователи.Заблокировать = ИСТИНА | И Пользователи.Подразделение = &Подразделение" ; Запрос2.УстановитьПараметр("Подразделение" ,ПользовательИБ.Подразделение); Результат2 = Запрос2.Выполнить(); ВыборкаНеДействующие = Результат2.Выгрузить(); Если ВыборкаДействующие.Количество() = 0 и ВыборкаНеДействующие.Количество() = 0 Тогда Сообщить("Нет данных для выгрузки!"); Иначе Для Каждого СтрКасса Из ТЧКассы Цикл ПутьКФайлу = СтрКасса.ПутьКФайлу; Файл = Новый Файл(ПутьКФайлу); Если НЕ ЗначениеЗаполнено(Файл.Путь) Тогда Сообщить("Каталог обмена не доступен!!! Обратиетсь к системному администратору"); Возврат ИначеЕсли Не Файл.Существует() Тогда Попытка ТекстДанные.Записать(ПутьКФайлу, "windows-1251"); Исключение Сообщить("Не удалось создать файл выгрузки!!! Обратитесь к системному админимтсратору"); Возврат КонецПопытки; КонецЕсли; ПутьКФайлФлагу = СтрКасса.ПутьКФайлФлагу; ФайлФлаг = Новый Файл(ПутьКФайлФлагу); //Проверяем существует ли файл файл-флаг Если не ФайлФлаг.Существует() Тогда ТекстДанные.Очистить(); ТекстДанные.ДобавитьСтроку("##@@&&"); ТекстДанные.ДобавитьСтроку("#"); мРазделитель = ";"; //Выгружаем только которые надо изменить или добавить Если ВыборкаДействующие.Количество() > 0 Тогда ТекстДанные.ДобавитьСтроку("$$$ADDUSERS"); Для Каждого СтрЗапроса Из ВыборкаДействующие Цикл КодСтр = СтрЗапроса.Код; КодЧисло = Число(КодСтр); Код = Строка(КодЧисло); СтрокаТ = Код + мРазделитель + // СтрЗапроса.Наименование + мРазделитель + //Наименование СтрЗапроса.Наименование + мРазделитель + //Текст для печати в чеке СтрЗапроса.Профиль.КодПрофиля + мРазделитель + //Код профиля СтрЗапроса.Пароль + мРазделитель + //Пароль пользователя СтрЗапроса.Штрихкод + мРазделитель + //Штрихкод пользователя мРазделитель ; ТекстДанные.ДобавитьСтроку(СтрокаТ); Ссылка = СтрЗапроса.Ссылка.ПолучитьОбъект(); Ссылка.НадоВыгрузить = ложь; Ссылка.Записать(); КонецЦикла; МожноЗаписатьФайл = Истина; КонецЕсли; //Выгружаем которые надо удалить Если ВыборкаНеДействующие.Количество() > 0 Тогда ТекстДанные.ДобавитьСтроку("$$$DELETEUSERSBYCODE"); Для Каждого СтрЗапроса Из ВыборкаНеДействующие Цикл КодСтр = СтрЗапроса.Код; КодЧисло = Число(КодСтр); Код = Строка(КодЧисло); СтрокаТ = Код + мРазделитель; ТекстДанные.ДобавитьСтроку(СтрокаТ); Ссылка = СтрЗапроса.Ссылка.ПолучитьОбъект(); Ссылка.НадоВыгрузить = ложь; Ссылка.Записать(); КонецЦикла; МожноЗаписатьФайл = Истина; КонецЕсли; //Если все прошло удачно запишем файл Если МожноЗаписатьФайл Тогда ТекстДанные.Записать(ПутьКФайлу, "windows-1251"); ТекстФайлФлаг.Записать(ПутьКФайлФлагу,"windows-1251"); Сообщить("Выгрузка прошла успешно"); Иначе Сообщить("Выгрузка не прошла. Обратитесь к системному администратору"); КонецЕсли; //Если файл-флаг существует добавим тогда Иначе ПутьКФайлу_= СтрЗаменить(ПутьКФайлу,".spr","_.spr"); ТекстДанные.Очистить(); ТекстДанные.ДобавитьСтроку("##@@&&"); ТекстДанные.ДобавитьСтроку("#"); мРазделитель = ";"; Если ВыборкаДействующие.Количество()>0 Тогда ТекстДанные.ДобавитьСтроку("$$$ADDUSERS"); Для Каждого СтрЗапроса Из ВыборкаДействующие Цикл КодСтр = СтрЗапроса.Код; КодЧисло = Число(КодСтр); Код = Строка(КодЧисло); СтрокаТ = Код + мРазделитель + // СтрЗапроса.Наименование + мРазделитель + //Наименование СтрЗапроса.Наименование + мРазделитель + //Текст для печати в чеке СтрЗапроса.Профиль.КодПрофиля + мРазделитель + //Код профиля СтрЗапроса.Пароль + мРазделитель + //Пароль пользователя СтрЗапроса.Штрихкод + мРазделитель + //Штрихкод пользователя мРазделитель ; ТекстДанные.ДобавитьСтроку(СтрокаТ); Ссылка = СтрЗапроса.Ссылка.ПолучитьОбъект(); Ссылка.НадоВыгрузить = ложь; Ссылка.Записать(); КонецЦикла; МожноЗаписатьФайл = Истина; КонецЕсли; Если ВыборкаНеДействующие.Количество()>0 Тогда ТекстДанные.ДобавитьСтроку("$$$DELETEUSERSBYCODE"); Для Каждого СтрЗапроса Из ВыборкаНеДействующие Цикл КодСтр = СтрЗапроса.Код; КодЧисло = Число(КодСтр); Код = Строка(КодЧисло); СтрокаТ = Код + мРазделитель; ТекстДанные.ДобавитьСтроку(СтрокаТ); Ссылка = СтрЗапроса.Ссылка.ПолучитьОбъект(); Ссылка.НадоВыгрузить = ложь; Ссылка.Записать(); КонецЦикла; МожноЗаписатьФайл = Истина; КонецЕсли; Если МожноЗаписатьФайл Тогда ТекстДанные.Записать(ПутьКФайлу_, "windows-1251"); Сообщить("Выгрузка прошла успешно"); Иначе Сообщить("Выгрузка не прошла. Обратитесь к системному администратору"); КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры |
|||
17
bek_bassar
30.04.14
✎
15:33
|
(14) попробую тоже
|
|||
18
sergey198
30.04.14
✎
15:39
|
нечитал все, а у пользователя под кем служба 1с запущена, есть права на эту папку?
|
|||
19
bek_bassar
30.04.14
✎
15:40
|
есть полные причем
|
|||
20
bek_bassar
30.04.14
✎
16:03
|
ладно всем удачных выходных, мой рабочий день закончился))) спасибо за ответы. после праздников возобновлю свою работу)))
|
|||
21
bek_bassar
23.05.14
✎
12:48
|
Всем привет. Я нашел решение моего вопроса с помощью программы GoodSync, которая синхронизирует папки.
Спасибо за участие. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |