Неверный идентификатор колонки!
Показывать по
10
20
40
сообщений
- 1
- 2
13.03.2012
18:01
#1
"Объясните пожалуйста где у меня ошибка... и что означает строка УстановитьЗначение? почему выводит ошибку
тзПроцедуры.УстановитьЗначение(тзПроцедуры.НомерСтроки, "к" + СокрЛП(КодПроцедуры), 1);
Т = СоздатьОбъект("Таблица");
тзПроцедуры = СоздатьОбъект("ТаблицаЗначений");
тзПроцедуры.НоваяКолонка("Контрагент");
тзПроцедуры.НоваяКолонка("ФИО");
тзПроцедуры.НоваяКолонка("Цена", "Число");
СпрТарифы.ВыбратьЭлементы();
Пока СпрТарифы.ПолучитьЭлемент() = 1 Цикл
Колонка = "к" + СокрЛП(СпрТарифы.Код);
тзПроцедуры.НоваяКолонка(Колонка, "Число");
КонецЦикла;
//тзПроцедуры.Выгрузить(ТТТ);
Док = СоздатьОбъект("Документ.СтатКартаПациента");
Если ПустоеЗначение(Контрагент) = 1 Тогда
Док.ВыбратьДокументы(НачДата, КонДата);
Пока Док.ПолучитьДокумент() = 1 Цикл
//Сообщить(Док.НомерДок);
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() = 1 Цикл
Если СокрЛП(Док.КодПроцедуры) = """" Тогда
Продолжить;
КонецЕсли;
тзПроцедуры.НоваяСтрока();
тзПроцедуры.ФИО = Док.Пациент;
тзПроцедуры.Контрагент = Док.Авиакомпания;
тзПроцедуры.Цена = Док.Цена;
КодПроцедуры = СокрЛП(Док.КодПроцедуры.Код);
//Сообщить(КодПроцедуры);
тзПроцедуры.УстановитьЗначение(тзПроцедуры.НомерСтроки, "к" + СокрЛП(КодПроцедуры), 1);
КонецЦикла;
КонецЦикла;
Иначе
Док.ВыбратьДокументы(НачДата, КонДата);
Пока Док.ПолучитьДокумент() = 1 Цикл
Если Док.Авиакомпания <> Контрагент Тогда
Продолжить;
КонецЕсли;
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() = 1 Цикл
Если СокрЛП(Док.КодПроцедуры) = """" Тогда
Продолжить;
КонецЕсли;
тзПроцедуры.НоваяСтрока();
тзПроцедуры.ФИО = Док.Пациент;
тзПроцедуры.Контрагент = Док.Авиакомпания;
тзПроцедуры.Цена = Док.Цена;
КодПроцедуры = СокрЛП(Док.КодПроцедуры.Код);
//Сообщить(КодПроцедуры);
тзПроцедуры.УстановитьЗначение(тзПроцедуры.НомерСтроки, "к" + СокрЛП(КодПроцедуры), 1); - вот на эту строчку постоянно ругается
КонецЦикла;
КонецЦикла;
КонецЕсли;"
тзПроцедуры.УстановитьЗначение(тзПроцедуры.НомерСтроки, "к" + СокрЛП(КодПроцедуры), 1);
Т = СоздатьОбъект("Таблица");
тзПроцедуры = СоздатьОбъект("ТаблицаЗначений");
тзПроцедуры.НоваяКолонка("Контрагент");
тзПроцедуры.НоваяКолонка("ФИО");
тзПроцедуры.НоваяКолонка("Цена", "Число");
СпрТарифы.ВыбратьЭлементы();
Пока СпрТарифы.ПолучитьЭлемент() = 1 Цикл
Колонка = "к" + СокрЛП(СпрТарифы.Код);
тзПроцедуры.НоваяКолонка(Колонка, "Число");
КонецЦикла;
//тзПроцедуры.Выгрузить(ТТТ);
Док = СоздатьОбъект("Документ.СтатКартаПациента");
Если ПустоеЗначение(Контрагент) = 1 Тогда
Док.ВыбратьДокументы(НачДата, КонДата);
Пока Док.ПолучитьДокумент() = 1 Цикл
//Сообщить(Док.НомерДок);
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() = 1 Цикл
Если СокрЛП(Док.КодПроцедуры) = """" Тогда
Продолжить;
КонецЕсли;
тзПроцедуры.НоваяСтрока();
тзПроцедуры.ФИО = Док.Пациент;
тзПроцедуры.Контрагент = Док.Авиакомпания;
тзПроцедуры.Цена = Док.Цена;
КодПроцедуры = СокрЛП(Док.КодПроцедуры.Код);
//Сообщить(КодПроцедуры);
тзПроцедуры.УстановитьЗначение(тзПроцедуры.НомерСтроки, "к" + СокрЛП(КодПроцедуры), 1);
КонецЦикла;
КонецЦикла;
Иначе
Док.ВыбратьДокументы(НачДата, КонДата);
Пока Док.ПолучитьДокумент() = 1 Цикл
Если Док.Авиакомпания <> Контрагент Тогда
Продолжить;
КонецЕсли;
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() = 1 Цикл
Если СокрЛП(Док.КодПроцедуры) = """" Тогда
Продолжить;
КонецЕсли;
тзПроцедуры.НоваяСтрока();
тзПроцедуры.ФИО = Док.Пациент;
тзПроцедуры.Контрагент = Док.Авиакомпания;
тзПроцедуры.Цена = Док.Цена;
КодПроцедуры = СокрЛП(Док.КодПроцедуры.Код);
//Сообщить(КодПроцедуры);
тзПроцедуры.УстановитьЗначение(тзПроцедуры.НомерСтроки, "к" + СокрЛП(КодПроцедуры), 1); - вот на эту строчку постоянно ругается
КонецЦикла;
КонецЦикла;
КонецЕсли;"
13.03.2012
18:25
#3
"> Если СокрЛП(Док.КодПроцедуры) = """" Тогда
> Продолжить;
> КонецЕсли;
> тзПроцедуры.НоваяСтрока();
> тзПроцедуры.ФИО = Док.Пациент;
> тзПроцедуры.Контрагент = Док.Авиакомпания;
> тзПроцедуры.Цена = Док.Цена;
> КодПроцедуры = СокрЛП(Док.КодПроцедуры.Код);
>
Почему в одном случае проверяем на КодПроцедуры, а в другом берем КодПроцедуры.Код?"
> Продолжить;
> КонецЕсли;
> тзПроцедуры.НоваяСтрока();
> тзПроцедуры.ФИО = Док.Пациент;
> тзПроцедуры.Контрагент = Док.Авиакомпания;
> тзПроцедуры.Цена = Док.Цена;
> КодПроцедуры = СокрЛП(Док.КодПроцедуры.Код);
>
Почему в одном случае проверяем на КодПроцедуры, а в другом берем КодПроцедуры.Код?"
13.03.2012
21:09
#4
"я исправила, но все равно выдает ошибку
тзПроцедуры.УстановитьЗначение(тзПроцедуры.НомерСтроки, "к" + СокрЛП(КодПроцедуры), 1);
{Отчет.ОтчетПоАвиакомпаниям12.Форма.Модуль(63)}: Неверный идентификатор колонки!"
тзПроцедуры.УстановитьЗначение(тзПроцедуры.НомерСтроки, "к" + СокрЛП(КодПроцедуры), 1);
{Отчет.ОтчетПоАвиакомпаниям12.Форма.Модуль(63)}: Неверный идентификатор колонки!"
13.03.2012
21:10
#5
"Процедура Сформировать()
СпрПрейскурант = СоздатьОбъект("Справочник.Прейскуранты");
СпрТарифы = СоздатьОбъект("Справочник.Тарифы");
ДокСтатКарты = СоздатьОбъект("Документ.СтатКартаПациента");
СпрПрейскурант.НайтиПоКоду(1);
СпрПрейскурант.НайтиПоКоду(2);
СпрПрейскурант.НайтиПоКоду(3);
СпрПрейскурант.НайтиПоКоду(4);
СпрПрейскурант.НайтиПоКоду(5);;
СпрТарифы.ИспользоватьВладельца(СпрПрейскурант.ТекущийЭлемент());
Т = СоздатьОбъект("Таблица");
тзПроцедуры = СоздатьОбъект("ТаблицаЗначений");
тзПроцедуры.НоваяКолонка("Контрагент");
тзПроцедуры.НоваяКолонка("ФИО");
тзПроцедуры.НоваяКолонка("Цена", "Число");
СпрТарифы.ВыбратьЭлементы();
Пока СпрТарифы.ПолучитьЭлемент() = 1 Цикл
Колонка = "к" + СокрЛП(СпрТарифы.Код);
тзПроцедуры.НоваяКолонка(Колонка, "Число");
КонецЦикла;
//тзПроцедуры.Выгрузить(ТТТ);
Док = СоздатьОбъект("Документ.СтатКартаПациента");
Если ПустоеЗначение(Контрагент) = 1 Тогда
Док.ВыбратьДокументы(НачДата, КонДата);
Пока Док.ПолучитьДокумент() = 1 Цикл
//Сообщить(Док.НомерДок);
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() = 1 Цикл
Если СокрЛП(Док.КодПроцедуры) = """" Тогда
Продолжить;
КонецЕсли;
тзПроцедуры.НоваяСтрока();
тзПроцедуры.ФИО = Док.Пациент;
тзПроцедуры.Контрагент = Док.Авиакомпания;
тзПроцедуры.Цена = Док.Цена;
КодПроцедуры = СокрЛП(Док.КодПроцедуры.Код);
//Сообщить(КодПроцедуры);
тзПроцедуры.УстановитьЗначение(тзПроцедуры.НомерСтроки, "к" + СокрЛП(КодПроцедуры), 1);
КонецЦикла;
КонецЦикла;
Иначе
Док.ВыбратьДокументы(НачДата, КонДата);
Пока Док.ПолучитьДокумент() = 1 Цикл
Если Док.Авиакомпания <> Контрагент Тогда
Продолжить;
КонецЕсли;
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() = 1 Цикл
Если СокрЛП(Док.КодПроцедуры) = """" Тогда
Продолжить;
КонецЕсли;
тзПроцедуры.НоваяСтрока();
тзПроцедуры.ФИО = Док.Пациент;
тзПроцедуры.Контрагент = Док.Авиакомпания;
тзПроцедуры.Цена = Док.Цена;
КодПроцедуры = СокрЛП(Док.КодПроцедуры.Код);
//Сообщить(КодПроцедуры);
тзПроцедуры.УстановитьЗначение(тзПроцедуры.НомерСтроки, "к" + СокрЛП(КодПроцедуры), 1);
КонецЦикла;
КонецЦикла;
КонецЕсли;
//Сообщить(тзПроцедуры.КоличествоКолонок());
// формируем список колонок для свертки *************************************************************
//тзПроцедуры.Выгрузить(ТТТ);
СписокКолонок = "Цена";
Для а = 4 По тзПроцедуры.КоличествоКолонок() - 3 Цикл
СписокКолонок = СписокКолонок + "," + СокрЛП(а);
КонецЦикла;
тзПроцедуры.Свернуть("ФИО,Контрагент", СписокКолонок);
тзПроцедуры.Сортировать("Контрагент,ФИО");
//тзПроцедуры.Выгрузить(ТТТ);
// удаляем лишние колонки без итогов
а=4;
Пока а <= тзПроцедуры.КоличествоКолонок() Цикл
Если тзПроцедуры.Итог(а) = 0 Тогда
тзПроцедуры.УдалитьКолонку(а); //удаляем строку, но "а" не увеличиваем, т.к. следующая строка у нас и есть "а"
Иначе
а = а + 1; //увеличиваем а (для перехода на след. строку)
КонецЕсли;
КонецЦикла;
//тзПроцедуры.Выгрузить(ТТТ);
// выводим на печать ********************************************************************************
// шапка
Т.ВывестиСекцию("Шапка|ФИО");
Т.ПрисоединитьСекцию("Шапка|Контрагент");
Для а = 4 По тзПроцедуры.КоличествоКолонок() Цикл
КодПроцедуры = тзПроцедуры.ПолучитьПараметрыКолонки(а);
КодПроцедуры = Прав(КодПроцедуры, 6);
СпрТарифы.НайтиПоКоду(КодПроцедуры);
КодПроцедуры = СпрТарифы.ТекущийЭлемент().ПолноеНаименование;
//Итог = тзПроцедуры.Итог(а);
//Если Итог <> 0 Тогда
Т.ПрисоединитьСекцию("Шапка|Процедуры");
//КонецЕсли;
КонецЦикла;
Т.ПрисоединитьСекцию("Шапка|Цена");
Т.ПрисоединитьСекцию("Шапка|ИтогоПоПациенту");
// строки
тзПроцедуры.ВыбратьСтроки();
Пока тзПроцедуры.ПолучитьСтроку() = 1 Цикл
Т.ВывестиСекцию("Строка|ФИО");
Т.ПрисоединитьСекцию("Строка|Контрагент");
ИтогоПоПациенту = 0;
Для а = 4 По тзПроцедуры.КоличествоКолонок() Цикл
Посещения = тзПроцедуры.ПолучитьЗначение(тзПроцедуры.НомерСтроки, а);
Т.ПрисоединитьСекцию("Строка|Процедуры");
ИтогоПоПациенту = ИтогоПоПациенту + Посещения;
КонецЦикла;
Т.ПрисоединитьСекцию("Строка|Цена");
Т.ПрисоединитьСекцию("Строка|ИтогоПоПациенту");
КонецЦикла;
// подвал
Т.ВывестиСекцию("Подвал|ФИО");
Т.ПрисоединитьСекцию("Подвал|Контрагент");
//Т.ПрисоединитьСекцию("Шапка|Контрагент");
Для а = 4 По тзПроцедуры.КоличествоКолонок() Цикл
ИтогоПосещений = тзПроцедуры.Итог(а);
КодПроцедуры = тзПроцедуры.ПолучитьПараметрыКолонки(а);
КодПроцедуры = Прав(КодПроцедуры, 6);
СпрТарифы.НайтиПоКоду(КодПроцедуры);
Цена =СпрТарифы.Цена.получить(НачДата);
сумма = Цена*ИтогоПосещений;
Т.ПрисоединитьСекцию("Подвал|Процедуры");
ИтогоПосещений=0;
Цена=0;
КонецЦикла;
Т.ПрисоединитьСекцию("Подвал|Цена");
Т.ПрисоединитьСекцию("Подвал|ИтогоПоПациенту");
Т.Опции(0);
Т.Показать();
Т.Напечатать(0);
КонецПроцедуры"
СпрПрейскурант = СоздатьОбъект("Справочник.Прейскуранты");
СпрТарифы = СоздатьОбъект("Справочник.Тарифы");
ДокСтатКарты = СоздатьОбъект("Документ.СтатКартаПациента");
СпрПрейскурант.НайтиПоКоду(1);
СпрПрейскурант.НайтиПоКоду(2);
СпрПрейскурант.НайтиПоКоду(3);
СпрПрейскурант.НайтиПоКоду(4);
СпрПрейскурант.НайтиПоКоду(5);;
СпрТарифы.ИспользоватьВладельца(СпрПрейскурант.ТекущийЭлемент());
Т = СоздатьОбъект("Таблица");
тзПроцедуры = СоздатьОбъект("ТаблицаЗначений");
тзПроцедуры.НоваяКолонка("Контрагент");
тзПроцедуры.НоваяКолонка("ФИО");
тзПроцедуры.НоваяКолонка("Цена", "Число");
СпрТарифы.ВыбратьЭлементы();
Пока СпрТарифы.ПолучитьЭлемент() = 1 Цикл
Колонка = "к" + СокрЛП(СпрТарифы.Код);
тзПроцедуры.НоваяКолонка(Колонка, "Число");
КонецЦикла;
//тзПроцедуры.Выгрузить(ТТТ);
Док = СоздатьОбъект("Документ.СтатКартаПациента");
Если ПустоеЗначение(Контрагент) = 1 Тогда
Док.ВыбратьДокументы(НачДата, КонДата);
Пока Док.ПолучитьДокумент() = 1 Цикл
//Сообщить(Док.НомерДок);
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() = 1 Цикл
Если СокрЛП(Док.КодПроцедуры) = """" Тогда
Продолжить;
КонецЕсли;
тзПроцедуры.НоваяСтрока();
тзПроцедуры.ФИО = Док.Пациент;
тзПроцедуры.Контрагент = Док.Авиакомпания;
тзПроцедуры.Цена = Док.Цена;
КодПроцедуры = СокрЛП(Док.КодПроцедуры.Код);
//Сообщить(КодПроцедуры);
тзПроцедуры.УстановитьЗначение(тзПроцедуры.НомерСтроки, "к" + СокрЛП(КодПроцедуры), 1);
КонецЦикла;
КонецЦикла;
Иначе
Док.ВыбратьДокументы(НачДата, КонДата);
Пока Док.ПолучитьДокумент() = 1 Цикл
Если Док.Авиакомпания <> Контрагент Тогда
Продолжить;
КонецЕсли;
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() = 1 Цикл
Если СокрЛП(Док.КодПроцедуры) = """" Тогда
Продолжить;
КонецЕсли;
тзПроцедуры.НоваяСтрока();
тзПроцедуры.ФИО = Док.Пациент;
тзПроцедуры.Контрагент = Док.Авиакомпания;
тзПроцедуры.Цена = Док.Цена;
КодПроцедуры = СокрЛП(Док.КодПроцедуры.Код);
//Сообщить(КодПроцедуры);
тзПроцедуры.УстановитьЗначение(тзПроцедуры.НомерСтроки, "к" + СокрЛП(КодПроцедуры), 1);
КонецЦикла;
КонецЦикла;
КонецЕсли;
//Сообщить(тзПроцедуры.КоличествоКолонок());
// формируем список колонок для свертки *************************************************************
//тзПроцедуры.Выгрузить(ТТТ);
СписокКолонок = "Цена";
Для а = 4 По тзПроцедуры.КоличествоКолонок() - 3 Цикл
СписокКолонок = СписокКолонок + "," + СокрЛП(а);
КонецЦикла;
тзПроцедуры.Свернуть("ФИО,Контрагент", СписокКолонок);
тзПроцедуры.Сортировать("Контрагент,ФИО");
//тзПроцедуры.Выгрузить(ТТТ);
// удаляем лишние колонки без итогов
а=4;
Пока а <= тзПроцедуры.КоличествоКолонок() Цикл
Если тзПроцедуры.Итог(а) = 0 Тогда
тзПроцедуры.УдалитьКолонку(а); //удаляем строку, но "а" не увеличиваем, т.к. следующая строка у нас и есть "а"
Иначе
а = а + 1; //увеличиваем а (для перехода на след. строку)
КонецЕсли;
КонецЦикла;
//тзПроцедуры.Выгрузить(ТТТ);
// выводим на печать ********************************************************************************
// шапка
Т.ВывестиСекцию("Шапка|ФИО");
Т.ПрисоединитьСекцию("Шапка|Контрагент");
Для а = 4 По тзПроцедуры.КоличествоКолонок() Цикл
КодПроцедуры = тзПроцедуры.ПолучитьПараметрыКолонки(а);
КодПроцедуры = Прав(КодПроцедуры, 6);
СпрТарифы.НайтиПоКоду(КодПроцедуры);
КодПроцедуры = СпрТарифы.ТекущийЭлемент().ПолноеНаименование;
//Итог = тзПроцедуры.Итог(а);
//Если Итог <> 0 Тогда
Т.ПрисоединитьСекцию("Шапка|Процедуры");
//КонецЕсли;
КонецЦикла;
Т.ПрисоединитьСекцию("Шапка|Цена");
Т.ПрисоединитьСекцию("Шапка|ИтогоПоПациенту");
// строки
тзПроцедуры.ВыбратьСтроки();
Пока тзПроцедуры.ПолучитьСтроку() = 1 Цикл
Т.ВывестиСекцию("Строка|ФИО");
Т.ПрисоединитьСекцию("Строка|Контрагент");
ИтогоПоПациенту = 0;
Для а = 4 По тзПроцедуры.КоличествоКолонок() Цикл
Посещения = тзПроцедуры.ПолучитьЗначение(тзПроцедуры.НомерСтроки, а);
Т.ПрисоединитьСекцию("Строка|Процедуры");
ИтогоПоПациенту = ИтогоПоПациенту + Посещения;
КонецЦикла;
Т.ПрисоединитьСекцию("Строка|Цена");
Т.ПрисоединитьСекцию("Строка|ИтогоПоПациенту");
КонецЦикла;
// подвал
Т.ВывестиСекцию("Подвал|ФИО");
Т.ПрисоединитьСекцию("Подвал|Контрагент");
//Т.ПрисоединитьСекцию("Шапка|Контрагент");
Для а = 4 По тзПроцедуры.КоличествоКолонок() Цикл
ИтогоПосещений = тзПроцедуры.Итог(а);
КодПроцедуры = тзПроцедуры.ПолучитьПараметрыКолонки(а);
КодПроцедуры = Прав(КодПроцедуры, 6);
СпрТарифы.НайтиПоКоду(КодПроцедуры);
Цена =СпрТарифы.Цена.получить(НачДата);
сумма = Цена*ИтогоПосещений;
Т.ПрисоединитьСекцию("Подвал|Процедуры");
ИтогоПосещений=0;
Цена=0;
КонецЦикла;
Т.ПрисоединитьСекцию("Подвал|Цена");
Т.ПрисоединитьСекцию("Подвал|ИтогоПоПациенту");
Т.Опции(0);
Т.Показать();
Т.Напечатать(0);
КонецПроцедуры"
13.03.2012
21:52
#6
Раскомментируйте //Сообщить(КодПроцедуры), который перед ошибкой и посмотрите чему равен КодПроцедуры.
Скорее всего этого кода нет в справочнике Тарифов, т.к. имена колонок берутся из этого справочника.
Скорее всего этого кода нет в справочнике Тарифов, т.к. имена колонок берутся из этого справочника.
13.03.2012
21:56
#7
"раскомментировала... ошибка та же
000001
000002
000005
000007
000002
0000 02
000078
тзПроцедуры.УстановитьЗначение(тзПроцедуры.НомерСтроки,"к" + СокрЛП(КодПроцедуры),1);
{Отчет.ОтчетПоАвиакомпаниям12.Форма.Модуль(62)}: Неверный идентификатор колонки!
что означает 1?"
000001
000002
000005
000007
000002
0000
000078
тзПроцедуры.УстановитьЗначение(тзПроцедуры.НомерСтроки,"к" + СокрЛП(КодПроцедуры),1);
{Отчет.ОтчетПоАвиакомпаниям12.Форма.Модуль(62)}: Неверный идентификатор колонки!
что означает 1?"
13.03.2012
22:40
#8
"Это все потому что справочник СпрТарифы у вас является подчиненным справочнику Прейскуранты.
Как ваш алгоритм работает?
1. Берется справочник Прейскуранты
2. Зачем то в нем делается поиск по кодам 1, 2, 3, 4, 5 элементов. Первые четыре поиска выполняются, но результат поиска никак не используется.
3. По отношению к последнему найденному элементу (с кодом 5) из справочника Прейскуранты происходит добавление в таблицу тзПроцедуры кучи колонок с идентификаторами, соответствующими кодам элементов справочника Тарифы, подчиненных элементу справочника Прейскуранты с кодом 5 (это ключевое место, которое и есть причина ошибки).
4. Далее идет перебор каких то документов вида СтатКартаПациента и значения оттуда уходят в таблицу тзПроцедуры.
И вот теперь сами смотрите. В документе в реквизит "КодПроцедуры" занесена какая то ссылка на элемент из справочника Тарифов и она не пустая, но! Элемент, на который сделана ссылка не подчинен элементу справочника Прейскуранты с кодом 5 (наверное тариф принадлежит другому прейскуранту?), поэтому в таблице тзПроцедуры колонка с нужным идентификатором конечно же не находится.
Если не вникать в суть алгоритма, то как решение:
заменить на
но будет ли это корректным, можно судить только зная конечную цель задачи, зачем то же написано все таки
P.S.
Странная конструкция:
Я даже не думал что такое вообще работает. Для верности заменил бы на:
Как ваш алгоритм работает?
1. Берется справочник Прейскуранты
2. Зачем то в нем делается поиск по кодам 1, 2, 3, 4, 5 элементов. Первые четыре поиска выполняются, но результат поиска никак не используется.
3. По отношению к последнему найденному элементу (с кодом 5) из справочника Прейскуранты происходит добавление в таблицу тзПроцедуры кучи колонок с идентификаторами, соответствующими кодам элементов справочника Тарифы, подчиненных элементу справочника Прейскуранты с кодом 5 (это ключевое место, которое и есть причина ошибки).
4. Далее идет перебор каких то документов вида СтатКартаПациента и значения оттуда уходят в таблицу тзПроцедуры.
И вот теперь сами смотрите. В документе в реквизит "КодПроцедуры" занесена какая то ссылка на элемент из справочника Тарифов и она не пустая, но! Элемент, на который сделана ссылка не подчинен элементу справочника Прейскуранты с кодом 5 (наверное тариф принадлежит другому прейскуранту?), поэтому в таблице тзПроцедуры колонка с нужным идентификатором конечно же не находится.
Если не вникать в суть алгоритма, то как решение:
СпрТарифы.ВыбратьЭлементы();
заменить на
СпрТарифы.ВыбратьЭлементы(0);
но будет ли это корректным, можно судить только зная конечную цель задачи, зачем то же написано все таки
СпрТарифы.ИспользоватьВладельца(СпрПрейскурант.ТекущийЭлемент());
P.S.
Странная конструкция:
Если СокрЛП(Док.КодПроцедуры) = """" Тогда
Продолжить;
КонецЕсли;
Я даже не думал что такое вообще работает. Для верности заменил бы на:
Если ПустоеЗначение(Док.КодПроцедуры) = 1 Тогда"
Продолжить;
КонецЕсли;
13.03.2012
22:53
#9
спасибо огромное за уделенное время, за то что все разложили по полкам... очень признательна Вам! до этого у меня тоже возникали вопросы именно по этой конструкции... здесь я выложила скрины, для полного разъяснения моего вопроса, если интересно можете посмотреть, возможно я неправильно излагаю свои мысли
- 1
- 2
Как написать программно, чтобы цена выводилась в таблице при формировании отчета?Комплексная автоматизация 8.2
Читают тему
(гостей: 1)