Если Вам необходимо почистить список значений от повторяющихся записей, используйте следующий код:
Код 1C v 8.х структошибок = Новый СписокЗначений;
Массив= структошибок. ВыгрузитьЗначения( ) ;
ТекущийИндекс = 0 ;
ВсегоЭлементов = Массив. Количество( ) ;
Пока ТекущийИндекс < ВсегоЭлементов Цикл
Индекс2 = ТекущийИндекс + 1 ;
Пока Индекс2 < ВсегоЭлементов Цикл
Если Массив[Индекс2 ] = Массив[ТекущийИндекс] Тогда
Массив. Удалить( Индекс2 ) ;
ВсегоЭлементов = ВсегоЭлементов - 1 ;
Иначе
Индекс2 = Индекс2 + 1 ;
КонецЕсли ;
КонецЦикла ;
ТекущийИндекс = ТекущийИндекс + 1 ;
КонецЦикла ;
Для Каждого спстр из Массив цикл
Сообщить( спстр) ;
КонецЦикла ;
DBF-файл – это файл, в котором данные хранятся в виде таблицы (Database format). Работа с этими файлами происходит по принципу курсора, т.е. по одной строке. Для работы с DBF-файлами существует тип данных XBase. Несмотря на то, что формат DBF считается уже устаревшим, может возникнуть необходимость работы с файлами данного формата, особенно, если вы перегружаете данные из какой-нибудь старой программы!
Код 1C v 8.х
БД = Новый XBase;
БД. Поля. Добавить( "Code" , "N" , 6 , 0 ) ;
БД. Поля. Добавить( "Name" , "S" , 30 ) ;
БД. СоздатьФайл( "C://1.dbf" ) ;
Выборка = Справочники. Клиенты. Выбрать( ) ;
Пока Выборка. Следующий( ) Цикл
БД. Добавить( ) ;
БД. Code = Выборка. Код;
БД. Name = Выборка. Наименование;
КонецЦикла ;
БД. ЗакрытьФайл( ) ;
БД = Новый XBase;
БД. ОткрытьФайл( "C://1.dbf" ) ;
Пока БД. Следующая( ) Цикл
Спр= Справочники. Клиенты. СоздатьЭлемент( ) ;
Спр. Код = БД. Сode;
Спр. Наименование = БД. Name;
Спр. Записать( ) ;
КонецЦикла ;
БД. ЗакрытьФайл( ) ;
Код 1C v 8.х
БД = Новый XBase;
БД. Поля. Добавить( "CODE" , "S" , 5 ) ;
БД. Поля. Добавить( "NAME" , "S" , 40 ) ;
БД. СоздатьФайл( Путь + "start.dbf" , Путь + "index.cdx" ) ;
БД. Индексы. Добавить( "IDXCODE" , "CODE" ) ;
ФлИБД = БД. СоздатьИндексныйФайл( Путь + "index.cdx" ) ;
БД. АвтоСохранение = Истина ;
Выборка = Справочники. Номенклатура. ВыбратьИерархически( ) ;
Пока Выборка. Следующий( ) Цикл
БД. Добавить( ) ;
БД. CODE = Выборка. Код;
БД. NAME = Выборка. Наименование;
КонецЦикла ;
БД. ЗакрытьФайл( ) ;
БД = Новый XBase;
БД. ОткрытьФайл( Путь + "start.dbf" , Путь + "index.cdx" ) ;
БД. ТекущийИндекс = БД. Индексы. IDXCODE;
Пока БД. Следующая( ) Цикл
Сообщить( БД. CODE) ;
Сообщить( БД. NAME) ;
КонецЦикла ;
БД. ЗакрытьФайл( ) ;
Код 1C v 7.x
НачВремя = _GetPerformanceCounter( ) ;
ДБФ = СоздатьОбъект( "XBASE" ) ;
ДБФ. ДобавитьПоле( "IsGroup" , "N" , 1 , 0 ) ;
ДБФ. ДобавитьПоле( "Level" , "N" , 1 , 0 ) ;
ДБФ. ДобавитьПоле( "ParentCode" , "S" , 8 , 0 ) ;
ДБФ. ДобавитьПоле( "Code" , "S" , 8 , 0 ) ;
ДБФ. ДобавитьПоле( "Descr" , "S" , 60 , 0 ) ;
ДБФ. КодоваяСтраница( 0 ) ;
ДБФ. СоздатьФайл( "c:\export.dbf" ) ;
ТЗ. ВыбратьСтроки( ) ;
Пока ТЗ. ПолучитьСтроку( ) = 1 Цикл
ДБФ. Добавить( ) ;
ДБФ. IsGroup= ТЗ. ЭтоГруппа;
ДБФ. Level= ТЗ. Уровень;
ДБФ. ParentCode = ТЗ. КодРодителя;
ДБФ. Code= ТЗ. Код;
ДБФ. Descr= СокрЛП( ТЗ. Наименование) ;
ДБФ. Записать( ) ;
КонецЦикла ;
ДБФ. ЗакрытьФайл( ) ;
КонВремя = _GetPerformanceCounter( ) ;
Длительность = Окр( ( КонВремя- НачВремя) / 1000 , 3 ) ;
Сообщить( "Время выгрузки в DBF файл: " + Длительность+ " с" ) ;
НачВремя = _GetPerformanceCounter( ) ;
ДБФ = СоздатьОбъект( "XBASE" ) ;
ДБФ. КодоваяСтраница( 0 ) ;
ДБФ. ОткрытьФайл( "c:\export.dbf" ) ;
Если ДБФ. Открыта( ) = 0 Тогда
Сообщить( "Файл DBF не открыт !" , "!" ) ;
Возврат ;
КонецЕсли ;
КолСтр = ДБФ. КоличествоЗаписей( ) ;
н= 0 ;
ДБФ. Первая( ) ;
ПризнакГруппы = ДБФ. IsGroup;
ТекУровень = ДБФ. Level;
ТекКодРодителя = ДБФ. ParentCode;
ТекКод = ДБФ. Code;
ТекНаименоване = ДБФ. Descr;
н = н+ 1 ;
Состояние( "В файле прочитано записей " + н+ " из " + КолСтр) ;
Пока ДБФ. Следующая( ) = 1 Цикл
ПризнакГруппы = ДБФ. IsGroup;
ТекУровень = ДБФ. Level;
ТекКодРодителя = ДБФ. ParentCode;
ТекКод = ДБФ. Code;
ТекНаименоване = ДБФ. Descr;
н = н+ 1 ;
Состояние( "В файле прочитано записей " + н+ " из " + КолСтр) ;
КонецЦикла ;
ДБФ. ЗакрытьФайл( ) ;
КонВремя = _GetPerformanceCounter( ) ;
Длительность = Окр( ( КонВремя- НачВремя) / 1000 , 3 ) ;
Сообщить( "Время чтения DBF файла: " + Длительность+ " с" ) ;
Код 1C v 7.x ДБФ= СоздатьОбъект( "XBase" ) ;
ДБФ. ДобавитьПоле( "DATE" , "D" , 0 , 0 ) ;
Дбф. ДобавитьИндекс( "INDEX" , "DTOS(DATE)" , 0 , 0 , "<" ) ;
ДБФ. СоздатьФайл( "c:\test.dbf" , "c:\test.cdx" ) ;
Для ТекДата= '01.09 . 05 ' По '10.09 . 05 ' Цикл
Дбф. Добавить( ) ;
Дбф. DATE= ТекДата;
ДБФ. Записать( ) ;
КонецЦикла ;
ДБФ. ТекущийИндекс( "INDEX" ) ;
Для ТекДата= '01.09 . 05 ' По '10.09 . 05 ' Цикл
ДБФ. Ключ. DATE = ТекДата;
Если ДБФ. НайтиПоКлючу( 0 ) = 1 Тогда
Сообщить( ТекДата) ;
КонецЕсли ;
КонецЦикла ;
ДБФ. ЗакрытьФайл( ) ;
Код 1C v 8.х ФайлНаДиске = Новый Файл( ИмяФайла) ;
Если НЕ ( ФайлНаДиске. Существует( ) ) Тогда
Предупреждение( "Файл с таким именем не существует " + ИмяФайла) ;
Возврат ;
КонецЕсли ;
ДБФ = Новый xBase;
ДБФ. Кодировка = КодировкаXBase. OEM;
ДБФ. ОткрытьФайл( ИмяФайла) ;
Если ДБФ. Открыта( ) = 0 Тогда
Предупреждение( "Неудалось открыть файл. Возможно он занят другим приложением!" ) ;
Возврат ;
КонецЕсли ;
ДБФ. Индексы. Добавить( "IDX_vE" , "VAL(EXTENSION)" , Ложь , Ложь , "PREFLEN1>0" ) ;
ДБФ. СоздатьИндексныйФайл( ИмяИндекса) ;
ДБФ. ТекущийИндекс = ДБФ. Индексы. IDX_vE;
ДБФ. Ключ. EXTENSION = "1002" ;
Если ДБФ. НайтиПоКлючу( "=" ) = Истина Тогда
ТекЗапись= ДБФ. НомерЗаписи( ) ;
Пока СокрЛП( ДБФ. EXTENSION) = "1002" Цикл
Сообщить( "-" + ДБФ. EXTENSION + " - " + ДБФ. НомерЗаписи( ) + "-" ) ;
ДБФ. Следующая( ) ;
КонецЦикла ;
Иначе
Сообщить( "Нет записи!" ) ;
КонецЕсли ;
ДБФ. ЗакрытьФайл( ) ;
УдалитьФайлы( ИмяИндекса) ;
Код 1C v 8.х
ФайлБД= КаталогИмя+ "Spr_podr." ;
xБД= Новый Файл( ФайлБД+ "dbf" ) ;
Если xБД. Существует( ) Тогда
УдалитьФайлы( ФайлБД, "*" ) ;
КонецЕсли ;
xБД = Новый XBase;
xБД. Поля. Добавить( "Id" , "S" , 5 ) ;
xБД. Поля. Добавить( "Name" , "S" , 25 ) ;
xБД. СоздатьФайл( ФайлБД+ "dbf" ) ;
ИндВр= "Id" ;
xБД. индексы. Добавить( "Id" , ИндВр, Истина ) ;
ИБД = xБД. СоздатьИндексныйФайл( ФайлБД+ "cdx" ) ;
xБД. АвтоСохранение= Истина ;
xБД. ЗакрытьФайл( ) ;
xБД. ОткрытьФайл( ФайлБД+ "dbf" , ФайлБД+ "cdx" ) ;
xБД. ТекущийИндекс = xБД. индексы. Id;
Выборка= Справочники. Подразделения. Выбрать( ) ;
Пока Выборка. Следующий( ) Цикл
xБД. Добавить( ) ;
xБД. ID= Выборка. Код;
xБД. Name= Выборка. Наименование;
xБД. Записать( ) ;
КонецЦикла ;
xБД. ЗакрытьФайл( ) ;
xБД. ОткрытьФайл( ФайлБД+ "dbf" , ФайлБД+ "cdx" ) ;
xБД. ТекущийИндекс = xБД. индексы. Id;
Если xБД. Найти( "00003" , ">=" ) Тогда
Сообщить( xБД. ID+ " - " + xБД. NAME) ;
Пока xБД. Следующая( ) Цикл
Сообщить( xБД. ID+ " - " + xБД. NAME) ;
КонецЦикла ;
КонецЕсли ;
xБД. ЗакрытьФайл( ) ;
Код 1C v 8.х
для каждого метпер из Метаданные. Перечисления. СостоянияРаботникаОрганизации. ЗначенияПеречисления Цикл
МенюКнопки = ЭлементыФормы. ОсновныеДействияФормы. Кнопки. ПодменюНеявки. Кнопки;
НоваяКнопка = МенюКнопки. Вставить( инд, метпер. Имя, ТипКнопкиКоманднойПанели. Действие, метпер, Новый Действие( "Пометка" ) ) ;
Если НЕ ( метпер. Имя= "Работает" или метпер. Имя= "Командировка" ) тогда
НоваяКнопка. Пометка = Истина ;
КонецЕсли ;
инд= инд+ 1 ;
КонецЦикла ;
Процедура Пометка(Кнопка)
Кнопка. Пометка= ? ( Кнопка. Пометка, Ложь , Истина ) ;
КонецПроцедуры
Следующий пример показывает как выгрузить из табличной части Подразделения, удалить повторяющиеся и в "КоманднаяПанельЗарплата" - меню "ФормированиеВедомостей" - подменю "СформироватьПоПодразделению" добавить для каждого подразделения кнопку формирования ведомости
Код 1C v 8.х
ТзПодразделений= Зарплата. ВыгрузитьКолонку( "ПодразделениеРаботника" ) ;
ТекущийИндекс = 0 ;
ВсегоЭлементов = ТзПодразделений. Количество( ) ;
Пока ТекущийИндекс < ВсегоЭлементов Цикл
Индекс2 = ТекущийИндекс + 1 ;
Пока Индекс2 < ВсегоЭлементов Цикл
Если ТзПодразделений[Индекс2 ] = ТзПодразделений[ТекущийИндекс] Тогда
ТзПодразделений. Удалить( Индекс2 ) ;
ВсегоЭлементов = ВсегоЭлементов - 1 ;
Иначе
Индекс2 = Индекс2 + 1 ;
КонецЕсли ;
КонецЦикла ;
ТекущийИндекс = ТекущийИндекс + 1 ;
КонецЦикла ;
инд= 0 ;
для каждого ТекПодразд из ТзПодразделений Цикл
МенюКнопки = ЭлементыФормы. КоманднаяПанельЗарплата. Кнопки. ФормированиеВедомостей. Кнопки. СформироватьПоПодразделению. Кнопки;
НоваяКнопка = МенюКнопки. Вставить( инд, ТекПодразд, ТипКнопкиКоманднойПанели. Действие, ТекПодразд, Новый Действие( "СформироватьВедомостиПоПодразделению" ) ) ;
инд= инд+ 1 ;
КонецЦикла ;