|
v8: Пропадают строки при выводе на форму | ☑ | ||
---|---|---|---|---|
0
Neznayka_5
09.08.12
✎
06:36
|
пишу внешнюю обработку заполнения табличных частей документа Установка цен номенклатуры. Когда ее открываю как внешнюю, все нормально. Из запроса все помещается в ТЧ документа, а оттуда на форму (как выполняется это и в программе). Когда прикрепляю к документу непосредственно, пропадает несколько строк (которые есть в запросе и ТЧ документа, но на форме почему то не отображаются). Из-за чего это может происходить? Код могу скинуть
|
|||
1
DMLangepas
09.08.12
✎
06:38
|
кидай код
|
|||
2
Neznayka_5
09.08.12
✎
06:38
|
Процедура Инициализировать(Объект, ИмяТабличнойЧасти, ТабличноеПолеОбъекта) Экспорт
Форма = Объект.ПолучитьФорму("ФормаДокумента"); Если Объект.Товары.Количество() > 0 Тогда ТекстВопроса = "Перед заполнением табличная часть будет очищена. Заполнить?"; Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , , Метаданные().Представление()); Если Ответ <> КодВозвратаДиалога.Да Тогда Возврат; КонецЕсли; Объект.Товары.Очистить(); Форма.ТаблицаЦен.Очистить(); КонецЕсли; ФормаНастроек = ПолучитьФорму("ФормаВыбораПараметров", Форма); Если Не ТипЗнч(ФормаНастроек.ОткрытьМодально()) = Тип("Структура") Тогда Возврат Иначе Организация = ФормаНастроек.Организация; ОкончаниеПериода = СсылкаНаОбъект.Дата; Наценка = ФормаНастроек.Наценка; НДС = ФормаНастроек.НДС; Запрос = Новый Запрос; Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.ТоварыНаСкладах); Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("ТоварыСопутствующие", Справочники.НоменклатурныеГруппы.НайтиПоНаименованию("Товары сопутствующие")); Запрос.УстановитьПараметр("НачалоПериода", ПланыСчетов.Хозрасчетный.ТоварыНаСкладах); Запрос.УстановитьПараметр("ОкончаниеПериода", ОкончаниеПериода); Запрос.Текст = "ВЫБРАТЬ | ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Номенклатура, | ВЫБОР | КОГДА ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток = 0 | ТОГДА 0 | ИНАЧЕ (ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток / ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток) * (100 +" + Наценка + ")/100" + " * (100 +" + НДС + ")/100" + " | КОНЕЦ КАК Цена, | ХозрасчетныйОстаткиИОбороты.Субконто1.ЕдиницаХраненияОстатков как ЕдиницаИзмерения |ИЗ | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, &ОкончаниеПериода, , , , , ) КАК ХозрасчетныйОстаткиИОбороты |ГДЕ | ХозрасчетныйОстаткиИОбороты.Счет = &Счет | И ХозрасчетныйОстаткиИОбороты.Организация = &Организация | И (НЕ ХозрасчетныйОстаткиИОбороты.Субконто1.ВестиУчетПоХарактеристикам) | И ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток >= 0 | И ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток >= 0 | И ХозрасчетныйОстаткиИОбороты.Субконто1.НоменклатурнаяГруппа = &ТоварыСопутствующие" + ?(НЕ Форма.НеПроводитьНулевыеЗначения, "", " | И ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток <> 0") + " | УПОРЯДОЧИТЬ ПО | ХозрасчетныйОстаткиИОбороты.Субконто1.Наименование"; РезультатЗапроса = Запрос.Выполнить().Выбрать(); КолонкиТаблицыЦен = Форма.ТаблицаЦен.Колонки; КурсВалУпр = МодульВалютногоУчета.ПолучитьКурсВалюты(мВалютаУправленческогоУчета, Объект.Дата); КурсыВалют = Новый Соответствие; Тмп = 0; Пока РезультатЗапроса.Следующий() Цикл Тмп=Тмп+1; Для Каждого СтрокаТипаЦен Из Объект.ТипыЦен Цикл НоваяСтрока = Объект.Товары.Добавить(); НоваяСтрока.ИндексСтрокиТаблицыЦен = Тмп; НоваяСтрока.Номенклатура = РезультатЗапроса.Номенклатура; НоваяСтрока.ТипЦен = СтрокаТипаЦен.ТипЦен; НоваяСтрока.Цена = РезультатЗапроса.Цена; НоваяСтрока.Валюта = СтрокаТипаЦен.ТипЦен.ВалютаЦены; НоваяСтрока.ЕдиницаИзмерения = РезультатЗапроса.ЕдиницаИзмерения; НоваяСтрока.ПроцентСкидкиНаценки = СтрокаТипаЦен.ТипЦен.ПроцентСкидкиНаценки; КонецЦикла; КонецЦикла; мСоответствиеТиповЦен = Новый Соответствие; //Сформируем и заполним таблицу цен. Для Каждого СтрокаТипаЦен Из Объект.ТипыЦен Цикл НомерСоответствияТекущейКолонки = Объект.ТипыЦен.Индекс(СтрокаТипаЦен); мСоответствиеТиповЦен.Вставить(СтрокаТипаЦен.ТипЦен, НомерСоответствияТекущейКолонки); ТаблицаЦен = Форма.ТаблицаЦен; Если ТаблицаЦен.Колонки.Найти("цена" + НомерСоответствияТекущейКолонки) = Неопределено Тогда ТаблицаЦен.Колонки.Добавить("цена" + НомерСоответствияТекущейКолонки, Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2, ДопустимыйЗнак.Неотрицательный)), СокрЛП(СтрокаТипаЦен.ТипЦен), 10); КонецЕсли; Если ТаблицаЦен.Колонки.Найти("СпособРасчета" + НомерСоответствияТекущейКолонки) = Неопределено Тогда ТаблицаЦен.Колонки.Добавить("СпособРасчета"+НомерСоответствияТекущейКолонки, Новый ОписаниеТипов("ПеречислениеСсылка.СпособыРасчетаЦены"), "Способ расчета", 8); КонецЕсли; Если ТаблицаЦен.Колонки.Найти("валюта" + НомерСоответствияТекущейКолонки) = Неопределено Тогда ТаблицаЦен.Колонки.Добавить("валюта" + НомерСоответствияТекущейКолонки, Новый ОписаниеТипов("СправочникСсылка.Валюты"), "валюта", 8); КонецЕсли; Если ТаблицаЦен.Колонки.Найти("единица" + НомерСоответствияТекущейКолонки) = Неопределено Тогда ТаблицаЦен.Колонки.Добавить("единица" + НомерСоответствияТекущейКолонки, Новый ОписаниеТипов("СправочникСсылка.ЕдиницыИзмерения"), "единица", 8); КонецЕсли; Если ТаблицаЦен.Колонки.Найти("процент" + НомерСоответствияТекущейКолонки) = Неопределено Тогда ТаблицаЦен.Колонки.Добавить("процент" + НомерСоответствияТекущейКолонки, Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2)), "% скидки (наценки)", 8); КонецЕсли; КонецЦикла; Если Объект.ТипыЦен.Количество() = 0 Тогда // ничего делать не надо Возврат; КонецЕсли; ТаблицаТоваров = Объект.Товары.Выгрузить(); ТаблицаТоваров.Сортировать("ИндексСтрокиТаблицыЦен, Номенклатура, ХарактеристикаНоменклатуры"); ТекущийИндексСтрокиТаблицыЦен = Неопределено; НоваяСтрока = Неопределено; Для Каждого СтрокаТаблицыТоваров Из Объект.Товары Цикл Если ТекущийИндексСтрокиТаблицыЦен <> СтрокаТаблицыТоваров.ИндексСтрокиТаблицыЦен Или НоваяСтрока.Номенклатура <> СтрокаТаблицыТоваров.Номенклатура Или НоваяСтрока.ХарактеристикаНоменклатуры <> СтрокаТаблицыТоваров.ХарактеристикаНоменклатуры Тогда НоваяСтрока = Форма.ТаблицаЦен.Добавить(); НоваяСтрока.Номенклатура = СтрокаТаблицыТоваров.Номенклатура; ТекущийИндексСтрокиТаблицыЦен = СтрокаТаблицыТоваров.ИндексСтрокиТаблицыЦен; КонецЕсли; НомерСоответствияТекущейКолонки = мСоответствиеТиповЦен[СтрокаТаблицыТоваров.ТипЦен]; НоваяСтрока["цена" + НомерСоответствияТекущейКолонки] = СтрокаТаблицыТоваров.Цена; НоваяСтрока["СпособРасчета" + НомерСоответствияТекущейКолонки] = СтрокаТаблицыТоваров.СпособРасчетаЦены; НоваяСтрока["валюта" + НомерСоответствияТекущейКолонки] = СтрокаТаблицыТоваров.Валюта; НоваяСтрока["единица" + НомерСоответствияТекущейКолонки] = СтрокаТаблицыТоваров.ЕдиницаИзмерения; НоваяСтрока["процент" + НомерСоответствияТекущейКолонки] = СтрокаТаблицыТоваров.ПроцентСкидкиНаценки; КонецЦикла; Если РезультатЗапроса.Количество()=0 Тогда ОбщегоНазначения.СообщитьОбОшибке("Нет данных для заполнения цен. Возможно в типах цен контрагентов не указаны типы цен номенклатуры."); КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
3
Cashtane
09.08.12
✎
06:39
|
(2) Оперативно.
|
|||
4
Neznayka_5
09.08.12
✎
06:39
|
Для Каждого СтрокаТаблицыТоваров Из Объект.Товары Цикл
Если ТекущийИндексСтрокиТаблицыЦен <> СтрокаТаблицыТоваров.ИндексСтрокиТаблицыЦен Или НоваяСтрока.Номенклатура <> СтрокаТаблицыТоваров.Номенклатура Или НоваяСтрока.ХарактеристикаНоменклатуры <> СтрокаТаблицыТоваров.ХарактеристикаНоменклатуры Тогда НоваяСтрока = Форма.ТаблицаЦен.Добавить(); НоваяСтрока.Номенклатура = СтрокаТаблицыТоваров.Номенклатура; ТекущийИндексСтрокиТаблицыЦен = СтрокаТаблицыТоваров.ИндексСтрокиТаблицыЦен; КонецЕсли; НомерСоответствияТекущейКолонки = мСоответствиеТиповЦен[СтрокаТаблицыТоваров.ТипЦен]; НоваяСтрока["цена" + НомерСоответствияТекущейКолонки] = СтрокаТаблицыТоваров.Цена; НоваяСтрока["СпособРасчета" + НомерСоответствияТекущейКолонки] = СтрокаТаблицыТоваров.СпособРасчетаЦены; НоваяСтрока["валюта" + НомерСоответствияТекущейКолонки] = СтрокаТаблицыТоваров.Валюта; НоваяСтрока["единица" + НомерСоответствияТекущейКолонки] = СтрокаТаблицыТоваров.ЕдиницаИзмерения; НоваяСтрока["процент" + НомерСоответствияТекущейКолонки] = СтрокаТаблицыТоваров.ПроцентСкидкиНаценки; КонецЦикла; Предполагаю, что ошибка тут.. |
|||
5
Neznayka_5
09.08.12
✎
06:39
|
да я просто вчера вечером думала на эту тему, но сегодня с у тра ничего не прояснилось)
|
|||
6
Neznayka_5
09.08.12
✎
06:46
|
ну что, никто не знает??
|
|||
7
iceman2112
09.08.12
✎
06:54
|
хм, а разве при заполнение табличных частей, нужно вообще форму трогать?
|
|||
8
iceman2112
09.08.12
✎
06:54
|
и зачем?
|
|||
9
iceman2112
09.08.12
✎
06:55
|
на скидку, ошибку в этом, можете поправить если не прав или что то недопонял.
|
|||
10
Neznayka_5
09.08.12
✎
08:54
|
ссылка на обхъект не должна использоваться) надо было Объект))
|
|||
11
Serg_1960
09.08.12
✎
09:02
|
Интересно стало: "СсылкаНаОбъект.Дата" - должен быть ругаться что не найдено "СсылкаНаОбъект". Аналогично и по строке "Форма.ТаблицаЦен.Добавить()"...
Можно ЭтотОбъект, ЭтаФорма... |
|||
12
Serg_1960
09.08.12
✎
09:04
|
(11) + Вероятно вы скомиуниздили алгоритм из внешней обработки и не везде исправили обращения.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |