Имя: Пароль:
1C
1С v8
Импорт в 1С УТ
0 Elfidor
 
16.01.20
13:08
Товарищи, спасайте! Я просто не знаю куда уже кидаться, поэтому прошу не решения моей задачи, а просто сказать что почитать, куда залезть и т.д., чтобы хоть что-то понять.
Задача такова: в каком-то магазине на входе стоят датчики, которые считывают сколько людей зашло в магазин. Есть обработка для Розницы, которая эти данные с сервера считывает и отправляет в 1С. Но дело в том, что у нас УТ. Такой же обработки для УТ не существует, поэтому моё дело - переработать обработку для Розницы так, чтобы она работала на УТ. Как я поняла в Рознице (не знаю типовые или нет) есть РегистрНакопления.Посетители и Справочник.СчетчикиПодсчетаПосетителей, в УТ разумеется их нет. Для начала вопрос, есть ли что-то похожее в типовой УТ или надо это самому сделать(а если сделать, то каким, интересно знать, образом данные с датчиков будут лететь в справочники?)? И почему не работает ДанныеФормыВзначение? Вся УТ стоит на обычных формах, поэтому использовать РеквизитФормыВЗначение не выйдет. Но я откровенно запуталась, что именно надо ставить в ДанныеФормыВзначение. В обработке по Рознице написано:

ХранилищеОбщихНастроек.Сохранить("RstatI","RstatI", Настройки,,"");
    Рек = РеквизитФормыВЗначение("Объект");
    Рек. ВыполнитьКоманду("", "");

В настройки залетает сервер, порт, логин и пароль
Но команд то в обычной форме нет(в том понятии в котором они есть в управляемых формах)! "ЭтотОбъект" не работает... И что с этой штукой вообще делать я не знаю.
Читала уже и про РеквизитФормыВЗначение/ДанныеФормыВзначение и про Локальное/FTPСоединение, и вообще как проходит импорт с сервера на 1с. Осенения, увы, не произошло...
1 shuhard
 
16.01.20
13:20
(0) [И что с этой штукой вообще делать я не знаю]
сидя в рознице добраться до импорта данных, управляемые формы на отладку ни как не влияют
2 Elfidor
 
16.01.20
13:23
(1) Это была моя изначальная мысль, но Розницы просто нет. Обработка не наша, у нас нет доступа
3 catena
 
16.01.20
13:24
Надо смотреть, что там в команде происходит. Линейно переписать подменив операторы не получится.
4 shuhard
 
16.01.20
13:26
(2)[Розницы просто нет. Обработка не наша, у нас нет доступа]
что за бред,
скачать и поставить розницу руки отваляться ?
5 maxkras26
 
16.01.20
13:27
Код обработки из Розницы можно посмотреть или нет?
6 D_E_S_131
 
16.01.20
14:08
"Обработка для Розницы" это какая-то внешняя обработка?
7 SadrArt
 
16.01.20
14:13
(0) Вы там кто?
8 ДенисЧ
 
16.01.20
14:15
А зачем в Управлении Торговлей (!!!!) данные по проходной?
9 sqr4
 
16.01.20
14:17
(0) Без фото не взлетит
10 JeHer
 
16.01.20
14:51
(9) аж олдскулы свело )))
11 Elfidor
 
16.01.20
17:46
(5) (6) Это внешняя обработка. Весь модуль объекта прилагаю (из Розницы)


&НаКлиенте
Процедура КаталогНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
    Диалог  = Новый ДиалогВыбораФайла(режим);
    Диалог.Каталог = "";
    Диалог.МножественныйВыбор = Ложь;
    Если Диалог.Выбрать() Тогда
            Объект.Каталог = Диалог.Каталог;
    КонецЕсли

КонецПроцедуры

