Версия для печати темы (https://pro1c.org.ua/index.php?s=90d8888696e86e39d74965d3255230aa&showtopic=42198)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Заполнить табличную часть документа из справочника

Автор: Светлана0000 26.11.17, 19:31

Люди добрые, подскажите пожалуйста как заполнить табличную часть документа из справочника. У меня есть справочник Блюда с табличной частью Ингредиенты. И есть документ Заказ с табличной частью Перечень блюд. Хочу чтобы в документе в табличной части при выборе какого-либо блюда из справочника Блюда заполнялась табличная часть в документ.
Вот уже что-то начала, но оно не работает.

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

&НаКлиенте
Процедура ЗаполнитьПоля(Команда)
    ЗаполнитьПоляНаСервере();
КонецПроцедуры

Автор: Bernet 27.11.17, 7:20

Светлана0000 @ Вчера, 19:31 * ,
Основная ваша ошибка в том, что вы выбираете наименования в запросах, а не ссылки. Я почти уверен что типы ваших реквизитов это ссылки на справочники, а не строковые выражения - как минимум из-за этого поля могут не заполняться. Во-вторых, тут в запросе не нужно внутреннее соединение с таб. частью заказов - тут опять же нет указания с каким именно документом вы связываетесь, оно возьмет абсолютно все заказы, достаточно как в моем примере просто параметром указать ссылку на Блюдо. Надеюсь разницу между ссылкой и строкой вы понимаете, если нет - то сначала прочитайте хоть какую-то книгу по 1С, даже того же Радченко: Пособие разработчика.

&НаСервере
Процедура ЗаполнитьПоляНаСервере()
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ РАЗРЕШЕННЫЕ
        |    БлюдаИнгредиенты.Ссылка КАК Блюдо,
        |    БлюдаИнгредиенты.Игредиент КАК Ингредиент,
        |    БлюдаИнгредиенты.Количество КАК КоличествоИнгредиентов,
        |    БлюдаИнгредиенты.ЕдиницаИзмерения
        |ИЗ
        |    Справочник.Блюда.Ингредиенты КАК БлюдаИнгредиенты
        |ГДЕ
        |    БлюдаИнгредиенты.Ссылка = &Блюдо";
        
      Запрос.УстановитьПараметр("Блюдо", Объект.Блюдо); // Объект.Блюдо - это ваш реквизит Блюдо из Заказа

      Выборка = Запрос.Выполнить().Выбрать();
      Пока Выборка.Следующий() Цикл
          
               НоваяСтрока = Объект.ПереченьБлюд.Добавить();
               // если у вас в табличной части Заказа типы ингридиентов не строки, и имена реквизитов совпадают с тем, что у вас в запросе тогда так:
               ЗаполнитьЗначенияСвойство(НоваяСтрока, Выборка);
              
               // или если имена реквизитов не совпадают тогда так:
                НоваяСтрока.ИмяВашегоИнгридиента = Выборка.Ингридиент;
                НоваяСтрока.КоличествоВашегоИнгридиента = Выборка.КоличествоИнгредиентов;
                // и т.д.
                  
      КонецЦикла;

КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьПоля(Команда)
    ЗаполнитьПоляНаСервере();
КонецПроцедуры

Автор: Светлана0000 27.11.17, 11:44

Bernet @ Сегодня, 8:20 * ,
Спасибо большое, все заработало, а вот как сделать теперь кнопку, чтобы при нажатии можно было добавить еще одно блюдо и также заполнить табличную часть ингредиенты?

Автор: Bernet 27.11.17, 14:16

Немного не понял что вы хотите. Если нужна возможность указывать несколько блюд, то сделайте просто таб. часть "Блюда"

Автор: logist 27.11.17, 15:57

Цитата(Bernet @ 27.11.17, 14:16) *
то сделайте просто таб. часть "Блюда"

Судя по запросу из первого поста ТС практически не шарит что такое программирование в 1С, а вы как человек знакомый с Общепитом и Рарусом должны догадаться что необходимо, и после того как будет сделана Просто ТЧ Блюда, понадобиться видеть какие ингредиенты в какие блюда входят по нажатию на блюдо, и т.д.. Либо тут самый просто вариант - набить ТЧ ингредиентами, тогда ТЧ Блюда не надо, нужно что-то типа "Подбора" блюд, а результатом подбора будет заполнение ингредиентами smile.gif

Автор: Bernet 27.11.17, 18:25

logist @ Сегодня, 15:57 * ,
ну у меня ещё был вариант, что это самописная конфигурация...) то что человек совсем не программировал это я понял, потому и посоветовал начать хотябы с Радченко

Автор: Светлана0000 29.11.17, 18:29

Да вы правы, я первый раз создаю конфигурацию, и многое не получается. Сначала я думала сделать ТЧ где будет написано Блюдо и из каких ингредиентов оно состоит, но у меня не получилось обратиться к Блюду как к объекту. И поэтому я сделала отдельно выбор блюда и ТЧ ингредиенты. Но необходимо, чтобы был выбор нескольких блюд. И я думала может сделать кнопку, которая будет добавлять реквизиты Блюда и ТЧ Ингредиенты. Но я не уверена что так вообще можно. Я буду вам очень благодарна если вы мне подскажите как лучше сделать.

Автор: Bernet 29.11.17, 22:40

Начнем с того, что динамически реквизиты добавить не получится. Точнее элементы на форму можно а именно "реквизиты объекта" не получится - они определяются в конфигураторе в дереве метаданных. То что вы хотите сделать усложнит вам жизнь. Можно конечно где-то хранить эти реквизиты, и каждый раз динамически создавать их на форме, но я считаю в рамках данной задачи это излишнее.
Вам достаточно просто сделать таб. часть с блюдами и все. Обращаться к таб части можно через Объект.ИмяВашейТабЧасти
Строки можно получать и обходить в цикле. или обращаться по индексу при необходимости

Автор: logist 29.11.17, 23:36

Цитата(Bernet @ 29.11.17, 22:40) *
Начнем с того, что динамически реквизиты добавить не получится.

Bernet, вы начали со слишком сложного объяснения, думаю девушка не до конца понимает что такое Объект, или вы понимаете контекст по разному wink.gif
Расскажите как сделать две ТЧ - Блюда и Ингредиенты, и как заполнять первую - подбором, и при этом добавлять данные во вторую. Это и всё что требуется от этого вопроса.

Автор: Светлана0000 29.11.17, 23:56

Bernet @ Вчера, 23:40 * ,
Скажите, а как мне тогда в том первом запросе установить параметр и условие, ссылаясь не на

объект.Блюдо
, а на табличную часть с полем Блюдо?
Когда пишу
Объект.ТЧ
, а дальше нельзя выбрать мое поле, только через
 Элементы.ТЧ.Поле
. Но через элементы не работает,а как получить объект я не могу понять.

Автор: Bernet 30.11.17, 0:26

logist @ Вчера, 23:36 * ,
Да, наверно я на умняк упал. Сори. Попробую проще объяснить.

Светлана0000 @ Вчера, 23:56 * ,
Допустим у вас есть:
1) Таб. часть "Блюда" с колонкой "Блюдо" (Тип Справочник "Блюда")
2) Таб. часть "Перечень блюд" с колонками: "Блюдо" (Справочник "Блюда"), "Ингридиент" (Справочник "Ингридиенты"), "КоличествоИнгридиентов" (Число)
3) Добавьте в командную панель таб. части "Ингридиенты" кнопку "Заполнить по блюдам". В Обработчике этой кнопки пишем следущее:

&НаКлиенте
Процедура ЗаполнитьПереченьБлюд(Команда)
    
       ЗаполнитьИнгридиентыПоБлюдамНаСервере();

КонецПроцедуры

&НаСервере
Процедура ЗаполнитьИнгридиентыПоБлюдамНаСервере()

      Запрос = Новый Запрос;
      Запрос.Текст = ""ВЫБРАТЬ РАЗРЕШЕННЫЕ
        |    БлюдаИнгредиенты.Ссылка КАК Блюдо,
        |    БлюдаИнгредиенты.Игредиент КАК Ингредиент,
        |    БлюдаИнгредиенты.Количество КАК КоличествоИнгредиентов,
        |    БлюдаИнгредиенты.ЕдиницаИзмерения
        |ИЗ
        |    Справочник.Блюда.Ингредиенты КАК БлюдаИнгредиенты
        |ГДЕ
        |    БлюдаИнгредиенты.Ссылка В (&МассивБлюд)";

       Запрос.УстановитьПараметр("МассивБлюд", Объект.Блюда.ВыгрузитьКолонку("Блюдо"));

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

