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

Получить данные из документа

Автор pechtim, 28 июн 2017, 19:41

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

pechtim

Задача такая: после ввода данных на форме, при записи алгоритм должен проверять различные данные(введенные) с данными уже существующими в документе. Если дата у введенных данных и существующих данных совпадают, то в соответствующих полях: Водитель, Грузчик, Машина данные должны различаться. Т.е. в один день водитель,грузчик или машина может находиться только в одной бригаде. Алгоритм я сделал, но поскольку в 1С не разбираюсь, данные из документа получить не могу. Такое ощущение, что алгоритм сравнивает данные на форме сами с собой
Вот алгоритм:

Процедура ПриЗаписи(Отказ)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ФормированиеБригады.Водитель,
| ФормированиеБригады.Грузчик1,
| ФормированиеБригады.Грузчик2,
| ФормированиеБригады.Машина,
| ФормированиеБригады.Дата
|ИЗ
| Документ.ФормированиеБригады КАК ФормированиеБригады";
РезультатЗапроса = Запрос.Выполнить();

Записи = РезультатЗапроса.Выбрать();

Пока Записи.Следующий() Цикл
Если (Записи.Дата = Дата) 
Тогда

Если (Записи.Водитель = Водитель) Тогда
Сообщить("В базе присутствует " + Записи.Водитель + " в бригаде, назначенной: " + Записи.Дата);
Отказ = Истина;
КонецЕсли;

Если (Записи.Грузчик1 = Грузчик1) Тогда
Сообщить("В базе присутствует " + Записи.Грузчик1 + " в бригаде, назначенной: " + Записи.Дата);
Отказ = Истина;
КонецЕсли;

Если (Записи.Грузчик2 = Грузчик2) Тогда
Сообщить("В базе присутствует " + Записи.Грузчик2 + " в бригаде, назначенной: " + Записи.Дата);
Отказ = Истина;
КонецЕсли;

Если (Записи.Машина = Машина) Тогда
Сообщить("В базе присутствует " + Записи.Машина + " в бригаде, назначенной: " + Записи.Дата);
Отказ = Истина;
КонецЕсли;

КонецЕсли;
КонецЦикла;
Если (Грузчик1 = Грузчик2)
Тогда
Сообщить("Поля грузчиков назначенных в эту бригаду совпадают, в бригаду должно быть назначено 2 разных грузчика");
Отказ = Истина;
КонецЕсли;

КонецПроцедуры

bsn-chita

Сейчас как я понимаю данные берутся из всех документов. Нужно передать в запрос параметр Ссылка и условие ГДЕ в запрос добавить по Ссылке.
Добавлено: 29 июн 2017, 04:22


Так же делал простои пример и как мне кажется нужно ПередЗаписью использовать. ПриЗаписи дата из запроса и дата одинаковые всегда.
Добавлено: 29 июн 2017, 04:38


Если сильно принципиально ПриЗаписи что то делать то "старую дату" я бы передал так.

Процедура ПриЗаписи(Отказ)
// Текущая дата документа
Сообщить(Дата)
// Старая дата из запроса
Сообщить(ДополнительныеСвойства.Дата)
КонецПроцедуры

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ФормированиеБригады.Дата КАК Дата
|ИЗ
| Документ.ФормированиеБригады КАК ФормированиеБригады
|ГДЕ
| ФормированиеБригады.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", Ссылка);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ДополнительныеСвойства.Вставить("Дата", ВыборкаДетальныеЗаписи.Дата);
КонецЦикла;
КонецПроцедуры

Теги:

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

Рейтинг@Mail.ru

Поиск