Экспорт в бухгалтерию: Ошибка номер не уникален!
Добрый день, господа!
Очень нужна помощь. Имеется конфигурация Аналит:Фармация 3.0 на 7.7 и Бухгалтерия ред 4.5, тоже на 7.7. Имеется обработка экспорта данных из аналита в бухгалтерию. Возможно, обработка типовая, в любом случае писал её не я, и работала до этого исправно. Однако сейчас, при попытке записать Операцию (так называется документ), ругается на то, что номер не уникален.
Естественно документа с таким номером в базе нет. При попытке создать документ с таким номером в ручную - всё получается.
Да, документы создаются задним числом. Есть подозрение, что это связано как-то с тем, что начался новый год, но я уже пробовал ставить нужный период в бухгалтерии, пробовал указать насильно номер для операции, что у меня не получилось и теперь полностью растерялся и не знаю в какую сторону копать.
Код обработки прилагаю.
Очень нужна помощь. Имеется конфигурация Аналит:Фармация 3.0 на 7.7 и Бухгалтерия ред 4.5, тоже на 7.7. Имеется обработка экспорта данных из аналита в бухгалтерию. Возможно, обработка типовая, в любом случае писал её не я, и работала до этого исправно. Однако сейчас, при попытке записать Операцию (так называется документ), ругается на то, что номер не уникален.
Естественно документа с таким номером в базе нет. При попытке создать документ с таким номером в ручную - всё получается.
Да, документы создаются задним числом. Есть подозрение, что это связано как-то с тем, что начался новый год, но я уже пробовал ставить нужный период в бухгалтерии, пробовал указать насильно номер для операции, что у меня не получилось и теперь полностью растерялся и не знаю в какую сторону копать.
Код обработки прилагаю.
Процедура ПриходРозницаНУ (Док)
// обработать приходные накладные для реализатора
РегОстатки = СоздатьОбъект("Регистр.ОстаткиТоваров");
СчетН02_02=Бух.EvalExpr("СчетПоКоду(""Н02.02.1"")");
БухОперация = Бух.CreateObject("Операция");
Номенклатура=Бух.CreateObject("Справочник.Номенклатура");
Номенклатура.ИспользоватьДату(СДаты);
Содержание = "НУ "+ Док.Вид()+ " " + Док.НомерДок + " " + Док.ДатаДок;
БухОперация.ВыбратьОперации(Док.ДатаДок, Док.ДатаДок);
Пока БухОперация.ПолучитьОперацию() = 1 цикл
Если СокрЛП(БухОперация.Содержание) = Содержание тогда
БухОперация.Удалить(1);
Прервать;
КонецЕсли;
КонецЦикла;
БухОперация.Новая();
БухОперация.ДатаОперации = Док.ДатаДок;
БухОперация.Содержание = Содержание;
БухОперация.СуммаОперации = 0;
ИтогоСебестоимость = 0;
ИтогоНаценка = 0;
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() = 1 цикл
Если Док.Товар.Выбран() = 0 тогда
Продолжить;
КонецЕсли;
Если Док.Товар.ВидТовара = Перечисление.ВидыТоваров.Услуга тогда
Продолжить;
КонецЕсли;
состояние ("Документ "+Док+" товар "+Док.Товар);
БазоваяСтоимость = 0;
ОстатокТовара = 0;
РегОстатки.ВыбратьДвиженияДокумента(Док.ТекущийДокумент());
Пока РегОстатки.ПолучитьДвижение() = 1 цикл
Если
(РегОстатки.Склад = Док.Склад) и
(РегОстатки.Товар = Док.Товар) и
(РегОстатки.Серия = Док.Серия) тогда
Если РегОстатки.Приход = 1 тогда
БазоваяСтоимость = БазоваяСтоимость - РегОстатки.БазоваяСтоимость;
ОстатокТовара = ОстатокТовара - РегОстатки.ОстатокТовара;
иначе
БазоваяСтоимость = БазоваяСтоимость + РегОстатки.БазоваяСтоимость;
ОстатокТовара = ОстатокТовара + РегОстатки.ОстатокТовара;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ОстатокТовара=0 тогда
ОстатокТовара=1;
конецесли;
БазоваяСтоимость = Окр (БазоваяСтоимость / ОстатокТовара * Док.Количество * Док.Коэффициент, 2);
БазоваяНДС = Окр (БазоваяСтоимость * (1 - 1 / (1 + ПроцентНДС(Док.Товар.СтавкаНДС) / 100)), 2);
состояние ("Формирование проводок "+Док+" товар "+Док.Товар);
// списание со склада
БухОперация.НоваяПроводка();
БухОперация.Кредит.Счет = СчетН02_02;
БухОперация.Кредит.Номенклатура = ПолучитьЭлемент(Док.Товар, Номенклатура);
// Установить ставки НДС, НП и тип номенклатуры
ОбновитьНоменклатуру (Док.Товар, Номенклатура);
БухОперация.Количество = Док.Количество*Док.Коэффициент;
БухОперация.Сумма = БазоваяСтоимость - БазоваяНДС;
// Себестоимость = БазоваяСтоимость - БазоваяНДС;
// СебестоимостьСНаценкой = Док.Сумма - Док.НДС - Док.СуммаНП;
Себестоимость = БазоваяСтоимость;
СебестоимостьСНаценкой = Док.Сумма;
Если (Себестоимость < СебестоимостьСНаценкой * 0.5) или
(Себестоимость >= СебестоимостьСНаценкой) тогда
Сообщить("ВНИМАНИЕ! Себестоимость в строке " + Док.НомерСтроки + " " + Док.Товар + " " + Формат(Себестоимость, "Ч12.2") + " с наценкой " + Формат(СебестоимостьСНаценкой, "Ч12.2"));
КонецЕсли;
ИтогоСебестоимость = ИтогоСебестоимость + Себестоимость;
ИтогоНаценка = ИтогоНаценка + Док.Сумма - Себестоимость;
БухОперация.СуммаОперации = БухОперация.СуммаОперации + Док.Сумма;
КонецЦикла;
сообщить (Док.Вид()+ " " + Док.НомерДок + " " + Док.ДатаДок + " " + Формат(Док.Итог("Сумма"), "Ч12.2"));
Сообщить(" себестоимость = " + Формат(ИтогоСебестоимость, "Ч12.2") + " наценка = " + Формат(ИтогоНаценка, "Ч12.2"));
БухОперация.Записать();
КонецПроцедуры
ПоказатьПо теме из базы знаний
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) StBender,
а
***
думаю что все равно, какой там номер будет,
поэтому попробуй при создании новой бухоперации
явно программно формировать для нее новый номер:
ЗЫ
могу запамятовать как этот метод в 7.7 называется - по мануалу из 8.х написал.
;)
а
Док.ДатаДок = ???;
***
думаю что все равно, какой там номер будет,
поэтому попробуй при создании новой бухоперации
явно программно формировать для нее новый номер:
БухОперация.УстановитьНовыйНомер(<ПрефиксНомера>)
ЗЫ
могу запамятовать как этот метод в 7.7 называется - по мануалу из 8.х написал.
;)
(3) Rothschild, Док.ДатаДок берётся из документа я просто приложил часть кода, который выдает ошибку, там ещё есть несколько процедур. Но конкретно в этом случае значение принимается от 01.12.2013 до 31.12.2013.
В сторону этого метода копал, но ничего не получилось. Данная операция
В сторону этого метода копал, но ничего не получилось. Данная операция
БухОперация.УстановитьНовыйНомер(<ПрефиксНомера>)
для остальных документов работает, а для Операции почему-то нет. И более того, я даже не могу выйти на её реквизит Номер или НомерДок, в обоих случаях пишет, что поле объекта не обнаружено.
А не проще поставить рабочей дату любую дату того периода за который выгружаются данные?
Т.е. если выгружаешь 2013 год то ставишь например 31.12.13
Сработает, т.к. как правило уникальность номеров доков стоит в пределах года.
Т.е. если выгружаешь 2013 год то ставишь например 31.12.13
Сработает, т.к. как правило уникальность номеров доков стоит в пределах года.
У Вас вот тут
создается операция, которой присваивается автоматом номер очередной ТЕКУЩЕГО года (2014), затем у неё изменяется дата - на 2013, судя по (4), а там этот номер может вполне существовать.
Совсем красиво будет, если УстановитьНовыйНомер поставить внутрь условия
Непонятно, почему не срабатывает (7), должно было...
БухОперация.Новая();
БухОперация.ДатаОперации = Док.ДатаДок;
создается операция, которой присваивается автоматом номер очередной ТЕКУЩЕГО года (2014), затем у неё изменяется дата - на 2013, судя по (4), а там этот номер может вполне существовать.
Совсем красиво будет, если УстановитьНовыйНомер поставить внутрь условия
БухОперация.Новая();
ПервоначальнаяДатаОперации = БухОперация.ДатаОперации;
БухОперация.ДатаОперации = Док.ДатаДок;
Если ДатаГод(ПервоначальнаяДатаОперации)<>ДатаГод(БухОперация.ДатаОперации) Тогда
БухОперация.Документ.УстановитьНовыйНомер(<ПрефиксНомера>);
КонецЕсли;
Непонятно, почему не срабатывает (7), должно было...
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот