По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(5) перенумеровывать справочник.
в бумажных доках используется этот номер. Если изменится надо все перепечатывать/переподписывать.
можно повозиться конечно и подобрать такой номер после которого нумерация автоматом пойдет. Завести элемент справочника с таким кодом и далее автоматом пойдет
в бумажных доках используется этот номер. Если изменится надо все перепечатывать/переподписывать.
можно повозиться конечно и подобрать такой номер после которого нумерация автоматом пойдет. Завести элемент справочника с таким кодом и далее автоматом пойдет
(20) Да всегда так было.
БП 3.0 (3.0.70.33), модуль формы документа ПринятиеКУчетуОС, событие при изменении ОС:
БП 3.0 (3.0.70.33), модуль формы документа ПринятиеКУчетуОС, событие при изменении ОС:
&НаКлиенте
Процедура ОСОсновноеСредствоПриИзменении(Элемент)
ЭлементКоллекции = Элементы.ОС.ТекущиеДанные;
Если ЗначениеЗаполнено(ЭлементКоллекции.ОсновноеСредство) Тогда
ЭлементКоллекции.ИнвентарныйНомер = ПолучитьКод(ЭлементКоллекции.ОсновноеСредство);
ЭлементКоллекции.СпособУчетаНДС = ПредопределенноеЗначение("Перечисление.СпособыУчетаНДС.Распределяется");
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьКод(Знач ОС)
Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОС, "Код");
КонецФункции
Показать
(27)
Тоже самое было и у меня...
&НаКлиенте
Процедура ОСОсновноеСредствоПриИзменении(Элемент)
ЭлементКоллекции = Элементы.ОС.ТекущиеДанные;
Если ЗначениеЗаполнено(ЭлементКоллекции.ОсновноеСредство) Тогда
ЭлементКоллекции.ИнвентарныйНомер = ПолучитьКод(ЭлементКоллекции.ОсновноеСредство);
ЭлементКоллекции.СпособУчетаНДС = ПредопределенноеЗначение("Перечисление.СпособыУчетаНДС.Распределяется");
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьКод(Знач ОС)
Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОС, "Код");
КонецФункции
ПоказатьПроцедура ОСОсновноеСредствоПриИзменении(Элемент)
ЭлементКоллекции = Элементы.ОС.ТекущиеДанные;
Если ЗначениеЗаполнено(ЭлементКоллекции.ОсновноеСредство) Тогда
ЭлементКоллекции.ИнвентарныйНомер = ПолучитьКод(ЭлементКоллекции.ОсновноеСредство);
ЭлементКоллекции.СпособУчетаНДС = ПредопределенноеЗначение("Перечисление.СпособыУчетаНДС.Распределяется");
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьКод(Знач ОС)
Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОС, "Код");
КонецФункции
Тоже самое было и у меня...
Если вас устраивает, что инвентарные номера будут не совпадать с кодами ОС, то можете переделать кусок кода из (27) на:
Но я бы советовал разобраться с кодами ОС.
&НаКлиенте
Процедура ОСОсновноеСредствоПриИзменении(Элемент)
ЭлементКоллекции = Элементы.ОС.ТекущиеДанные;
Если ЗначениеЗаполнено(ЭлементКоллекции.ОсновноеСредство) Тогда
МассивНомеров = Новый Массив;
Для Каждого Стр Из Объект.ОС Цикл
Если Стр = ЭлементКоллекции Тогда
Продолжить
КонецЕсли;
МассивНомеров.Добавить(Стр.ИнвентарныйНомер);
КонецЦикла;
ИнвентарныйНомер = ПолучитьСледующийИнвентарныйНомер(МассивНомеров, Объект.Ссылка);
Если ИнвентарныйНомер = Неопределено Тогда
ЭлементКоллекции.ИнвентарныйНомер = ПолучитьКод(ЭлементКоллекции.ОсновноеСредство);
Иначе
ЭлементКоллекции.ИнвентарныйНомер = ИнвентарныйНомер;
КонецЕсли;
ЭлементКоллекции.СпособУчетаНДС = ПредопределенноеЗначение("Перечисление.СпособыУчетаНДС.Распределяется");
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьСледующийИнвентарныйНомер(МассивНомеров, Ссылка)
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("ИнвентарныйНомер", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(9)));
Для Каждого Номер Из МассивНомеров Цикл
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.ИнвентарныйНомер = Номер;
КонецЦикла;
Запрос = Новый Запрос(
"ВЫБРАТЬ
| МАКСИМУМ(ПервоначальныеСведенияОСБухгалтерскийУчет.ИнвентарныйНомер) КАК ИнвентарныйНомер
|ИЗ
| РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет КАК ПервоначальныеСведенияОСБухгалтерскийУчет
|ГДЕ
| ПервоначальныеСведенияОСБухгалтерскийУчет.Регистратор <> &Ссылка");
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Если Выборка.ИнвентарныйНомер <> NULL Тогда
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.ИнвентарныйНомер = Выборка.ИнвентарныйНомер;
КонецЕсли;
Если ТЗ.Количество() = 0 Тогда
Возврат Неопределено
Иначе
ТЗ.Сортировать("ИнвентарныйНомер Убыв");
ИнвентарныйНомер = СокрП(ТЗ[0].ИнвентарныйНомер);
ДлинаНомера = СтрДлина(ИнвентарныйНомер);
Сч = ДлинаНомера;
Пока Сч > 0 Цикл
Если СтрНайти("0123456789", Сред(ИнвентарныйНомер, Сч, 1)) = 0 Тогда
Прервать;
КонецЕсли;
Сч = Сч - 1;
КонецЦикла;
Префикс = ?(Сч = 0, "", Лев(ИнвентарныйНомер, Сч));
НомерЧислом = Число(Сред(ИнвентарныйНомер, Сч + 1));
ФорматЧисла = "ЧЦ=" + Строка(ДлинаНомера - СтрДлина(Префикс)) + "; ЧВН=; ЧГ=";
Возврат Префикс + Формат(НомерЧислом + 1, ФорматЧисла);
КонецЕсли;
КонецФункции
ПоказатьНо я бы советовал разобраться с кодами ОС.
(33)
Это очень хорошо. Но почему он начинает счет с номера OS_007...
а должен начинать с 600100...
?
&НаСервереБезКонтекста
Функция ПолучитьСледующийИнвентарныйНомер(МассивНомеров, Ссылка)
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("ИнвентарныйНомер", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(9)));
Для Каждого Номер Из МассивНомеров Цикл
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.ИнвентарныйНомер = Номер;
КонецЦикла;
Запрос = Новый Запрос(
"ВЫБРАТЬ
| МАКСИМУМ(ПервоначальныеСведенияОСБухгалтерскийУчет.ИнвентарныйНомер) КАК ИнвентарныйНомер
|ИЗ
| РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет КАК ПервоначальныеСведенияОСБухгалтерскийУчет
|ГДЕ
| ПервоначальныеСведенияОСБухгалтерскийУчет.Регистратор <> &Ссылка");
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Если Выборка.ИнвентарныйНомер <> NULL Тогда
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.ИнвентарныйНомер = Выборка.ИнвентарныйНомер;
КонецЕсли;
Если ТЗ.Количество() = 0 Тогда
Возврат Неопределено
Иначе
ТЗ.Сортировать("ИнвентарныйНомер Убыв");
ИнвентарныйНомер = СокрП(ТЗ[0].ИнвентарныйНомер);
ДлинаНомера = СтрДлина(ИнвентарныйНомер);
Сч = ДлинаНомера;
Пока Сч > 0 Цикл
Если СтрНайти("0123456789", Сред(ИнвентарныйНомер, Сч, 1)) = 0 Тогда
Прервать;
КонецЕсли;
Сч = Сч - 1;
КонецЦикла;
Префикс = ?(Сч = 0, "", Лев(ИнвентарныйНомер, Сч));
НомерЧислом = Число(Сред(ИнвентарныйНомер, Сч + 1));
ФорматЧисла = "ЧЦ=" + Строка(ДлинаНомера - СтрДлина(Префикс)) + "; ЧВН=; ЧГ=";
Возврат Префикс + Формат(НомерЧислом + 1, ФорматЧисла);
КонецЕсли;
КонецФункции
ПоказатьФункция ПолучитьСледующийИнвентарныйНомер(МассивНомеров, Ссылка)
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("ИнвентарныйНомер", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(9)));
Для Каждого Номер Из МассивНомеров Цикл
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.ИнвентарныйНомер = Номер;
КонецЦикла;
Запрос = Новый Запрос(
"ВЫБРАТЬ
| МАКСИМУМ(ПервоначальныеСведенияОСБухгалтерскийУчет.ИнвентарныйНомер) КАК ИнвентарныйНомер
|ИЗ
| РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет КАК ПервоначальныеСведенияОСБухгалтерскийУчет
|ГДЕ
| ПервоначальныеСведенияОСБухгалтерскийУчет.Регистратор <> &Ссылка");
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Если Выборка.ИнвентарныйНомер <> NULL Тогда
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.ИнвентарныйНомер = Выборка.ИнвентарныйНомер;
КонецЕсли;
Если ТЗ.Количество() = 0 Тогда
Возврат Неопределено
Иначе
ТЗ.Сортировать("ИнвентарныйНомер Убыв");
ИнвентарныйНомер = СокрП(ТЗ[0].ИнвентарныйНомер);
ДлинаНомера = СтрДлина(ИнвентарныйНомер);
Сч = ДлинаНомера;
Пока Сч > 0 Цикл
Если СтрНайти("0123456789", Сред(ИнвентарныйНомер, Сч, 1)) = 0 Тогда
Прервать;
КонецЕсли;
Сч = Сч - 1;
КонецЦикла;
Префикс = ?(Сч = 0, "", Лев(ИнвентарныйНомер, Сч));
НомерЧислом = Число(Сред(ИнвентарныйНомер, Сч + 1));
ФорматЧисла = "ЧЦ=" + Строка(ДлинаНомера - СтрДлина(Префикс)) + "; ЧВН=; ЧГ=";
Возврат Префикс + Формат(НомерЧислом + 1, ФорматЧисла);
КонецЕсли;
КонецФункции
Это очень хорошо. Но почему он начинает счет с номера OS_007...
а должен начинать с 600100...
?
(34) Видимо, у вас базе винегрет из инвентарных номеров или кодов ОС, какой-либо порядок едва ли удастся сделать. Можно, конечно, брать не самый "большой", а самый последний инвентарный номер из принятых к учёту, но нет гарантии, что в таком случае он не задвоится,
Возможно, коллеги меня поправят и предложат вам более мудрое решение. Мне же кажется, что проще вручную прописывать Инв. номер, который устраивает.
Возможно, коллеги меня поправят и предложат вам более мудрое решение. Мне же кажется, что проще вручную прописывать Инв. номер, который устраивает.
(33)
А как нибудь можно этот код переделать, чтобы он присваивал мое значение и дальше уже шел +1.
Прописываю цикл, он первое значение получает, а дальше остальным инвентарным номерам присваивает тоже самое значение
&НаСервереБезКонтекста
Функция ПолучитьСледующийИнвентарныйНомер(МассивНомеров, Ссылка)
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("ИнвентарныйНомер", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(9)));
Для Каждого Номер Из МассивНомеров Цикл
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.ИнвентарныйНомер = Номер;
КонецЦикла;
Запрос = Новый Запрос(
"ВЫБРАТЬ
| МАКСИМУМ(ПервоначальныеСведенияОСБухгалтерскийУчет.ИнвентарныйНомер) КАК ИнвентарныйНомер
|ИЗ
| РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет КАК ПервоначальныеСведенияОСБухгалтерскийУчет
|ГДЕ
| ПервоначальныеСведенияОСБухгалтерскийУчет.Регистратор <> &Ссылка");
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Если Выборка.ИнвентарныйНомер <> NULL Тогда
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.ИнвентарныйНомер = Выборка.ИнвентарныйНомер;
КонецЕсли;
Если ТЗ.Количество() = 0 Тогда
Возврат Неопределено
Иначе
ТЗ.Сортировать("ИнвентарныйНомер Убыв");
ИнвентарныйНомер = СокрП(ТЗ[0].ИнвентарныйНомер);
ДлинаНомера = СтрДлина(ИнвентарныйНомер);
Сч = ДлинаНомера;
Пока Сч > 0 Цикл
Если СтрНайти("0123456789", Сред(ИнвентарныйНомер, Сч, 1)) = 0 Тогда
Прервать;
КонецЕсли;
Сч = Сч - 1;
КонецЦикла;
Префикс = ?(Сч = 0, "", Лев(ИнвентарныйНомер, Сч));
НомерЧислом = Число(Сред(ИнвентарныйНомер, Сч + 1));
ФорматЧисла = "ЧЦ=" + Строка(ДлинаНомера - СтрДлина(Префикс)) + "; ЧВН=; ЧГ=";
Возврат Префикс + Формат(НомерЧислом + 1, ФорматЧисла);
КонецЕсли;
КонецФункции
ПоказатьФункция ПолучитьСледующийИнвентарныйНомер(МассивНомеров, Ссылка)
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("ИнвентарныйНомер", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(9)));
Для Каждого Номер Из МассивНомеров Цикл
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.ИнвентарныйНомер = Номер;
КонецЦикла;
Запрос = Новый Запрос(
"ВЫБРАТЬ
| МАКСИМУМ(ПервоначальныеСведенияОСБухгалтерскийУчет.ИнвентарныйНомер) КАК ИнвентарныйНомер
|ИЗ
| РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет КАК ПервоначальныеСведенияОСБухгалтерскийУчет
|ГДЕ
| ПервоначальныеСведенияОСБухгалтерскийУчет.Регистратор <> &Ссылка");
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Если Выборка.ИнвентарныйНомер <> NULL Тогда
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.ИнвентарныйНомер = Выборка.ИнвентарныйНомер;
КонецЕсли;
Если ТЗ.Количество() = 0 Тогда
Возврат Неопределено
Иначе
ТЗ.Сортировать("ИнвентарныйНомер Убыв");
ИнвентарныйНомер = СокрП(ТЗ[0].ИнвентарныйНомер);
ДлинаНомера = СтрДлина(ИнвентарныйНомер);
Сч = ДлинаНомера;
Пока Сч > 0 Цикл
Если СтрНайти("0123456789", Сред(ИнвентарныйНомер, Сч, 1)) = 0 Тогда
Прервать;
КонецЕсли;
Сч = Сч - 1;
КонецЦикла;
Префикс = ?(Сч = 0, "", Лев(ИнвентарныйНомер, Сч));
НомерЧислом = Число(Сред(ИнвентарныйНомер, Сч + 1));
ФорматЧисла = "ЧЦ=" + Строка(ДлинаНомера - СтрДлина(Префикс)) + "; ЧВН=; ЧГ=";
Возврат Префикс + Формат(НомерЧислом + 1, ФорматЧисла);
КонецЕсли;
КонецФункции
А как нибудь можно этот код переделать, чтобы он присваивал мое значение и дальше уже шел +1.
Прописываю цикл, он первое значение получает, а дальше остальным инвентарным номерам присваивает тоже самое значение
(37) Вместо
можете использовать
тогда вам достаточно один раз вручную указать нужный вам инв. номер, а в последующих принятиях будет так как вы хотите.
Не понимаю про какой вы цикл говорите. Приведённый код актуален только при интерактивном заполнении документа ПринятиеКУчетуОС.
Запрос = Новый Запрос(
"ВЫБРАТЬ
| МАКСИМУМ(ПервоначальныеСведенияОСБухгалтерскийУчет.ИнвентарныйНомер) КАК ИнвентарныйНомер
|ИЗ
| РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет КАК ПервоначальныеСведенияОСБухгалтерскийУчет
|ГДЕ
| ПервоначальныеСведенияОСБухгалтерскийУчет.Регистратор <> &Ссылка");
можете использовать
Запрос = Новый Запрос(
"ВЫБРАТЬ ПЕРВЫЕ 1
| ПервоначальныеСведенияОСБухгалтерскийУчет.ИнвентарныйНомер КАК ИнвентарныйНомер
|ИЗ
| РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет КАК ПервоначальныеСведенияОСБухгалтерскийУчет
|ГДЕ
| ПервоначальныеСведенияОСБухгалтерскийУчет.Регистратор <> &Ссылка
|
|УПОРЯДОЧИТЬ ПО
| ПервоначальныеСведенияОСБухгалтерскийУчет.Период УБЫВ");
Показатьтогда вам достаточно один раз вручную указать нужный вам инв. номер, а в последующих принятиях будет так как вы хотите.
Не понимаю про какой вы цикл говорите. Приведённый код актуален только при интерактивном заполнении документа ПринятиеКУчетуОС.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот