Вот вы говорите, что 1С - это просто. Казалось бы, действительно, SQL + Basic, чего тут может быть сложного.
Дал своему помощнику, начинающему 1с-нику задачу.
В этом участке кода мог дублироваться серийный номер:
Если НЕ ЗначениеЗаполнено(СерийныйНомер)
СерийныйНомер = СоздатьСерийныйНомер(Товар, НаименованиеСерийногоНомера);
КонецЕсли;
Попросил перед созданием серийника проверять, если есть уже серийник с таким названием, чтобы защититься от создания дублей. Вдаваться в логику работы кода было некогда (может это связано с параллельностью работы, может пользователи тупят), но такое бы решение надежно защитило от дублей.
Я видел решение этой проблемы таким:
Если НЕ ЗначениеЗаполнено(СерийныйНомер)
СерийныйНомер = НайтиСерийныйНомерПоНаименованию(Товар, НаименованиеСерийногоНомера);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(СерийныйНомер)
СерийныйНомер = СоздатьСерийныйНомер(Товар, НаименованиеСерийногоНомера);
КонецЕсли;
Программист написал мне так:
Если НЕ ЗначениеЗаполнено(СерийныйНомер)
СерийныйНомер = НайтиСерийныйНомерПоСсылке(Товар, СерийныйНомер);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(СерийныйНомер)
СерийныйНомер = СоздатьСерийныйНомер(Товар, НаименованиеСерийногоНомера);
КонецЕсли;
Причем в функции НайтиСерийныйНомерПоСсылке он искал ссылку по наименованию, т.е. по сути возвращал именно СерийныйНомер, но т.к. он был пустым, то ничего не находил и защиты от дублей не было. Хорошо, что посмотрел код. ;-)
А вы говорите "Бейсик - это просто". Ага, щас. Только опыт, сын ошибок трудных, дает нам право называться Программистом с большой буквы П.
Journal information