КонецПроцедуры

Автор: logist 30.11.17, 4:33

Цитата(Bernet @ 30.11.17, 0:26) *
В Обработчике этой кнопки пишем следущее:

И не забудьте очистить таблицу перед заполнением

Автор: Светлана0000 30.11.17, 16:47

Bernet @ Сегодня, 1:26 * ,
Не получается. Выдает вот такую ошибку.

{Документ.Заказ.Форма.ФормаДокумента.Форма(18)}: Ошибка при вызове метода контекста (Выполнить)
    Выборка = Запрос.Выполнить().Выбрать();
по причине:
{(8, 26)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
БлюдаИнгредиенты.Ссылка <<?>>= &МассивБлюд

Автор: logist 30.11.17, 16:51

Цитата(Bernet @ 30.11.17, 0:26) *
       |    БлюдаИнгредиенты.Ссылка В (&МассивБлюд)";

Посмотрите внимательно на текст запроса.

Автор: Светлана0000 30.11.17, 20:21

logist @ Сегодня, 17:51 * ,
Спасибо огромное все заработало,но у меня возник другой вопрос. Когда я заполняю ингредиенты,мне нужно чтобы поле количество ингредиентов умножалось на количество порций,я не знаю как правильно обратиться. Вот я пишу

НоваяСтрока.КоличествоИнгредиентов = Выборка.КоличествоИнгредиентов * Объект.ПереченьБлюд.Выгрузить(,"КоличествоПорций");

А он выдает ошибку Преобразование к типу Число не может быть выполнено

Автор: Bernet 30.11.17, 20:58

У колонки "КоличествоПорций" и "КоличествоИнгредиентов " добавьте событие "ПриИзменении", в нем напишите такой код:

ТекущиеДанные = Элементы.ПереченьБлюд.ТекущиеДанные;

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

ТекущиеДанные.КоличествоИнгредиентов  = ТекущиеДанные.КоличествоИнгредиентов  * ТекущиеДанные.КоличествоПорций;

Автор: Светлана0000 30.11.17, 23:19

Bernet @ Сегодня, 21:58 * ,
А если у меня в разных они таблицах? Я сделала вкладки и в одной таблица ПереченьБлюд, а в другой ПереченьИнгредиентов

Автор: logist 01.12.17, 0:32

Цитата(Светлана0000 @ 30.11.17, 20:21) *
А он выдает ошибку Преобразование к типу Число не может быть выполнено

На будущее, лучше спросите как сделать, а не делать какую-то фигню (раз уж не разбираетесь), а потом спрашивать почему она не работает wink.gif

Цитата(Bernet @ 30.11.17, 20:58) *
У колонки "КоличествоПорций" и "КоличествоИнгредиентов " добавьте событие "ПриИзменении", в нем напишите такой код:

Та ну, после того как набили блюда и нажали кнопку - надо заполнить программно Ингредиенты, ручное изменение вообще ни к чему не привязано, т.к. при изменении количества блюд надо пересчитать все строки ингредиентов, поэтому луче весь расчет повесть на одну и ту же кнопку, и сделать в одном запросе.

Автор: Светлана0000 01.12.17, 12:32

logist @ Сегодня, 1:32 * ,
Просто у меня с реквизитами всё работает, а вот с ТЧ не получается.

Автор: Bernet 01.12.17, 13:02

Выложите конфигурацию http://pro1c.org.ua/redirect.php?http://dropmefiles.com/
И скажите как вы хотите чтобы работало, тогда перестанем тыкать пальцем в небо

Автор: Светлана0000 01.12.17, 13:28

Я вам в личные сообщения отправила

Автор: Bernet 01.12.17, 15:14

Скинул ссылку на конфу в личку

Автор: Светлана0000 03.12.17, 12:30

Не могу понять почему не работает, хочу сделать чтобы при создании блюда в ТЧ Ингредиенты в поле ЕдиницаИзмерения заполнялось из справочника Ингредиенты реквизита ЕдиницаИзмерения, то значение которое выбрала для определенного ингредиента (т.е если мука, то чтобы везде при выборе муки были кг)

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

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
        НоваяСтрока = Объект.Ингредиенты.Добавить();
        НоваяСтрока.ЕдиницаИзмерения = Выборка.ЕдиницаИзмерения;
КонецЦикла;
                  
КонецПроцедуры

Автор: logist 03.12.17, 12:57

Цитата(Светлана0000 @ 03.12.17, 12:30) *
Не могу понять почему не работает

1. Пришло время прочитать что такое Отладчик.
2. Так же надо научится описывать проблему так что бы она была понятна всем, из текущего описания не понятно что происходит сейчас.


Автор: Светлана0000 03.12.17, 14:19

logist @ Сегодня, 13:57 * ,
Я создаю ингредиент Мука и ставлю единицу измерения килограммы, затем при создании блюда я выбираю в ТЧ ингредиент мука и хочу чтобы единица измерения заполнялась автоматически кг.
Это вроде тоже самое что мне нужно было и до этого с заполнением Ингредиентов, но мне кажется я не установила какой-то параметр.

Автор: logist 03.12.17, 19:07

Цитата(logist @ 03.12.17, 12:57) *
1. Пришло время прочитать что такое Отладчик.
2. Так же надо научится описывать проблему так что бы она была понятна всем, из текущего описания не понятно что происходит сейчас.

Повторюсь, и раз уж вы решились программировать, учитесь разъясняться:
3. "У меня есть справочник такой-то, в документе имеет тип СправочниксСсылка такой-то, Я делаю то-то, и там у меня тип такой-то, а там точно такой же, но он не заполняется, отладчиком смотрела, всё корректно".
Если бы вы всё это проделали, то возможно выявили ошибку самостоятельно, а так, не видя конфигурации, мы тут включаем Вангу и пытаемся сообразить, что у вас там и почему оно не работает... Или не пытаемся, и вы ждете вашего ангела хранителя - Bernet smile.gif

Автор: Светлана0000 03.12.17, 20:27

logist @ Сегодня, 20:07 * ,
Да,я пока плохо умею объяснять, но я ведь только учусь. А Bernet мне действительно очень сильно помог,не знаю чтобы я бы делала если не Bernet. Попробую еще раз объяснить.
У меня есть справочник Ингредиенты (в нем реквизит ЕдиницаИзмерения с типом ПеречислениеСсылка). Также у меня есть справочник Блюда с ТЧ Ингредиенты (с полями Ингредиент,Количество и ЕдиницаИзмерения с типом ПеречислениеСсылка). Вот и я хочу чтобы когда я заполняю Блюда в ТЧ в поле ЕдиницаИзмерения заполнялись данные из справочника Ингредиенты (реквизит ЕдиницаИзмерения). Для этого пишу в обработчик ИнгредиентыИгредиентПриИзменении вот такой код

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

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
        НоваяСтрока = Объект.Ингредиенты.Добавить();
        НоваяСтрока.ЕдиницаИзмерения = Выборка.ЕдиницаИзмерения;
КонецЦикла;

Когда запускаю, то ничего не происходит. Когда ставлю точку останова то в цикл он как будто не заходит.

Автор: logist 03.12.17, 20:55

Цитата(Светлана0000 @ 03.12.17, 20:27) *
НоваяСтрока.ЕдиницаИзмерения

Здесь какой тип?

Цитата(Светлана0000 @ 03.12.17, 20:27) *
Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);

Что в параметре? Результат запроса пустой?

Автор: Светлана0000 03.12.17, 21:01

logist @ Сегодня, 21:55 * ,

НоваяСтрока.ЕдиницаИзмерения
тип ПеречислениеСсылка

Автор: Bernet 04.12.17, 9:23

Светлана0000 @ Вчера, 21:01 * ,
Добавьте событие "ПриИзменении" для колонки "Ингредиент" справочника "Блюда" и пропишите такой код:

&НаКлиенте
Процедура ИнгредиентыИгредиентПриИзменении(Элемент)
    
    ТекущиеДанные = Элементы.Ингредиенты.ТекущиеДанные;
    
    Если ТекущиеДанные = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    ТекущиеДанные.ЕдиницаИзмерения = ПолучитьЕдиницуИзмеренияИнгридиентаНаСервере(ТекущиеДанные.Ингредиент);
    
КонецПроцедуры

&НаСервере
функция ПолучитьЕдиницуИзмеренияИнгридиентаНаСервере(Ингредиент)
    
    Если НЕ ЗначениеЗаполнено(Ингредиент) Тогда
        Возврат Перечисления.ЕдиницаИзмерения.ПустаяСсылка();
    Иначе
        Возврат Ингредиент.ЕдиницаИзмерения;
    КонецЕсли;
    
КонецФункции


P.S. Я бы на вашем месте делал Единицы Измерения справочником, а не перечислением. Рано или поздно придете к тому, что надо будет добавить новую единицу и придется лезть в конфигуратор.

Автор: Светлана0000 04.12.17, 15:44

Bernet @ Сегодня, 10:23 * ,
Спасибо большое, я вот только не пойму почему когда я запустила первый раз все работало, а сейчас перестало, я только хотела поменять как вы сказали на справочник, но потом передумала и поставила все обратно, но почему-то теперь не работает. И где кнопка заполнение ингредиентов Единица измерения тоже не заполняется. Когда тип меняешь, а потом ставишь обратно, оно не должно разве работать опять?

Автор: Bernet 04.12.17, 15:51

Светлана0000 @ Сегодня, 15:44 * ,
Проверьте типы реквизитов и их привязку с элементами на форме, при изменении типа реквизита путь к данным может очищаться. Откройте форму, откройте свойства поля на форме и посмотрите есть ли привязка к вашему реквизиту (поле "ПутьКДанным") - если нету - проставьте

Автор: Светлана0000 04.12.17, 15:57

Bernet @ Сегодня, 16:51 * ,
ПутьКДанным везде проставлен и типы реквизитов везде ПеречислениеСсылка стоит, всё равно не работает


Автор: Bernet 04.12.17, 16:01

Везде проставлии одинаковый тип? И в Блюдах и в Ингредиентах?
P.S. Если изменили на Справочник, тогда в коде

&НаСервере
функция ПолучитьЕдиницуИзмеренияИнгридиентаНаСервере(Ингредиент)
    
    Если НЕ ЗначениеЗаполнено(Ингредиент) Тогда
        Возврат Справочники.ЕдиницаИзмерения.ПустаяСсылка();
    Иначе
        Возврат Ингредиент.ЕдиницаИзмерения;
    КонецЕсли;
    
КонецФункции

вместо этой строки
Цитата
Возврат Перечисления.ЕдиницаИзмерения.ПустаяСсылка();

должно быть
Цитата
Возврат Справочники.ЕдиницаИзмерения.ПустаяСсылка();


Автор: Светлана0000 04.12.17, 16:05

Bernet @ Сегодня, 17:01 * ,
Ну да, а что не надо было?

Bernet @ Сегодня, 17:01 * ,
Нет я перечисления оставила.Поэтому и не пойму почему не работает.

Автор: Bernet 04.12.17, 16:08

Должно работать, хз.
При смене типа реквизиты очищаются ещё... т.е. надо заново проставить единицы измерения у ингредиентов...


Автор: Светлана0000 04.12.17, 16:14

Bernet @ Сегодня, 17:08 * ,
Да все заработало,спасибо вам огромное))))

Автор: Vofka 04.12.17, 16:45

Цитата(Светлана0000 @ 04.12.17, 16:14) *
Да все заработало,спасибо вам огромное))))

Для спасибо есть специальная кнопочка.

Автор: logist 05.12.17, 0:13

Цитата(Bernet @ 04.12.17, 9:23) *
    Если ТекущиеДанные = Неопределено Тогда
        Возврат;
    КонецЕсли;

Bernet, какая вероятность того что условие сработает в событии ПриИзменении?

Автор: Bernet 05.12.17, 0:49

logist @ Сегодня, 0:13 * ,
Согласен, в данном контексте нулевая, можно было обойтись без этих трех строчек. Просто привычка ставить проверки чтобы не наткнуться на "Поле объекта не обнаружено"....
тут можно было их не писать, я просто спешил ответить

Автор: Светлана0000 05.12.17, 13:53

Vofka @ Вчера, 17:45 * ,
Я знаю что есть специальная кнопка, но мне кажется все равно приятнее когда человек это говорит,а не просто тыкнул на кнопку.

Автор: Petre 05.12.17, 13:58

Светлана0000 @ Сегодня, 13:53 * ,

Это не так. Каждое сообщение "поднимает" тему и заставляет пользователя открывать и смотреть. А смотреть, фактически, не на что. Это занимает время пользователя, который может провести его для оказания помощи другим.

Автор: Vofka 05.12.17, 14:10

Цитата(Светлана0000 @ 05.12.17, 13:53) *
Я знаю что есть специальная кнопка, но мне кажется все равно приятнее когда человек это говорит,а не просто тыкнул на кнопку.

Возможно. Но при этом если ещё и кнопочку нажать, то становится ещё приятнее smile.gif

Автор: Светлана0000 15.03.18, 14:31

У меня есть документ Заказ, в нем две вкладки ТЧ Блюда и ТЧ Ингредиенты, сначала я заполняю блюда( наименование, кол-во порций и т.д), далее нажимаю на кнопку заполнить ингредиенты и во вкладке Ингредиенты с учетом порций заполняются ингредиенты, далее перед проведением проходит проверка на наличие этих ингредиентов на складе, и если не хватает то выводится сообщение что такого-то ингредиента не хватает. А как мне сделать чтобы выводилось еще и блюдо в какое входит этот ингредиент???? Скорее всего это нужно что-то в запросе изменить, но у меня не получается. Помогите пожалуйста.

 i 

Не надо увеличивать размер шрифта без надобности
 


Светлана0000 @ Сегодня, 15:20 * ,
Вот проверка
Процедура ОбработкаПроведения(Отказ, Режим)
    // проверяем остатки
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |     Ингредиенты.Ингредиент КАК Ингредиент,
    |     СУММА(Ингредиенты.КоличествоИнгредиентов) КАК КоличествоИнгредиентов
    |ПОМЕСТИТЬ ВтИнгридиенты
    |ИЗ
    |    Документ.Заказ.ПереченьИнгредиентов КАК Ингредиенты
    |ГДЕ
    |    Ингредиенты.Ссылка = &ТекущийДокумент
    |СГРУППИРОВАТЬ ПО
    |    Ингредиенты.Ингредиент
    |;
    |///////////////////////////////////////////////
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |      ВтИнгридиенты.Ингредиент КАК Товар,
    |      ВтИнгридиенты.КоличествоИнгредиентов КАК Количество,
    |    ЕСТЬNULL(ОстаткиТоваров.КоличествоОстаток, 0) КАК КоличествоОстаток
    |ИЗ
    |     ВтИнгридиенты КАК ВтИнгридиенты     
    |    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(&Период, Товар В (ВЫБРАТЬ ВтИнгридиенты.Ингредиент ИЗ ВтИнгридиенты КАК ВтИнгридиенты )) КАК ОстаткиТоваров
    |        ПО ВтИнгридиенты.Ингредиент = ОстаткиТоваров.Товар
    |";
    
    Запрос.УстановитьПараметр("Период", Дата);
    Запрос.УстановитьПараметр("ТекущийДокумент", Ссылка);
    
    Движения.ОстаткиТоваров.Записывать = Истина;
    
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        
        Если Выборка.Количество > Выборка.КоличествоОстаток Тогда
        
            Сообщить("Недостаточно товара - "+Выборка.Товар+", необходимо - "+Выборка.Количество+", в наличии - "+Выборка.КоличествоОстаток );
            
            Отказ = Истина;
            Продолжить;    
        КонецЕсли;
        
        Движение = Движения.ОстаткиТоваров.ДобавитьРасход();
        ЗаполнитьЗначенияСвойств(Движение, Выборка);
        Движение.Период = Дата;
        Движение.Регистратор = Ссылка;
                
    КонецЦикла;
    
    
КонецПроцедуры

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua