&НаКлиенте
Процедура Изменить(Команда, Результат) Экспорт
ДатаИзмененияСостава = ПолучитьПоследнююДатуЗаписи(Результат); // переменная для помещения последней записи в регистр
СледующаяДата = ДатаИзмененияСостава + (7*24*3600); //плюс неделя
Разница = СледующаяДата - ТекущаяДата();
Если Разница > 0 Тогда
Разница = РазбитьСекунды(Разница);
// Элементы.ГруппаШапки.Доступность = Ложь;
// Элементы.ГруппаДанных.Доступность = Ложь;
// Элементы.Детали.Доступность = Ложь;
ПоказатьПредупреждение(,"До изменения осталось " + Разница, 60, "Изменения запрещены!");
Иначе
ОткрытьФорму("РегистрСведений.Спецификация.ФормаЗаписи");
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПолучитьПоследнююДатуЗаписи(Результат)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СпецификацияСрезПоследних.СистемныйБлок КАК СистемныйБлок,
| СпецификацияСБ.Дата КАК Дата
|ИЗ
| РегистрСведений.Спецификация.СрезПоследних(, ) КАК СпецификацияСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.СпецификацияСБ КАК СпецификацияСБ
| ПО СпецификацияСрезПоследних.Регистратор = СпецификацияСБ.Ссылка
|ГДЕ
| СпецификацияСБ.Проведен = ИСТИНА
| И СпецификацияСБ.СистемныйБлок = СпецификацияСрезПоследних.СистемныйБлок
|
|СГРУППИРОВАТЬ ПО
| СпецификацияСрезПоследних.СистемныйБлок,
| СпецификацияСрезПоследних.Период,
| СпецификацияСБ.СистемныйБлок,
| СпецификацияСБ.Дата";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Результат = ВыборкаДетальныеЗаписи.Дата;
КонецЦикла;
Возврат Результат;
КонецФункции
Показатьпытаюсь получить последнюю запись с РС. допустим выбираешь документ спецификации, нажимаешь на кнопку Изменить , код выше должен брать последнюю запись из рс с той деталью что в документе прописана , к примеру системный блок №1, он ищет по нему запись и потом считает сколько времени прошло с создания спецификации этого блока. если прошла неделя то он разрешает изменить или внести новую спецификацию.
проблема в том что этот код просматривает все записи и выдает самую большую дату, в итоге я получаю на все документы один и тот же запрет, осталось 6 дней 15 часов и т д секунд. Как исправить?
По теме из базы знаний
- Типичные ошибки, некоторые вопросы качества и эффективности работы при разработке в 1С
- Взаимодействие мобильного приложения 1С и центральной информационной базы с использованием http-сервиса
- Новые возможности языка запросов в платформе 8.3.20
- Задача на ошибки и неоптимальности при проведении приходной накладной
- Применение нейросетей. Обзор и сравнение ChatGPT4o vs DeepSeek.
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2)
он перебирает все документы и выбирает документ с другим блоком и другим временем. как мне выбрать нужную запись??
&НаСервере
Функция ПолучитьПоследнююДатуЗаписи(Дата, СистемныйБлок)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СпецификацияСрезПоследних.ДатаСпецификации КАК Дата,
| СпецификацияСБ.СистемныйБлок КАК СистемныйБлок
|ИЗ
| Документ.СпецификацияСБ КАК СпецификацияСБ
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Спецификация.СрезПоследних(&Дата, СистемныйБлок = &СистемныйБлок) КАК СпецификацияСрезПоследних
| ПО (СпецификацияСрезПоследних.Регистратор = СпецификацияСБ.Ссылка)
|ГДЕ
| СпецификацияСБ.Проведен";
Запрос.УстановитьПараметр("Дата", Дата);
Запрос.УстановитьПараметр("СистемныйБлок", СистемныйБлок);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Дата = ВыборкаДетальныеЗаписи.Дата;
КонецЦикла;
Возврат Дата;
КонецФункции
Показатьон перебирает все документы и выбирает документ с другим блоком и другим временем. как мне выбрать нужную запись??
(11)
ПРАВИЛЬНО ПОСТАВИЛ?
&НаСервере
Функция ПолучитьПоследнююДатуЗаписи(Ссылка, Дата, СистемныйБлок)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| СпецификацияСрезПоследних.ДатаСпецификации КАК Дата
|ИЗ
| РегистрСведений.Спецификация.СрезПоследних(&Дата, ) КАК СпецификацияСрезПоследних
|ГДЕ
| ТИПЗНАЧЕНИЯ(СпецификацияСрезПоследних.Регистратор) = ТИП(ДОКУМЕНТ.СПЕЦИФИКАЦИЯСБ)
| И СпецификацияСрезПоследних.Регистратор.Ссылка = &Ссылка
| И СпецификацияСрезПоследних.СистемныйБлок = &СистемныйБлок
|
|УПОРЯДОЧИТЬ ПО
| Дата УБЫВ";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("Дата", ТекущаяДата());
Запрос.УстановитьПараметр("СистемныйБлок", СистемныйБлок);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Дата = ВыборкаДетальныеЗаписи.Дата;
КонецЦикла;
Возврат Дата;
КонецФункции
ПоказатьПРАВИЛЬНО ПОСТАВИЛ?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот