Комплексная конфигурация 7.7(самописная)
08.04.2010
00:02
#1
Добрый день!!!
Подскажите пожалуйста кто может,если конечно что-то станет понятно из моего
рассказа.
Есть документ Заказ,на его форме есть реквизит ПолеВвода - "ВЗ", в который
автоматически с новой строки помещается такая строка "ПолныйКод()_Наименование_Цена".
При выводе документа на печать просто выводился перечень строк из этого реквизита.Сейчас
возникла необходимость сортировать строки (пока неважно по какому из полей) для
отслеживания дублей.
Вопрос,как в печатную форму документа передавать каждую строку из "ВЗ" и как впоследствии
можно их отсортировать(сгрупировать).
А может я не тем путём пошла???Может можно группировать сразу при автоматическом вводе
строки в ВЗ???
Спасибо за помощь!!!
Подскажите пожалуйста кто может,если конечно что-то станет понятно из моего
рассказа.
Есть документ Заказ,на его форме есть реквизит ПолеВвода - "ВЗ", в который
автоматически с новой строки помещается такая строка "ПолныйКод()_Наименование_Цена".
При выводе документа на печать просто выводился перечень строк из этого реквизита.Сейчас
возникла необходимость сортировать строки (пока неважно по какому из полей) для
отслеживания дублей.
Вопрос,как в печатную форму документа передавать каждую строку из "ВЗ" и как впоследствии
можно их отсортировать(сгрупировать).
А может я не тем путём пошла???Может можно группировать сразу при автоматическом вводе
строки в ВЗ???
Спасибо за помощь!!!
08.04.2010
09:45
#2
"Смутно, но примерно понятно.
Насколько я понял, "ВЗ" - поле для ввода многострочного текста и этот текст выглядит там примерно так:
000010_Колесо_5000.00
000014_Шина_2200.00
000031_Фара_4000.00
При этом значения в строках могут повторяться и основная задача - поиск дублей строк.
//Текстовое поле преобразуем в таблицу значений. С ней работать проще.
ТаблДанных=СоздатьОбъект("ТаблицаЗначений");
ТаблДанных.НоваяКолонка("Код");
ТаблДанных.НоваяКолонка("Наименование");
ТаблДанных.НоваяКолонка("Цена");
Для i=1 По СтрКоличествоСтрок(ВЗ) Цикл
Стр=СтрПолучитьСтроку(ВЗ,i);
Если ПустаяСтрока(Стр)=0 Тогда
СписокРеквизитов=глРазложить(Стр,"_");
Если СписокРеквизитов.РазмерСписка()=3 Тогда
ТаблДанных.НоваяСтока();
ТаблДанных.Код=СписокРеквизитов.ПолучитьЗначение(1);
ТаблДанных.Наименование=СписокРеквизитов.ПолучитьЗначение(2);
ТаблДанных.Цена=СписокРеквизитов.ПолучитьЗначение(3);
КонецЕсли;
КонецЕсли;
КонецЦикла;
//получили ТаблДанных, которую можно сортировать, сворачивать и т.п.
//для примера решим подзадачу о выяснении дубликатов строк по ключевому полю, пусть, например, таким полем будет "Наименование"
КлонТаблДанных=СоздатьОбъект("ТаблицаЗначений");
ТаблДанных.Выгрузить(КлонТаблДанных);
КлонТаблДанных.НоваяКолонка("КоличествоВхождений","Число",10,0);
КлонТаблДанных.Заполнить(1,,,"КоличествоВхождений");
КлонТаблДанных.Свернуть("Наименование","КоличествоВхождений");
Для i=1 По КлонТаблДанных.КоличествоСтрок() Цикл
Если КлонТаблДанных.ПолучитьЗначение(i,"КоличествоВхождений")>1 Тогда
Стр="В данных имеется дублирование по позиции """""+КлонТаблДанных.ПолучитьЗначение(i,"Наименование")+""""" в строках: ";
Для t=1 По ТаблДанных.КоличествоСтрок() Цикл
Если КлонТаблДанных.ПолучитьЗначение(i,"Наименование")=ТаблДанных.ПолучитьЗначение(t,"Наименование") Тогда
Стр=Стр+Строка(t)+", ";
КонецЕсли;
КонецЦикла;
Сообщить(Лев(Стр,СтрДлина(Стр)-2));
КонецЕсли;
КонецЦикла;"
Насколько я понял, "ВЗ" - поле для ввода многострочного текста и этот текст выглядит там примерно так:
000010_Колесо_5000.00
000014_Шина_2200.00
000031_Фара_4000.00
При этом значения в строках могут повторяться и основная задача - поиск дублей строк.
//Текстовое поле преобразуем в таблицу значений. С ней работать проще.
ТаблДанных=СоздатьОбъект("ТаблицаЗначений");
ТаблДанных.НоваяКолонка("Код");
ТаблДанных.НоваяКолонка("Наименование");
ТаблДанных.НоваяКолонка("Цена");
Для i=1 По СтрКоличествоСтрок(ВЗ) Цикл
Стр=СтрПолучитьСтроку(ВЗ,i);
Если ПустаяСтрока(Стр)=0 Тогда
СписокРеквизитов=глРазложить(Стр,"_");
Если СписокРеквизитов.РазмерСписка()=3 Тогда
ТаблДанных.НоваяСтока();
ТаблДанных.Код=СписокРеквизитов.ПолучитьЗначение(1);
ТаблДанных.Наименование=СписокРеквизитов.ПолучитьЗначение(2);
ТаблДанных.Цена=СписокРеквизитов.ПолучитьЗначение(3);
КонецЕсли;
КонецЕсли;
КонецЦикла;
//получили ТаблДанных, которую можно сортировать, сворачивать и т.п.
//для примера решим подзадачу о выяснении дубликатов строк по ключевому полю, пусть, например, таким полем будет "Наименование"
КлонТаблДанных=СоздатьОбъект("ТаблицаЗначений");
ТаблДанных.Выгрузить(КлонТаблДанных);
КлонТаблДанных.НоваяКолонка("КоличествоВхождений","Число",10,0);
КлонТаблДанных.Заполнить(1,,,"КоличествоВхождений");
КлонТаблДанных.Свернуть("Наименование","КоличествоВхождений");
Для i=1 По КлонТаблДанных.КоличествоСтрок() Цикл
Если КлонТаблДанных.ПолучитьЗначение(i,"КоличествоВхождений")>1 Тогда
Стр="В данных имеется дублирование по позиции """""+КлонТаблДанных.ПолучитьЗначение(i,"Наименование")+""""" в строках: ";
Для t=1 По ТаблДанных.КоличествоСтрок() Цикл
Если КлонТаблДанных.ПолучитьЗначение(i,"Наименование")=ТаблДанных.ПолучитьЗначение(t,"Наименование") Тогда
Стр=Стр+Строка(t)+", ";
КонецЕсли;
КонецЦикла;
Сообщить(Лев(Стр,СтрДлина(Стр)-2));
КонецЕсли;
КонецЦикла;"
Читают тему
(гостей: 1)