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

Автор Тема: Обработка проведения  (Прочитано 7750 раз)

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

Оффлайн kvk

  • *
  • Сообщений: 43
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-03-22
  • Сайт: 
  • Профессия: Ученик 1С
1с 7.7
Самописная конфиграция.
Создал документ ВводШтатнойДолжности
Текст модуля документа:

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

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


Оффлайн sergejK74

  • *****
  • Сообщений: 1093
  • РЕПУТАЦИЯ: 458
  • КПД: 42%
  • Всегда готов помочь!
  • Регистрация: 2011-07-08
  • Сайт: 
  • Профессия: Ученик 1С
может это надо изменить?
Если Проведен()=1 Тогда
Кнопочка Спасибо - слева!

Оффлайн kvk

  • *
  • Сообщений: 43
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-03-22
  • Сайт: 
  • Профессия: Ученик 1С
Спасибо большое. Заработало. Вот я тупанул... Аж стыдно теперь. Буду писать сюда в след раз после минимум 2х дней раздумий.

Оффлайн Андрей Федотов

  • ***
  • Сообщений: 212
  • РЕПУТАЦИЯ: 36
  • КПД: 17%
  • Регистрация: 2011-07-07
  • Компания: Future IT Solutions
  • Профессия: Разработчик 1С
Процедура ОбработкаПроведения()
    СпрШтРас = СоздатьОбъект("Справочник.ШтатноеРасписание");
   СпрШтРас.ИспользоватьВладельца(Подразделение);
   ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
      Если Проведен()=0 Тогда
         Если СпрШтРас.НайтиЭлемент(Должность)=0 Тогда
            Предупреждение("Одна из должностей уже существует!");
            СтатусВозврата(0);
         Иначе
            ЗаполнитьСправочник(СпрШтРас);
         КонецЕсли;
      КонецЕсли;
КонецЦикла;
КонецПроцедуры


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

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

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

Оффлайн kvk

  • *
  • Сообщений: 43
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-03-22
  • Сайт: 
  • Профессия: Ученик 1С
Кому не сложно подскажите еще:
документ ИзменениеШтатногоРасписания (справочника, который заполнялся в предыдущем коде) для измениия количества ставок.


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

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

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

Оффлайн sergejK74

  • *****
  • Сообщений: 1093
  • РЕПУТАЦИЯ: 458
  • КПД: 42%
  • Всегда готов помочь!
  • Регистрация: 2011-07-08
  • Сайт: 
  • Профессия: Ученик 1С
Этим кодом ты выбрал справочник
СпрШт = СоздатьОбъект("Справочник.ШтатноеРасписание");
Теперь тебе нужно найти в этом справочнике элемент, такой же как в строке документа и спозиционироваться на нем.
Скорее всего тебе нужно использовать метод НайтиЭлемент()
Если СпрШт.НайтиЭлемент(  здесь наверное Должность  ) = 1 Тогда
....
КонецЕсли;
И поместить это внутрь цикла
 Пока ПолучитьСтроку() = 1 Цикл // перебор строк документа
Кнопочка Спасибо - слева!

Оффлайн kvk

  • *
  • Сообщений: 43
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-03-22
  • Сайт: 
  • Профессия: Ученик 1С
Так я тоже делал:(
Счас проверю)

Оффлайн sergejK74

  • *****
  • Сообщений: 1093
  • РЕПУТАЦИЯ: 458
  • КПД: 42%
  • Всегда готов помочь!
  • Регистрация: 2011-07-08
  • Сайт: 
  • Профессия: Ученик 1С
Так я тоже делал:(
Счас проверю)
Тогда выложи код с НайтиЭлемент()
Кнопочка Спасибо - слева!

Оффлайн kvk

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

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

Оффлайн kvk

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

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


Теги:
 


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

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

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


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

* Реклама

* Поиск

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

* Реклама

* Последние вакансии

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

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

* Кто онлайн

  • Точка Гостей: 283
  • Точка Скрытых: 0
  • Точка Пользователей: 3
  • Точка Сейчас на форуме:

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal