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

проверка на пустые значения

Автор sali, 26 мар 2025, 10:49

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

sali

есть загрузка с файлов для поступления и реализации. и в реализации когда нажимаешь "создать документ" идет проверка пустая тч или нет, но нужна еще одна на заполненность всех значений. у формы есть условное оформление выделять строку если не заполнена цена, сумма, количество или не сопоставилась номенклатура. как запретить здесь создание документа?
Процедура ПрочитатьРеализациюНаСервере()
//Объект.ДанныеФайлаРеализации.Очистить();
Попытка
ПарсерРеализации = Новый ЧтениеXML;
ПарсерРеализации.ОткрытьФайл(Объект.ПутьКФайлуРеализация);
Исключение
Сообщить("При открытии файла произошла ошибка. Операция прервана!");
Сообщить(ОписаниеОшибки());         
Возврат;
КонецПопытки; 

ПостроительРеализация = Новый ПостроительDOM;
ДокументРеализация = ПостроительРеализация.Прочитать(ПарсерРеализации); 

Для Каждого Элемент1 Из ДокументРеализация.ЭлементДокумента.ДочерниеУзлы Цикл
Если Элемент1.ИмяУзла = "doc_hd" Тогда

Док_НД_Релиз = Элемент1;
Для Каждого Элемент2 Из Элемент1.ДочерниеУзлы Цикл 
Если Элемент2.ИмяУзла = "doc_det" Тогда
Док_Дет_Релиз = Элемент2;

СТР = Шапка.Добавить();
Стр.ФиксНомер =  Док_НД_Релиз.Атрибуты[5].ЗначениеУзла;
Стр.НомерМагазина  = Док_НД_Релиз.Атрибуты[1].ЗначениеУзла;
Стр.НомерСмены   = Док_НД_Релиз.Атрибуты[6].ЗначениеУзла;     
Стр.ОплатаБезналом = ?(Док_НД_Релиз.Атрибуты[7].ЗначениеУзла = "0", истина, ложь);
Стр.ВидОплаты   = Док_НД_Релиз.Атрибуты[8].ЗначениеУзла;
Стр.ЭтоВозврат = ?(Док_НД_Релиз.Атрибуты[4].ЗначениеУзла = "1", истина, ложь);
Стр.ДатаПродажи    = Док_НД_Релиз.Атрибуты[2].ЗначениеУзла;

СтрШапки = РеквизитыШапки.Добавить();
СтрШапки.Номенклатура   = ПолучитьДанныеПоКодуСправочника(СокрЛП(Док_Дет_Релиз.Атрибуты[0].ЗначениеУзла) );
СтрШапки.Количество     = Док_Дет_Релиз.Атрибуты[1].ЗначениеУзла;
СтрШапки.Цена   = Док_Дет_Релиз.Атрибуты[2].ЗначениеУзла;
СтрШапки.Сумма       = СтрШапки.Цена * СтрШапки.Количество;
СтрШапки.НомерМагазина  = Док_НД_Релиз.Атрибуты[1].ЗначениеУзла;
СтрШапки.НомерСмены   = Док_НД_Релиз.Атрибуты[6].ЗначениеУзла;     

НоваСтрока = Объект.ДанныеФайлаРеализации.Добавить();
НоваСтрока.ФиксНомер   = Стр.ФиксНомер;
НоваСтрока.НомерМагазина  = Стр.НомерМагазина;
НоваСтрока.НомерСмены   = Стр.НомерСмены;     
НоваСтрока.ДатаПродажи    = Стр.ДатаПродажи;
НоваСтрока.ОплатаБезналом = Стр.ОплатаБезналом;
НоваСтрока.ВидОплаты   = Стр.ВидОплаты;
НоваСтрока.ЭтоВозврат     = Стр.ЭтоВозврат;   
НоваСтрока.Номенклатура   = СтрШапки.Номенклатура;
НоваСтрока.Количество     = СтрШапки.Количество ;
НоваСтрока.Цена   = СтрШапки.Цена;
НоваСтрока.Сумма   = СтрШапки.Сумма;   

Если НЕ ЗначениеЗаполнено(Таблица.Номенклатура) ИЛИ НЕ ЗначениеЗаполнено(Таблица.Количество)
ИЛИ НЕ ЗначениеЗаполнено(Таблица.Цена) ИЛИ НЕ ЗначениеЗаполнено(Таблица.Сумма) Тогда
таблица.СортироватьПоНулю = 0;     
Иначе
Таблица.СортироватьПоНулю = 1;
КонецЕсли;
Объект.ДанныеФайлаРеализации.Сортировать("СортироватьПоНулю возр"); 
Сообщить("Заполните или удалите незаполненые данные");
КонецЕсли;
КонецЦикла;
КонецЕсли;   
КонецЦикла;
ПарсерРеализации.Закрыть();

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

