1с 7.7 ТиС. Как сделать проверку уникальности артикула в номенклатуре при записи нового элемента?
Если ПустоеЗначение(Артикул)=0 Тогда //может ведь быть пустой артикул, для служебных ТМЦ
Спрр = СоздатьОбъект(“Справочник.Номенклатура”);
Спрр.ВыбратьЭлементыПоРеквизиту(“Артикул”,Артикул,0,0);
Пока Спрр.ПолучитьЭлемент()=1 Цикл
Если Спрр.ТекущийЭлемент()<>ТекущийЭлемент() Тогда
Предупреждение(“Такой артикул уже существует в “Спрр“!”);
СтатусВозврата(0);
Возврат;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Не забудьте проверить, стоит ли в вашей базе у реквизита “Артикул” признак “Сортировка”. Если нет – установите его. Это делается так – щелкаете 2 раза мышкой по реквизиту артикул в окне конфигурации и в открывшейся форме “свойства” переключаетесь на вкладку “дополнительные”, там должна стоять галочка напротив надписи “сортировка”. Включение сортировки несколько увеличивает размер индексных файлов, но очень ускоряет работу.
| опубликовано: 27 Февраль 2008, 16:18
1с 7.7 под Microsoft SQL Server 2000, пользователей около 20, все работают в режиме терминала. В последнее время при проведении документов иногда выводится сообщение об ошибке “При выполнении транзакции произошла ошибка. Время ожидания истекло”. 1с просто подвисает, в чем проблема? Раньше такого не было, а сейчас такое случается регулярно.
Скорее всего, 1С не подвисает, а просто долго проводится документ. Если в это время другой пользователь пытается провести другой документ, система ставит его задачу в очередь, включается таймер. В параметрах (меню Сервис/Параметры, закладка Общие) указано максимально допустимое время ожидания (Время ожидания захвата таблиц Базы Данных (сек.)). По истечении этого времени выдается Ваше сообщение “Время ожидания истекло”.
Для разрешения ситуации есть два пути:
а) увеличить время ожидания, максимум 99 секунд;
б) ускорить проведение документов, оптимизировать алгоритмы – с дальнейшим увеличением размера базы этим все равно придется заниматься.
| опубликовано: 25 Февраль 2008, 09:44
Файлы DBF устроены таким образом, что удаление записи не приводит к физическому удалению записи из файла. Запись просто помечается на удаление и пропускается при переборе. Таким образом, размер файла остается прежним. Чтобы физически удалить все помеченные на удаление записи нужно применить метод Сжать. Средства встроенного языка позволяют работать с такими записями, перебирать их и даже отменять пометку на удаление.
Файл.ПоказыватьУдаленные(1);
Файл.Первая();
Пока Файл.ВКонце()=0 Цикл
......Если Файл.ЗаписьУдалена()=1 Тогда
............Файл.Восстановить();
......КонецЕсли;
......Файл.Следующая();
КонецЦикла;
Файл.Первая();
Пока Файл.ВКонце()=0 Цикл
......Если Файл.PRICE < 1000 Тогда
............Файл.Удалить();
......КонецЕсли;
......Файл.Следующая();
КонецЦикла;
Файл.Сжать(); //удалить записи физически
Можно удалить все записи в файле одним движением. При этом они физически удаляются и не могут быть восстановлены.
Файл.ОчиститьВсе();
Стоит еще отметить про метод Очистить(), что он очищает все поля текущей записи. Атрибуты, соответствующие полям типа “строковый”, приобретают значение «пустая строка», числовой — 0, логический — 0, дата — «пустая дата».
| опубликовано: 23 Февраль 2008, 10:29