Имя: Пароль:
1C
1С v8
запись в РС. 3 основных измерения. ошибка при записи.
0 zladenuw
 
06.08.13
09:52
Процедура ПередЗаписью(Отказ)
    
    РегистрСведенийНаборЗаписей.Отбор.Найти("Модель").Установить(Модель,Истина);
    РегистрСведенийНаборЗаписей.Отбор.Найти("ВедущийНорматив").Установить(ВедущийНорматив,Истина);
    РегистрСведенийНаборЗаписей.Прочитать();
    
    ТабНЗ = РегистрСведенийНаборЗаписей.Выгрузить();
    
    //Заполним связку нормативами и запчастями
    Для каждого СтрНорматив Из ТПНормативы Цикл
                НовСтр = ТабНЗ.Добавить();
                НовСтр.Модель = Модель;
                НовСтр.ВедущийНорматив = ВедущийНорматив;
                НовСтр.СвязкаЗЧНорматив = СтрНорматив.СвязкаЗЧНорматив;                                  
                НовСтр.Кво = СтрНорматив.Кво;
                НовСтр.ИсключатьВедущийНорматив = ИсключатьВедущийНорматив;
    КонецЦикла;
    Для каждого СтрЗЧ Из ТПЗапчасти Цикл
        НовСтр = ТабНЗ.Добавить();
        НовСтр.Модель = Модель;
        НовСтр.ВедущийНорматив = ВедущийНорматив;
        НовСтр.СвязкаЗЧНорматив = СтрНорматив.СвязкаЗЧНорматив;                                  
        НовСтр.Кво = СтрНорматив.Кво;
        НовСтр.ИсключатьВедущийНорматив = ИсключатьВедущийНорматив;
        НовСтр.ФлагЗЧ = Истина;
    КонецЦикла;
    
    РегистрСведенийНаборЗаписей.Загрузить(ТабНЗ);
    РегистрСведенийНаборЗаписей.Записать();
КонецПроцедуры


текст ошибки
{РегистрСведений.СвязкаРабот_и_Запчастей_по_Моделям.Форма.ФормаНабораЗаписей.Форма(59)}: Ошибка при вызове метода контекста (Записать)
    РегистрСведенийНаборЗаписей.Записать();
по причине:
Запись с такими ключевыми полями существует! : СвязкаРабот_и_Запчастей_по_Моделям: Superb Combi Elegance 2,0TDI CR/103kW DSG, BS31_TO45_MT_ТО-45000, Передні гальмівні колодки дискові гальма з/в (Регистр сведений: Связка работ и запчастей по моделям; Номер строки: 3)

Нужно установить ведущие на первых два измерение или что?
1 Maxus43
 
06.08.13
09:53
ПередЗаписью чего это процедура?
2 Maxus43
 
06.08.13
09:54
и что за Отбор.Найти("Модель") ? Ты не знаешь какие измерения у тебя?
Отбор.Модель.Установить
3 zladenuw
 
06.08.13
09:55
(2) ну так по подсказчику пишу. нельзя так ?
да ошибку увидел уже.
копипастил и
  НовСтр.СвязкаЗЧНорматив = СтрНорматив.СвязкаЗЧНорматив;    
должно быть СтрЗЧ :)
4 Maxus43
 
06.08.13
09:56
(3)>>нельзя так ?
можно конечно, но этим ты бросаешь тень на нашу профессию)
5 zladenuw
 
06.08.13
09:59
(4) РегистрСведенийНаборЗаписей.Отбор["Модель"].Установить(Модель,Истина);

Так лучше ? :)
6 Maxus43
 
06.08.13
10:00
Отбор.Модель.Установить(Модель).

Краткочть сестра таланта
7 Cube
 
06.08.13
10:01
(5) Те же яйца, только сбоку))
8 zladenuw
 
06.08.13
10:06
(6) не. если платят за количество букв кода :) то лучше больше :)
9 Maxus43
 
06.08.13
10:09
(8) ну а чож ты, бери на вооружение индийский код...

Если Ложь Тогда

    Перем НачальноеЗнач;
    СтандартнаяОбработка = Ложь;
    Результат = Новый Структура();
    Результат.Вставить("ЗначениеВведено", Ложь);
    Результат.Вставить("ЗначениеВведеноЧерезВыбор", Неопределено);
    Результат.Вставить("Значение", Неопределено);
    НачальноеЗнач = ПервоначальноеЗначение;

    РучнойВвод = Ложь;
    Значение = Неопределено; // Вводимое значение.

    Если (НЕ Форма.мАвтоВыборКодов) И (ТаблицаВыбора <> Неопределено) Тогда
    // Если ТаблицаВыбора <> Неопределено Тогда

        НайденнаяСтрока = ТаблицаВыбора.Найти(ПервоначальноеЗначение, КолонкаПоиска);

        // Обеспечим ввод из таблицы значений.
        Если СтрокаВводаИзТаблицы <> Неопределено Тогда
            НовСтр = ТаблицаВыбора.Добавить();
            // НовСтр.Код = ?(ПустаяСтрока(ПервоначальноеЗначение), "", ПервоначальноеЗначение);
            НовСтр.Код = "";
            НовСтр.Название = СтрокаВводаИзТаблицы;
            ТаблицаВыбора.Сдвинуть(ТаблицаВыбора.Количество() - 1, (-1) * (ТаблицаВыбора.Количество() - 2));
        КонецЕсли;

        Если НайденнаяСтрока = Неопределено Тогда
            Выб = ТаблицаВыбора.ВыбратьСтроку(ТекстВыбора);
        Иначе
            Выб = ТаблицаВыбора.ВыбратьСтроку(ТекстВыбора, НайденнаяСтрока);
        КонецЕсли;

        Если Выб = Неопределено Тогда
            Возврат Результат;
        КонецЕсли;

        Если (ТаблицаВыбора.Индекс(Выб) = 1) И (СтрокаВводаИзТаблицы <> Неопределено) Тогда
            РучнойВвод = Истина;
        Иначе
            // Получим значение по колонке поиска.
            Значение = Выб.Получить(ТаблицаВыбора.Колонки.Индекс(ТаблицаВыбора.Колонки.Найти(КолонкаПоиска)));
            Результат.ЗначениеВведеноЧерезВыбор = Истина;
        КонецЕсли;

    Иначе
        РучнойВвод = Истина;
    КонецЕсли;

    Если РучнойВвод Тогда
        Если ТипЗнч(ПервоначальноеЗначение) = Тип("Строка") Тогда
            Вводить = Истина;

            МеханизмВводаИНН = Ложь;
            МеханизмВводаКПП = Ложь;
            Если (Найти(ТекстВвода, " ИНН") > 0) Тогда
                // Возводим признак работы механизма ввода ИНН.
                МеханизмВводаИНН = Истина;
                Если (СтрДлина(ПервоначальноеЗначение) = КолВоКвадратиков) И (Сред(ПервоначальноеЗначение, 1, 2) = "00") Тогда
                    // Удалим лидирующие нули.
                    ПервоначальноеЗначение = Сред(ПервоначальноеЗначение, 3);
                КонецЕсли;
            ИначеЕсли (Найти(ТекстВвода, " КПП") > 0) Тогда
                МеханизмВводаКПП = Истина;
            КонецЕсли;
            Пока Вводить Цикл

                Если НЕ ВвестиСтроку(ПервоначальноеЗначение, ТекстВвода, РазмерностьЦ) Тогда
                    Возврат Результат;
                КонецЕсли;

                Если Найти(ТекстВвода, "ОКАТО") > 0 Тогда
                    ПроверкаВвода = Истина;
                    КритичнаяДлина = РазмерностьЦ;
                    ТекстКонтроля = "Код ОКАТО должен состоять из 11 цифр.";
                ИначеЕсли (Найти(ТекстВвода, " КБК") > 0) Тогда
                    ПроверкаВвода = Истина;
                    КритичнаяДлина = РазмерностьЦ;
                    ТекстКонтроля = "КБК должен состоять из 20-ти цифр.";
                ИначеЕсли МеханизмВводаИНН Тогда
                    ПроверкаВвода = Ложь;

                    Если (СтрДлина(ПервоначальноеЗначение) = КолВоКвадратиков) И (Сред(ПервоначальноеЗначение, 1, 2) = "00") Тогда
                        ПервоначальноеЗначение = Сред(ПервоначальноеЗначение, 3);
                    КонецЕсли;

                    // Первое условие, когда в переменной РазмерностьД задано 0, это означает, что вводится ИНН может как 12-ти, так и 10-ти значный.
                    // Применяется в декларации по НДС.
                    // В случае, если РазмерностьД указано одно из значений 10 или 12, то требуется вводить однозначно или 10-ти или 12-ти значный ИНН.
                    Если (((ИННСоответствуетТребованиямБезТипа(ПервоначальноеЗначение)) Или (ПустаяСтрока(ПервоначальноеЗначение))) И РазмерностьД = 0)
                    Или (((РазмерностьД = 10) И (ИННСоответствуетТребованиям(ПервоначальноеЗначение, Ложь))) Или ПустаяСтрока(ПервоначальноеЗначение))
                    Или (((РазмерностьД = 12) И (ИННСоответствуетТребованиям(ПервоначальноеЗначение, Истина))) Или ПустаяСтрока(ПервоначальноеЗначение)) Тогда
                        Вводить = Ложь;

                        Если ПустаяСтрока(ПервоначальноеЗначение) Тогда
                            СимволЗаполнения = " ";
                        Иначе
                            СимволЗаполнения = "0";
                        КонецЕсли;

                        Если КолВоКвадратиков <> Неопределено Тогда
                        // Добавим симовлы 0, для заполнения ячеек с левой стороны.
                            ПервоначальноеЗначение = ДополнитьСтроку(ПервоначальноеЗначение, КолВоКвадратиков, СимволЗаполнения);
                        КонецЕсли;
                    Иначе
                        Сообщить("Указанный ИНН " + ПервоначальноеЗначение + " - не соответствует требованиям.", СтатусСообщения.Важное);
                        Продолжить;
                    КонецЕсли;
                ИначеЕсли МеханизмВводаКПП Тогда
                    ПроверкаВвода = Ложь;
                    Если (КППСоответствуетТребованиям(ПервоначальноеЗначение)) Или (ПустаяСтрока(ПервоначальноеЗначение))Тогда
                        Вводить = Ложь;
                    Иначе
                        Сообщить("Указанный КПП " + ПервоначальноеЗначение + " - не соответствует требованиям.", СтатусСообщения.Важное);
                        Продолжить;
                    КонецЕсли;
                Иначе
                    ПроверкаВвода = Ложь;
                КонецЕсли;

                Если ПроверкаВвода Тогда
                    Если (ПервоначальноеЗначение = "") Или (ОбщегоНазначения.ТолькоЦифрыВСтроке(ПервоначальноеЗначение)) И (СтрДлина(ПервоначальноеЗначение) = КритичнаяДлина) Тогда
                        Вводить = Ложь;
                    Иначе
                        Сообщить(ТекстКонтроля, СтатусСообщения.Важное);
                    КонецЕсли;
                Иначе
                    Вводить = Ложь;
                    Если СтруктураТребованийРучногоВвода <> Неопределено Тогда
                        // Задан режим проверки ручного ввода.
                        Если (СтруктураТребованийРучногоВвода.СтрокаТолькоИзЧисел) И (НЕ ОбщегоНазначения.ТолькоЦифрыВСтроке(ПервоначальноеЗначение)) Тогда
                            Сообщить("Введенное значение должно состоять только из цифр.", СтатусСообщения.Важное);
                            Вводить = Истина;
                        ИначеЕсли (СтруктураТребованийРучногоВвода.Свойство("КонтролируемаяДлинаСтроки")) И
                                  (СтруктураТребованийРучногоВвода.КонтролируемаяДлинаСтроки <> СтрДлина(ПервоначальноеЗначение)) И
                                  (НЕ ПустаяСтрока(ПервоначальноеЗначение)) Тогда
                            Сообщить("Введенное значение должно состоять из " + Строка(СтруктураТребованийРучногоВвода.КонтролируемаяДлинаСтроки) + " символов.", СтатусСообщения.Важное);
                            Вводить = Истина;

                        КонецЕсли;
                    КонецЕсли;

                КонецЕсли;

            КонецЦикла;

        ИначеЕсли ТипЗнч(ПервоначальноеЗначение) = Тип("Число") Тогда
            Вводить = Истина;
            Пока Вводить Цикл

                Если НЕ ВвестиЧисло(ПервоначальноеЗначение, ТекстВвода, РазмерностьЦ, РазмерностьД) Тогда
                    Возврат Результат;
                КонецЕсли;

                ПервоначальноеЗначениеСтр = Формат(ПервоначальноеЗначение, "ЧГ=0");
                Если СтрДлина(ПервоначальноеЗначениеСтр) > КолВоКвадратиков Тогда
                    Сообщить("Введенное значение нельзя отобразить в отчете.", СтатусСообщения.Важное);
                Иначе
                    Вводить = Ложь;
                КонецЕсли;

            КонецЦикла;

        ИначеЕсли ТипЗнч(ПервоначальноеЗначение) = Тип("Дата") Тогда
            Если НЕ ВвестиДату(ПервоначальноеЗначение, ТекстВвода, ЧастиДаты.Дата) Тогда
                Возврат Результат;
            КонецЕсли;
            ПервоначальноеЗначение = Формат(ПервоначальноеЗначение, "ДФ='ддММгггг'");
        КонецЕсли;

        Значение = ПервоначальноеЗначение;
        Результат.Вставить("ЗначениеВведеноЧерезВыбор", Ложь);
    КонецЕсли;

    Результат.Вставить("ЗначениеВведено", Истина);

    Если НачальноеЗнач <> Значение Тогда
        Форма.Модифицированность = Истина;
    КонецЕсли;

    // Запись на лист.
    Результат.Значение = Значение;

    Если МеханизмВводаИНН = Истина Тогда
        // Удалим лидирующие нули, если есть.
        Если (СтрДлина(Значение) = КолВоКвадратиков) И (Сред(Значение, 1, 2) = "00") Тогда
            Результат.Значение = Сред(Значение, 3);
        КонецЕсли;
    КонецЕсли;

    Если КолВоКвадратиков = Неопределено Тогда
        Форма.ЭлементыФормы["ПолеТабличногоДокумента" + Раздел].Области[ИмяЯчейкиВывода].Значение = Значение;
    Иначе
        роПроставитьВКвадратыЗначения(Форма, Раздел, ИмяЯчейкиВывода, ?(ЭтоСумма, КолВоКвадратиков, РазмерностьЦ), Значение, ЭтоСумма, НольКакНоль);
    КонецЕсли;

Иначе
РегистрСведенийНаборЗаписей.Отбор["Модель"].Установить(Модель,Истина);

КонецЕсли;
10 zladenuw
 
06.08.13
10:29
(9) тут уже через чур много :) могут спалить :). но все равно спасиб