8.х Выгрузка приема из сайта в 1С 8.1

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Drakonchegg, 2 окт 2012.

  1. yzek
    Offline

    yzek Опытный в 1С

    Регистрация:
    13 окт 2010
    Сообщения:
    713
    Симпатии:
    0
    Баллы:
    26
    ФИО пациентов могут совпадать. У вас же в этом запросе
    Код:
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    | Пациенты.Наименование,
    | Пациенты.ДатаРождения
    |ИЗ
    | Справочник.Пациенты КАК Пациенты
    |ГДЕ
    | Пациенты.Наименование = &НаимПациента
    | И Пациенты.ДатаРождения = &ДРПациента";
    помимо отбора по ФИО еще и по дате рождения. То есть нужно получить Ссылку на элемент справочника "Пациенты" и ее уже в список значений добавлять.

    Вам нужно довольно много переделать. Сейчас попробую накидать.
  2. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    Код:
    POSITION = ДокументDOM.ПолучитьЭлементыПоИмени("Контрагент");
    Для Позиц=0 По POSITION.Количество()-1 Цикл
    
    ДочерниеУзлы = POSITION[Позиц].ДочерниеУзлы;
    НоваяСтрока = ТаблицаXML.Добавить();
    Для каждого Узел Из ДочерниеУзлы Цикл
    Если Узел.ИмяУзла = "Фамилия" Тогда
    Сообщить(Узел.ТекстовоеСодержимое);
    КонецЕсли;
    Если Узел.ИмяУзла = "Имя" Тогда
    Сообщить(Узел.ТекстовоеСодержимое);
    КонецЕсли;
    Если Узел.ИмяУзла = "Отчество" Тогда
    Сообщить(Узел.ТекстовоеСодержимое);
    КонецЕсли;
    Если Узел.ИмяУзла = "ГодРождения" Тогда
    Сообщить(Узел.ТекстовоеСодержимое);
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    
    так сработает?
  3. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    сделал так
    Код:
    Функция РазобратьCML(СтрокаCML)
    
    Успешно  = Истина;
    ОбъектCML = Новый ЧтениеXML();
    
    Попытка
    ОбъектCML.УстановитьСтроку(СтрокаCML);
    Исключение
    СообщитьОбИсключительнойОшибке(Ложь);
    Возврат Неопределено;
    КонецПопытки;
    
    
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Фамилия");
    ТЗ.Колонки.Добавить("Имя");
    ТЗ.Колонки.Добавить("Отчество");
    //ТЗ.Колонки.Добавить("ГодРождения");
    
    ПостроительDOM = Новый ПостроительDOM;
    ДокументDOM  = ПостроительDOM.Прочитать(ОбъектCML);
    
    POSITION = ДокументDOM.ПолучитьЭлементыПоИмени("Контрагент");
    Для Позиц=0 По POSITION.Количество()-1 Цикл
    ДочерниеУзлы = POSITION[Позиц].ДочерниеУзлы;
    НоваяСтрока = Тз.Добавить();
    Для каждого Узел Из ДочерниеУзлы Цикл
    Если Узел.ИмяУзла = "Фамилия" Тогда
    ФамилияПациента = Узел.ТекстовоеСодержимое;
    НоваяСтрока.Фамилия = ФамилияПациента;
    //Сообщить(Узел.ТекстовоеСодержимое);
    КонецЕсли;
    Если Узел.ИмяУзла = "Имя" Тогда
    ИмяПациента = Узел.ТекстовоеСодержимое;
    НоваяСтрока.Имя = ИмяПациента;
    //Сообщить(Узел.ТекстовоеСодержимое);
    КонецЕсли;
    Если Узел.ИмяУзла = "Отчество" Тогда
    ОтчествоПациента = Узел.ТекстовоеСодержимое;
    НоваяСтрока.Отчество = ОтчествоПациента;
    //Сообщить(Узел.ТекстовоеСодержимое);
    КонецЕсли;
    //Если Узел.ИмяУзла = "ГодРождения" Тогда
    // ГодРожденияПациента = Узел.ТекстовоеСодержимое;
    // НоваяСтрока.ГодРождения = ГодРожденияПациента;
    // Сообщить(Узел.ТекстовоеСодержимое);
    //КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    //Сообщить(ФамилияПациента + ИмяПациента + ОтчествоПациента);
    //Сообщить(НоваяСтрока);
    
    
    ТЗДокумента = Новый  ТаблицаЗначений;
    ТЗДокумента.Колонки.Добавить("Подразделение");
    ТЗДокумента.Колонки.Добавить("Специалист");
    ТЗДокумента.Колонки.Добавить("Кабинет");
    ТЗДокумента.Колонки.Добавить("ДатаПриема");
    
    POSITION = ДокументDOM.ПолучитьЭлементыПоИмени("Товар");
    Для Позиц=0 По POSITION.Количество()-1 Цикл
    
    ДочерниеУзлы = POSITION[Позиц].ДочерниеУзлы;
    ТЗДокСтрока = ТЗДокумента.Добавить();
    Для каждого Узел Из ДочерниеУзлы Цикл
    Если Узел.ИмяУзла = "Подразделение" Тогда
    ПодразделениеДок = Узел.ТекстовоеСодержимое;
    ТЗДокСтрока.Подразделение = ПодразделениеДок;
    КонецЕсли;
    Если Узел.ИмяУзла = "Специалист" Тогда
    СпециалистДок = Узел.ТекстовоеСодержимое;
    //КабинетДок = СпециалистДок.Кабинет;
    ТЗДокСтрока.Специалист = СпециалистДок;
    
    КонецЕсли;
    Если Узел.ИмяУзла = "ДатаПриема" Тогда
    ТЗДокСтрока.ДатаПриема = ИзСтрокиВДатаВремя(СокрЛП(СтрЗаменить(Узел.ТекстовоеСодержимое, "Время:","")))
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    
    
    
    //Сообщить(СписокДокумента); 
    //  //========================НомерТелефона 
    // ТелефонПациент = ДокументDOM.ПолучитьЭлементыПоИмени("АдресноеПоле");
    // Для Позиц=0 По ТелефонПациент.Количество()-1 Цикл
    //  ДочерниеУзлы = ТелефонПациент[Позиц].ДочерниеУзлы;
    //  Для каждого ТелефонУзел Из ДочерниеУзлы Цикл
    //   Если ТелефонУзел.ТекстовоеСодержимое = "Телефон" тогда	
    //    НомерТелефонУзел =  ТелефонУзел.СледующийСоседний.ТекстовоеСодержимое;
    //    //Сообщить ("Телефон: " + НомерТелефонУзел);
    //   КонецЕсли;
    //  КонецЦикла;
    // КонецЦикла;
    //
    //
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    | Пациенты.Фамилия,
    | Пациенты.Имя,
    | Пациенты.Отчество
    |ИЗ
    | Справочник.Пациенты КАК Пациенты
    |ГДЕ
    | Пациенты.Фамилия = &Фамилия
    | И Пациенты.Имя = &Имя
    | И Пациенты.Отчество = &Отчество";
    Запрос.УстановитьПараметр("Фамилия", ФамилияПациента);
    Запрос.УстановитьПараметр("Имя", ИмяПациента);
    Запрос.УстановитьПараметр("Отчество",ОтчествоПациента);
    //Запрос.УстановитьПараметр("ДРПациента",формат(ГодРожденияПациента,"ДЛФ=D"));
    Результат = Запрос.Выполнить().Выбрать();
    //
    //
    // ЗапросПользователей = Новый  Запрос;
    // ЗапросПользователей.Текст = "ВЫБРАТЬ
    // | Пользователи.Ссылка КАК Пользователи,
    // | КлассификаторСпециализаций.Ссылка КАК Специализация
    // |ИЗ
    // | Справочник.Пользователи КАК Пользователи
    // |  ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.КлассификаторСпециализаций КАК КлассификаторСпециализаций
    // |  ПО Пользователи.Сотрудник.Специализации.Специализация.Ссылка = КлассификаторСпециализаций.Ссылка
    // |ГДЕ
    // | КлассификаторСпециализаций.Ссылка = &Специализация1
    // |
    // |ОБЪЕДИНИТЬ ВСЕ
    // |
    // |ВЫБРАТЬ
    // | ВложенныйЗапрос.Пользователи,
    // | ВложенныйЗапрос.Специализация
    // |ИЗ
    // | (ВЫБРАТЬ
    // |  Пользователи.Ссылка КАК Пользователи,
    // |  КлассификаторСпециализаций.Ссылка КАК Специализация
    // | ИЗ
    // |  Справочник.Пользователи КАК Пользователи
    // |   ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.КлассификаторСпециализаций КАК КлассификаторСпециализаций
    // |   ПО Пользователи.Сотрудник.Специализации.Специализация.Ссылка = КлассификаторСпециализаций.Ссылка
    // | ГДЕ
    // |  КлассификаторСпециализаций.Ссылка = &Специализация) КАК ВложенныйЗапрос";
    // ЗапросПользователей.УстановитьПараметр("Специализация", Справочники.КлассификаторСпециализаций.НайтиПоКоду("7303"));	   
    // ЗапросПользователей.УстановитьПараметр("Специализация1", Справочники.КлассификаторСпециализаций.НайтиПоКоду("7309"));
    // РЗПолзователей = ЗапросПользователей.Выполнить().Выбрать();
    //
    //
    Если Результат.Следующий() Тогда
    Сообщить("Не создаем");
    
    Иначе
    
    Для Каждого Строка из ТЗ цикл
    НовыйПациент =Справочники.Пациенты.СоздатьЭлемент();
    НовыйПациент.УстановитьНовыйКод();
    Если Строка.Фамилия = Неопределено Тогда
    Продолжить;
    КонецЕсли;
    НовыйПациент.Фамилия = Строка.Фамилия;
    Если Строка.имя = Неопределено Тогда
    Продолжить;
    КонецЕсли;
    НовыйПациент.Имя = Строка.Имя;
    Если Строка.Отчество = Неопределено Тогда
    Продолжить;
    КонецЕсли;
    НовыйПациент.Отчество = Строка.Отчество;
    //НовыйПациент.ДатаРождения = ГодРожденияПациента;
    //НомерТелефонУзел =  НомерТелефонУзел;
    НаименованиеПациента = Строка.Фамилия+ " " + Строка.Имя+ " " + Строка.Отчество;
    Сообщить(НаименованиеПациента);
    НовыйПациент.Записать();
    КонецЦикла;
    
    КонецЕсли;
    
    //Сообщить("==================================================================================");
    //общить("Создан новый пацент: " + СокрЛП(НаименованиеПациента) + ". Год Рождение: " + формат(ГодРожденияПациента,"ДЛФ=D") + " г.");
    //КонецЦикла;
    ЗапросДок = Новый Запрос;
    ЗапросДок.Текст = "ВЫБРАТЬ
    | ТалонНаПриемВызовСпециалиста.ДатаВремяПриема,
    | ТалонНаПриемВызовСпециалиста.Пациент.Ссылка
    |ИЗ
    | Документ.ТалонНаПриемВызовСпециалиста КАК ТалонНаПриемВызовСпециалиста
    |ГДЕ
    | ТалонНаПриемВызовСпециалиста.ДатаВремяПриема = &ДатаПриема
    | И ТалонНаПриемВызовСпециалиста.Пациент.Ссылка = &Пациент";
    ЗапросДок.УстановитьПараметр("Пациент",НаименованиеПациента);
    ЗапросДок.УстановитьПараметр("ДатаПриема",ТЗДокСтрока.ДатаПриема);
    РезультатТал = ЗапросДок.Выполнить().Выбрать();
    Пока РезультатТал.Следующий() Цикл
    //Если РезультатТал.Следующий() тогда
    //Сообщить("НЕ создаем Талон К специалисту!");
    //иначе
    
    Для Каждого  ТзСтрока из ТЗДокумента Цикл
    НовыйТалон = Документы.ТалонНаПриемВызовСпециалиста.СоздатьДокумент();
    НовыйТалон.УстановитьНовыйНомер();
    
    
    ХозОпераций = Справочники.ХозОперации.НайтиПоКоду("140010");
    НовыйТалон.ХозОперация = ХозОпераций;
    
    НаименованиеПациента = ФамилияПациента + " " + ИмяПациента + " " + ОтчествоПациента;
    ПациентНаим = Справочники.Пациенты.НайтиПоНаименованию(НаименованиеПациента);
    спПациент = ПациентНаим;
    НовыйТалон.Пациент = спПациент;
    ТипМедКарты = Справочники.ТипыКарт.НайтиПоНаименованию("Стоматологического больного");
    СпТипМедКарты = ТипМедКарты;
    НовыйТалон.ТипМедицинскойКарты = СпТипМедКарты;
    НовыйТалон.Дата = ТекущаяДата();
    Валюта = Справочники.Валюты.НайтиПоКоду("398");
    спВалюта = Валюта;
    НовыйТалон.ВалютаДокумента = спВалюта;
    ТипЦены = Справочники.ТипыЦен.НайтиПоНаименованию("Основной тип цен продажи");
    спТипЦен = ТипЦены;
    НовыйТалон.ТипЦен = спТипЦен;
    НовыйТалон.КурсДокумента = "1";
    НовыйТалон.КурсВалютыУпр = "1";
    //НовыйТалон.ПодразделениеКомпании = Подразделение.Организация;
    Если ТзСтрока.Подразделение = Неопределено Тогда
    Продолжить;
    КонецЕсли;
    СпрПодраделение = Справочники.ПодразделенияКомпании.НайтиПоНаименованию(ТзСтрока.Подразделение);
    НовыйТалон.ПодразделениеКомпании = СпрПодраделение;
    Если ТзСтрока.Специалист = Неопределено Тогда
    Продолжить;
    КонецЕсли;
    СпрСотрудники = Справочники.Сотрудники.НайтиПоНаименованию(ТзСтрока.Специалист);
    НовыйТалон.СпециалистНаправления = СпрСотрудники;
    НовыйТалон.Кабинет = СпрСотрудники.Кабинет;
    НовыйТалон.ДатаВремяПриема = ТзСтрока.ДатаПриема;
    НовыйТалон.ДатаВремяОкончанияПриема = ТзСтрока.ДатаПриема+3600;
    
    //Пока РЗПолзователей.Следующий() Цикл
    //Псообщение = Неопределено;
    //Псообщение = РегистрыСведений.Напоминания.СоздатьМенеджерЗаписи();
    //Псообщение.Автор = ПараметрыСеанса.Пользователь;
    //Псообщение.ДатаНачала = ТекущаяДата();
    //Псообщение.РеальнаяДатаОповещения = ТекущаяДата();
    //Пользователь = РЗПолзователей.Пользователи;
    //Псообщение.Пользователь = Пользователь;
    //Псообщение.Тема = "Новый запись на прием к Врачу!";
    //Сообщение = "Пациент: " + СокрЛП(НаименованиеПациента) + ". Год Рождения: " + формат(ГодРожденияПациента,"ДЛФ=D") + " г. " + "Телефон: " + НомерТелефонУзел + " НЕ ЗАБУДЬТЕ ЗАПОЛНИТЬ ДАННЫЕ ПАЦИЕНТА!!!" + " Врач: " + спСотрудники + ". Подразделение: " + Подразделение + ". Дата приема: " + лев(СокрЛП(ТалонУзелДатаПриема.ТекстовоеСодержимое),10) + " г. Время приема: " + прав(СокрЛП(ТалонУзелДатаПриема.ТекстовоеСодержимое),5);
    
    // Псообщение.Описание = Сообщение;
    // Псообщение.Записать();
    //КонецЦикла;
    
    Сообщить("Пациент: " + СокрЛП(НаименованиеПациента) + ". Специалист: " + ТзСтрока.Специалист + " ДатаПрима: " + ТзСтрока.Датаприема);
    
    НовыйТалон.Записать();
    //КонецЕсли;
    КонецЦикла;
    
    КонецЦикла;
    КонецФункции
    
    все данные записывается, но как сделать сравнить по что Пациент и ДатаПриемы если такой есть в 1с, что бы он не создавал документ сново
  4. yzek
    Offline

    yzek Опытный в 1С

    Регистрация:
    13 окт 2010
    Сообщения:
    713
    Симпатии:
    0
    Баллы:
    26
    Я имел ввиду примерно так создать список значений пациентов:
    Код:
    СписокПациентов = Новый СписокЗначений;
    
    ДокументDOM = ПостроительDOM.Прочитать(ОбъектCML);
    
    POSITION = ДокументDOM.ПолучитьЭлементыПоИмени("Контрагент");
    
    Для Позиц = 0 По POSITION.Количество()-1 Цикл
    
    ДочерниеУзлы = POSITION[Позиц].ДочерниеУзлы;
    Для каждого Узел Из ДочерниеУзлы Цикл
    Если Узел.ИмяУзла = "Фамилия" Тогда
    ФамилияПациента = Узел.ТекстовоеСодержимое;
    КонецЕсли;
    Если Узел.ИмяУзла = "Имя" Тогда
    ИмяПациента = Узел.ТекстовоеСодержимое;
    КонецЕсли;
    Если Узел.ИмяУзла = "Отчество" Тогда
    ОтчествоПациента = Узел.ТекстовоеСодержимое;
    КонецЕсли;
    Если Узел.ИмяУзла = "ГодРождения" Тогда
    ГодРожденияПациента = Узел.ТекстовоеСодержимое;
    КонецЕсли;
    КонецЦикла;
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    | Пациенты.Ссылка
    |ИЗ
    | Справочник.Пациенты КАК Пациенты
    |ГДЕ
    | Пациенты.Фамилия = &ФамилияПациента
    | И Пациенты.Имя = &ИмяПациента
    | И Пациенты.Отчество = &ОтчествоПациента
    | И Пациенты.ДатаРождения = &ГодРожденияПациента";
    Запрос.УстановитьПараметр("ФамилияПациента", СокрЛП(ФамилияПациента));
    Запрос.УстановитьПараметр("ИмяПациента", СокрЛП(ИмяПациента));
    Запрос.УстановитьПараметр("ОтчествоПациента", СокрЛП(ОтчествоПациента));
    Запрос.УстановитьПараметр("ГодРожденияПациента", ИзСтрокиВДату(ГодРожденияПациента));
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
    СписокПациентов.Добавить(Выборка.Ссылка);
    КонецЦикла;
    
    КонецЦикла;
  5. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    Код:
    Пока Выборка.Следующий() Цикл
    СписокПациентов.Добавить(Выборка.Ссылка);
    КонецЦикла;
    Это для чего? и Как мне сравнивать есть ли пациент справочнике или нету? если нету то создавать новый
  6. yzek
    Offline

    yzek Опытный в 1С

    Регистрация:
    13 окт 2010
    Сообщения:
    713
    Симпатии:
    0
    Баллы:
    26
    Тогда так
    Код:
    Если Выборка.Количество() > 0 Тогда // клиент есть в базе
    Пока Выборка.Следующий() Цикл
    СписокПациентов.Добавить(Выборка.Ссылка);
    КонецЦикла;
    Иначе
    //создаем нового клиента и его добавляем ссылку на него в списокзначений
    КонецЕсли
  7. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    Большое Спасибо)с меня пиво =Д
    Ушел делать таким же способом документы)))
  8. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    Капец, когда в запросе устанавливаю параметры ДатаПриема или ГоДрождения . То запрос летит к черту и не работает
  9. yzek
    Offline

    yzek Опытный в 1С

    Регистрация:
    13 окт 2010
    Сообщения:
    713
    Симпатии:
    0
    Баллы:
    26
    СписокПациентов корректно отрабатывает?
    Напишите код Запроса по документам.
  10. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    Код:
     ЗапросДокумента = Новый Запрос;
    ЗапросДокумента.Текст = "ВЫБРАТЬ
    | ТалонНаПриемВызовСпециалиста.ДатаВремяПриема,
    | ТалонНаПриемВызовСпециалиста.Пациент.Ссылка,
    | ТалонНаПриемВызовСпециалиста.Ссылка
    |ИЗ
    | Документ.ТалонНаПриемВызовСпециалиста КАК ТалонНаПриемВызовСпециалиста
    |ГДЕ
    | ТалонНаПриемВызовСпециалиста.Пациент.Ссылка = &Пациент
    | И ТалонНаПриемВызовСпециалиста.ДатаВремяПриема = &ДатаПриема";
    ЗапросДокумента.УстановитьПараметр("Пациент", Справочники.Пациенты.НайтиПоНаименованию(СокрЛП(НаименованиеПациента)));
    ЗапросДокумента.УстановитьПараметр("ДатаПриема", ДокДата);
    Результат = ЗапросДокумента.Выполнить().Выбрать();
  11. yzek
    Offline

    yzek Опытный в 1С

    Регистрация:
    13 окт 2010
    Сообщения:
    713
    Симпатии:
    0
    Баллы:
    26
    Зачем же мы список пациентов создавали, если снова находим по наименованию?
    Код:
    Для Каждого ТекПациент Из СписокПациентов Цикл
    ЗапросДокумента = Новый Запрос;
    ЗапросДокумента.Текст = "ВЫБРАТЬ
    | ТалонНаПриемВызовСпециалиста.ДатаВремяПриема,
    | ТалонНаПриемВызовСпециалиста.Пациент.Ссылка,
    | ТалонНаПриемВызовСпециалиста.Ссылка
    |ИЗ
    | Документ.ТалонНаПриемВызовСпециалиста КАК ТалонНаПриемВызовСпециалиста
    |ГДЕ
    | ТалонНаПриемВызовСпециалиста.Пациент.Ссылка = &Пациент
    | И ТалонНаПриемВызовСпециалиста.ДатаВремяПриема = &ДатаПриема";
    ЗапросДокумента.УстановитьПараметр("Пациент", ТекПациент.Значение);
    ЗапросДокумента.УстановитьПараметр("ДатаПриема", ДокДата);
    Результат = ЗапросДокумента.Выполнить().Выбрать();
    
    КонецЦикла;
    Вот только не кошерно запросы в цикле писать...
  12. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    Код:
     СписокДокумента = Новый СписокЗначений;
    
    POSITION = ДокументDOM.ПолучитьЭлементыПоИмени("Товар");
    
    Для Позиц = 0 По POSITION.Количество()-1 Цикл
    
    ДочерниеУзлы = POSITION[Позиц].ДочерниеУзлы;
    Для каждого Узел Из ДочерниеУзлы Цикл
    Если Узел.ИмяУзла = "Подразделение" Тогда
    ДокПодразделение = Узел.ТекстовоеСодержимое;
    // Сообщить(Узел.ТекстовоеСодержимое);
    КонецЕсли;
    Если Узел.ИмяУзла = "Специалист" Тогда
    ДокСпециалист = Узел.ТекстовоеСодержимое;
    // Сообщить(Узел.ТекстовоеСодержимое);
    КонецЕсли;
    Если Узел.ИмяУзла = "ДатаПриема" Тогда
    ДокДата = СокрЛП(СтрЗаменить(Узел.ТекстовоеСодержимое, "Время:",""));
    ДокДатаПриема = ИзСтрокиВДатаВремя(СокрЛП(СтрЗаменить(Узел.ТекстовоеСодержимое, "Время:","")));
    // Сообщить(Узел.ТекстовоеСодержимое);
    КонецЕсли;
    КонецЦикла;
    Для Каждого ТекПациент Из СписокПациентов Цикл
    ЗапросДокумента = Новый Запрос;
    ЗапросДокумента.Текст = "ВЫБРАТЬ
    | ТалонНаПриемВызовСпециалиста.ДатаВремяПриема,
    | ТалонНаПриемВызовСпециалиста.Пациент.Ссылка
    |ИЗ
    | Документ.ТалонНаПриемВызовСпециалиста КАК ТалонНаПриемВызовСпециалиста
    |ГДЕ
    | ТалонНаПриемВызовСпециалиста.Пациент.Ссылка = &Пациент
    | И ТалонНаПриемВызовСпециалиста.ДатаВремяПриема = &ДатаПриема";
    ЗапросДокумента.УстановитьПараметр("Пациент", ТекПациент.Значение);
    ЗапросДокумента.УстановитьПараметр("ДатаПриема", ДокДатаПриема);
    Результат = ЗапросДокумента.Выполнить().Выбрать(); 
    
    
    
    Если Результат.Количество() > 0 Тогда 
    Пока Результат.Следующий() Цикл
    СписокДокумента.Добавить(Результат.ПациентСсылка);
    КонецЦикла;
    Иначе
    
    СписокДокумента.Добавить(Результат.ПациентСсылка);
    
    НовыйТалон = Документы.ТалонНаПриемВызовСпециалиста.СоздатьДокумент();
    НовыйТалон.УстановитьНовыйНомер();
    ХозОпераций = Справочники.ХозОперации.НайтиПоКоду("140010");
    НовыйТалон.ХозОперация = ХозОпераций;
    ПациентНаим = Справочники.Пациенты.НайтиПоНаименованию(ТекПациент.Значение);
    спПациент = ПациентНаим;
    НовыйТалон.Пациент = спПациент;
    ТипМедКарты = Справочники.ТипыКарт.НайтиПоНаименованию("Стоматологического больного");
    СпТипМедКарты = ТипМедКарты;
    НовыйТалон.ТипМедицинскойКарты = СпТипМедКарты;
    НовыйТалон.Дата = ТекущаяДата();
    Валюта = Справочники.Валюты.НайтиПоКоду("398");
    спВалюта = Валюта;
    НовыйТалон.ВалютаДокумента = спВалюта;
    ТипЦены = Справочники.ТипыЦен.НайтиПоНаименованию("Основной тип цен продажи");
    спТипЦен = ТипЦены;
    НовыйТалон.ТипЦен = спТипЦен;
    НовыйТалон.КурсДокумента = "1";
    НовыйТалон.КурсВалютыУпр = "1";
    //НовыйТалон.ПодразделениеКомпании = Подразделение.Организация;
    СпрПодраделение = Справочники.ПодразделенияКомпании.НайтиПоНаименованию(ДокПодразделение);
    НовыйТалон.ПодразделениеКомпании = СпрПодраделение;
    СпрСотрудники = Справочники.Сотрудники.НайтиПоНаименованию(ДокСпециалист);
    НовыйТалон.СпециалистНаправления = СпрСотрудники;
    НовыйТалон.Кабинет = СпрСотрудники.Кабинет;
    НовыйТалон.ДатаВремяПриема = ДокДатаПриема;
    НовыйТалон.ДатаВремяОкончанияПриема = ДокДатаПриема+3600;
    
    НовыйТалон.Записать();
    Сообщить("Создан талон к приему специалисту: Пациент: " + СокрЛП(спПациент) + ". Организация: " + СпрПодраделение + ". Врач: " + СпрСотрудники + ". Дата и Время приема: " + ДокДатаПриема);
    
    КонецЕсли;
    КонецЦикла;	
    КонецЦикла;
    
    Вот так сделал, документы записываются, но ФИО пациента то дублируется, или документ с одинкавыми ФИО, но доки разные
  13. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    Как перебрать СписокЗначений, а то у меня дублированные строки идут. Иванов, Иванов, Сидоров, Сидоров.
  14. yzek
    Offline

    yzek Опытный в 1С

    Регистрация:
    13 окт 2010
    Сообщения:
    713
    Симпатии:
    0
    Баллы:
    26
    А сколько у вас таких человек в справочнике? Может задвоения в вашей базе данных?
  15. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    Нет, все по одному, задвоения нету. Просто Когда в начале забиваем людей в СписокПациентов. Вот там идет уже начинаеться дублироваться пациенты
  16. yzek
    Offline

    yzek Опытный в 1С

    Регистрация:
    13 окт 2010
    Сообщения:
    713
    Симпатии:
    0
    Баллы:
    26
    Код:
    СписокПациентов = Новый СписокЗначений;
    
    ДокументDOM = ПостроительDOM.Прочитать(ОбъектCML);
    
    POSITION = ДокументDOM.ПолучитьЭлементыПоИмени("Контрагент");
    
    Для Позиц = 0 По POSITION.Количество()-1 Цикл
    
    ДочерниеУзлы = POSITION[Позиц].ДочерниеУзлы;
    Для каждого Узел Из ДочерниеУзлы Цикл
    Если Узел.ИмяУзла = "Фамилия" Тогда
    ФамилияПациента = Узел.ТекстовоеСодержимое;
    КонецЕсли;
    Если Узел.ИмяУзла = "Имя" Тогда
    ИмяПациента = Узел.ТекстовоеСодержимое;
    КонецЕсли;
    Если Узел.ИмяУзла = "Отчество" Тогда
    ОтчествоПациента = Узел.ТекстовоеСодержимое;
    КонецЕсли;
    Если Узел.ИмяУзла = "ГодРождения" Тогда
    ГодРожденияПациента = Узел.ТекстовоеСодержимое;
    КонецЕсли;
    КонецЦикла;
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    | Пациенты.Ссылка
    |ИЗ
    | Справочник.Пациенты КАК Пациенты
    |ГДЕ
    | Пациенты.Фамилия = &ФамилияПациента
    | И Пациенты.Имя = &ИмяПациента
    | И Пациенты.Отчество = &ОтчествоПациента
    | И Пациенты.ДатаРождения = &ГодРожденияПациента";
    Запрос.УстановитьПараметр("ФамилияПациента", СокрЛП(ФамилияПациента));
    Запрос.УстановитьПараметр("ИмяПациента", СокрЛП(ИмяПациента));
    Запрос.УстановитьПараметр("ОтчествоПациента", СокрЛП(ОтчествоПациента));
    Запрос.УстановитьПараметр("ГодРожденияПациента", ИзСтрокиВДату(ГодРожденияПациента));
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
    СписокПациентов.Добавить(Выборка.Ссылка);
    КонецЦикла;
    
    КонецЦикла;
    То есть у вас уже здесь появляются задвоения?
    Если так, то могу предположить, что один и тот же человек записывается несколько раз (например, к разным врачам).
  17. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    аха) совершенно в яблочкУ)
  18. yzek
    Offline

    yzek Опытный в 1С

    Регистрация:
    13 окт 2010
    Сообщения:
    713
    Симпатии:
    0
    Баллы:
    26
    Тогда список значений не пойдет. Как вариант, таблицу значений с составом: "Пациент" "Подразделение" "Специалист" "Кабинет" "ДатаПриема".
    А затем переберать эту ТЗ, а значения колонок каждой строки использовать как параметры при поиске документа.
    Только не пойму зачем вы в запросе выбираете это:
    Код:
    ЗапросДокумента.Текст = "ВЫБРАТЬ
    | ТалонНаПриемВызовСпециалиста.ДатаВремяПриема,
    | ТалонНаПриемВызовСпециалиста.Пациент.Ссылка
    Насколько я понимаю нужно проверить есть ли уже документ, устанавливая параметры (фильтры), т.е.
    Код:
    ЗапросДокумента.Текст = "ВЫБРАТЬ
    | ТалонНаПриемВызовСпециалиста.Ссылка
    |ИЗ
    | Документ.ТалонНаПриемВызовСпециалиста КАК ТалонНаПриемВызовСпециалиста
    |ГДЕ
    |..." //далее нужные параметры
    и если есть ссылка на документ - то не надо создавать, а если нет - то создаем новый.
    Но это я так представляю, может у вас есть другой вариант.
  19. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    С ТЗ я уже делал, вообщем не получилось(((

    в СЗ он начинает двоиться после запроса поиска похожим параметром пациента
  20. yzek
    Offline

    yzek Опытный в 1С

    Регистрация:
    13 окт 2010
    Сообщения:
    713
    Симпатии:
    0
    Баллы:
    26
    Значит что-то неправильно. Должно получиться.

Поделиться этой страницей