&НаКлиенте
Процедура Загрузить(Команда)
    
    ЗагрузитьНаСервере() ;
    
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьНаСервере()
    
    Массив = ПолучитьФайлы1С();
    
    ДатаДокСтарая = Неопределено;
    Документ      = Неопределено;
    СчетчикПодсчетаПосетителей = Неопределено;
    Магазин                    = Неопределено;
    ПоменялсяСчетчик = Ложь;

    ЗапросПосетители = Новый Запрос;
    ЗапросПосетители.Текст =
    "ВЫБРАТЬ ПЕРВЫЕ 1
    |   Посетители.Период,
    |   Посетители.Регистратор,
    |   Посетители.СчетчикПодсчетаПосетителей,
    |   Посетители.Активность,
    |   Посетители.ДеньНедели,
    |   Посетители.Час,
    |   Посетители.Количество
    |ИЗ
    |   РегистрНакопления.Посетители КАК Посетители
    |ГДЕ
    |   Посетители.Активность = Истина И
    |   Посетители.СчетчикПодсчетаПосетителей = &ВыбСчетчик И
    |   Посетители.Период = &ВыбПериод";

    Для Каждого Путь из Массив Цикл
        
        Чтение = New XMLReader;
        Чтение.ОткрытьФайл(Путь);
        
        СоздаватьДокументы = Ложь;

        Пока Чтение.Прочитать() Цикл
            
            Если Чтение.Имя = "statistics" Тогда
                
                Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
                    
                    СоздаватьДокументы = Истина;
                ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
                    
                    СоздаватьДокументы = Ложь;
                КонецЕсли;
            КонецЕсли;
            
            Если Не СоздаватьДокументы Тогда
                
                Продолжить;
            КонецЕсли;

            Если Чтение.Имя = "sensor" Тогда
                
                Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
                    
                    //Документ = Документы.РегистрацияПодсчетаПосетителей.СоздатьДокумент();
                    ТехКод = Чтение.ПолучитьАтрибут("GUID");
                    
                    Запрос = Новый Запрос;
                    Запрос.Текст =
                    "ВЫБРАТЬ
                    |    СчетчикиПодсчетаПосетителей.Ссылка КАК Ссыль,
                    |    СчетчикиПодсчетаПосетителей.Магазин.Ссылка  КАК Мсыль
                    |ИЗ
                    |    Справочник.СчетчикиПодсчетаПосетителей КАК СчетчикиПодсчетаПосетителей
                    |ГДЕ
                    |    СчетчикиПодсчетаПосетителей.ТехническийКод = &Тех" ;
                    Запрос.УстановитьПараметр("Тех", ТехКод);
                    Выборка = Запрос.Выполнить().Выбрать();
                    
                    Если Выборка.Следующий() Тогда
                        
                        СчетчикПодсчетаПосетителей =  Выборка.Ссыль;
                        Магазин                    = Выборка.Мсыль;

                        ПоменялсяСчетчик = Истина;

                        //Документ.СчетчикПодсчетаПосетителей =  Выборка.Ссыль;
                        //Документ.Магазин = Выборка.Мсыль;

                        
                    Иначе
                        
                        СчетчикПодсчетаПосетителей =  Неопределено;
                        Сообщить("Сенсор с Техническим кодом:""" +ТехКод +""" ,не найден!" );
                    КонецЕсли;
                    
                Иначе
                    
                    Если Документ <> Неопределено и Документ.ДанныеПодсчета.Количество() > 0 Тогда
                        
                        Документ.Записать(РежимЗаписиДокумента.Проведение);
                    КонецЕсли;
                КонецЕсли;
                
            ИначеЕсли ТипЗнч(СчетчикПодсчетаПосетителей) = Тип("СправочникСсылка.СчетчикиПодсчетаПосетителей") и Чтение.Имя = "stat" Тогда
                
                Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
                    
                    Стр     = СокрЛП(Чтение.ПолучитьАтрибут("datetime"));
                    Стр     = СтрЗаменить(Стр, " ", Символы.ПС);
                    Стр     = СтрЗаменить(Стр, ":", Символы.ПС);
                    Стр     = СтрЗаменить(Стр, "/", Символы.ПС);
                    Стр     = СтрЗаменить(Стр, ".", Символы.ПС);
                    
                    Год         = Число(СокрЛП(СтрПолучитьСтроку(Стр,1)));
                    Месяц         = Число(СокрЛП(СтрПолучитьСтроку(Стр,2)));
                    День           = Число(СокрЛП(СтрПолучитьСтроку(Стр,3)));
                    Час         = Число(СокрЛП(СтрПолучитьСтроку(Стр,4)));
                    Минута      = Число(СокрЛП(СтрПолучитьСтроку(Стр,5)));
                    Секунда     = Число(СокрЛП(СтрПолучитьСтроку(Стр,6)));
                    
                        ДатаДокТекущая = Дата(Год,Месяц,День, 0, 0, 0);
                    Если ПоменялсяСчетчик или (ДатаДокСтарая = Неопределено) или (ДатаДокТекущая <> ДатаДокСтарая) Тогда
                        
                        Если Документ <> Неопределено и Документ.ДанныеПодсчета.Количество() > 0 Тогда
                        
                        Документ.Записать(РежимЗаписиДокумента.Проведение);
                        КонецЕсли;
                            
                        Документ = Документы.РегистрацияПодсчетаПосетителей.СоздатьДокумент();
                        Документ.Дата                       = ДатаДокТекущая;
                        Документ.СчетчикПодсчетаПосетителей = СчетчикПодсчетаПосетителей;
                        Документ.Магазин                    = Магазин;
                        
                        ДатаДокСтарая = ДатаДокТекущая;
                        ПоменялсяСчетчик = Ложь;
                    КонецЕсли;

                    Вход                        = Число(СокрЛП(Чтение.ПолучитьАтрибут("realin")));
                    Выход                         = Число(СокрЛП(Чтение.ПолучитьАтрибут("realout")));
                    //Документ.Дата                  = Дата(Год,Месяц,День, Час(ТекущаяДата()),Минута(ТекущаяДата()),Секунда(ТекущаяДата()));
                    // Если уже есть такая запись, то не добавляем
                    ЗапросПосетители.УстановитьПараметр("ВыбСчетчик", СчетчикПодсчетаПосетителей);
                    ЗапросПосетители.УстановитьПараметр("ВыбПериод" , Дата(Год(Документ.Дата), Месяц(Документ.Дата), День((Документ.Дата)), Час, Минута, Секунда));
                    Если НЕ ЗапросПосетители.Выполнить().Пустой() Тогда  
                        Продолжить;
                    КонецЕсли;

                    Стр                         = Документ.ДанныеПодсчета.Добавить();
                    Стр.ВремяРегистрации           = Дата(1,1,1,Час,Минута,Секунда);
                    Стр.КоличествоВходящих      = Вход;
                    Стр.КоличествоВыходящих     = Выход;
                    
                КонецЕсли;
                
            КонецЕсли;
            
        КонецЦикла;
        
        Чтение.Закрыть();
    КонецЦикла;
    
        Если Объект.Удалять Тогда
            
            УстановитьПривилегированныйРежим(Истина);
            УдалитьФайлы(Объект.Каталог,"*.rstatfr");
            УстановитьПривилегированныйРежим(Ложь);
            
        КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура Вид()
    
    Если Объект.Вид = "Локально" Тогда
        Элементы.Ftp.Видимость = Ложь;
        Элементы.ГруппаКаталог.Видимость = Истина;
    ИначеЕсли Объект.Вид = "FTPСервер" Тогда
        Элементы.ГруппаКаталог.Видимость = Ложь;
        Элементы.Ftp.Видимость = Истина;
    КонецЕсли;
    
КонецПроцедуры

&НаКлиенте
Процедура ВидСПриИзменении(Элемент)
    
    Если Объект.Вид = "Локально" Тогда
        Элементы.Ftp.Видимость = Ложь;
        Элементы.ГруппаКаталог.Видимость = Истина;
    ИначеЕсли Объект.Вид = "FTPСервер" Тогда
        Элементы.ГруппаКаталог.Видимость = Ложь;
        Элементы.Ftp.Видимость = Истина;
    КонецЕсли;
        
КонецПроцедуры

&НаСервере
Функция ПолучитьФайлы1С()
    
    Если Объект.Вид = "Локально" Тогда
        
        МассивФайлов = НайтиФайлы(Объект.Каталог,"*.rstatfr");
        
        Массив = Новый Массив;
        Для Каждого Файл из МассивФайлов Цикл
            
            Массив.Добавить(Файл.ПолноеИмя);
        КонецЦикла;
    ИначеЕсли Объект.Вид = "FTPСервер" Тогда
        FTP = Новый FTPСоединение(Объект.Сервер,Объект.Порт,Объект.Логин,Объект.Пароль);
        Файлы = FTP.НайтиФайлы(Объект.КаталогFTP,"*.rstatfr");
        Массив = Новый Массив;
        Для Каждого Файл Из Файлы Цикл
            Путь = КаталогВременныхФайлов() + Файл.Имя;
            FTP.Получить(Файл.ПолноеИмя, Путь);
            Массив.Добавить(Путь);
        КонецЦикла;
        Если Объект.Удалять Тогда
            FTP.Удалить(Объект.КаталогFTP,"*.rstatfr");
        КонецЕсли;
    КонецЕсли;        
    Возврат Массив;
КонецФункции

&НаКлиенте
Процедура  Проверить(Команда)
    //Рек = РеквизитФормыВЗначение("Объект");
    //Рек.ВыполнитьКоманду("") ;
    ПроверитьНаСервере ();
    
КонецПроцедуры

&НаСервере
Процедура ПроверитьНаСервере()
    
    Рек = РеквизитФормыВЗначение("Объект");
    Рек.ВыполнитьКоманду("", Новый Структура) ;
    
    Возврат;
КонецПроцедуры

&НаСервере
Процедура СохранитьНастройкиНаСервере()
    Настройки = Новый Соответствие;
    Настройки.Вставить("ВидСоединения", Объект.Вид);
    Настройки.Вставить("FTP",Объект.КаталогFTP);
    Настройки.Вставить("Сервер",Объект.Сервер);
    Настройки.Вставить("Порт", Объект.Порт);
    Настройки.Вставить("Логин", Объект.Логин);
    Настройки.Вставить("Пароль", Объект.Пароль );
    Настройки.Вставить("Каталог", Объект.Каталог);
    Настройки.Вставить("Удалять",Объект.Удалять);
    
    ХранилищеОбщихНастроек.Сохранить("RstatI","RstatI", Настройки,,"");
    Рек = РеквизитФормыВЗначение("Объект");
    Рек. ВыполнитьКоманду("", "");

КонецПроцедуры

&НаСервере
Процедура ПолучитьНастройкиНаСервере()
    
        УстановитьПривилегированныйРежим(Истина);
        Настройка =    ХранилищеОбщихНастроек.Загрузить("RstatI", "RstatI",,"");
        
        Если Настройка = Неопределено Тогда
            
            Возврат;
        КонецЕсли;

        Объект.Вид     = Настройка.Получить("ВидСоединения");
        Объект.КаталогFTP    = Настройка.Получить("FTP");
        Объект.Сервер         = Настройка.Получить("Сервер");
        Объект.Порт       = Настройка.Получить("Порт");
        Объект.Сервер      = Настройка.Получить("Сервер");
        Объект.Порт           = Настройка.Получить("Порт");
        Объект.Логин       = Настройка.Получить("Логин");
        Объект.Пароль      = Настройка.Получить("Пароль");
        Объект.Каталог       = Настройка.Получить("Каталог");
        Объект.Удалять  = Настройка.Получить("Удалять");
КонецПроцедуры

&НаКлиенте
Процедура СохранитьНастройки(Команда)
    СохранитьНастройкиНаСервере();
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Элементы.ВидС.СписокВыбора.Добавить("Локально");
    Элементы.ВидС.СписокВыбора.Добавить("FTPСервер");
        
    Если Найти(ПараметрЗапуска,"-exchange")>0 Тогда        
        
        ПроверитьНаСервере ();
        ЗавершитьРаботуСистемы(Ложь);
    КонецЕсли;
    
    ПолучитьНастройкиНаСервере();
    Если Объект.Вид = "" Тогда
        Элементы.Ftp.Видимость = Ложь;
        Элементы.ГруппаКаталог.Видимость = Ложь ;
    Иначе
        Вид();
    КонецЕсли;
КонецПроцедуры
12 Elfidor
 
16.01.20
17:47
(8) Зачем оно - сама не знаю. Мне сказали делать я делаю. Точнее пытаюсь
13 Злопчинский
 
16.01.20
20:43
как-то в одном магазинчике меня попросили "не ходите туда-сюда.." - а потому что я выйду то на витрину посмотрю, то зайду внутрь повнимательнее - и так пару раз - а у них такой вот "датчик"
Не дай бог так оголодать магазинчику...