7.7 Как реализовать автоматическое проставление суммы при заполнении(изменении) количества?

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем sapravka, 16 ноя 2012.

  1. TopicStarter Overlay
    sapravka
    Offline

    sapravka Опытный в 1С

    Регистрация:
    24 дек 2011
    Сообщения:
    142
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте!
    Имеется конфигурация самописная, про общепит: Там есть документ списания. И списываются как просто позиция номенклатуры, так и блюда (у которых своя цена) в одном документе. Добавил новый реквизит в табличную часть – СУММА и добавил его руками в табличную часть. Суммы есть в 2 справочниках:
    1 Справочник блюд.
    2. Справочник номенклатура.

    В связи с этим убедительно прошу – подскажите пожалуйста, пример кода для автоматическое проставление суммы при заполнении(изменении) количества?

    Посмотреть вложение 12918

    Идея меня посещала следующая:
    В модуле формы написать процедуру, которая при заполнении(изменении) автоматический проставляла бы сумму!
    Но вот как эту процедуру завязать на реквизит табличной части, что бы при изменении количества номенклатуры или блюда, автоматом бы менялась сумма – я никак не пойму!
    Убедительно прошу – помогите!

    Если не сложно – дайте пожалуйста пример кода с комментариями...

    Вложения:

    • 14.jpg
      14.jpg
      Размер файла:
      49,8 КБ
      Просмотров:
      44
  2. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    В свойствах поля ввода (свойство Формула) прописываете свою процедуру:
    Посмотреть вложение 12919

    Вложения:

    • 0068.PNG
      0068.PNG
      Размер файла:
      7,7 КБ
      Просмотров:
      42
  3. TopicStarter Overlay
    sapravka
    Offline

    sapravka Опытный в 1С

    Регистрация:
    24 дек 2011
    Сообщения:
    142
    Симпатии:
    0
    Баллы:
    26
    Спасибо!
    А пример кода для выборки суммы из двух разных справочников?
  4. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Как и где хранится цена?
  5. TopicStarter Overlay
    sapravka
    Offline

    sapravka Опытный в 1С

    Регистрация:
    24 дек 2011
    Сообщения:
    142
    Симпатии:
    0
    Баллы:
    26
    Цены храняться в 2 справочниках:
    1. Справочник номенклатура есть колонка цена
    2 спавочник блюда есть тоже колонка цена
  6. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Ну в общих чертах:
    Код:
    Сумма = Номенклатура.Цена * Количество;
    Если цена - реквизит периодический, то так:
    Код:
    Сумма = Номенклатура.Цена.Получить(ДатаДок) * Количество;
    Точно без знания структуры вашей конфигурации ответить сложно.

    P.S. Может лучше в табличную часть добавить ещё колонку Цена, которую заполнять при изменении номенклатуры, а уже сумму считать от цены в табличной части.
  7. TopicStarter Overlay
    sapravka
    Offline

    sapravka Опытный в 1С

    Регистрация:
    24 дек 2011
    Сообщения:
    142
    Симпатии:
    0
    Баллы:
    26
    Да вот открыл синтакс-помощник, а там дословно:

    <Реквизит>
    Синтаксис:
    <Реквизит>
    Назначение:
    Доступ к полю <Реквизит> текущего документа.
    Замечание:
    Реквизиты многострочной части документа имеют смысл только при выбранной строке.
    Подробнее см. в документации, глава 'Работа с Документами'

    Искал главу работу с документами, да так и не нашел...
    Ну немного подумав решил написать следующее:


    Код:
    Процедура Пересчет()
    
    Документ.Списание.Реквизит.Сумма = Справочник.Номенклатура.Реквизит.Цена * Документ.Списание.Реквизит.Количество
    
    КонецПроцедуры //Пересчет
    Но выдает ошибку:

    Код:
    Документ<<?>>.Списание.Реквизит.Сумма = Справочник.Номенклатура.Реквизит.Цена * Документ.Списание.Реквизит.Количество
    {Документ.Списание.Форма.Модуль(41)}: Переменная не определена (Документ)
    Ну я то хочу написать просто обращение к документу, а в семерке в синтакс помощнике никак не могу найти как правильно прописать...
    Подскажите пожалуйста!
  8. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Вы же код пишете в контексте модуля формы документа - просто пишите имя реквизита:
    Код:
    Сумма = Номенклатура.Цена * Количество;
  9. TopicStarter Overlay
    sapravka
    Offline

    sapravka Опытный в 1С

    Регистрация:
    24 дек 2011
    Сообщения:
    142
    Симпатии:
    0
    Баллы:
    26
    Тут небольшой справочник:
    Посмотреть вложение 12933
    В которых и хранятся наше цена:
    Посмотреть вложение 12934
    Но вот в справочнике номенклатура - есть реквизиты:
    Посмотреть вложение 12935
    А вот в справочнике блюда их нет:
    Посмотреть вложение 12936
    Хотя там есть табличная часть:
    Посмотреть вложение 12937

    Вот я и хочу написать процедуру в модуле обекта, дословно следующую:

    Документ.Списание.Сумма = Справочник.Номенклатор.Сумма*Колличество + Справочник.Блюда(правда тут надо скорее всего по коду обращаться, наверное) *Колличество

    Примерно как то так - то есть позиция в документе списания может оказаться как номенклатурой - например хлеб, так и блюдом - например суп гороховый!
    Вот только как это правильно прописать в процедуру никак не пойму!
    Подсказали на этом форуме добрые люди, что в свойствах поля ввода (свойство Формула) прописываете свою процедуру - прописал, но вот саму процедуру никак не пойму как написать...

    Код:
    Процедура Пересчет()
    
    Сумма = Номенклатура.Цена * Количество;
    
    КонецПроцедуры //Пересчет
    Подскажите пожалуйста добрые люди...
    Как правильно написать, что бы суммы выбирались со справочника Номенклатор и Блюда?
    И Как я думаю умножение на ноль и сложение - это же не страшно?

    Вложения:

    • 1.jpg
      1.jpg
      Размер файла:
      26,8 КБ
      Просмотров:
      19
    • 2.jpg
      2.jpg
      Размер файла:
      290,7 КБ
      Просмотров:
      22
    • 3.jpg
      3.jpg
      Размер файла:
      198,7 КБ
      Просмотров:
      30
    • 4.jpg
      4.jpg
      Размер файла:
      194,7 КБ
      Просмотров:
      27
    • 5.jpg
      5.jpg
      Размер файла:
      180,8 КБ
      Просмотров:
      19
  10. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Что у вас в колонке Цена справочника Блюда?

    Есть возможность выложить md-файл?
  11. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    А цена не периодический реквизит случайно?
  12. TopicStarter Overlay
    sapravka
    Offline

    sapravka Опытный в 1С

    Регистрация:
    24 дек 2011
    Сообщения:
    142
    Симпатии:
    0
    Баллы:
    26
    Вот файл 1Cv7.MD:
    Посмотреть вложение 12939

    Вложения:

    • 1Cv7.rar
      Размер файла:
      31,3 КБ
      Просмотров:
      21
  13. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Не все так однозначно.
    Смотрите метод ИспользоватьРодителя. Хотя в блюде вы не знаете калькуляционную карту.
    Чтобы реализовать вашу "хочуху" придется вносить изменения в конфу
  14. TopicStarter Overlay
    sapravka
    Offline

    sapravka Опытный в 1С

    Регистрация:
    24 дек 2011
    Сообщения:
    142
    Симпатии:
    0
    Баллы:
    26
    Вот пробую сам добавить в модуль формы следующий код:


    Код:
    Процедура Пересчет()
    
    СуммаНоменклатуры = Справочники.Номенклатура.Получить(Цена);
    Сумма = СуммаНоменклатуры*Количество;
    
    КонецПроцедуры //Пересчет
    
    Но вот пишет, что:


    Код:
    Сумма = Справочники<<?>>.Номенклатура.Цена*Количество;
    {Документ.Списание.Форма.Модуль(41)}: Переменная не определена (Справочники)
    Подскажите пожалуйста, как мне из модуля формы обратиться к:
    Справочнику - Номенклатура к реквизиту Цена и выбрать оттуда цену номенклатуры?
    (что бы затем её умножить на количество)

    Просто уже всю голову поломал над решением этой проблемы!
  15. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    [CODE1C]Процедура Пересчет()
    СуммаНоменклатуры = Номенклатура.Цена;
    Сумма = СуммаНоменклатуры*Количество;
    КонецПроцедуры //Пересчет[/CODE1C]

    У колонок Номенклатура и Количество в свойстве Формула пишите Пересчет():
    Посмотреть вложение 12940

    P.S. И про Блюда я не понял. Откуда они в документе Списание?

    Вложения:

    • 0029.PNG
      0029.PNG
      Размер файла:
      7,6 КБ
      Просмотров:
      16
  16. TopicStarter Overlay
    sapravka
    Offline

    sapravka Опытный в 1С

    Регистрация:
    24 дек 2011
    Сообщения:
    142
    Симпатии:
    0
    Баллы:
    26
    Спасибо!
    Все правильно!
    Я добавил в колонку Номенклатура, Колличество и Сумма в свойствах формулы Перерасчет ()

    А вот сама процедура Перерасчет()

    Код:
    Процедура Пересчет()
    Сумма = Номенклатура.Цена*Количество;
    КонецПроцедуры //Пересчет
    И что получается:

    Если редактируешь - изменяешь, добавляешь, да просто целкнуть по цене или количеству или номенклатуре - то:
    Цена автоматический появляется, изменяется - все просто замечательно...

    Но я так же добавил в процедуру ПриОткрытии():

    Код:
    Процедура ПриОткрытии()
    
    ПриЗаписиПерепроводить(1);
    Если ПустаяСтрока(Склад)=1 тогда
    Склад=Константа.СкладПоУмолчанию;
    КонецЕсли;
    //Вот дописал при открытии
    Если Количество=0 тогда
    Сумма = Номенклатура.Цена*Количество;
    Иначе
    Сумма = Номенклатура.Цена*Количество;
    КонецЕсли;
    //но почемуто не считает
    КонецПроцедуры  
    Но вот при открытии формы почему то автоматический цену в уже заполненых формах не проставляет!!!
    Подскажите пожалуйста как это реализовать....

    Да и вот еще...
    Как прописать сообщение - например - если нет цены в справочнике номенклатура - кроме продуктов питания, остальное приходуют общими суммами, например моющие спредства оприходывали на 10 тысяч, а вот списывают по ведомости - например моющее средство фери - 5 штук, а цены на него соответственно нету...
    Что бы в самом низу выдавалась сообщение - На (наименование из номенклатора) нет цены... Ну что нибудь в этом ключе... В принципе текст придумать не проблема, главное что бы брал нужную позицию...
  17. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Зачем расчет суммы в колонке сумма??????????????
    Убрать.
  18. TopicStarter Overlay
    sapravka
    Offline

    sapravka Опытный в 1С

    Регистрация:
    24 дек 2011
    Сообщения:
    142
    Симпатии:
    0
    Баллы:
    26
    Убрал...
    Но, все равное не считает автоматический при открытии...


    Код:
    Процедура ПриОткрытии()
    
    ПриЗаписиПерепроводить(1);
    Если ПустаяСтрока(Склад)=1 тогда
    Склад=Константа.СкладПоУмолчанию;
    КонецЕсли;
    //Вот дописал при открытии
    Сумма = Номенклатура.Цена*Количество;
    //но почемуто не считает
    КонецПроцедуры
    //{{ПРОЦЕДУРА_ПЕЧАТИ(Печать)
    //Данный фрагмент построен конструктором.
    //При повторном использовании конструктора, внесенные вручную изменения будут потеряны!!!
    Процедура Печать()
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Печать");
    Таб.ВывестиСекцию("Шапка");
    Таб.Опции(0,0,0,0);
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
    Таб.ВывестиСекцию("Строка");
    КонецЦикла;
    Таб.ВывестиСекцию("Подвал");
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Печать Списание","");
    КонецПроцедуры
    //}}ПРОЦЕДУРА_ПЕЧАТИ
    
    /// Дописано
    
    //Хотя эту процедуру добавил в сумму и колличество!
    Процедура Пересчет()
    
    Сумма = Номенклатура.Цена*Количество;
    КонецПроцедуры //Пересчет
    //
  19. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код:
    Процедура ПриОткрытии()
    
    ПриЗаписиПерепроводить(1);
    Если ПустаяСтрока(Склад)=1 тогда
    Склад=Константа.СкладПоУмолчанию;
    КонецЕсли;
    //Вот дописал при открытии
    //УБРАТЬ!!!!!
    //Сумма = Номенклатура.Цена*Количество;
    
    при открытии ничего считать не нужно!
    Сумма - реквизит табличной части. Он должен отображаться сам.
  20. TopicStarter Overlay
    sapravka
    Offline

    sapravka Опытный в 1С

    Регистрация:
    24 дек 2011
    Сообщения:
    142
    Симпатии:
    0
    Баллы:
    26
    А если он не отображается при открытии уже заполненого документа?
    В новых документах все прекрасно заполняется, а вот как быть с ранее введеными документами?
    Что бы при их открытии автоматический проставлялась сумма?

Поделиться этой страницей