1. Акция на весь декабрь! Получай оплату х2 за уникальные статьи, объемом от 200 слов, если в заголовке темы и теле статьи присутствует слово Python
    Скрыть объявление

Не формируются документы с помощью Таблицы Значений (1С 7.7)

Тема в разделе "1C и всё что с ней связано", создана пользователем BBDragon, 1 мар 2010.

  1. BBDragon

    BBDragon Well-Known Member

    Регистрация:
    4 май 2008
    Сообщения:
    148
    Симпатии:
    0
    Необходимо переделать программу в соответствии с новыми требованиями (изменилась структура входящих и, соответственно, формируемых на их основе исходящих документов). Часть работы удалось сделать, но теперь я застрял. Необходимо из загружаемых документов создавать новые, при этом вести разбивку по регионам, т.е. для каждого региона создавать отдельный документ со списком всех пациентов за указанный период. Внутри документа желательно расположить пациентов в алфавитном порядке их фамилий. Подозреваю, что проблема в оформлении группировок запроса, но никак не могу докопаться до истины..

    [codebox]
    Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Обрабатывать НеПомеченныеНаУдаление;
    |ДатаДок = Документ.РеестрСчетовВходящийЛПУ.ДатаДок;
    |НомерДок = Документ.РеестрСчетовВходящийЛПУ.НомерДок;
    |КодТерритории = Документ.РеестрСчетовВходящийЛПУ.ОкатоВыстСчет;
    |ОкатоРегистрации = Документ.РеестрСчетовВходящийЛПУ.ОкатоРегистрации;
    |ОкатоСтрахования = Документ.РеестрСчетовВходящийЛПУ.ОкатоСтрахования;
    |СтатусДокумента1 = Документ.РеестрСчетовВходящийЛПУ.СтатусДокумента;
    |НомерКвартала = Документ.РеестрСчетовВходящийЛПУ.НомерКвартала;
    |СерияНомерПолиса = Документ.РеестрСчетовВходящийЛПУ.СерияНомерПолиса;
    |ДатаВыдачиПолиса = Документ.РеестрСчетовВходящийЛПУ.ДатаВыдачиПолиса;
    |ДатаОкончанияПолиса = Документ.РеестрСчетовВходящийЛПУ.ДатаОкончанияПолиса;
    |Регион=Документ.РеестрСчетовВходящийЛПУ.Регион;
    |ФамилияПациента = Документ.РеестрСчетовВходящийЛПУ.ФамилияПациента;
    |ИмяПациента = Документ.РеестрСчетовВходящийЛПУ.ИмяПациента;
    |ОтчествоПациента = Документ.РеестрСчетовВходящийЛПУ.ОтчествоПациента;
    |ПолПациента = Документ.РеестрСчетовВходящийЛПУ.ПолПациента;
    |ДатаРожденияПациента = Документ.РеестрСчетовВходящийЛПУ.ДатаРожденияПациента;
    |СтатусПредставителя = Документ.РеестрСчетовВходящийЛПУ.СтатусПредставителя;
    |ФамилияПредставителя = Документ.РеестрСчетовВходящийЛПУ.ФамилияПредставителя;
    |ИмяПредставителя = Документ.РеестрСчетовВходящийЛПУ.ИмяПредставителя;
    |ОтчествоПредставителя = Документ.РеестрСчетовВходящийЛПУ.ОчествоПредставителя;
    |ОГРНСМО = Документ.РеестрСчетовВходящийЛПУ.ОГРНСМО;
    |Гражданство = Документ.РеестрСчетовВходящийЛПУ.Гражданство;
    |КодДокумента = Документ.РеестрСчетовВходящийЛПУ.КодДокумента;
    |СерияДокумента = Документ.РеестрСчетовВходящийЛПУ.СерияДокумента;
    |НомерДокумента = Документ.РеестрСчетовВходящийЛПУ.НомерДокумента;
    |Район = Документ.РеестрСчетовВходящийЛПУ.Район;
    |КодНП = Документ.РеестрСчетовВходящийЛПУ.КодНП;
    |НаселенныйПункт = Документ.РеестрСчетовВходящийЛПУ.НаселенныйПункт;
    |КодУлицы = Документ.РеестрСчетовВходящийЛПУ.КодУлицы;
    |Улица = Документ.РеестрСчетовВходящийЛПУ.Улица;
    |Дом = Документ.РеестрСчетовВходящийЛПУ.Дом;
    |Корпус = Документ.РеестрСчетовВходящийЛПУ.Корпус;
    |Квартира = Документ.РеестрСчетовВходящийЛПУ.Квартира;
    |СтатусЗастрахованного = Документ.РеестрСчетовВходящийЛПУ.СтатусЗастрахованного;
    |МестоРаботы = Документ.РеестрСчетовВходящийЛПУ.МестоРаботы;
    |ДатаНачалаЛечения = Документ.РеестрСчетовВходящийЛПУ.ДатаНачалаЛечения;
    |ДатаОкончанияЛечения = Документ.РеестрСчетовВходящийЛПУ.ДатаОкончанияЛечения;
    |ВидМедицинскойПомощи = Документ.РеестрСчетовВходящийЛПУ.ВидМедицинскойПомощи;
    |КодПрофиля = Документ.РеестрСчетовВходящийЛПУ.КодПрофиля;
    |КодСпециальности = Документ.РеестрСчетовВходящийЛПУ.КодСпециальности;
    |КодОсновногоЗаболевания = Документ.РеестрСчетовВходящийЛПУ.КодОсновногоЗаболевания;
    |КодСопутствующегоЗаболевания =
    Документ.РеестрСчетовВходящийЛПУ.КодСопутствующегоЗаболевания;
    |ИсходЗаболевания = Документ.РеестрСчетовВходящийЛПУ.ИсходЗаболевания;
    |ОгрнЛПУ = Документ.РеестрСчетовВходящийЛПУ.ОгрнЛПУ;
    |СуммаКОплате = Документ.РеестрСчетовВходящийЛПУ.СуммаКОплате;
    |ПорядковыйНомер = Документ.РеестрСчетовВходящийЛПУ.ПорядковыйНомер;
    |КодПричины = Документ.РеестрСчетовВходящийЛПУ.КодПричины;
    |ПризнакОсобыйСлучай = Документ.РеестрСчетовВходящийЛПУ.ПризнакОсобыйСлучай;

    |НаименованиеСтраховщика = Документ.РеестрСчетовВходящийЛПУ.НаименованиеСтраховщика;
    |Количество = Документ.РеестрСчетовВходящийЛПУ.Количество;
    |Функция СуммаКОплатеСумма = Сумма(СуммаКОплате);
    |Функция КоличествоСумма = Сумма(Количество);
    |Группировка ОкатоСтрахования;
    |Группировка ФамилияПациента;

    |Условие(КодПричины = 0);
    |Условие(СтатусДокумента1 = Перечисление.СтатусДокумента.ПроизведенаОплата);
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;


    Пока Запрос.Группировка(1) = 1 Цикл
    Док=СоздатьОбъект("Документ.РеестрСчетовИсходящийВТФОМС");
    Док.Новый();
    Док.ДатаДок=ТекущаяДата();

    Док.КодТерритории=Запрос.КодТерритории;
    Док.ВыбНачПериода=ВыбНачПериода;
    Док.ВыбКонПериода=ВыбКонПериода;

    Пока Запрос.Группировка(2) = 1 Цикл

    Док.НоваяСтрока();
    Док.ОкатоРегистрации = Запрос.ОкатоРегистрации;
    Док.ОкатоСтрахования = Запрос.ОкатоСтрахования;
    Док.СерияНомерПолиса = Запрос.СерияНомерПолиса;
    Док.ДатаВыдачиПолиса = Запрос.ДатаВыдачиПолиса;
    Док.ДатаОкончанияПолиса = Запрос.ДатаОкончанияПолиса;
    Док.ФамилияПациента = Запрос.ФамилияПациента;
    Док.ИмяПациента = Запрос.ИмяПациента;
    Док.ОтчествоПациента = Запрос.ОтчествоПациента;
    Док.ПолПациента = Запрос.ПолПациента;
    Док.ДатаРожденияПациента = Запрос.ДатаРожденияПациента;
    Док.СтатусПредставителя = Запрос.СтатусПредставителя;
    Док.ФамилияПредставителя = Запрос.ФамилияПредставителя;
    Док.ИмяПредставителя = Запрос.ИмяПредставителя;
    Док.ОтчествоПредставителя = Запрос.ОтчествоПредставителя;
    Док.ОГРНСМО = Запрос.ОГРНСМО;
    Док.Гражданство = Запрос.Гражданство;
    Док.КодДокумента = Запрос.КодДокумента;
    Док.СерияДокумента = Запрос.СерияДокумента;
    Док.НомерДокумента = Запрос.НомерДокумента;
    Док.Район = Запрос.Район;
    Док.КодНП = Запрос.КодНП;
    Док.НаселенныйПункт = Запрос.НаселенныйПункт;
    Док.КодУлицы = Запрос.КодУлицы;
    Док.Улица = Запрос.Улица;
    Док.Дом = Запрос.Дом;
    Док.Корпус = Запрос.Корпус;
    Док.Квартира = Запрос.Квартира;
    Док.СтатусЗастрахованного = Запрос.СтатусЗастрахованного;
    Док.МестоРаботы = Запрос.МестоРаботы;
    Док.ДатаНачалаЛечения = Запрос.ДатаНачалаЛечения;
    Док.ДатаОкончанияЛечения = Запрос.ДатаОкончанияЛечения;
    Док.ВидМедицинскойПомощи = Запрос.ВидМедицинскойПомощи;
    Док.КодПрофиля = Запрос.КодПрофиля;
    Док.КодСпециальности = Запрос.КодСпециальности;
    Док.КодОсновногоЗаболевания = Запрос.КодОсновногоЗаболевания;
    Док.КодСопутствующегоЗаболевания = Запрос.КодСопутствующегоЗаболевания;
    Док.ИсходЗаболевания = Запрос.ИсходЗаболевания;
    Док.ОгрнЛПУ = Запрос.ОгрнЛПУ;
    Док.СуммаКОплате = Запрос.СуммаКОплате;
    Док.ПорядковыйНомер = Запрос.ПорядковыйНомер;
    Док.КодПричины= Запрос.КодПричины;
    Док.ПризнакОсобыйСлучай = Запрос.ПризнакОсобыйСлучай;
    КонецЦикла;

    Док.Записать();
    Док.Провести();
    КонецЦикла;
    Сообщить("Конец формирования реестров счетов исходящих");

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

    [/codebox]
     
  2. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Зря с запросом связался - гораздо проще перебрать документы по условию, собрать нужные в таблицу и по окончании перебора создать
    новый документ. И код будет куда короче и быстрее
     
  3. BBDragon

    BBDragon Well-Known Member

    Регистрация:
    4 май 2008
    Сообщения:
    148
    Симпатии:
    0
    Уважаемый vbs, очень прошу вас, приведите шаблон, пожалуйста :rolleyes:
    Код региона содержится в переменной ОкатоСтрахования
     
  4. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Doc = СоздатьДокумент("РеестрСчетовВходящийЛПУ");
    Doc.ВыбратьДокументы(Дата1,Дата2);
    Пока Doc.ПолучитьДокумент() = 1 Цикл
    Если Doc.ОкатоСтрахования <> ВыбранныйОкатоСтрахования тогда
    Продолжить
    КонецЕсли;
    Если //не выполняется условие по пациенту тогда
    Продолжить
    КонецЕсли;
    Doc.ВыгрузитьТабличнуюЧасть(ТЗ); // если нужные данные в ТЧ
    // Обеспечить добавление ТЧ документа в общую ТЗ
    КонецЦикла;
    Вариант : можно создать нужный список документов запросом с фильтром, а потом уже обрабатывать собранные запросом данные

    Примерно так
     
  5. BBDragon

    BBDragon Well-Known Member

    Регистрация:
    4 май 2008
    Сообщения:
    148
    Симпатии:
    0
    Создал процедуру Сформировать:

    Процедура Сформировать()
    СпрОкато=СоздатьОбъект(Справочник.КодыОкато); // справочник с кодами ОКАТО
    СпрОкато.ВыбратьЭлементы();
    Пока СпрОкато.ПолучитьЭлемент() = 1 Цикл
    ВыбранноеОкато = СпрОкато.ТекущийЭлемент();
    Doc = СоздатьДокумент("РеестрСчетовВходящийЛПУ");
    Doc.ВыбратьДокументы(ВыбНачПериода,ВыбНачПериода);
    Пока Doc.ПолучитьДокумент() = 1 Цикл
    ВыбратьСтроки();
    Пока ПолучитьСтроку()>0 Цикл
    Если Doc.ОкатоСтрахования = ВыбранноеОкато тогда
    //заносим эту строку в ТЗ
    КонецЕсли;
    КонецЦикла;
    Doc.ВыгрузитьТабличнуюЧасть(ТЗ); // если нужные данные в ТЧ
    // Обеспечить добавление ТЧ документа в общую ТЗ
    КонецЦикла;
    DocTFOMS = СоздатьДокумент("РеестрСчетовИсходящийВТФОМС");
    // заполняем документ списком пациентов из этого региона
    КонецЦикла;

    Сообщить("Конец формирования реестров счетов исходящих");
    КонецПроцедуры

    Алгоритм такой - перебираем все возможные коды ОКАТО по одному в цикле, далее выбираем все документы вида РеестрСчетовВходящийЛПУ в этом периоде и просматриваем по строкам. Если регион пациента совпадает с выбранным ОКАТО, то заносим его данные в Таблицу значений. После того как пробежались по всем документам за период формируем новый документ - РеестрСчетовИсходящийВТФОМС и заносим в него данные из ТЗ. Не могу разобраться как заносить и выгружать данные в ТЗ, подскажите еще немного, пожалуйста :rolleyes:
     
  6. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Если в таблице документа разные ОКАТО, делаешь так :
    // ОТЗ - полная ТЗ
    // ТЗ - табл.часть конкретного документа
    N = 0;
    Пока Doc.ПолучитьДокумент() = 1 Цикл
    Doc.ВыгрузитьТабличнуюЧасть(ТЗ);
    // Обеспечить добавление ТЧ документа в общую ТЗ
    ТЗ.ВыбратьСтроки();
    k = 0;
    Пока ТЗ.ПолучитьСтроку() = 1 цикл
    k = k + 1;
    Если // проверяем условие Тогда
    ОТЗ.НоваяСтрока();
    N = N +1:
    для m = 1 по ТЗ.КоличествоКолонок цикл
    ОТЗ.УстановитьЗначение(N,m,ТЗ.ПолучитьЗначение(k,m))
    конецЕсли;
    КонецЦикла;
    КонецЦикла;

    Cинтаксис уточни сам
     
  7. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Это плохой стиль.
    Ты перебираешь документы столько раз, сколько элементов в справочнике.
    Лучше это делать за один проход.
    Например, так : создать несколько таблиц значений и по коду ОКАТО добавлять в нужную
     
  8. BBDragon

    BBDragon Well-Known Member

    Регистрация:
    4 май 2008
    Сообщения:
    148
    Симпатии:
    0

    Я прекрасно понимаю это, но пока хотя бы так, оптимизировать алгоритм буду потом. Документы наконец-то стали формироваться (ура!), но, к огромному моему сожалению, они совершенно пустые!

    [codebox]
    Процедура Сформировать()
    СпрОкато = СоздатьОбъект("Справочник.КодТерритории"); // справочник с кодами ОКАТО
    СпрОкато.ВыбратьЭлементы();
    Пока СпрОкато.ПолучитьЭлемент() = 1 Цикл
    ВыбранноеОкато = СпрОкато.ТекущийЭлемент();
    Doc = СоздатьОбъект("Документ.РеестрСчетовВходящийЛПУ");
    Doc.ВыбратьДокументы(ВыбНачПериода,ВыбНачПериода);
    N = 0;
    ТЗ = СоздатьОбъект("ТаблицаЗначений");
    ОТЗ = СоздатьОбъект("ТаблицаЗначений");
    Пока Doc.ПолучитьДокумент() = 1 Цикл
    Doc.ВыгрузитьТабличнуюЧасть(ТЗ);
    // Обеспечить добавление ТЧ документа в общую ТЗ
    DocTFOMS = СоздатьОбъект("Документ.РеестрСчетовИсходящийВТФОМС");
    DocTFOMS.Новый();
    ОТЗ.НоваяКолонка("Номер", "Число",4,0);
    ОТЗ.НоваяКолонка("ОкатоСтрахования", "Строка",5);
    ОТЗ.НоваяКолонка("Фамилия", "Строка",40);
    ОТЗ.НоваяКолонка("Имя", "Строка",40);
    ОТЗ.НоваяКолонка("Отчество", "Строка",40);
    ОТЗ.НоваяКолонка("Пол", "Строка",1);
    ОТЗ.НоваяКолонка("ДатаРождения", "Дата");
    ОТЗ.НоваяКолонка("КодДокумента", "Число",2,0);
    ОТЗ.НоваяКолонка("СерияДокумента", "Строка",9);
    ОТЗ.НоваяКолонка("НомерДокумента", "Строка",8);
    ОТЗ.НоваяКолонка("СерияНомерПолиса", "Строка",25);
    ОТЗ.НоваяКолонка("ДатаВыдачиПолиса", "Дата");
    ОТЗ.НоваяКолонка("ДатаОкончанияПолиса", "Дата");
    ОТЗ.НоваяКолонка("СтатусПредставителя", "Число",1,0);
    ОТЗ.НоваяКолонка("ФамилияПредставителя", "Строка",40);
    ОТЗ.НоваяКолонка("ИмяПредставителя", "Строка",40);
    ОТЗ.НоваяКолонка("ОтчествоПредставителя", "Строка",40);
    ОТЗ.НоваяКолонка("ОГРНСМО", "Строка",15);
    ОТЗ.НоваяКолонка("Гражданство", "Строка",3);
    ОТЗ.НоваяКолонка("НаименованиеРайона", "Строка",150);
    ОТЗ.НоваяКолонка("КодНП", "Число",3,0);
    ОТЗ.НоваяКолонка("НаселенныйПункт", "Строка",150);
    ОТЗ.НоваяКолонка("КодУлицы", "Число",3,0);
    ОТЗ.НоваяКолонка("Улица", "Строка",150);
    ОТЗ.НоваяКолонка("Дом", "Строка",7);
    ОТЗ.НоваяКолонка("Корпус", "Строка",5);
    ОТЗ.НоваяКолонка("Квартира", "Строка",5);
    ОТЗ.НоваяКолонка("СтатусЗастрахованного", "Число",2,0);
    ОТЗ.НоваяКолонка("МестоРаботы", "Строка",150);
    ОТЗ.НоваяКолонка("ДатаНачалаЛечения", "Дата");
    ОТЗ.НоваяКолонка("ДатаОкончанияЛечения", "Дата");
    ОТЗ.НоваяКолонка("ВидМедицинскойПомощи", "Число",1,0);
    ОТЗ.НоваяКолонка("КодПрофиля", "Число",2,0);
    ОТЗ.НоваяКолонка("КодСпециальности", "Строка",9);
    ОТЗ.НоваяКолонка("КодОсновногоЗаболевания", "Строка",7);
    ОТЗ.НоваяКолонка("КодСопутствующегоЗаболевания", "Строка",7);
    ОТЗ.НоваяКолонка("ИсходЗаболевания", "Число",2,0);
    ОТЗ.НоваяКолонка("ОГРНЛПУ", "Строка",15);
    ОТЗ.НоваяКолонка("СуммаКОплате", "Число",11,2);
    ОТЗ.НоваяКолонка("ПорядковыйНомер", "Число",5,0);
    ОТЗ.НоваяКолонка("КодПричины", "Строка",8);
    ОТЗ.НоваяКолонка("ПризнакОсобыйСлучай", "Строка",7);
    ТЗ.ВыбратьСтроки();
    k = 0;
    Пока ТЗ.ПолучитьСтроку() = 1 цикл
    k = k + 1;
    Если ТЗ.ОкатоСтрахования = ВыбранноеОкато Тогда
    ОТЗ.НоваяСтрока();
    N = N +1;
    для m = 1 по ТЗ.КоличествоКолонок цикл
    ОТЗ.УстановитьЗначение(N,m,ТЗ.ПолучитьЗначение(k,m))
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    ОТЗ.ВыбратьСтроки();
    k=1;
    Пока ОТЗ.ПолучитьСтроку() = 1 цикл
    DocTFOMS.НоваяСтрока();
    DocTFOMS.НомерСтроки=k;
    DocTFOMS.ОкатоСтрахования=ОТЗ.ОкатоСтрахования;
    DocTFOMS.ФамилияПациента=ОТЗ.Фамилия;
    DocTFOMS.ИмяПациента=ОТЗ.Имя;
    DocTFOMS.ОтчествоПациента=ОТЗ.Отчество;
    DocTFOMS.ПолПациента=ОТЗ.Пол;
    DocTFOMS.ДатаРожденияПациента=ОТЗ.ДатаРождения;
    DocTFOMS.КодДокумента=ОТЗ.КодДокумента;
    DocTFOMS.СерияДокумента=ОТЗ.СерияДокумента;
    DocTFOMS.НомерДокумента=ОТЗ.НомерДокумента;
    DocTFOMS.СерияНомерПолиса=ОТЗ.СерияНомерПолиса;
    DocTFOMS.ДатаВыдачиПолиса=ОТЗ.ДатаВыдачиПолиса;
    DocTFOMS.ДатаОкончанияПолиса=ОТЗ.ДатаОкончанияПолиса;
    DocTFOMS.СтатусПредставителя=ОТЗ.СтатусПредставителя;
    DocTFOMS.ФамилияПредставителя=ОТЗ.ФамилияПредставителя;
    DocTFOMS.ИмяПредставителя=ОТЗ.ИмяПредставителя;
    DocTFOMS.ОтчествоПредставителя=ОТЗ.ОтчествоПредставителя;
    DocTFOMS.ОГРНСМО=ОТЗ.ОГРНСМО;
    DocTFOMS.Гражданство=ОТЗ.Гражданство;
    DocTFOMS.НаименованиеРайона=ОТЗ.НаименованиеРайона;
    DocTFOMS.КодНП=ОТЗ.КодНП;
    DocTFOMS.НаселенныйПункт=ОТЗ.НаселенныйПункт;
    DocTFOMS.КодУлицы=ОТЗ.КодУлицы;
    DocTFOMS.Улица=ОТЗ.Улица;
    DocTFOMS.Дом=ОТЗ.Дом;
    DocTFOMS.Корпус=ОТЗ.Корпус;
    DocTFOMS.Квартира=ОТЗ.Квартира;
    DocTFOMS.СтатусЗастрахованного=ОТЗ.СтатусЗастрахованного;
    DocTFOMS.МестоРаботы=ОТЗ.МестоРаботы;
    DocTFOMS.ДатаНачалаЛечения=ОТЗ.ДатаНачалаЛечения;
    DocTFOMS.ДатаОкончанияЛечения=ОТЗ.ДатаОкончанияЛечения;
    DocTFOMS.ВидМедициснкойПомощи=ОТЗ.ВидМедициснкойПомощи;
    DocTFOMS.КодПрофиля=ОТЗ.КодПрофиля;
    DocTFOMS.КодСпециальности=ОТЗ.КодСпециальности;
    DocTFOMS.КодОсновногоЗаболевания=ОТЗ.КодОсновногоЗаболевания;
    DocTFOMS.КодСопутствующегоЗаболевания=ОТЗ.КодСопутствующегоЗаболевания;
    DocTFOMS.ИсходЗаболевания=ОТЗ.ИсходЗаболевания;
    DocTFOMS.ОГРНЛПУ=ОТЗ.ОГРНЛПУ;
    DocTFOMS.СуммаКОплате=ОТЗ.СуммаКОплате;
    DocTFOMS.ПорядковыйНомер=ОТЗ.ПорядковыйНомер;
    DocTFOMS.КодПричины=ОТЗ.КодПричины;
    DocTFOMS.ПризнакОсобыйСлучай=ОТЗ.ПризнакОсобыйСлучай;
    КонецЦикла;
    КонецЦикла;
    DocTFOMS.Записать();
    DocTFOMS.Провести();
    КонецЦикла;
    Сообщить("Конец формирования реестров счетов исходящих");
    КонецПроцедуры
    [/codebox]

    Проблема заключается в загрузке и выгрузке данных в ОТЗ (общая таблица значений). Никак не могу понять как правильно сделать это, совсем уже запутался :)
     
  9. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Если исходный и новый документы имеют одинаковую структуру, совершенно нет необходимости
    организовывать ОТЗ путем создания новых колонок, тем более, в цикле (видимо, здесь основная ошибка)
    Сделай примерно так :
    Счетчик = 0;
    DocTFOMS = СоздатьОбъект("Документ.РеестрСчетовИсходящийВТФОМС");
    Пока Doc.ПолучитьДокумент() = 1 Цикл
    Счетчик = Счетчик + 1;
    Doc.ВыгрузитьТабличнуюЧасть(ТЗ);
    если Счетчик = 1 тогда
    ТЗ.Выгрузить(ОТЗ); // Будет создана Таблица значений той же структуры (колонки)
    ОТЗ.УдалитьСтроки(); // очищаем 1 раз ОТЗ, далее она будет только пополняться
    N = 0;
    КонецЕсли;
    ТЗ.ВыбратьСтроки();
    k = 0;
    Пока ТЗ.ПолучитьСтроку() = 1 цикл
    k = k + 1;
    Если ТЗ.ОкатоСтрахования = ВыбранноеОкато Тогда
    ОТЗ.НоваяСтрока();
    N = N +1;
    для m = 1 по ТЗ.КоличествоКолонок цикл
    ОТЗ.УстановитьЗначение(N,m,ТЗ.ПолучитьЗначение(k,m))
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    DocTFOMS.Новый();
    DocTFOMS.ЗагрузитьТабличнуюЧасть(ОТЗ);
    DocTFOMS.Записать(); // и т.д.
     
  10. BBDragon

    BBDragon Well-Known Member

    Регистрация:
    4 май 2008
    Сообщения:
    148
    Симпатии:
    0
    Уважаемый vbs, сделал все так - но опять то же самое, документы пустые(
    У документов одинаковая табличная часть, но шапки различаются.

    P.S. Внес значительные изменения в код, теперь данные в ТЗ выгружаются (раньше было пусто). Но в документы все равно не могу занести данные(

    [codebox]
    Процедура Сформировать()
    Перем ТЗ, ОТЗ;
    ТЗ = СоздатьОбъект(\"ТаблицаЗначений\");// Таблица значений для данных 1 документа
    ОТЗ = СоздатьОбъект(\"ТаблицаЗначений\"); // Общая таблица значений с данными всех пациентов отдельного региона

    // создаем набор колонок для ТЗ
    ТЗ.НоваяКолонка(\"Номер\", \"Число\",4,0);
    ТЗ.НоваяКолонка(\"ОкатоСтрахования\", \"Строка\",5);
    ТЗ.НоваяКолонка(\"Фамилия\", \"Строка\",40);
    ТЗ.НоваяКолонка(\"Имя\", \"Строка\",40);
    ТЗ.НоваяКолонка(\"Отчество\", \"Строка\",40);
    ТЗ.НоваяКолонка(\"Пол\", \"Строка\",1);
    ТЗ.НоваяКолонка(\"ДатаРождения\", \"Дата\");
    ТЗ.НоваяКолонка(\"КодДокумента\", \"Число\",2,0);
    ТЗ.НоваяКолонка(\"СерияДокумента\", \"Строка\",9);
    ТЗ.НоваяКолонка(\"НомерДокумента\", \"Строка\",8);
    ТЗ.НоваяКолонка(\"СерияНомерПолиса\", \"Строка\",25);
    ТЗ.НоваяКолонка(\"ДатаВыдачиПолиса\", \"Дата\");
    ТЗ.НоваяКолонка(\"ДатаОкончанияПолиса\", \"Дата\");
    ТЗ.НоваяКолонка(\"СтатусПредставителя\", \"Число\",1,0);
    ТЗ.НоваяКолонка(\"ФамилияПредставителя\", \"Строка\",40);
    ТЗ.НоваяКолонка(\"ИмяПредставителя\", \"Строка\",40);
    ТЗ.НоваяКолонка(\"ОтчествоПредставителя\", \"Строка\",40);
    ТЗ.НоваяКолонка(\"ОГРНСМО\", \"Строка\",15);
    ТЗ.НоваяКолонка(\"Гражданство\", \"Строка\",3);
    ТЗ.НоваяКолонка(\"НаименованиеРайона\", \"Строка\",150);
    ТЗ.НоваяКолонка(\"КодНП\", \"Число\",3,0);
    ТЗ.НоваяКолонка(\"НаселенныйПункт\", \"Строка\",150);
    ТЗ.НоваяКолонка(\"КодУлицы\", \"Число\",3,0);
    ТЗ.НоваяКолонка(\"Улица\", \"Строка\",150);
    ТЗ.НоваяКолонка(\"Дом\", \"Строка\",7);
    ТЗ.НоваяКолонка(\"Корпус\", \"Строка\",5);
    ТЗ.НоваяКолонка(\"Квартира\", \"Строка\",5);
    ТЗ.НоваяКолонка(\"СтатусЗастрахованного\", \"Число\",2,0);
    ТЗ.НоваяКолонка(\"МестоРаботы\", \"Строка\",150);
    ТЗ.НоваяКолонка(\"ДатаНачалаЛечения\", \"Дата\");
    ТЗ.НоваяКолонка(\"ДатаОкончанияЛечения\", \"Дата\");
    ТЗ.НоваяКолонка(\"ВидМедицинскойПомощи\", \"Число\",1,0);
    ТЗ.НоваяКолонка(\"КодПрофиля\", \"Число\",2,0);
    ТЗ.НоваяКолонка(\"КодСпециальности\", \"Строка\",9);
    ТЗ.НоваяКолонка(\"КодОсновногоЗаболевания\", \"Строка\",7);
    ТЗ.НоваяКолонка(\"КодСопутствующегоЗаболевания\", \"Строка\",7);
    ТЗ.НоваяКолонка(\"ИсходЗаболевания\", \"Число\",2,0);
    ТЗ.НоваяКолонка(\"ОГРНЛПУ\", \"Строка\",15);
    ТЗ.НоваяКолонка(\"СуммаКОплате\", \"Число\",11,2);
    ТЗ.НоваяКолонка(\"ПорядковыйНомер\", \"Число\",5,0);
    ТЗ.НоваяКолонка(\"КодПричины\", \"Строка\",8);
    ТЗ.НоваяКолонка(\"ПризнакОсобыйСлучай\", \"Строка\",7);

    // аналогичный набор колонок создаем и для ОТЗ
    ОТЗ.НоваяКолонка(\"Номер\", \"Число\",4,0);
    ОТЗ.НоваяКолонка(\"ОкатоСтрахования\", \"Строка\",5);
    ОТЗ.НоваяКолонка(\"Фамилия\", \"Строка\",40);
    ОТЗ.НоваяКолонка(\"Имя\", \"Строка\",40);
    ОТЗ.НоваяКолонка(\"Отчество\", \"Строка\",40);
    ОТЗ.НоваяКолонка(\"Пол\", \"Строка\",1);
    ОТЗ.НоваяКолонка(\"ДатаРождения\", \"Дата\");
    ОТЗ.НоваяКолонка(\"КодДокумента\", \"Число\",2,0);
    ОТЗ.НоваяКолонка(\"СерияДокумента\", \"Строка\",9);
    ОТЗ.НоваяКолонка(\"НомерДокумента\", \"Строка\",8);
    ОТЗ.НоваяКолонка(\"СерияНомерПолиса\", \"Строка\",25);
    ОТЗ.НоваяКолонка(\"ДатаВыдачиПолиса\", \"Дата\");
    ОТЗ.НоваяКолонка(\"ДатаОкончанияПолиса\", \"Дата\");
    ОТЗ.НоваяКолонка(\"СтатусПредставителя\", \"Число\",1,0);
    ОТЗ.НоваяКолонка(\"ФамилияПредставителя\", \"Строка\",40);
    ОТЗ.НоваяКолонка(\"ИмяПредставителя\", \"Строка\",40);
    ОТЗ.НоваяКолонка(\"ОтчествоПредставителя\", \"Строка\",40);
    ОТЗ.НоваяКолонка(\"ОГРНСМО\", \"Строка\",15);
    ОТЗ.НоваяКолонка(\"Гражданство\", \"Строка\",3);
    ОТЗ.НоваяКолонка(\"НаименованиеРайона\", \"Строка\",150);
    ОТЗ.НоваяКолонка(\"КодНП\", \"Число\",3,0);
    ОТЗ.НоваяКолонка(\"НаселенныйПункт\", \"Строка\",150);
    ОТЗ.НоваяКолонка(\"КодУлицы\", \"Число\",3,0);
    ОТЗ.НоваяКолонка(\"Улица\", \"Строка\",150);
    ОТЗ.НоваяКолонка(\"Дом\", \"Строка\",7);
    ОТЗ.НоваяКолонка(\"Корпус\", \"Строка\",5);
    ОТЗ.НоваяКолонка(\"Квартира\", \"Строка\",5);
    ОТЗ.НоваяКолонка(\"СтатусЗастрахованного\", \"Число\",2,0);
    ОТЗ.НоваяКолонка(\"МестоРаботы\", \"Строка\",150);
    ОТЗ.НоваяКолонка(\"ДатаНачалаЛечения\", \"Дата\");
    ОТЗ.НоваяКолонка(\"ДатаОкончанияЛечения\", \"Дата\");
    ОТЗ.НоваяКолонка(\"ВидМедицинскойПомощи\", \"Число\",1,0);
    ОТЗ.НоваяКолонка(\"КодПрофиля\", \"Число\",2,0);
    ОТЗ.НоваяКолонка(\"КодСпециальности\", \"Строка\",9);
    ОТЗ.НоваяКолонка(\"КодОсновногоЗаболевания\", \"Строка\",7);
    ОТЗ.НоваяКолонка(\"КодСопутствующегоЗаболевания\", \"Строка\",7);
    ОТЗ.НоваяКолонка(\"ИсходЗаболевания\", \"Число\",2,0);
    ОТЗ.НоваяКолонка(\"ОГРНЛПУ\", \"Строка\",15);
    ОТЗ.НоваяКолонка(\"СуммаКОплате\", \"Число\",11,2);
    ОТЗ.НоваяКолонка(\"ПорядковыйНомер\", \"Число\",5,0);
    ОТЗ.НоваяКолонка(\"КодПричины\", \"Строка\",8);
    ОТЗ.НоваяКолонка(\"ПризнакОсобыйСлучай\", \"Строка\",7);


    СпрОкато = СоздатьОбъект(\"Справочник.КодТерритории\"); // справочник с кодами ОКАТО
    СпрОкато.ВыбратьЭлементы();
    Пока СпрОкато.ПолучитьЭлемент() = 1 Цикл
    ВыбранноеОкато = СпрОкато.ТекущийЭлемент();
    Doc = СоздатьОбъект(\"Документ.РеестрСчетовВходящийЛПУ\");
    Doc.ВыбратьДокументы(ВыбНачПериода,ВыбНачПериода);
    DocTFOMS = СоздатьОбъект(\"Документ.РеестрСчетовИсходящийВТФОМС\");
    Пока Doc.ПолучитьДокумент() = 1 Цикл // перебираем все документы за период
    Если (Doc.ПометкаУдаления()=0) и (Doc.Проведен()=1) Тогда //просматриваем проведенные и не поченные на удаление документы
    СчетчикСтрок=1;
    Doc.ВыбратьСтроки();
    Пока Doc.ПолучитьСтроку()=1 Цикл // перебираем все строки документа и заносим в ТЗ
    ТЗ.НоваяСтрока();
    ТЗ.Номер=СчетчикСтрок;
    ТЗ.ОкатоСтрахования = Doc.ОкатоСтрахования;
    ТЗ.Фамилия=Doc.ФамилияПациента;
    ТЗ.Имя=DOC.ИмяПациента;
    ТЗ.Отчество=DOC.ОтчествоПациента;
    ТЗ.Пол=DOC.ПолПациента;
    ТЗ.ДатаРождения=DOC.ДатаРожденияПациента;
    ТЗ.КодДокумента=DOC.КодДокумента;
    ТЗ.СерияДокумента=DOC.СерияДокумента;
    ТЗ.НомерДокумента=DOC.НомерДокумента;
    ТЗ.СерияНомерПолиса=DOC.СерияНомерПолиса;
    ТЗ.ДатаВыдачиПолиса=DOC.ДатаВыдачиПолиса;
    ТЗ.ДатаОкончанияПолиса=DOC.ДатаОкончанияПолиса;
    ТЗ.СтатусПредставителя=DOC.СтатусПредставителя;
    ТЗ.ФамилияПредставителя=DOC.ФамилияПредставителя;
    ТЗ.ИмяПредставителя=DOC.ИмяПредставителя;
    ТЗ.ОтчествоПредставителя=DOC.ОтчествоПредставителя;
    ТЗ.ОГРНСМО=DOC.ОГРНСМО;
    ТЗ.Гражданство=DOC.Гражданство;
    ТЗ.НаименованиеРайона=DOC.Район;
    ТЗ.КодНП=DOC.КодНП;
    ТЗ.НаселенныйПункт=DOC.НаселенныйПункт;
    ТЗ.КодУлицы=DOC.КодУлицы;
    ТЗ.Улица=DOC.Улица;
    ТЗ.Дом=DOC.Дом;
    ТЗ.Корпус=DOC.Корпус;
    ТЗ.Квартира=DOC.Квартира;
    ТЗ.СтатусЗастрахованного=DOC.СтатусЗастрахованного;
    ТЗ.МестоРаботы=DOC.МестоРаботы;
    ТЗ.ДатаНачалаЛечения=DOC.ДатаНачалаЛечения;
    ТЗ.ДатаОкончанияЛечения=DOC.ДатаОкончанияЛечения;
    ТЗ.ВидМедицинскойПомощи=DOC.ВидМедицинскойПомощи;
    ТЗ.КодПрофиля=DOC.КодПрофиля;
    ТЗ.КодСпециальности=DOC.КодСпециальности;
    ТЗ.КодОсновногоЗаболевания=DOC.КодОсновногоЗаболевания;
    ТЗ.КодСопутствующегоЗаболевания=DOC.КодСопутствующегоЗаболевания;
    ТЗ.ИсходЗаболевания=DOC.ИсходЗаболевания;
    ТЗ.ОГРНЛПУ=DOC.ОГРНЛПУ;
    ТЗ.СуммаКОплате=DOC.СуммаКОплате;
    ТЗ.ПорядковыйНомер=DOC.ПорядковыйНомер;
    ТЗ.КодПричины=DOC.КодПричины;
    ТЗ.ПризнакОсобыйСлучай=DOC.ПризнакОсобыйСлучай;
    СчетчикСтрок = СчетчикСтрок + 1;
    КонецЦикла;
    ТЗ.ВыбратьСтроки();
    k = 0;
    N=0;
    Пока ТЗ.ПолучитьСтроку() = 1 цикл // перебираем строки ТЗ
    k = k + 1;
    //Если ТЗ.ОкатоСтрахования = ВыбранноеОкато Тогда // заносим пациентов с указанным Окато в ОТЗ
    ОТЗ.НоваяСтрока();
    N = N +1;
    для m = 1 по ТЗ.КоличествоКолонок() цикл
    ОТЗ.УстановитьЗначение(N,m,ТЗ.ПолучитьЗначение(k,m))
    КонецЦикла;
    //КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    //DocTFOMS.Новый();
    ОТЗ.ВыбратьСтроки();// перебираем строки из ОТЗ (пациенты с одинаковым ОКАТО)
    k=1;
    Пока ОТЗ.ПолучитьСтроку() = 1 цикл
    Сообщить(ОТЗ.ОкатоСтрахования);
    Сообщить(ОТЗ.Фамилия);
    Сообщить(ОТЗ.Имя);
    Сообщить(ОТЗ.Отчество);
    //DocTFOMS.НоваяСтрока();
    //DocTFOMS.НомерСтроки=k;
    //DocTFOMS.ОкатоСтрахования=ОТЗ.ОкатоСтрахования;
    //DocTFOMS.ФамилияПациента=ОТЗ.Фамилия;
    //DocTFOMS.ИмяПациента=ОТЗ.Имя;
    //DocTFOMS.ОтчествоПациента=ОТЗ.Отчество;
    //DocTFOMS.ПолПациента=ОТЗ.Пол;
    //DocTFOMS.ДатаРожденияПациента=ОТЗ.ДатаРождения;
    //DocTFOMS.КодДокумента=ОТЗ.КодДокумента;
    //DocTFOMS.СерияДокумента=ОТЗ.СерияДокумента;
    //DocTFOMS.НомерДокумента=ОТЗ.НомерДокумента;
    //DocTFOMS.СерияНомерПолиса=ОТЗ.СерияНомерПолиса;
    //DocTFOMS.ДатаВыдачиПолиса=ОТЗ.ДатаВыдачиПолиса;
    //DocTFOMS.ДатаОкончанияПолиса=ОТЗ.ДатаОкончанияПолиса;
    //DocTFOMS.СтатусПредставителя=ОТЗ.СтатусПредставителя;
    //DocTFOMS.ФамилияПредставителя=ОТЗ.ФамилияПредставителя;
    //DocTFOMS.ИмяПредставителя=ОТЗ.ИмяПредставителя;
    //DocTFOMS.ОтчествоПредставителя=ОТЗ.ОтчествоПредставителя;
    //DocTFOMS.ОГРНСМО=ОТЗ.ОГРНСМО;
    //DocTFOMS.Гражданство=ОТЗ.Гражданство;
    //DocTFOMS.НаименованиеРайона=ОТЗ.НаименованиеРайона;
    //DocTFOMS.КодНП=ОТЗ.КодНП;
    //DocTFOMS.НаселенныйПункт=ОТЗ.НаселенныйПункт;
    //DocTFOMS.КодУлицы=ОТЗ.КодУлицы;
    //DocTFOMS.Улица=ОТЗ.Улица;
    //DocTFOMS.Дом=ОТЗ.Дом;
    //DocTFOMS.Корпус=ОТЗ.Корпус;
    //DocTFOMS.Квартира=ОТЗ.Квартира;
    //DocTFOMS.СтатусЗастрахованного=ОТЗ.СтатусЗастрахованного;
    //DocTFOMS.МестоРаботы=ОТЗ.МестоРаботы;
    //DocTFOMS.ДатаНачалаЛечения=ОТЗ.ДатаНачалаЛечения;
    //DocTFOMS.ДатаОкончанияЛечения=ОТЗ.ДатаОкончанияЛечения;
    //DocTFOMS.ВидМедициснкойПомощи=ОТЗ.ВидМедициснкойПомощи;
    //DocTFOMS.КодПрофиля=ОТЗ.КодПрофиля;
    //DocTFOMS.КодСпециальности=ОТЗ.КодСпециальности;
    //DocTFOMS.КодОсновногоЗаболевания=ОТЗ.КодОсновногоЗаболевания;
    //DocTFOMS.КодСопутствующегоЗаболевания=ОТЗ.КодСопутствующегоЗаболевания;
    //DocTFOMS.ИсходЗаболевания=ОТЗ.ИсходЗаболевания;
    //DocTFOMS.ОГРНЛПУ=ОТЗ.ОГРНЛПУ;
    //DocTFOMS.СуммаКОплате=ОТЗ.СуммаКОплате;
    //DocTFOMS.ПорядковыйНомер=ОТЗ.ПорядковыйНомер;
    //DocTFOMS.КодПричины=ОТЗ.КодПричины;
    //DocTFOMS.ПризнакОсобыйСлучай=ОТЗ.ПризнакОсобыйСлучай;
    //k=k+1;
    КонецЦикла;
    //DocTFOMS.Записать(); // и т.д.
    //DocTFOMS.Провести();
    КонецЦикла;
    Сообщить(\"Конец формирования реестров счетов исходящих\");
    КонецПроцедуры

    [/codebox]

    Для проверки вывожу данные на экран - они есть! А вот в документ не выгружаются(
     
  11. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    ОкатоСтрахования у тебя в документе имеет тип "строка" 5 символов, а сравниваешь ты его с ЭЛЕМЕНТОМ справочника, а надо с КОДОМ


    ВыбранноеОКАТО = СПРОКАТО.Код

    И неплохо бы сравнивать обрезанные справа реквизиты с обрезанным справа кодом

    А еще лучше - изменить тип реквизита ОкатоСтрахования на "Справочник.ОКАТО", тогда и твой код сработает
     
  12. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Вот тебе работающая обработка
    И ряд замечаний :
    1. В справочнике "Пациенты" 13 реквизитов, а ты все дублируешь в документ, причем все надо заполнять руками, зачем же тогда справочник ?
    Оставь один реквизит типа "Справочник.Пациенты", остальные данные определяй из него, табличная часть резко уменьшится в ширину
    2. Кнопку "Закрыть" лучше делать самой правой, а не самой левой, это общий стиль, а к твоему я в твоей базе привыкнуть так и не смог
     

    Вложения:

    • Reestr.rar
      Размер файла:
      3,9 КБ
      Просмотров:
      9
  13. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Как показывает моя практика, лучше сразу, чем потом) Потом думается, "работает и лучше не трогать..."))
     
  14. BBDragon

    BBDragon Well-Known Member

    Регистрация:
    4 май 2008
    Сообщения:
    148
    Симпатии:
    0
    Все верно, в запарке проглядел это)) Как раз сегодня утром вспомнил про это :)
    Я немного по-другому сделал - изменил условие в цикле на:

    Если ТЗ.ОкатоСтрахования = ВыбранноеОкато.ПолныйКод Тогда

    Обработка, к сожалению, работает некорректно - документы пустые. Таким простым образом данные не выгружаются - приходится все делать построчно, иначе никак.. :maybe:
    1. Данные приходится копировать все, ибо форма реестра именно такая, нужно заполнять все 40 с лишним полей.
    2. Программу писал не я, мне просто поручили в срочном порядке переделать ее под требования нового приказа.

    Все верно, просто хотелось сначала решить главную проблему - формирование документов. Теперь вот думаю над решением этой проблемы.


    [codebox]
    Процедура Сформировать()
    Перем ТЗ, ОТЗ;

    ТЗ = СоздатьОбъект("ТаблицаЗначений");// Таблица значений для данных 1 документа
    ОТЗ = СоздатьОбъект("ТаблицаЗначений"); // Общая таблица значений с данными всех пациентов отдельного региона

    // создаем набор колонок для ТЗ
    ТЗ.НоваяКолонка("Номер", "Число",4,0);
    ТЗ.НоваяКолонка("ОкатоСтрахования", "Строка",5);
    ТЗ.НоваяКолонка("Фамилия", "Строка",40);
    ТЗ.НоваяКолонка("Имя", "Строка",40);
    ТЗ.НоваяКолонка("Отчество", "Строка",40);
    ТЗ.НоваяКолонка("Пол", "Строка",1);
    ТЗ.НоваяКолонка("ДатаРождения", "Дата");
    ТЗ.НоваяКолонка("КодДокумента", "Число",2,0);
    ТЗ.НоваяКолонка("СерияДокумента", "Строка",9);
    ТЗ.НоваяКолонка("НомерДокумента", "Строка",8);
    ТЗ.НоваяКолонка("СерияНомерПолиса", "Строка",25);
    ТЗ.НоваяКолонка("ДатаВыдачиПолиса", "Дата");
    ТЗ.НоваяКолонка("ДатаОкончанияПолиса", "Дата");
    ТЗ.НоваяКолонка("СтатусПредставителя", "Число",1,0);
    ТЗ.НоваяКолонка("ФамилияПредставителя", "Строка",40);
    ТЗ.НоваяКолонка("ИмяПредставителя", "Строка",40);
    ТЗ.НоваяКолонка("ОтчествоПредставителя", "Строка",40);
    ТЗ.НоваяКолонка("ОГРНСМО", "Строка",15);
    ТЗ.НоваяКолонка("Гражданство", "Строка",3);
    ТЗ.НоваяКолонка("НаименованиеРайона", "Строка",150);
    ТЗ.НоваяКолонка("КодНП", "Число",3,0);
    ТЗ.НоваяКолонка("НаселенныйПункт", "Строка",150);
    ТЗ.НоваяКолонка("КодУлицы", "Число",3,0);
    ТЗ.НоваяКолонка("Улица", "Строка",150);
    ТЗ.НоваяКолонка("Дом", "Строка",7);
    ТЗ.НоваяКолонка("Корпус", "Строка",5);
    ТЗ.НоваяКолонка("Квартира", "Строка",5);
    ТЗ.НоваяКолонка("СтатусЗастрахованного", "Число",2,0);
    ТЗ.НоваяКолонка("МестоРаботы", "Строка",150);
    ТЗ.НоваяКолонка("ДатаНачалаЛечения", "Дата");
    ТЗ.НоваяКолонка("ДатаОкончанияЛечения", "Дата");
    ТЗ.НоваяКолонка("ВидМедицинскойПомощи", "Число",1,0);
    ТЗ.НоваяКолонка("КодПрофиля", "Число",2,0);
    ТЗ.НоваяКолонка("КодСпециальности", "Строка",9);
    ТЗ.НоваяКолонка("КодОсновногоЗаболевания", "Строка",7);
    ТЗ.НоваяКолонка("КодСопутствующегоЗаболевания", "Строка",7);
    ТЗ.НоваяКолонка("ИсходЗаболевания", "Число",2,0);
    ТЗ.НоваяКолонка("ОГРНЛПУ", "Строка",15);
    ТЗ.НоваяКолонка("СуммаКОплате", "Число",11,2);
    ТЗ.НоваяКолонка("ПорядковыйНомер", "Число",5,0);
    ТЗ.НоваяКолонка("КодПричины", "Строка",8);
    ТЗ.НоваяКолонка("ПризнакОсобыйСлучай", "Строка",7);
    ТЗ.НоваяКолонка("КодТерритории", "Справочник.КодТерритории");


    // аналогичный набор колонок создаем и для ОТЗ
    ОТЗ.НоваяКолонка("Номер", "Число",4,0);
    ОТЗ.НоваяКолонка("ОкатоСтрахования", "Строка",5);
    ОТЗ.НоваяКолонка("Фамилия", "Строка",40);
    ОТЗ.НоваяКолонка("Имя", "Строка",40);
    ОТЗ.НоваяКолонка("Отчество", "Строка",40);
    ОТЗ.НоваяКолонка("Пол", "Строка",1);
    ОТЗ.НоваяКолонка("ДатаРождения", "Дата");
    ОТЗ.НоваяКолонка("КодДокумента", "Число",2,0);
    ОТЗ.НоваяКолонка("СерияДокумента", "Строка",9);
    ОТЗ.НоваяКолонка("НомерДокумента", "Строка",8);
    ОТЗ.НоваяКолонка("СерияНомерПолиса", "Строка",25);
    ОТЗ.НоваяКолонка("ДатаВыдачиПолиса", "Дата");
    ОТЗ.НоваяКолонка("ДатаОкончанияПолиса", "Дата");
    ОТЗ.НоваяКолонка("СтатусПредставителя", "Число",1,0);
    ОТЗ.НоваяКолонка("ФамилияПредставителя", "Строка",40);
    ОТЗ.НоваяКолонка("ИмяПредставителя", "Строка",40);
    ОТЗ.НоваяКолонка("ОтчествоПредставителя", "Строка",40);
    ОТЗ.НоваяКолонка("ОГРНСМО", "Строка",15);
    ОТЗ.НоваяКолонка("Гражданство", "Строка",3);
    ОТЗ.НоваяКолонка("НаименованиеРайона", "Строка",150);
    ОТЗ.НоваяКолонка("КодНП", "Число",3,0);
    ОТЗ.НоваяКолонка("НаселенныйПункт", "Строка",150);
    ОТЗ.НоваяКолонка("КодУлицы", "Число",3,0);
    ОТЗ.НоваяКолонка("Улица", "Строка",150);
    ОТЗ.НоваяКолонка("Дом", "Строка",7);
    ОТЗ.НоваяКолонка("Корпус", "Строка",5);
    ОТЗ.НоваяКолонка("Квартира", "Строка",5);
    ОТЗ.НоваяКолонка("СтатусЗастрахованного", "Число",2,0);
    ОТЗ.НоваяКолонка("МестоРаботы", "Строка",150);
    ОТЗ.НоваяКолонка("ДатаНачалаЛечения", "Дата");
    ОТЗ.НоваяКолонка("ДатаОкончанияЛечения", "Дата");
    ОТЗ.НоваяКолонка("ВидМедицинскойПомощи", "Число",1,0);
    ОТЗ.НоваяКолонка("КодПрофиля", "Число",2,0);
    ОТЗ.НоваяКолонка("КодСпециальности", "Строка",9);
    ОТЗ.НоваяКолонка("КодОсновногоЗаболевания", "Строка",7);
    ОТЗ.НоваяКолонка("КодСопутствующегоЗаболевания", "Строка",7);
    ОТЗ.НоваяКолонка("ИсходЗаболевания", "Число",2,0);
    ОТЗ.НоваяКолонка("ОГРНЛПУ", "Строка",15);
    ОТЗ.НоваяКолонка("СуммаКОплате", "Число",11,2);
    ОТЗ.НоваяКолонка("ПорядковыйНомер", "Число",5,0);
    ОТЗ.НоваяКолонка("КодПричины", "Строка",8);
    ОТЗ.НоваяКолонка("ПризнакОсобыйСлучай", "Строка",7);
    ОТЗ.НоваяКолонка("КодТерритории", "Справочник.КодТерритории");


    СпрОкато = СоздатьОбъект("Справочник.КодТерритории"); // справочник с кодами ОКАТО
    СпрОкато.ВыбратьЭлементы();
    Пока СпрОкато.ПолучитьЭлемент() = 1 Цикл
    ВыбранноеОкато = СпрОкато.ТекущийЭлемент();
    Doc = СоздатьОбъект("Документ.РеестрСчетовВходящийЛПУ");
    Doc.ВыбратьДокументы(ВыбНачПериода,ВыбНачПериода);
    DocTFOMS = СоздатьОбъект("Документ.РеестрСчетовИсходящийВТФОМС");
    Пока Doc.ПолучитьДокумент() = 1 Цикл // перебираем все документы за период
    Если (Doc.ПометкаУдаления()=0) и (Doc.Проведен()=1) Тогда //просматриваем проведенные и не поченные на удаление документы
    СчетчикСтрок=1;
    Doc.ВыбратьСтроки();
    Пока Doc.ПолучитьСтроку()=1 Цикл // перебираем все строки документа и заносим в ТЗ
    ТЗ.НоваяСтрока();
    ТЗ.Номер=СчетчикСтрок;
    ТЗ.ОкатоСтрахования = Doc.ОкатоСтрахования;
    ТЗ.Фамилия=Doc.ФамилияПациента;
    ТЗ.Имя=DOC.ИмяПациента;
    ТЗ.Отчество=DOC.ОтчествоПациента;
    ТЗ.Пол=DOC.ПолПациента;
    ТЗ.ДатаРождения=DOC.ДатаРожденияПациента;
    ТЗ.КодДокумента=DOC.КодДокумента;
    ТЗ.СерияДокумента=DOC.СерияДокумента;
    ТЗ.НомерДокумента=DOC.НомерДокумента;
    ТЗ.СерияНомерПолиса=DOC.СерияНомерПолиса;
    ТЗ.ДатаВыдачиПолиса=DOC.ДатаВыдачиПолиса;
    ТЗ.ДатаОкончанияПолиса=DOC.ДатаОкончанияПолиса;
    ТЗ.СтатусПредставителя=DOC.СтатусПредставителя;
    ТЗ.ФамилияПредставителя=DOC.ФамилияПредставителя;
    ТЗ.ИмяПредставителя=DOC.ИмяПредставителя;
    ТЗ.ОтчествоПредставителя=DOC.ОтчествоПредставителя;
    ТЗ.ОГРНСМО=DOC.ОГРНСМО;
    ТЗ.Гражданство=DOC.Гражданство;
    ТЗ.НаименованиеРайона=DOC.Район;
    ТЗ.КодНП=DOC.КодНП;
    ТЗ.НаселенныйПункт=DOC.НаселенныйПункт;
    ТЗ.КодУлицы=DOC.КодУлицы;
    ТЗ.Улица=DOC.Улица;
    ТЗ.Дом=DOC.Дом;
    ТЗ.Корпус=DOC.Корпус;
    ТЗ.Квартира=DOC.Квартира;
    ТЗ.СтатусЗастрахованного=DOC.СтатусЗастрахованного;
    ТЗ.МестоРаботы=DOC.МестоРаботы;
    ТЗ.ДатаНачалаЛечения=DOC.ДатаНачалаЛечения;
    ТЗ.ДатаОкончанияЛечения=DOC.ДатаОкончанияЛечения;
    ТЗ.ВидМедицинскойПомощи=DOC.ВидМедицинскойПомощи;
    ТЗ.КодПрофиля=DOC.КодПрофиля;
    ТЗ.КодСпециальности=DOC.КодСпециальности;
    ТЗ.КодОсновногоЗаболевания=DOC.КодОсновногоЗаболевания;
    ТЗ.КодСопутствующегоЗаболевания=DOC.КодСопутствующегоЗаболевания;
    ТЗ.ИсходЗаболевания=DOC.ИсходЗаболевания;
    ТЗ.ОГРНЛПУ=DOC.ОГРНЛПУ;
    ТЗ.СуммаКОплате=DOC.СуммаКОплате;
    ТЗ.ПорядковыйНомер=DOC.ПорядковыйНомер;
    ТЗ.КодПричины=DOC.КодПричины;
    ТЗ.ПризнакОсобыйСлучай=DOC.ПризнакОсобыйСлучай;
    ТЗ.КодТерритории=Doc.КодТерритории;
    СчетчикСтрок = СчетчикСтрок + 1;
    КонецЦикла;
    ТЗ.ВыбратьСтроки();
    k = 0;
    N=0;
    Пока ТЗ.ПолучитьСтроку() = 1 цикл // перебираем строки ТЗ
    k = k + 1;
    Если ТЗ.ОкатоСтрахования = ВыбранноеОкато.ПолныйКод Тогда
    ОТЗ.НоваяСтрока();
    N = N +1;
    для m = 1 по ТЗ.КоличествоКолонок() цикл
    ОТЗ.УстановитьЗначение(N,m,ТЗ.ПолучитьЗначение(k,m))
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    DocTFOMS.Новый();
    ОТЗ.ВыбратьСтроки();// перебираем строки из ОТЗ (пациенты с одинаковым ОКАТО)
    k=1;
    Пока ОТЗ.ПолучитьСтроку() = 1 цикл
    //Сообщить(ОТЗ.ОкатоСтрахования);
    //Сообщить(ОТЗ.Фамилия);
    //Сообщить(ОТЗ.Имя);
    //Сообщить(ОТЗ.Отчество);
    DocTFOMS.НоваяСтрока();
    DocTFOMS.НомерСтроки=k;
    DocTFOMS.ОкатоСтрахования=ОТЗ.ОкатоСтрахования;
    DocTFOMS.ФамилияПациента=ОТЗ.Фамилия;
    DocTFOMS.ИмяПациента=ОТЗ.Имя;
    DocTFOMS.ОтчествоПациента=ОТЗ.Отчество;
    DocTFOMS.ПолПациента=ОТЗ.Пол;
    DocTFOMS.ДатаРожденияПациента=ОТЗ.ДатаРождения;
    DocTFOMS.КодДокумента=ОТЗ.КодДокумента;
    DocTFOMS.СерияДокумента=ОТЗ.СерияДокумента;
    DocTFOMS.НомерДокумента=ОТЗ.НомерДокумента;
    DocTFOMS.СерияНомерПолиса=ОТЗ.СерияНомерПолиса;
    DocTFOMS.ДатаВыдачиПолиса=ОТЗ.ДатаВыдачиПолиса;
    DocTFOMS.ДатаОкончанияПолиса=ОТЗ.ДатаОкончанияПолиса;
    DocTFOMS.СтатусПредставителя=ОТЗ.СтатусПредставителя;
    DocTFOMS.ФамилияПредставителя=ОТЗ.ФамилияПредставителя;
    DocTFOMS.ИмяПредставителя=ОТЗ.ИмяПредставителя;
    DocTFOMS.ОтчествоПредставителя=ОТЗ.ОтчествоПредставителя;
    DocTFOMS.ОГРНСМО=ОТЗ.ОГРНСМО;
    DocTFOMS.Гражданство=ОТЗ.Гражданство;
    DocTFOMS.Район=ОТЗ.НаименованиеРайона;
    DocTFOMS.КодНП=ОТЗ.КодНП;
    DocTFOMS.НаселенныйПункт=ОТЗ.НаселенныйПункт;
    DocTFOMS.КодУлицы=ОТЗ.КодУлицы;
    DocTFOMS.Улица=ОТЗ.Улица;
    DocTFOMS.Дом=ОТЗ.Дом;
    DocTFOMS.Корпус=ОТЗ.Корпус;
    DocTFOMS.Квартира=ОТЗ.Квартира;
    DocTFOMS.СтатусЗастрахованного=ОТЗ.СтатусЗастрахованного;
    DocTFOMS.МестоРаботы=ОТЗ.МестоРаботы;
    DocTFOMS.ДатаНачалаЛечения=ОТЗ.ДатаНачалаЛечения;
    DocTFOMS.ДатаОкончанияЛечения=ОТЗ.ДатаОкончанияЛечения;
    DocTFOMS.ВидМедицинскойПомощи=ОТЗ.ВидМедицинскойПомощи;
    DocTFOMS.КодПрофиля=ОТЗ.КодПрофиля;
    DocTFOMS.КодСпециальности=ОТЗ.КодСпециальности;
    DocTFOMS.КодОсновногоЗаболевания=ОТЗ.КодОсновногоЗаболевания;
    DocTFOMS.КодСопутствующегоЗаболевания=ОТЗ.КодСопутствующегоЗаболевания;
    DocTFOMS.ИсходЗаболевания=ОТЗ.ИсходЗаболевания;
    DocTFOMS.ОГРНЛПУ=ОТЗ.ОГРНЛПУ;
    DocTFOMS.СуммаКОплате=ОТЗ.СуммаКОплате;
    DocTFOMS.ПорядковыйНомер=ОТЗ.ПорядковыйНомер;
    DocTFOMS.КодПричины=ОТЗ.КодПричины;
    DocTFOMS.ПризнакОсобыйСлучай=ОТЗ.ПризнакОсобыйСлучай;
    DocTFOMS.КодТерритории = ОТЗ.КодТерритории;
    k=k+1;
    КонецЦикла;
    DocTFOMS.Записать(); // и т.д.
    DocTFOMS.Провести();
    КонецЦикла;
    Сообщить("Конец формирования реестров счетов исходящих");
    КонецПроцедуры

    [/codebox]

    На данный момент 3 проблемы: не выгружаются фамилии, пациенты задваиваются, не указывается код территории. В остальном все уже нормально :)
     
  15. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Тогда проще переделать ТЧ обоих документов - вместо 40 полей останутся 5-6 ссылок
    Беда, коль сапоги начнет тачать пирожник (с)
    Без боли смотреть на это просто невозможно

    PS. Все же никак не могу понять, зачем 2 раза по 40 раз добавлять колонки в ТЗ, если метод "ВыгрузитьТабличнуюЧасть()"
    автоматически создаст ТЗ нужной структуры :maybe:

    Так что, пошел умывать руки :)
     
  16. BBDragon

    BBDragon Well-Known Member

    Регистрация:
    4 май 2008
    Сообщения:
    148
    Симпатии:
    0
    Уважаемый vbs, не обессудьте, пожалуйста :maybe:
    Я понимаю, что мой уровень сильно хромает, ну что ж делать, я только учусь..
    Метод "ВыгрузитьТабличнуюЧасть" я пробовал, но не работает, к сожалению. 1С вылетает с ошибками, пришлось вручную создать все 40 колонок.
    Табличную часть документов переделывать не стал, мне проще все-таки так оставить, да и проверять так проще.
     
  17. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    А в той обработке, которую я прислал, все ведь работало :maybe:
     
  18. BBDragon

    BBDragon Well-Known Member

    Регистрация:
    4 май 2008
    Сообщения:
    148
    Симпатии:
    0
    Верно, если ты про первую :)
    Да, там хорошая обработка, надо будет на выходных ее посмотреть как следует, авось смогу разобраться. Жаль, что код не на русском, было бы проще разобраться :)
     
  19. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Да нет, я про ту, которую позавчера послал
    Но уж если не веришь в метод "ВыгрузитьТабличнуюЧасть" (хотя, почему ? Если у меня все прекрасно отрабатывает на твоей базе :) ),
    делай через Метаданные
    Для ы = 1 по Метаданные.Документ("имяДок").РеквизитТабличнойЧасти() цикл //ИмяДок - название его в конфигурации
    ТЗ.НоваяКолонка(Метаданные.Документ("имяДок").РеквизитТабличнойЧасти(ы).Идентификатор)
    КонецЦикла


    Синтаксис уточни, по памяти пишу

    1. При этом не будет ошибок в названиях реквизитов
    2. код будет в 13.333 раза короче
     
  20. BBDragon

    BBDragon Well-Known Member

    Регистрация:
    4 май 2008
    Сообщения:
    148
    Симпатии:
    0
    Несколько дней занимался другими вопросами, потом вернулся к обработке и в итоге у меня получилось! Всем спасибо огромное за помощь и долготерпение, особенно уважаемому vbs :rolleyes:
    Итоговый вариант обработки:

    [codebox]
    Процедура Сформировать()
    Перем ТЗ;

    ТЗ = СоздатьОбъект("ТаблицаЗначений");// Таблица значений для данных всех документов

    // создаем набор колонок для ТЗ
    ТЗ.НоваяКолонка("Номер", "Число",4,0);
    ТЗ.НоваяКолонка("ОкатоСтрахования", "Строка",5);
    ТЗ.НоваяКолонка("Фамилия", "Строка",40);
    ТЗ.НоваяКолонка("Имя", "Строка",40);
    ТЗ.НоваяКолонка("Отчество", "Строка",40);
    ТЗ.НоваяКолонка("Пол", "Строка",1);
    ТЗ.НоваяКолонка("ДатаРождения", "Дата");
    ТЗ.НоваяКолонка("КодДокумента", "Число",2,0);
    ТЗ.НоваяКолонка("СерияДокумента", "Строка",9);
    ТЗ.НоваяКолонка("НомерДокумента", "Строка",8);
    ТЗ.НоваяКолонка("СерияНомерПолиса", "Строка",25);
    ТЗ.НоваяКолонка("ДатаВыдачиПолиса", "Дата");
    ТЗ.НоваяКолонка("ДатаОкончанияПолиса", "Дата");
    ТЗ.НоваяКолонка("СтатусПредставителя", "Число",1,0);
    ТЗ.НоваяКолонка("ФамилияПредставителя", "Строка",40);
    ТЗ.НоваяКолонка("ИмяПредставителя", "Строка",40);
    ТЗ.НоваяКолонка("ОтчествоПредставителя", "Строка",40);
    ТЗ.НоваяКолонка("ОГРНСМО", "Строка",15);
    ТЗ.НоваяКолонка("Гражданство", "Строка",3);
    ТЗ.НоваяКолонка("НаименованиеРайона", "Строка",150);
    ТЗ.НоваяКолонка("КодНП", "Число",3,0);
    ТЗ.НоваяКолонка("НаселенныйПункт", "Строка",150);
    ТЗ.НоваяКолонка("КодУлицы", "Число",3,0);
    ТЗ.НоваяКолонка("Улица", "Строка",150);
    ТЗ.НоваяКолонка("Дом", "Строка",7);
    ТЗ.НоваяКолонка("Корпус", "Строка",5);
    ТЗ.НоваяКолонка("Квартира", "Строка",5);
    ТЗ.НоваяКолонка("СтатусЗастрахованного", "Число",2,0);
    ТЗ.НоваяКолонка("МестоРаботы", "Строка",150);
    ТЗ.НоваяКолонка("ДатаНачалаЛечения", "Дата");
    ТЗ.НоваяКолонка("ДатаОкончанияЛечения", "Дата");
    ТЗ.НоваяКолонка("ВидМедицинскойПомощи", "Число",1,0);
    ТЗ.НоваяКолонка("КодПрофиля", "Число",2,0);
    ТЗ.НоваяКолонка("КодСпециальности", "Строка",9);
    ТЗ.НоваяКолонка("КодОсновногоЗаболевания", "Строка",7);
    ТЗ.НоваяКолонка("КодСопутствующегоЗаболевания", "Строка",7);
    ТЗ.НоваяКолонка("ИсходЗаболевания", "Число",2,0);
    ТЗ.НоваяКолонка("ОГРНЛПУ", "Строка",15);
    ТЗ.НоваяКолонка("СуммаКОплате", "Число",11,2);
    ТЗ.НоваяКолонка("ПорядковыйНомер", "Число",5,0);
    ТЗ.НоваяКолонка("КодПричины", "Строка",8);
    ТЗ.НоваяКолонка("ПризнакОсобыйСлучай", "Строка",7);
    ТЗ.НоваяКолонка("КодТерритории", "Строка", 2);
    ТЗ.НоваяКолонка("Регион", "Строка", 2);

    Doc = СоздатьОбъект("Документ.РеестрСчетовВходящийЛПУ");
    Doc.ВыбратьДокументы(ВыбНачПериода,ВыбНачПериода);
    DocTFOMS = СоздатьОбъект("Документ.РеестрСчетовИсходящийВТФОМС");
    Пока Doc.ПолучитьДокумент() = 1 Цикл // перебираем все документы за период
    Если (Doc.ПометкаУдаления()=0) и (Doc.Проведен()=1) Тогда //просматриваем проведенные и не помеченные на удаление документы
    СчетчикСтрок=1;
    Doc.ВыбратьСтроки();
    Пока Doc.ПолучитьСтроку()=1 Цикл // перебираем все строки документа и заносим в ТЗ
    ТЗ.НоваяСтрока();
    ТЗ.Номер=СчетчикСтрок;
    ТЗ.ОкатоСтрахования = Doc.ОкатоСтрахования;
    СпрФам = СоздатьОбъект("Справочник.ПациентыЛПУ");
    СпрФам.НайтиЭлемент(Doc.ФамилияПациента);
    ТЗ.Фамилия=СпрФам.Наименование;
    ТЗ.Имя=DOC.ИмяПациента;
    ТЗ.Отчество=DOC.ОтчествоПациента;
    ТЗ.Пол=DOC.ПолПациента;
    ТЗ.ДатаРождения=DOC.ДатаРожденияПациента;
    ТЗ.КодДокумента=DOC.КодДокумента;
    ТЗ.СерияДокумента=DOC.СерияДокумента;
    ТЗ.НомерДокумента=DOC.НомерДокумента;
    ТЗ.СерияНомерПолиса=DOC.СерияНомерПолиса;
    ТЗ.ДатаВыдачиПолиса=DOC.ДатаВыдачиПолиса;
    ТЗ.ДатаОкончанияПолиса=DOC.ДатаОкончанияПолиса;
    ТЗ.СтатусПредставителя=DOC.СтатусПредставителя;
    ТЗ.ФамилияПредставителя=DOC.ФамилияПредставителя;
    ТЗ.ИмяПредставителя=DOC.ИмяПредставителя;
    ТЗ.ОтчествоПредставителя=DOC.ОтчествоПредставителя;
    ТЗ.ОГРНСМО=DOC.ОГРНСМО;
    ТЗ.Гражданство=DOC.Гражданство;
    ТЗ.НаименованиеРайона=DOC.Район;
    ТЗ.КодНП=DOC.КодНП;
    ТЗ.НаселенныйПункт=DOC.НаселенныйПункт;
    ТЗ.КодУлицы=DOC.КодУлицы;
    ТЗ.Улица=DOC.Улица;
    ТЗ.Дом=DOC.Дом;
    ТЗ.Корпус=DOC.Корпус;
    ТЗ.Квартира=DOC.Квартира;
    ТЗ.СтатусЗастрахованного=DOC.СтатусЗастрахованного;
    ТЗ.МестоРаботы=DOC.МестоРаботы;
    ТЗ.ДатаНачалаЛечения=DOC.ДатаНачалаЛечения;
    ТЗ.ДатаОкончанияЛечения=DOC.ДатаОкончанияЛечения;
    ТЗ.ВидМедицинскойПомощи=DOC.ВидМедицинскойПомощи;
    ТЗ.КодПрофиля=DOC.КодПрофиля;
    ТЗ.КодСпециальности=DOC.КодСпециальности;
    ТЗ.КодОсновногоЗаболевания=DOC.КодОсновногоЗаболевания;
    ТЗ.КодСопутствующегоЗаболевания=DOC.КодСопутствующегоЗаболевания;
    ТЗ.ИсходЗаболевания=DOC.ИсходЗаболевания;
    ТЗ.ОГРНЛПУ=DOC.ОГРНЛПУ;
    ТЗ.СуммаКОплате=DOC.СуммаКОплате;
    ТЗ.ПорядковыйНомер=DOC.ПорядковыйНомер;
    ТЗ.КодПричины=DOC.КодПричины;
    ТЗ.ПризнакОсобыйСлучай=DOC.ПризнакОсобыйСлучай;
    ТЗ.КодТерритории=Doc.КодТерритории;
    ТЗ.Регион = Doc.Регион;
    СчетчикСтрок = СчетчикСтрок + 1;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    ТЗ.Сортировать("ОкатоСтрахования");
    ОкатоСтрахования = "";
    k=1;

    ТЗ.ВыбратьСтроки();// перебираем строки из ОТЗ (пациенты с одинаковым ОКАТО)
    Пока ТЗ.ПолучитьСтроку() = 1 цикл
    Если ОкатоСтрахования <> ТЗ.ОкатоСтрахования Тогда
    Если ОкатоСтрахования<>"" Тогда
    DocTFOMS.Записать();
    DocTFOMS.Провести();
    КонецЕсли;
    DocTFOMS.Новый();
    ОкатоСтрахования = ТЗ.ОкатоСтрахования;
    КонецЕсли;
    DocTFOMS.НоваяСтрока();
    DocTFOMS.НомерСтроки=k;
    DocTFOMS.ОкатоСтрахования=ТЗ.ОкатоСтрахования;
    DocTFOMS.ФамилияПациента=ТЗ.Фамилия;
    DocTFOMS.ИмяПациента=ТЗ.Имя;
    DocTFOMS.ОтчествоПациента=ТЗ.Отчество;
    DocTFOMS.ПолПациента=ТЗ.Пол;
    DocTFOMS.ДатаРожденияПациента=ТЗ.ДатаРождения;
    DocTFOMS.КодДокумента=ТЗ.КодДокумента;
    DocTFOMS.СерияДокумента=ТЗ.СерияДокумента;
    DocTFOMS.НомерДокумента=ТЗ.НомерДокумента;
    DocTFOMS.СерияНомерПолиса=ТЗ.СерияНомерПолиса;
    DocTFOMS.ДатаВыдачиПолиса=ТЗ.ДатаВыдачиПолиса;
    DocTFOMS.ДатаОкончанияПолиса=ТЗ.ДатаОкончанияПолиса;
    DocTFOMS.СтатусПредставителя=ТЗ.СтатусПредставителя;
    DocTFOMS.ФамилияПредставителя=ТЗ.ФамилияПредставителя;
    DocTFOMS.ИмяПредставителя=ТЗ.ИмяПредставителя;
    DocTFOMS.ОтчествоПредставителя=ТЗ.ОтчествоПредставителя;
    DocTFOMS.ОГРНСМО=ТЗ.ОГРНСМО;
    DocTFOMS.Гражданство=ТЗ.Гражданство;
    DocTFOMS.Район=ТЗ.НаименованиеРайона;
    DocTFOMS.КодНП=ТЗ.КодНП;
    DocTFOMS.НаселенныйПункт=ТЗ.НаселенныйПункт;
    DocTFOMS.КодУлицы=ТЗ.КодУлицы;
    DocTFOMS.Улица=ТЗ.Улица;
    DocTFOMS.Дом=ТЗ.Дом;
    DocTFOMS.Корпус=ТЗ.Корпус;
    DocTFOMS.Квартира=ТЗ.Квартира;
    DocTFOMS.СтатусЗастрахованного=ТЗ.СтатусЗастрахованного;
    DocTFOMS.МестоРаботы=ТЗ.МестоРаботы;
    DocTFOMS.ДатаНачалаЛечения=ТЗ.ДатаНачалаЛечения;
    DocTFOMS.ДатаОкончанияЛечения=ТЗ.ДатаОкончанияЛечения;
    DocTFOMS.ВидМедицинскойПомощи=ТЗ.ВидМедицинскойПомощи;
    DocTFOMS.КодПрофиля=ТЗ.КодПрофиля;
    DocTFOMS.КодСпециальности=ТЗ.КодСпециальности;
    DocTFOMS.КодОсновногоЗаболевания=ТЗ.КодОсновногоЗаболевания;
    DocTFOMS.КодСопутствующегоЗаболевания=ТЗ.КодСопутствующегоЗаболевания;
    DocTFOMS.ИсходЗаболевания=ТЗ.ИсходЗаболевания;
    DocTFOMS.ОГРНЛПУ=ТЗ.ОГРНЛПУ;
    DocTFOMS.СуммаКОплате=ТЗ.СуммаКОплате;
    DocTFOMS.ПорядковыйНомер=k;
    DocTFOMS.КодПричины=ТЗ.КодПричины;
    DocTFOMS.ПризнакОсобыйСлучай=ТЗ.ПризнакОсобыйСлучай;
    DocTFOMS.КодТерритории = ТЗ.КодТерритории;
    DocTFOMS.Регион = ТЗ.Регион;
    k=k+1;
    КонецЦикла;
    Сообщить("Конец формирования реестров счетов исходящих");
    КонецПроцедуры
    [/codebox]

    Таким образом тему можно закрывать :)
     
Загрузка...

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