Имя: Пароль:
1C
1С v8
Как создать файл в папке на сервере, которому нет доступа с клиентских машин?
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, которая синхронизирует папки.
Спасибо за участие.
Программист всегда исправляет последнюю ошибку.