&НаКлиенте
Процедура СоздатьРеализацию(Команда)
// ПроверитьЗаполненостьДанных();   
Если НЕ ЗначениеЗаполнено(Объект.ДанныеФайлаРеализации)  Тогда
Сообщить("Заполните табличную часть!");
Возврат;
Иначе
СсылкаНаРозничныеПродажи = СоздатьРеализациюНаСервере();
ПараметрыФормы = Новый Структура("Ключ", СсылкаНаРозничныеПродажи);
ОткрытьФорму("Документ.ОтчетОРозничныхПродажах.Форма.ФормаДокумента", ПараметрыФормы);
КонецЕсли;

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

//&НаСервере
//Процедура ПроверитьЗаполненостьДанных()       
// Для каждого Таблица Из Объект.ДанныеФайлаРеализации Цикл
// Если НЕ ЗначениеЗаполнено(Таблица.Номенклатура) ИЛИ НЕ ЗначениеЗаполнено(Таблица.Количество)
// ИЛИ НЕ ЗначениеЗаполнено(Таблица.Цена) ИЛИ НЕ ЗначениеЗаполнено(Таблица.Сумма) Тогда
// таблица.СортироватьПоНулю = 0;     
// Иначе
// Таблица.СортироватьПоНулю = 1;
// КонецЕсли;
// КонецЦикла;
// //Объект.ДанныеФайлаРеализации.Сортировать("СортироватьПоНулю возр"); 
// // Сообщить("Заполните или удалите незаполненые данные");
//КонецПроцедуры


fruitella


sali

fruitella, ага. а как его поставить в уже имеющееся условие ? Если НЕ ЗначениеЗаполнено(Объект.ДанныеФайлаРеализации)  Тогда
Сообщить("Заполните табличную часть!");
Возврат;
Иначе
СсылкаНаРозничныеПродажи = СоздатьРеализациюНаСервере();
ПараметрыФор

Denis1010

sali, Можете попробовать что-то на подобии:

ВсеЗначенияЗаполнены = Истина;

Если НЕ ЗначениеЗаполнено(Объект.ДанныеФайлаРеализации) И НЕ ПроверитьЗаполненностьЗначенийКолонокТЗ(ВсеЗначенияЗаполнены) Тогда
Сообщить("Заполните табличную часть!");
Возврат;
Иначе
СсылкаНаРозничныеПродажи = СоздатьРеализациюНаСервере();
ПараметрыФор;
КонецЕсли;


&НаСервере
Функция ПроверитьЗаполненностьЗначенийКолонокТЗ(ВсеЗначенияЗаполнены)

КолонкиТЗ = Объект.ДанныеФайлаРеализации.Выгрузить().Колонки;

Для Каждого Строка Из Объект.ДанныеФайлаРеализации Цикл
Для Каждого КолонкаТЗ Из КолонкиТЗ Цикл
Если НЕ ЗначениеЗаполнено(Строка[КолонкаТЗ.Имя]) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "В строке: " + Строка.НомерСтроки + " не заполнено значение в колонке: " + КолонкаТЗ.Имя;
                Сообщение.Сообщить();

ВсеЗначенияЗаполнены = Ложь;

Возврат ВсеЗначенияЗаполнены;
КонецЕсли;

КонецЦикла;
КонецЦикла;

КонецФункции

Afinogen

sali,
если Объект.ДанныеФайлаРеализации - это таб часть то что  мешает проверить количество?

Если Объект.ДанныеФайлаРеализации.Количество() = 0 Тогда

sali

Afinogen, Denis1010, fruitella, как мне тут отобразить сообщение "создан такой-то документ" для всех созданных?
&НаКлиенте
Процедура СоздатьРеализацию(Команда) 
Для каждого Элемент из объект.ДанныеФайлаРеализации цикл
если элемент.СортироватьПоНулю = 0 тогда
сообщить("У вас остались незаполненые данные!");
возврат;
конецесли;
конеццикла;


Если НЕ ЗначениеЗаполнено(Объект.ДанныеФайлаРеализации)  Тогда
Сообщить("Заполните табличную часть!");
Возврат;
Иначе 
СсылкаНаРозничныеПродажи = СоздатьРеализациюНаСервере(); 
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ключ", СсылкаНаРозничныеПродажи); 
ОткрытьФорму("Документ.ОтчетОРозничныхПродажах.Форма.ФормаДокумента", ПараметрыФормы);
// Сообщить("Создан " + СсылкаНаРозничныеПродажи.СообщениеДокумента);
конецесли; 
КонецПроцедуры   

&НаСервере
функция СоздатьРеализациюНаСервере()

Если Константы.ФункциональнаяОпцияВестиРозничныеПродажи.Получить() Тогда   

ВЫБОРКА  = ШАПКА.Выгрузить();
выборка.Свернуть("НомерМагазина, НомерСмены");

Для Каждого СтрокаДанных Из Выборка Цикл   

