|   |   | 
| 
 | Как создать файл в папке на сервере, которому нет доступа с клиентских машин? | ☑ | ||
|---|---|---|---|---|
| 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, которая синхронизирует папки.
 Спасибо за участие. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |