Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
18 Дек 2017, 00:29
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Выгрузка приема из сайта в 1С 8.1  (Прочитано 2787 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн Zverff

  • ***
  • Сообщений: 108
  • РЕПУТАЦИЯ: 6
  • КПД: 6%
  • Регистрация: 2011-11-22
  • Сайт: 
  • Профессия: Программист 8.1
Здравствуйте, делаю выгрузку из сайта.
Проблема: Если на сайте зарегистрировались на прием 2-3 человека в разное время.
Пример: 1 пациент на ВТ: в 9:00
2 пациент на ЧТ: в 11:00
3 пациент на ПН: в 17:00

Когда делаю обмен с сайтом. То создается документ на 3 го пациента, на 1 и 2 пациента не создается.

Функция РазобратьCML(СтрокаCML)

Успешно = Истина;
ОбъектCML = Новый ЧтениеXML();

Попытка
ОбъектCML.УстановитьСтроку(СтрокаCML);
Исключение
СообщитьОбИсключительнойОшибке(Ложь);
Возврат Неопределено;
КонецПопытки;

   

ПостроительDOM = Новый ПостроительDOM;
ДокументDOM  = ПостроительDOM.Прочитать(ОбъектCML);

ФамилияПациентНаим = ДокументDOM.ПолучитьЭлементыПоИмени("Фамилия");
Для Позиц=0 По ФамилияПациентНаим.Количество()-1 Цикл
ДочерниеУзлы = ФамилияПациентНаим[Позиц].ДочерниеУзлы;
Для каждого ФамилияУзелНаим Из ДочерниеУзлы Цикл
//Сообщить (ФамилияУзелНаим.ТекстовоеСодержимое);
КонецЦикла;
КонецЦикла;

ИмяПациентНаим = ДокументDOM.ПолучитьЭлементыПоИмени("Имя");
Для Позиц=0 По ИмяПациентНаим.Количество()-1 Цикл
ДочерниеУзлы = ИмяПациентНаим[Позиц].ДочерниеУзлы;
Для каждого ИмяУзелНаим Из ДочерниеУзлы Цикл
//Сообщить (ИмяУзелНаим.ТекстовоеСодержимое);
КонецЦикла;
КонецЦикла;

ОтчествоПациентНаим = ДокументDOM.ПолучитьЭлементыПоИмени("Отчество");
Для Позиц=0 По ОтчествоПациентНаим.Количество()-1 Цикл
ДочерниеУзлы = ОтчествоПациентНаим[Позиц].ДочерниеУзлы;
Для каждого ОтчествоУзелНаим Из ДочерниеУзлы Цикл
//Сообщить (ОтчествоУзелНаим.ТекстовоеСодержимое);
КонецЦикла;
КонецЦикла;

ГодРожденияПациентНаим = ДокументDOM.ПолучитьЭлементыПоИмени("ГодРождения");
Для Позиц=0 По ГодРожденияПациентНаим.Количество()-1 Цикл
ДочерниеУзлы = ГодРожденияПациентНаим[Позиц].ДочерниеУзлы;
Для каждого ГодРожденияУзелНаим Из ДочерниеУзлы Цикл
//Сообщить (ИзСтрокиВДату(ГодРожденияУзелНаим.ТекстовоеСодержимое));
КонецЦикла;
КонецЦикла;


НаименованиеПациента = ФамилияУзелНаим.ТекстовоеСодержимое+ " " + ИмяУзелНаим.ТекстовоеСодержимое+ " " + ОтчествоУзелНаим.ТекстовоеСодержимое;
//Сообщить(НаименованиеПациента);

ТелефонПациент = ДокументDOM.ПолучитьЭлементыПоИмени("АдресноеПоле");
Для Позиц=0 По ТелефонПациент.Количество()-1 Цикл
ДочерниеУзлы = ТелефонПациент[Позиц].ДочерниеУзлы;
Для каждого ТелефонУзел Из ДочерниеУзлы Цикл
Если ТелефонУзел.ТекстовоеСодержимое = "Телефон" тогда
НомерТелефонУзел =  ТелефонУзел.СледующийСоседний.ТекстовоеСодержимое;
//Сообщить ("Телефон: " + НомерТелефонУзел);

КонецЕсли;
КонецЦикла;
КонецЦикла;


ТалДатаПриема = ДокументDOM.ПолучитьЭлементыПоИмени("ДатаПриема");
Для Позиц=0 По ТалДатаПриема.Количество()-1 Цикл
ДочерниеУзлы = ТалДатаПриема[Позиц].ДочерниеУзлы;
Для каждого ТалонУзелДатаПриема Из ДочерниеУзлы Цикл
ДатаВремя = СокрЛП(СтрЗаменить(ТалонУзелДатаПриема.ТекстовоеСодержимое, "Время:",""));
КонецЦикла;
КонецЦикла;


Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Пациенты.Наименование,
| Пациенты.ДатаРождения
|ИЗ
| Справочник.Пациенты КАК Пациенты
|ГДЕ
| Пациенты.Наименование = &НаимПациента
| И Пациенты.ДатаРождения = &ДРПациента";
Запрос.УстановитьПараметр("НаимПациента",СокрЛП(НаименованиеПациента));
Запрос.УстановитьПараметр("ДРПациента",ИзСтрокиВДату(ГодРожденияУзелНаим.ТекстовоеСодержимое));
Результат = Запрос.Выполнить().Выбрать();

ЗапросДок = Новый Запрос;
ЗапросДок.Текст = "ВЫБРАТЬ
| ТалонНаПриемВызовСпециалиста.ДатаВремяПриема,
| ТалонНаПриемВызовСпециалиста.Пациент.Ссылка
|ИЗ
| Документ.ТалонНаПриемВызовСпециалиста КАК ТалонНаПриемВызовСпециалиста
|ГДЕ
| ТалонНаПриемВызовСпециалиста.Пациент.Наименование = &ПацНаименование
| И ТалонНаПриемВызовСпециалиста.ДатаВремяПриема = &ДатаПриема";
ЗапросДок.УстановитьПараметр("ПацНаименование",СокрЛП(НаименованиеПациента));
ЗапросДок.УстановитьПараметр("ДатаПриема",ИзСтрокиВДатаВремя(ДатаВремя));
РезультатТал = ЗапросДок.Выполнить().Выбрать();

ЗапросПользователей = Новый  Запрос;
ЗапросПользователей.Текст = "ВЫБРАТЬ
| Пользователи.Ссылка КАК Пользователи,
| КлассификаторСпециализаций.Ссылка КАК Специализация
|ИЗ
| Справочник.Пользователи КАК Пользователи
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.КлассификаторСпециализаций КАК КлассификаторСпециализаций
| ПО Пользователи.Сотрудник.Специализации.Специализация.Ссылка = КлассификаторСпециализаций.Ссылка
|ГДЕ
| КлассификаторСпециализаций.Ссылка = &Специализация1
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ВложенныйЗапрос.Пользователи,
| ВложенныйЗапрос.Специализация
|ИЗ
| (ВЫБРАТЬ
| Пользователи.Ссылка КАК Пользователи,
| КлассификаторСпециализаций.Ссылка КАК Специализация
| ИЗ
| Справочник.Пользователи КАК Пользователи
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.КлассификаторСпециализаций КАК КлассификаторСпециализаций
| ПО Пользователи.Сотрудник.Специализации.Специализация.Ссылка = КлассификаторСпециализаций.Ссылка
| ГДЕ
| КлассификаторСпециализаций.Ссылка = &Специализация) КАК ВложенныйЗапрос";
ЗапросПользователей.УстановитьПараметр("Специализация", Справочники.КлассификаторСпециализаций.НайтиПоКоду("7303"));  
ЗапросПользователей.УстановитьПараметр("Специализация1", Справочники.КлассификаторСпециализаций.НайтиПоКоду("7309"));
РЗПолзователей = ЗапросПользователей.Выполнить().Выбрать();


Если Результат.Следующий() Тогда

//Сообщить("==================================================================================");
//Сообщить("Найден Пациент: " + СокрЛП(НаименованиеПациента) + ". Год Рождения: " + ГодРожденияУзелНаим.ТекстовоеСодержимое + " г.");

Иначе
НовыйПациент =Справочники.Пациенты.СоздатьЭлемент();
НовыйПациент.УстановитьНовыйКод();


ФамилияПациент = ДокументDOM.ПолучитьЭлементыПоИмени("Фамилия");
Для Позиц=0 По ФамилияПациент.Количество()-1 Цикл
ДочерниеУзлы = ФамилияПациент[Позиц].ДочерниеУзлы;
Для каждого ФамилияУзел Из ДочерниеУзлы Цикл
НовыйПациент.Фамилия = ФамилияУзел.ТекстовоеСодержимое;
//Сообщить (ФамилияУзел.ТекстовоеСодержимое);
КонецЦикла;
КонецЦикла;

ИмяПациент = ДокументDOM.ПолучитьЭлементыПоИмени("Имя");
Для Позиц=0 По ИмяПациент.Количество()-1 Цикл
ДочерниеУзлы = ИмяПациент[Позиц].ДочерниеУзлы;
Для каждого ИмяУзел Из ДочерниеУзлы Цикл
НовыйПациент.Имя = ИмяУзел.ТекстовоеСодержимое;
//Сообщить (ИмяУзел.ТекстовоеСодержимое);
КонецЦикла;
КонецЦикла;
ОтчествоПациент = ДокументDOM.ПолучитьЭлементыПоИмени("Отчество");
Для Позиц=0 По ОтчествоПациент.Количество()-1 Цикл
ДочерниеУзлы = ОтчествоПациент[Позиц].ДочерниеУзлы;
Для каждого ОтчествоУзел Из ДочерниеУзлы Цикл
НовыйПациент.Отчество = ОтчествоУзел.ТекстовоеСодержимое;
//Сообщить (ОтчествоУзел.ТекстовоеСодержимое);
КонецЦикла;
КонецЦикла;

ГодРожденияПациент = ДокументDOM.ПолучитьЭлементыПоИмени("ГодРождения");
Для Позиц=0 По ГодРожденияПациент.Количество()-1 Цикл
ДочерниеУзлы = ГодРожденияПациент[Позиц].ДочерниеУзлы;
Для каждого ГодРожденияУзел Из ДочерниеУзлы Цикл
НовыйПациент.ДатаРождения = ИзСтрокиВДату(ГодРожденияУзел.ТекстовоеСодержимое);
//Сообщить ("Год Рождения: " + ГодРожденияУзел.ТекстовоеСодержимое);
КонецЦикла;
КонецЦикла;

//
ТелефонПациент = ДокументDOM.ПолучитьЭлементыПоИмени("АдресноеПоле");
Для Позиц=0 По ТелефонПациент.Количество()-1 Цикл
ДочерниеУзлы = ТелефонПациент[Позиц].ДочерниеУзлы;
Для каждого ТелефонУзел Из ДочерниеУзлы Цикл
Если ТелефонУзел.ТекстовоеСодержимое = "Телефон" тогда
НомерТелефонУзел =  ТелефонУзел.СледующийСоседний.ТекстовоеСодержимое;
//Сообщить ("Телефон: " + НомерТелефонУзел);

КонецЕсли;
КонецЦикла;
КонецЦикла;



НовыйПациент.Записать();


Сообщить("==================================================================================");
сообщить("Создан новый пацент: " + СокрЛП(НаименованиеПациента) + ". Год Рожление: " + ГодРожденияУзел.ТекстовоеСодержимое + " г.");
КонецЕсли;
   

//============================================================================================================
//Проверка есть ли повторные талоны
   
Если РезультатТал.Следующий() Тогда
сообщить("Не создаем: Талон на прием");
Иначе   //Если нет то создаем талон к приему врачу

НовыйТалон = Документы.ТалонНаПриемВызовСпециалиста.СоздатьДокумент();
ХозОпераций = Справочники.ХозОперации.НайтиПоКоду("140010");
НовыйТалон.ХозОперация = ХозОпераций;
НовыйТалон.УстановитьНовыйНомер();

//выбор Пациента из хмл
ПациентНаим = Справочники.Пациенты.НайтиПоНаименованию(НаименованиеПациента);

спПациент = ПациентНаим;
НовыйТалон.Пациент = спПациент;
ТипМедКарты = Справочники.ТипыКарт.НайтиПоНаименованию("Стоматологического больного");
СпТипМедКарты = ТипМедКарты;
НовыйТалон.ТипМедицинскойКарты = СпТипМедКарты;
НовыйТалон.Дата = ТекущаяДата();
Валюта = Справочники.Валюты.НайтиПоКоду("398");
спВалюта = Валюта;
НовыйТалон.ВалютаДокумента = спВалюта;
ТипЦены = Справочники.ТипыЦен.НайтиПоНаименованию("Основной тип цен продажи");
спТипЦен = ТипЦены;
НовыйТалон.ТипЦен = спТипЦен;
НовыйТалон.КурсДокумента = "1";
НовыйТалон.КурсВалютыУпр = "1";
//выбор подразделение из хмл
ТалПодразделение = ДокументDOM.ПолучитьЭлементыПоИмени("Подразделение");
Для Позиц=0 По ТалПодразделение.Количество()-1 Цикл
ДочерниеУзлы = ТалПодразделение[Позиц].ДочерниеУзлы;
Для каждого ТалонУзелПодразделение Из ДочерниеУзлы Цикл
ПодразделениеОрг = Справочники.ПодразделенияКомпании.НайтиПоНаименованию(ТалонУзелПодразделение.ТекстовоеСодержимое);
Подразделение = ПодразделениеОрг;
НовыйТалон.ПодразделениеКомпании = Подразделение.Организация;
НовыйТалон.ПодразделениеКомпании = Подразделение;
КонецЦикла;
КонецЦикла;

//выбор специалиста из хмл
ТалСпециалист = ДокументDOM.ПолучитьЭлементыПоИмени("Специалист");
Для Позиц=0 По ТалСпециалист.Количество()-1 Цикл
ДочерниеУзлы = ТалСпециалист[Позиц].ДочерниеУзлы;
Для каждого ТалонУзелСпециалист Из ДочерниеУзлы Цикл
Специалист = Справочники.Сотрудники.НайтиПоНаименованию(ТалонУзелСпециалист.ТекстовоеСодержимое);
спСотрудники = Специалист;
НовыйТалон.СпециалистНаправления = СпСотрудники;
НовыйТалон.Кабинет = спСотрудники.Кабинет;
КонецЦикла;
КонецЦикла;

//выбор ДатаПриема из хмл
ТалДатаПриема = ДокументDOM.ПолучитьЭлементыПоИмени("ДатаПриема");
Для Позиц=0 По ТалДатаПриема.Количество()-1 Цикл
ДочерниеУзлы = ТалДатаПриема[Позиц].ДочерниеУзлы;
Для каждого ТалонУзелДатаПриема Из ДочерниеУзлы Цикл
ДатаВремя = СокрЛП(СтрЗаменить(ТалонУзелДатаПриема.ТекстовоеСодержимое, "Время:",""));
НовыйТалон.ДатаВремяПриема = ИзСтрокиВДатаВремя(ДатаВремя);
НовыйТалон.ДатаВремяОкончанияПриема = ИзСтрокиВДатаВремя(ДатаВремя)+3600;
КонецЦикла;
КонецЦикла;


Пока РЗПолзователей.Следующий() Цикл
Псообщение = РегистрыСведений.Напоминания.СоздатьМенеджерЗаписи();
Псообщение.Автор = ПараметрыСеанса.Пользователь;
Псообщение.ДатаНачала = ТекущаяДата();
Псообщение.РеальнаяДатаОповещения = ТекущаяДата();
Пользователь = РЗПолзователей.Пользователи;
Псообщение.Пользователь = Пользователь;
Сообщение = "Пациент: " + СокрЛП(НаименованиеПациента) + ". Год Рождения: " + ГодРожденияУзелНаим.ТекстовоеСодержимое + " г. " + "Телефон: " + НомерТелефонУзел + " НЕ ЗАБУДЬТЕ ЗАПОЛНИТЬ ДАННЫЕ ПАЦИЕНТА!!!" + " Врач: " + ТалонУзелСпециалист.ТекстовоеСодержимое + ". Подразделение: " + ТалонУзелПодразделение.ТекстовоеСодержимое + ". Дата приема: " + лев(СокрЛП(ТалонУзелДатаПриема.ТекстовоеСодержимое),10) + " г. Время приема: " + прав(СокрЛП(ТалонУзелДатаПриема.ТекстовоеСодержимое),5);
Псообщение.Тема = "Новый запись на прием к Врачу!";
Псообщение.Описание = Сообщение;
Псообщение.Записать();
КонецЦикла;

Сообщить(Сообщение);

НовыйТалон.Записать();
КонецЕсли;
           
           
КонецФункции


Оффлайн Yura063

  • *****
  • Сообщений: 1045
  • РЕПУТАЦИЯ: 136
  • КПД: 13%
  • Регистрация: 2010-11-15
  • Сайт: yuis.ru
  • Профессия: Программист 1С
А в справочник Пациенты он судя по коду должен тоже создавать только 3 пациента! так? 
Помогли, отблагодари!


Теги:
 

выгрузка из "Платежные документы" выборочно в "Бухгалтерию предприятия"

Автор hkvРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 6
Просмотров: 4122
Последний ответ 09 Окт 2014, 15:58
от дфтын
Выгрузка Бух учет из "Зарплаты и управления персоналом 8" в "1С:Бухгалтерию 8"

Автор KazakOFFРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 5
Просмотров: 2434
Последний ответ 10 Ноя 2015, 16:20
от vitasw
Ошибка при загрузке данных через (Обработка "Выгрузка и загрузка данных XML")

Автор Сергей_87Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 8579
Последний ответ 26 Апр 2012, 23:08
от Dethmontt
Модуль "выгрузка в банк"

Автор Dima IgnatovРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 954
Последний ответ 11 Май 2016, 13:23
от Rasty
Выгрузка из "Зарплата и кажпы" платеж за три месяца

Автор vlasssov71Раздел Пользователям "1С - Предприятие 8"

Ответов: 2
Просмотров: 1237
Последний ответ 07 Июл 2015, 15:19
от vlasssov71

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
133 Сообщений
ilyay ilyay
63 Сообщений
AIFrame
61 Сообщений
alex0402
50 Сообщений
andron81_81
44 Сообщений
oleg-x
41 Сообщений
MuI_I_Ika MuI_I_Ika
31 Сообщений
BuhRust
30 Сообщений
Golickoff Golickoff
27 Сообщений
alexandr_ll
23 Сообщений

* Кто онлайн

  • Точка Гостей: 205
  • Точка Скрытых: 0
  • Точка Пользователей: 7
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal