Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
20 мая 2024, 03:47

Подскажите с кодом (ошибка)

Автор Алексей_1985_06, 30 мар 2020, 15:05

0 Пользователей и 1 гость просматривают эту тему.

Алексей_1985_06

В документе есть ТЧ "ГрафикЗаступления", в нем поле ДатаЗаступления нужно заполнить датами, которые меньше даты указанной в реквизите шапки "ДатаОкончания".

Ошибка:
{Документ.ГрафикЗаступленияОперативныхДежурных.Форма.ФормаДокумента.Форма(18)}: Значение не является значением объектного типа (ДатаЗаступления)
Пока Строка.ДатаЗаступления < Объект.ДатаОкончания Цикл

Помогите исправить!!!
&НаКлиенте
Процедура ЗаполнитьДатами(Команда)
Строка = Элементы.ГрафикЗаступления.ТекущиеДанные;
Пока Строка.ДатаЗаступления < Объект.ДатаОкончания Цикл
НоваяСтрока = Объект.ГрафикЗаступления.Добавить();
ПредыдущаяСтрока = Объект.ГрафикЗаступления.Получить(НоваяСтрока.НомерСтроки - 2);
НоваяСтрока.ДатаЗаступления = ПредыдущаяСтрока.ДатаЗаступления + 60*60*24;
КонецЦикла;
КонецПроцедуры


depb


LexaK

Вообще, обработку данных документа как объекта, рекомендуется выполнять НаСервере (правда не понял что как  заполнять :dfbbdrfb: )

&НаКлиенте
Процедура ЗаполнитьДатами(Команда)
    ЗаполнитьДатамиНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДатамиНаСервере()
    Для каждого Строка Из Объект.ГрафикЗаступления Цикл
        Если Строка.ДатаЗаступления < Объект.ДатаОкончания Тогда
            //какой-то ваш код
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

если помогло нажмите: Спасибо!

Алексей_1985_06

Цитата: LexaK от 31 мар 2020, 14:39
Вообще, обработку данных документа как объекта, рекомендуется выполнять НаСервере (правда не понял что как  заполнять :dfbbdrfb: )

&НаКлиенте
Процедура ЗаполнитьДатами(Команда)
    ЗаполнитьДатамиНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДатамиНаСервере()
    Для каждого Строка Из Объект.ГрафикЗаступления Цикл
        Если Строка.ДатаЗаступления < Объект.ДатаОкончания Тогда
            //какой-то ваш код
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры


LexaK, спасибо за помощь.. но это не много не то что нужно, поясню:
1. Есть два реквизита в шапке документа: "ДатаНачало" и "ДатаОкончания"
2. В этом же документе есть ТЧ "ГрафикЗаступления" с полем ДатаЗаступления
3. Необходимо сделать так, что бы эти даты (ДатаЗаступления) заполнились в указанном диапазоне реквизитов "ДатаНачало" и "ДатаОкончания"
Если можно, то помогите пожалуйста реализовать это!!!

LexaK

теперь стало понятнее, это называется обработка заполнения табличной части документа,
попробуйте такой вариант

&НаКлиенте
Процедура ЗаполнитьДатами(Команда)

//набор проверок
Если ЗначениеЗаполнено(Объект.ДатаНачало)
и Объект.ДатаНачало < Объект.ДатаОкончания Тогда
Иначе
ПоказатьПредупреждение(,"Не верно заданы даты!",30);
Возврат;
КонецЕсли;
Если Объект.ГрафикЗаступления.Количество() > 0 Тогда
//есть старые данные, запрашиваем перезаполнение
лкОтвет = Вопрос("Таблица будет перезаполнена. Продолжить?",РежимДиалогаВопрос.ДаНет,20,КодВозвратаДиалога.Нет);
Если лкОтвет <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
КонецЕсли;

    ЗаполнитьДатамиНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДатамиНаСервере()
Объект.ГрафикЗаступления.Очистить();
ДатаЗаступления = Объект.ДатаНачало;
Пока ДатаЗаступления <= Объект.ДатаОкончания Цикл
лкСтр = Объект.ГрафикЗаступления.Добавить();
лкСтр.ДатаЗаступления = ДатаЗаступления;
ДатаЗаступления = ДатаЗаступления + 3600 * 24;
КонецЦикла;
КонецПроцедуры
если помогло нажмите: Спасибо!

Алексей_1985_06

Цитата: LexaK от 31 мар 2020, 20:28
теперь стало понятнее, это называется обработка заполнения табличной части документа,
попробуйте такой вариант

&НаКлиенте
Процедура ЗаполнитьДатами(Команда)

//набор проверок
Если ЗначениеЗаполнено(Объект.ДатаНачало)
и Объект.ДатаНачало < Объект.ДатаОкончания Тогда
Иначе
ПоказатьПредупреждение(,"Не верно заданы даты!",30);
Возврат;
КонецЕсли;
Если Объект.ГрафикЗаступления.Количество() > 0 Тогда
//есть старые данные, запрашиваем перезаполнение
лкОтвет = Вопрос("Таблица будет перезаполнена. Продолжить?",РежимДиалогаВопрос.ДаНет,20,КодВозвратаДиалога.Нет);
Если лкОтвет <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
КонецЕсли;

    ЗаполнитьДатамиНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДатамиНаСервере()
Объект.ГрафикЗаступления.Очистить();
ДатаЗаступления = Объект.ДатаНачало;
Пока ДатаЗаступления <= Объект.ДатаОкончания Цикл
лкСтр = Объект.ГрафикЗаступления.Добавить();
лкСтр.ДатаЗаступления = ДатаЗаступления;
ДатаЗаступления = ДатаЗаступления + 3600 * 24;
КонецЦикла;
КонецПроцедуры


LexaK, ОГРОМНОЕ ВАМ СПАСИБО! Все работает как надо!!! Вы настоящий профи!!!!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск