Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
18 Дек 2017, 13:44
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Ошибка записи в базу  (Прочитано 2357 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Maxx79

  • *
  • Сообщений: 25
  • РЕПУТАЦИЯ: 1
  • КПД: 4%
  • Регистрация: 2013-10-29
  • Компания: Nissan-Part
  • Профессия: Программист 1С
Добрый день!
На форме элемента справочника Номенклатуры есть реквизит с типом ТаблицаЗначений (см. рисунок), который заполняется так:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Объект.Ссылка.Пустая() Тогда
Если Объект.Родитель.Оригинал Тогда
Объект.Оригинал = Истина;
Иначе
Объект.Оригинал = Ложь;
КонецЕсли;
Объект.ВидНоменклатуры = Объект.Родитель.ВидНоменклатуры;
Объект.ЦеноваяГруппа = Объект.Родитель.ЦеноваяГруппа;
Объект.ЕдиницаИзмерения = Объект.Родитель.ЕдиницаИзмерения;
Объект.Производитель = Объект.Родитель.Производитель;
КонецЕсли;

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               | УровниЦен.Ссылка,
               | УровниЦен.ВалютаЦены,
               | УровниЦен.РассчетнаяЦена
               |ИЗ
               | Справочник.УровниЦен КАК УровниЦен";
   
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Стр = ТаблицаЦен.Добавить();
Стр.УровниЦен = Результат.Ссылка;
Стр.ВалютаЦены = Результат.ВалютаЦены;
Стр.РассчетнаяЦена = Результат.РассчетнаяЦена;
КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура ЗакладкиПриСменеСтраницы(Элемент, ТекущаяСтраница)
Если Элементы.Цена.Имя = "Цена" Тогда
ЗаполнитьЦены();
КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьЦены()
Для Каждого Стр Из ТаблицаЦен Цикл
Стр.ЗначениеЦены = ОбщиеМеханизмы.ПолучитьЦенуТовара(Стр.УровниЦен, Объект.Ссылка);
КонецЦикла;
КонецПроцедуры

Изменить цены (не динамические) пользователь может непосредственно в таблице, при этом происходит следующее:
&НаКлиенте
Процедура ТаблицаЦенПередНачаломИзменения(Элемент, Отказ)
Если Элементы.ТаблицаЦен.ТекущиеДанные.РассчетнаяЦена ИЛИ Элемент.Родитель.Имя <> "Цена" Тогда
Отказ = Истина;
КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаЦенПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
УЦ = Элементы.ТаблицаЦен.ТекущиеДанные.УровниЦен;
НоваяЦена = Элементы.ТаблицаЦен.ТекущиеДанные.ЗначениеЦены;
ЗаписатьЦенуВБазу(Объект.Ссылка, УЦ, НоваяЦена);
КонецПроцедуры

&НаСервере
Процедура ЗаписатьЦенуВБазу(Товар, УЦ, НоваяЦена)
ТоварСсылка = Товар.ПолучитьОбъект();

Если УЦ = Справочники.УровниЦен.ЦенаАкция Тогда
    ТоварСсылка.ЦенаАкция = НоваяЦена;
ИначеЕсли УЦ = Справочники.УровниЦен.ЦенаЗакупки Тогда
ТоварСсылка.ЦенаЗакупки = НоваяЦена;
ИначеЕсли УЦ = Справочники.УровниЦен.ЦенаКрупныйОпт Тогда
ТоварСсылка.ЦенаКрупныйОпт = НоваяЦена;
ИначеЕсли УЦ = Справочники.УровниЦен.ЦенаОпт Тогда
ТоварСсылка.ЦенаОпт = НоваяЦена;
ИначеЕсли УЦ = Справочники.УровниЦен.ЦенаРозница Тогда
ТоварСсылка.ЦенаРозница = НоваяЦена;
ИначеЕсли УЦ = Справочники.УровниЦен.ЦенаСпец Тогда
ТоварСсылка.ЦенаСпец = НоваяЦена;
ИначеЕсли УЦ = Справочники.УровниЦен.Ц1 Тогда
ТоварСсылка.Цена1 = НоваяЦена;
ИначеЕсли УЦ = Справочники.УровниЦен.Ц2.ЦенаАкция Тогда
ТоварСсылка.Цена2 = НоваяЦена;
ИначеЕсли УЦ = Справочники.УровниЦен.Ц3 Тогда
ТоварСсылка.Цена3 = НоваяЦена;
КонецЕсли;

Попытка
ТоварСсылка.Записать();
Исключение
Текст = "Не удалось записать объект";
Сообщить(НСтр(Текст) + ТоварСсылка + ОписаниеОшибки());
КонецПопытки;

ЗаполнитьЦены();
КонецПроцедуры
После этого при попытке записать объект вылетает ошибка: Данные были изменены или удалены другим пользователем.
Если во "Всех действиях" нажать "Перечитать" - > "Да", то объект можно будет записать.

Помогите разобраться с проблемой!


Оффлайн DmitriyF

  • *****
  • Сообщений: 730
  • РЕПУТАЦИЯ: 48
  • КПД: 7%
  • Регистрация: 2013-03-18
  • Сайт: 
  • Профессия: Разработчик 1С
Добрый день!
На форме элемента справочника Номенклатуры есть реквизит с типом ТаблицаЗначений (см. рисунок), который заполняется так:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Объект.Ссылка.Пустая() Тогда
Если Объект.Родитель.Оригинал Тогда
Объект.Оригинал = Истина;
Иначе
Объект.Оригинал = Ложь;
КонецЕсли;
Объект.ВидНоменклатуры = Объект.Родитель.ВидНоменклатуры;
Объект.ЦеноваяГруппа = Объект.Родитель.ЦеноваяГруппа;
Объект.ЕдиницаИзмерения = Объект.Родитель.ЕдиницаИзмерения;
Объект.Производитель = Объект.Родитель.Производитель;
КонецЕсли;

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               | УровниЦен.Ссылка,
               | УровниЦен.ВалютаЦены,
               | УровниЦен.РассчетнаяЦена
               |ИЗ
               | Справочник.УровниЦен КАК УровниЦен";
   
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Стр = ТаблицаЦен.Добавить();
Стр.УровниЦен = Результат.Ссылка;
Стр.ВалютаЦены = Результат.ВалютаЦены;
Стр.РассчетнаяЦена = Результат.РассчетнаяЦена;
КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура ЗакладкиПриСменеСтраницы(Элемент, ТекущаяСтраница)
Если Элементы.Цена.Имя = "Цена" Тогда
ЗаполнитьЦены();
КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьЦены()
Для Каждого Стр Из ТаблицаЦен Цикл
Стр.ЗначениеЦены = ОбщиеМеханизмы.ПолучитьЦенуТовара(Стр.УровниЦен, Объект.Ссылка);
КонецЦикла;
КонецПроцедуры

Изменить цены (не динамические) пользователь может непосредственно в таблице, при этом происходит следующее:
&НаКлиенте
Процедура ТаблицаЦенПередНачаломИзменения(Элемент, Отказ)
Если Элементы.ТаблицаЦен.ТекущиеДанные.РассчетнаяЦена ИЛИ Элемент.Родитель.Имя <> "Цена" Тогда
Отказ = Истина;
КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаЦенПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
УЦ = Элементы.ТаблицаЦен.ТекущиеДанные.УровниЦен;
НоваяЦена = Элементы.ТаблицаЦен.ТекущиеДанные.ЗначениеЦены;
ЗаписатьЦенуВБазу(Объект.Ссылка, УЦ, НоваяЦена);
КонецПроцедуры

&НаСервере
Процедура ЗаписатьЦенуВБазу(Товар, УЦ, НоваяЦена)
ТоварСсылка = Товар.ПолучитьОбъект();

Если УЦ = Справочники.УровниЦен.ЦенаАкция Тогда
    ТоварСсылка.ЦенаАкция = НоваяЦена;
ИначеЕсли УЦ = Справочники.УровниЦен.ЦенаЗакупки Тогда
ТоварСсылка.ЦенаЗакупки = НоваяЦена;
ИначеЕсли УЦ = Справочники.УровниЦен.ЦенаКрупныйОпт Тогда
ТоварСсылка.ЦенаКрупныйОпт = НоваяЦена;
ИначеЕсли УЦ = Справочники.УровниЦен.ЦенаОпт Тогда
ТоварСсылка.ЦенаОпт = НоваяЦена;
ИначеЕсли УЦ = Справочники.УровниЦен.ЦенаРозница Тогда
ТоварСсылка.ЦенаРозница = НоваяЦена;
ИначеЕсли УЦ = Справочники.УровниЦен.ЦенаСпец Тогда
ТоварСсылка.ЦенаСпец = НоваяЦена;
ИначеЕсли УЦ = Справочники.УровниЦен.Ц1 Тогда
ТоварСсылка.Цена1 = НоваяЦена;
ИначеЕсли УЦ = Справочники.УровниЦен.Ц2.ЦенаАкция Тогда
ТоварСсылка.Цена2 = НоваяЦена;
ИначеЕсли УЦ = Справочники.УровниЦен.Ц3 Тогда
ТоварСсылка.Цена3 = НоваяЦена;
КонецЕсли;

Попытка
ТоварСсылка.Записать();
Исключение
Текст = "Не удалось записать объект";
Сообщить(НСтр(Текст) + ТоварСсылка + ОписаниеОшибки());
КонецПопытки;

ЗаполнитьЦены();
КонецПроцедуры
После этого при попытке записать объект вылетает ошибка: Данные были изменены или удалены другим пользователем.
Если во "Всех действиях" нажать "Перечитать" - > "Да", то объект можно будет записать.

Помогите разобраться с проблемой!

Я так понимаю цены хранятся в самой номенклатуре, не самый лучший вариант. Лучше использовать регистр сведений и там писать все изменения.

Оффлайн Besart

  • *****
  • Сообщений: 678
  • РЕПУТАЦИЯ: 142
  • КПД: 21%
  • Регистрация: 2012-12-10
    • Skype: artfa.a
  • Компания: Фрилансер
  • Профессия: Программист 8.1
я так понял вы программно меняете данные на форме, попробуйте ОбновитьИнтерфейс() или Обновить() для таб. части, или записывайте в модуле объекта
МойОбъект = РеквизитФормыВЗначение("Объект");
МойОбъект.ЗаписатьОбновленныеДанные();// ЗаписатьОбновленныеДанные - экспортная процедура в модуле объекта
ЗначениеВДанныеФормы(МойОбъект, Объект) ;

Оффлайн Maxx79

  • *
  • Сообщений: 25
  • РЕПУТАЦИЯ: 1
  • КПД: 4%
  • Регистрация: 2013-10-29
  • Компания: Nissan-Part
  • Профессия: Программист 1С
Спасибо всем! Проблема решена.

Цитировать
После этого при попытке записать объект вылетает ошибка: Данные были изменены или удалены другим пользователем.
Если во "Всех действиях" нажать "Перечитать" - > "Да", то объект можно будет записать.

Помогло:
ЭтаФорма.Прочитать();


Теги:
 

При открытии обр-ки в "Предприятии" есть ошибка, а в "Отладке" нет

Автор proofetРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 4559
Последний ответ 21 Сен 2011, 17:35
от proofet
ошибка "Невозможно обработать параметр "ПрофильПолномочийПользователя""

Автор lindeluРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 5
Просмотров: 6128
Последний ответ 06 Июн 2012, 09:15
от lindelu
Синтаксическая ошибка "В" Номенклатура.Ссылка = <<?>> В ИЕРАРХИИ(&Ссылка)

Автор maskitoРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 4
Просмотров: 4230
Последний ответ 28 Апр 2014, 15:53
от maskito
При создании нового документа "Заявка на кассовый расход" Ошибка "Значение 9 поля "номер" не уникально

Автор ppkmliteРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 14
Просмотров: 8566
Последний ответ 22 Ноя 2014, 04:50
от cska-fanat-kz
Ошибка при загрузке данных через (Обработка "Выгрузка и загрузка данных XML")

Автор Сергей_87Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 8582
Последний ответ 26 Апр 2012, 23:08
от Dethmontt

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
136 Сообщений
AIFrame
69 Сообщений
ilyay ilyay
65 Сообщений
alex0402
50 Сообщений
andron81_81
44 Сообщений
oleg-x
41 Сообщений
MuI_I_Ika MuI_I_Ika
31 Сообщений
BuhRust
30 Сообщений
Golickoff Golickoff
27 Сообщений
alexandr_ll
23 Сообщений

* Кто онлайн

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal