Проблема с работой таблицы значений
24.02.2006
10:14
#1
"Работаю в Аналит: Аптека 5.0 проф. релиз 4.08, в прайс лист попросили вставить дополнительное поле "Срок годности". Казалось бы чего проще, написал модуль, но вот в чем загвозка, почему то на некоторые товары модуль не срабатывает. Перепробовал казалось бы все...Может что то не так сделал..Подскажи те плиз...
Функция ВывестиГоденДо()
Партия = СоздатьОбъект("Справочник.Партии");
Таб = СоздатьОбъект("ТаблицаЗначений");
Таб.НоваяКолонка("Наименование",,,,,,,);
Таб.НоваяКолонка("ГоденДо","Дата",,,,,"Дата",);
Таб.НоваяКолонка("Остаток",,,,,,,);
Партия.ИспользоватьВладельца(Товар.ТекущийЭлемент());
Партия.ВыбратьЭлементы();
Пока Партия.ПолучитьЭлемент() = 1 Цикл
Если Партия.Владелец.Наименование = Товар.Наименование Тогда
Если (Регистр.ОстаткиТоваров.СводныйОстаток(Партия.Владелец,,Партия.ТекущийЭлемент),"Остаток") > 0) и (Партия.ПометкаУдаления() = 0) Тогда
Таб.НоваяСтрока();
Таб.Наименование = Партия.Владелец.Наименование;
Таб.ГоденДо = Партия.ГоденДо;
Таб.Остаток = Регистр.ОстаткиТоваров.СводныйОстатокПартия.Владелец,,Партия.ТекущийЭлемент(),"Остаток")
Иначе
Таб.НоваяСтрока();
Таб.Наименование = Партия.Владелец.Наименование;
Таб.ГоденДо = 0;
Таб.Остаток = Регистр.ОстаткиТоваров.СводныйОстаток(Партия.Владелец,,Партия.ТекущийЭлемент(),"Остаток")
КонецЕсли;
КонецЕсли;
КонецЦикла;
Таб.Сортировать("ГоденДо");
Таб.ВыбратьСтроки();
Пока Таб.ПолучитьСтроку() = 1 Цикл
Если Таб.Остаток <= 0 Тогда
Если Таб.КоличествоСтрок() > 1 Тогда
Таб.УдалитьСтроку();
КонецЕсли;
КонецЕсли;
КонецЦикла;
Таб.ПолучитьСтрокуПоНомеру(1);
Возврат Формат(Таб.ГоденДо,"ДДД.ММ.ГГ");
КонецФункции
Вообщем нужно, чтобы если нулевой остаток по складу он не выбирал "Срок годности", если же существует несколько партий товаов, тогда нужно выбрать наиболее ранний и показать его.
"
Функция ВывестиГоденДо()
Партия = СоздатьОбъект("Справочник.Партии");
Таб = СоздатьОбъект("ТаблицаЗначений");
Таб.НоваяКолонка("Наименование",,,,,,,);
Таб.НоваяКолонка("ГоденДо","Дата",,,,,"Дата",);
Таб.НоваяКолонка("Остаток",,,,,,,);
Партия.ИспользоватьВладельца(Товар.ТекущийЭлемент());
Партия.ВыбратьЭлементы();
Пока Партия.ПолучитьЭлемент() = 1 Цикл
Если Партия.Владелец.Наименование = Товар.Наименование Тогда
Если (Регистр.ОстаткиТоваров.СводныйОстаток(Партия.Владелец,,Партия.ТекущийЭлемент),"Остаток") > 0) и (Партия.ПометкаУдаления() = 0) Тогда
Таб.НоваяСтрока();
Таб.Наименование = Партия.Владелец.Наименование;
Таб.ГоденДо = Партия.ГоденДо;
Таб.Остаток = Регистр.ОстаткиТоваров.СводныйОстатокПартия.Владелец,,Партия.ТекущийЭлемент(),"Остаток")
Иначе
Таб.НоваяСтрока();
Таб.Наименование = Партия.Владелец.Наименование;
Таб.ГоденДо = 0;
Таб.Остаток = Регистр.ОстаткиТоваров.СводныйОстаток(Партия.Владелец,,Партия.ТекущийЭлемент(),"Остаток")
КонецЕсли;
КонецЕсли;
КонецЦикла;
Таб.Сортировать("ГоденДо");
Таб.ВыбратьСтроки();
Пока Таб.ПолучитьСтроку() = 1 Цикл
Если Таб.Остаток <= 0 Тогда
Если Таб.КоличествоСтрок() > 1 Тогда
Таб.УдалитьСтроку();
КонецЕсли;
КонецЕсли;
КонецЦикла;
Таб.ПолучитьСтрокуПоНомеру(1);
Возврат Формат(Таб.ГоденДо,"ДДД.ММ.ГГ");
КонецФункции
Вообщем нужно, чтобы если нулевой остаток по складу он не выбирал "Срок годности", если же существует несколько партий товаов, тогда нужно выбрать наиболее ранний и показать его.
"
24.02.2006
11:31
#2
"Перед
Таб.Сортировать("ГоденДо");
Поставил Таб.Свернуть("ГоденДо");
И получилось!!!:-)"
Таб.Сортировать("ГоденДо");
Поставил Таб.Свернуть("ГоденДо");
И получилось!!!:-)"
26.02.2006
06:03
#3
"Следующий кусок кода не корректен:
Таб.Сортировать("ГоденДо");
Таб.ВыбратьСтроки();
Пока Таб.ПолучитьСтроку() = 1 Цикл
Если Таб.Остаток <= 0 Тогда
Если Таб.КоличествоСтрок() > 1 Тогда
Таб.УдалитьСтроку();
КонецЕсли;
КонецЕсли;
КонецЦикла;
//----------------------------------------------------
Если нужно выбрать самый ранний срок, то делаем так:
Таб.Сортировать("ГоденДо");
Таб.ВыбратьСтроки();
Пока Таб.ПолучитьСтроку() = 1 Цикл
Если Таб.Остаток > 0 Тогда
возврат(.....); // Выход с возвращением самой ранней даты
КонецЕсли;
КонецЦикла;
// Если мы здесь, то либо нет товара, либо его остаток = 0
"
Таб.Сортировать("ГоденДо");
Таб.ВыбратьСтроки();
Пока Таб.ПолучитьСтроку() = 1 Цикл
Если Таб.Остаток <= 0 Тогда
Если Таб.КоличествоСтрок() > 1 Тогда
Таб.УдалитьСтроку();
КонецЕсли;
КонецЕсли;
КонецЦикла;
//----------------------------------------------------
Если нужно выбрать самый ранний срок, то делаем так:
Таб.Сортировать("ГоденДо");
Таб.ВыбратьСтроки();
Пока Таб.ПолучитьСтроку() = 1 Цикл
Если Таб.Остаток > 0 Тогда
возврат(.....); // Выход с возвращением самой ранней даты
КонецЕсли;
КонецЦикла;
// Если мы здесь, то либо нет товара, либо его остаток = 0
"
27.02.2006
10:55
#4
"Дело в том, что почему то со всеми значениями не работает, некоторорые значения не берет. А вот как я сделал все работатет
Таб.Свернуть("ГоденДо",);
Таб.Сортировать("ГоденДо");
Таб.ВыбратьСтроки();
Пока Таб.ПолучитьСтроку() = 1 Цикл
Если Таб.ГоденДо = 0 Тогда
Если Таб.КоличествоСтрок() > 1 Тогда
Таб.УдалитьСтроку();
КонецЕсли;
КонецЕсли;
КонецЦикла;
Таб.ПолучитьСтрокуПоНомеру(1);
Возврат Формат(Таб.ГоденДо,"ДДД.ММ.ГГ");
Теперь вот возник другой вопрос:
- Можно ли изменить чвет шрифта, или фона ячейки, если дата срока годности близиться к завершению.
"
Таб.Свернуть("ГоденДо",);
Таб.Сортировать("ГоденДо");
Таб.ВыбратьСтроки();
Пока Таб.ПолучитьСтроку() = 1 Цикл
Если Таб.ГоденДо = 0 Тогда
Если Таб.КоличествоСтрок() > 1 Тогда
Таб.УдалитьСтроку();
КонецЕсли;
КонецЕсли;
КонецЦикла;
Таб.ПолучитьСтрокуПоНомеру(1);
Возврат Формат(Таб.ГоденДо,"ДДД.ММ.ГГ");
Теперь вот возник другой вопрос:
- Можно ли изменить чвет шрифта, или фона ячейки, если дата срока годности близиться к завершению.
"
27.02.2006
11:24
#5
Дело в том, что почему то со всеми значениями не работает, некоторорые значения не берет. --- Забираю свои слова назад!!! Все работает и так как мне предложили..и как сделал я....Большое спасибо!!!!
27.02.2006
11:26
#6
"Можно. Смотрите в сторону секций и областей таблицы
вместо: таб.ВывестиСекцию("имя_1")
используем:
В секции задаём имена областям (Гл. меню -> Таблица -> имена)
ск = таб.ПолучитьСекцию("имя_1")
обл = таб.имя_области;
а далее с областью делай всё что душе угодно.
потом: таб.ВывестиСекцию(ск);
"
вместо: таб.ВывестиСекцию("имя_1")
используем:
В секции задаём имена областям (Гл. меню -> Таблица -> имена)
ск = таб.ПолучитьСекцию("имя_1")
обл = таб.имя_области;
а далее с областью делай всё что душе угодно.
потом: таб.ВывестиСекцию(ск);
"
Читают тему
(гостей: 1)