Подбор свободного кода справочника "Номенклатура" без захвата одного и того же кода несколькими операторами.

05.11.10

Разработка - Универсальные функции

При использовании в справочнике Номенклатура конструкции подбора не занятых кодов менее максимального, при работе нескольких операторов возникла проблема захвата одного и того же кода, если не использовать Записать() при создании нового элемента.

Моё решение:

//==================================================================================
Процедура ВводНового(ПризнКопирования)             
    Спр = СоздатьОбъект("Справочник.Номенклатура"); 
    ФП = СоздатьОбъект("Текст");
    ТабКод = СоздатьОбъект("ТаблицаЗначений");
    ТабКод.НоваяКолонка("КодНом","Число");
    Файл = ФС.НайтиПервыйФайл(КаталогИБ()+"*.nomer"); 
    Пока   ПустаяСтрока(Файл) = 0 цикл
        ТабКод.НоваяСтрока();
        ТабКод.КодНом     = Число(СокрЛП(Лев(Файл,СтрДлина(СокрЛП(Файл))-6))); 
        Файл              = ФС.НайтиСледующийФайл();
    КонецЦикла;
    Если ТабКод.КоличествоСтрок() > 0  Тогда 
        ТабКод.ВыбратьСтроки();
        Пока ТабКод.ПолучитьСтроку() = 1 Цикл 
            КН = Число(ТабКод.КодНом); 
        КонецЦикла;  
    Иначе
        КН = 0;
    КонецЕсли;
    Для К = КН + 1 ПО 99999 Цикл 
        Если (Спр.НайтиПоКоду(К) = 0)Тогда 
            Код=К; 
            Прервать; 
        КонецЕсли; 
    КонецЦикла;
    ФП.Записать(КаталогИБ()+Код+".nomer"); 
КонецПроцедуры
//=========================================================================================================================

В конец процедур ПриЗаписи() и ПриЗакрытии()  вставляем:

ФС.УдалитьФайл(КаталогИБ()+Код+".nomer");

См. также

Библиотека процедур и функций для технологической платформы "1С: Предприятие 7.7"

Универсальные функции Платформа 1С v7.7 Россия Абонемент ($m)

В библиотеку собраны различные функции по работе с документами, журналами, типами данных, строками, датой и временем, таблицами значений, Excel, файлами, XML, JSON, Http-сервисами, SMTP серверами и т.п.

1 стартмани

22.12.2023    657    9    user706545_kseg1971    0    

4

1С 7.7 и новый 1С:Контрагент

Универсальные функции Платформа 1С v7.7 Конфигурации 1cv7 Россия Бесплатно (free)

Получение реквизитов контрагентов из 1С:Контрагент для старых конфигураций под 1с 7.7.

25.04.2022    1820    zhenyat    7    

6

Печать таблицы значений в 1С 7.7 при отладке

Универсальные функции Платформа 1С v7.7 Россия Бесплатно (free)

Функция выводит таблицу значений в табличный документ. (v7.7) Особенно полезно при отладке. Не нужно вносить изменения в код, вызываем функцию как вычисляемое выражение при останове. Если таблица обрабатывается в несколько этапов, можно вывести её после каждого и визуально проследить эволюцию.

30.06.2021    4399    Zoltan_Black    11    

2

Установка принтера по умолчанию для 1С 7.7

Универсальные функции Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Установка принтера по умолчанию в 1С 7.7. Обработка может быть полезна в том случае, когда нужно установить принтер по умолчанию, а доступа к рабочему столу нет (например, терминальный режим без рабочего стола или remoteApp)

1 стартмани

13.02.2019    13286    4    alsen    3    

4

Формирование строки json в 1С: 7.7

Универсальные функции Платформа 1С v7.7 Конфигурации 1cv7 1С:Комплексная 7.7 Абонемент ($m)

Предлагается набор функций 1с 7.7 для формирования строки json стандартными средствами.

1 стартмани

10.12.2018    10094    malovandrey    2    

18

Как создать индикатор в 1С:Предприятии 7.7

Универсальные функции Работа с интерфейсом Платформа 1С v7.7 Конфигурации 1cv7 Россия Абонемент ($m)

В статье дано описание создания индикатора на форме в среде разработки 1С:Предприятие 7.7 исключительно типовыми средствами.

1 стартмани

27.09.2016    18672    2    HAMMER_59    6    

2
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Altair777 644 05.11.10 17:06 Сейчас в теме
(0) А зачем в ПриЗакрытии()?
2. Rusk51 88 05.11.10 17:19 Сейчас в теме
(1)На случай отмены ввода нового.
3. Abadonna 3958 07.11.10 08:03 Сейчас в теме
кхм....
Процедура ПрисвоитьНовыйКод(пКод) 
	Спр=СоздатьОбъект("Справочник."+Вид());
	Для А=пКод По пКод+1000 Цикл
		Если (Спр.НайтиПоКоду(А)=1) И (Спр.ТекущийЭлемент()<>ТекущийЭлемент())  Тогда   
			// если такой есть и это ДРУГОЙ элемент
			Сообщить("Код " +А+" был занят","!");
			Продолжить;            
		Иначе 
			Код=А;
			Записать();     
			Сообщить("Записан с кодом "+А,"i");  
			Прервать;  
		КонецЕсли;
	КонецЦикла; 
КонецПроцедуры

Процедура ПриЗаписи() 
	ПрисвоитьНовыйКод(Число(Код));
КонецПроцедуры
Показать
Прикрепленные файлы:
4. Rusk51 88 08.11.10 11:53 Сейчас в теме
(3) а при отмене ввода нового что делать?
5. Abadonna 3958 08.11.10 12:00 Сейчас в теме
(4) А ничего не делать. Он просто не запишется, ибо ПрисвоитьНовыйКод(Число(Код)) не сработает. Я никогда не кладу код, который не проверяю;)
6. Rusk51 88 08.11.10 12:00 Сейчас в теме
(3) Если использовать процедуру ПриЗаписи() то и огород городить не надо
8. Abadonna 3958 08.11.10 12:03 Сейчас в теме
(6) Что-то я тебя не понял тогда... Проблема была в том, что при вводе нового получался один код у операторов сразу? Так? Ну и пусть себе появляется, а при записи они расположатся по порядку кодов: кто быстрее нажать успел
P.S. Ну и штрих при записи присвоить можно. Правда, тут я не спец: никогда розницей не занимался ;)
7. Rusk51 88 08.11.10 12:02 Сейчас в теме
только как вы присвоите штрих код весовому?
9. nickkey 28.09.11 13:49 Сейчас в теме
Разрабатывал конфиг с нуля пригодилось
Оставьте свое сообщение