НовыйДокумент = Документы.ОтчетОРозничныхПродажах.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();   
Если Не Объект.Организация.Пустая() Тогда
НовыйДокумент.Организация = Объект.Организация; 
Иначе
НовыйДокумент.Организация = Справочники.Организации.ОрганизацияПоУмолчанию();
КонецЕсли;
НовыйДокумент.Касса = Справочники.Кассы.НайтиПоРеквизиту("НомерМагазина", СтрокаДанных.НомерМагазина); 
НовыйДокумент.СчетРасчетовДт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("1410"); 
НовыйДокумент.СчетРасчетовКт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("3210");
НовыйДокумент.ВалютаДокумента = НовыйДокумент.Касса.ВалютаДенежныхСредств;
НовыйДокумент.Автор = Пользователи.ТекущийПользователь();

ПроверитьЗаписьНаСервере(НовыйДокумент);
ЗаполнитьДанныеШапки(НовыйДокумент);

СтрокиТЧ = Объект.ДанныеФайлаРеализации.НайтиСтроки(Новый Структура("НомерМагазина, НомерСмены", СтрокаДанных.НомерМагазина, СтрокаДанных.НомерСмены));
Для каждого СтрокаТЧ из СтрокиТЧ Цикл
Если СтрокаТЧ.номенклатура.Родитель = Справочники.Номенклатура.НайтиПоНаименованию("Товары") Тогда   
Если СтрокаТЧ.ЭтоВозврат = Ложь Тогда
Строка = НовыйДокумент.Товары.Добавить();
НовыйДокумент.НомерСмены = строкатч.номерсмены;
ЗаполнитьСчетаУчета(Строка);     
ДобавитьпозициюНоменклатуры(Строка, СтрокаТЧ);
ПолучитьВидДеятельности(НовыйДокумент, Строка);
Иначе
Строка = НовыйДокумент.Возвраты.Добавить();
ЗаполнитьСчетаУчета(Строка);     
Строка.НомерФискальногоЧека = СтрокаТЧ.ФиксНомер;     
ДобавитьпозициюНоменклатуры(Строка, СтрокаТЧ);
КонецЕсли;
Если СтрокаТЧ.ОплатаБезналом = Истина Тогда
Строка = НовыйДокумент.Оплата.Добавить();
Строка.СуммаОплаты = СтрокаТЧ.Сумма;
Строка.ВидОплаты = СтрокаТЧ.ВидОплаты;
Конецесли;

ИначеЕсли СтрокаТЧ.номенклатура.Родитель = Справочники.Номенклатура.НайтиПоНаименованию("Услуги") Тогда 
Если СтрокаТЧ.ЭтоВозврат = Ложь Тогда
Строка = НовыйДокумент.Услуги.Добавить();
НовыйДокумент.НомерСмены = строкатч.номерсмены;
ДобавитьпозициюНоменклатуры(Строка, СтрокаТЧ); 
ПолучитьВидДеятельности(НовыйДокумент, Строка);
Иначе
Строка = НовыйДокумент.ВозвратУслуг.Добавить();
ДобавитьпозициюНоменклатуры(Строка, СтрокаТЧ);
ПолучитьВидДеятельности(НовыйДокумент, Строка);
КонецЕсли;     
Если СтрокаТЧ.ОплатаБезналом = Истина Тогда
Строка = НовыйДокумент.Оплата.Добавить(); 
Строка.СуммаОплаты = СтрокаТЧ.Сумма;
Строка.ВидОплаты = СтрокаТЧ.ВидОплаты;
Конецесли;
КонецЕсли;   
НовыйДокумент.Записать(РежимЗаписиДокумента.Запись);   
Конеццикла;   
сообщить("Создан " + новыйдокумент);
конеццикла;
Иначе
Сообщить("Настройте параметры учета - розничные продажи");
КонецЕсли;

Возврат НовыйДокумент.Ссылка;
// Возврат Новый Структура("нОВЫЙдОКУМЕНТ, СообщениеДокумента", НовыйДокумент.Ссылка, НОВЫЙДОКУМЕНТ);
КонецФункции 

Denis1010

Цитата: sali от 28 мар 2025, 10:27НовыйДокумент.Записать(РежимЗаписиДокумента.Запись); 

Вот эту строчку меняете на

Попытка
НовыйДокумент.Записать(РежимЗаписиДокумента.Запись);

                Сообщение = Новый СообщениеПользователю;
                Сообщение.Текст = "Документ " + НовыйДокумент.Ссылка + " успешно создан";
                Сообщение.Сообщить();
Исключение
                Сообщение = Новый СообщениеПользователю;
                Сообщение.Текст = "При записи документа " + НовыйДокумент.Ссылка + " произошла следующая ошибка: " + ОписаниеОшибки();
                Сообщение.Сообщить();
КонецПопытки;

sali

Denis1010, спасибо, но это будет видно на форме обработки , а нужно на форме документа орп

Теги:

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

Рейтинг@Mail.ru

Поиск