Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 18:20

Обработка проведения

Автор kvk, 20 июл 2011, 17:53

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

kvk

1с 7.7
Самописная конфиграция.
Создал документ ВводШтатнойДолжности
Текст модуля документа:

Процедура ЗаполнитьСправочник(СпрШтРас)
   СпрШтРас.Новый();
   СпрШтРас.Должность = Должность;
   СпрШтРас.КоличествоСтавок = КоличествоСтавок;
   СпрШтРас.КоличествоВакантныхСтавок = КоличествоВакантныхСтавок;
   СпрШтРас.КоличествоЗанятыхСтавок = КоличествоЗанятыхСтавок;
   СпрШтРас.Записать();
КонецПроцедуры
//------------------------------------------------------------------
Процедура ОбработкаПроведения()
    СпрШтРас = СоздатьОбъект("Справочник.ШтатноеРасписание");
   СпрШтРас.ИспользоватьВладельца(Подразделение);
   ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
      Если Проведен()=1 Тогда
         Если СпрШтРас.НайтиЭлемент(Должность)=0 Тогда
            Предупреждение("Одна из должностей уже существует!");
            СтатусВозврата(0);
         Иначе
            ЗаполнитьСправочник(СпрШтРас);
         КонецЕсли;
      КонецЕсли;
КонецЦикла;
КонецПроцедуры

При проведении документа никаких сообщений нет. Документ якобы проводится. Справочник ШатаноеРасписание не заполняется. Заполняется только если открыть документ второй раз и еще раз его провести. Помогите решить задачку. Спасибо.

sergejK74

может это надо изменить?
Если Проведен()=1 Тогда
Кнопочка Спасибо - слева!

kvk

Спасибо большое. Заработало. Вот я тупанул... Аж стыдно теперь. Буду писать сюда в след раз после минимум 2х дней раздумий.

Андрей Федотов

Процедура ОбработкаПроведения()
    СпрШтРас = СоздатьОбъект("Справочник.ШтатноеРасписание");
   СпрШтРас.ИспользоватьВладельца(Подразделение);
   ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
      Если Проведен()=0 Тогда
         Если СпрШтРас.НайтиЭлемент(Должность)=0 Тогда
            Предупреждение("Одна из должностей уже существует!");
            СтатусВозврата(0);
         Иначе
            ЗаполнитьСправочник(СпрШтРас);
         КонецЕсли;
      КонецЕсли;
КонецЦикла;
КонецПроцедуры


Так будет правильно. Единственное  не очень понятно зачем вам вот это условие:

Если СпрШтРас.НайтиЭлемент(Должность)=0 Тогда

Поставьте проверку на заполненность реквизита "Должность" в процедуре Перед записью.
Смысла искать элемент наверное нет, если он выбирается из справочника.
С уважением,
Андрей Федотов
Future IT Solutions

kvk

Кому не сложно подскажите еще:
документ ИзменениеШтатногоРасписания (справочника, который заполнялся в предыдущем коде) для измениия количества ставок.


Процедура ОбработкаПроведения()
       СпрШт = СоздатьОбъект("Справочник.ШтатноеРасписание"); //ссылка на справочник
       СпрШт.ИспользоватьВладельца(Подразделение); // устанавливаем владельца
       ВыбратьСтроки(); // выборка многострочной части документа
       Пока ПолучитьСтроку() = 1 Цикл // перебор строк документа
               СпрШт.КоличествоСтавок = КолСтавокНовое;
                       Если КолСтавокНовое = 0 Тогда
                              СпрШт.УдалитьСтроку();
                       КонецЕсли;
               СпрШт.Записать();               
       КонецЦикла;
КонецПроцедуры

Выдает ошибку:
СпрШт.КоличествоСтавок = КолСтавокНовое;
{Документ.ИзменениеШтатногоРасписания.МодульДокумента(9)}: Не выбран элемент!

В отладчике уже на этапе ВыбратьСтроки() передаваемое значение - ошибка в выражении. Наврняка все так же просто. Прошу помощи.

sergejK74

Этим кодом ты выбрал справочник
СпрШт = СоздатьОбъект("Справочник.ШтатноеРасписание");
Теперь тебе нужно найти в этом справочнике элемент, такой же как в строке документа и спозиционироваться на нем.
Скорее всего тебе нужно использовать метод НайтиЭлемент()
Если СпрШт.НайтиЭлемент(  здесь наверное Должность  ) = 1 Тогда
....
КонецЕсли;

И поместить это внутрь цикла Пока ПолучитьСтроку() = 1 Цикл // перебор строк документа
Кнопочка Спасибо - слева!

kvk

Так я тоже делал:(
Счас проверю)

sergejK74

Цитата: kvk от 26 июл 2011, 11:38
Так я тоже делал:(
Счас проверю)
Тогда выложи код с НайтиЭлемент()
Кнопочка Спасибо - слева!

kvk

Процедура ОбработкаПроведения()
СпрШт = СоздатьОбъект("Справочник.ШтатноеРасписание");
СпрШт.ИспользоватьВладельца(Подразделение);
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
Если СпрШт.НайтиЭлемент(Должность) = 1 Тогда
СпрШт.КоличествоСтавок = КолСтавокНовое;
Если КолСтавокНовое = 0 Тогда
СпрШт.УдалитьСтроку();
КонецЕсли;
СпрШт.Записать();
КонецЕсли;
КонецЦикла;
КонецПроцедуры


Вот что получилось. Ошибку не выдает, но и в справочнике никаких изменений не происходит)

kvk

Процедура ОбработкаПроведения()
СпрШт = СоздатьОбъект("Справочник.ШтатноеРасписание");
СпрШт.ИспользоватьВладельца(Подразделение);
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
Если СпрШт.НайтиЭлемент(Должность) = 1 Тогда
СпрШт.КоличествоСтавок = КолСтавокНовое;
Если КолСтавокНовое = 0 Тогда
СпрШт.УдалитьСтроку();
КонецЕсли;
СпрШт.Записать();
КонецЕсли;
КонецЦикла;
КонецПроцедуры


так читабелнее наверно...

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск