Общие модули. Создать Уведомление "Данные не заполнены".
Наименование организации должно быть не заполнено.

Конфигурация пр кн мыши – открыть модуль приложения –
пишем код:
Процедура ПриНачалеРаботыСистемы()
ПроверкаДанныхОрганизацииАсинх();

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

АСИНХ Процедура ПроверкаДанныхОрганизацииАсинх()

ДанныеЗаполнены = РаботаСКонстантамиВызовСервера.ДанныеОрганизацииЗаполнены();

//Если ДанныеЗаполнены = Ложь Тогда
Если Не ДанныеЗаполнены Тогда

ЖДАТЬ ПредупреждениеАсинх("Заполните данные организации!", 5, "Данные не заполнены!");
ОткрытьФорму("ОбщаяФорма.ДанныеОрганизации");

КонецЕсли;
КонецПроцедуры

Конфигурация – Общие – Общие модули – добавить
имя: РаботаСКонстантамиВызовСервера
Вызов сервера: поставить галочку
В Общий модуль пишем код:
Функция ДанныеОрганизацииЗаполнены() Экспорт

//Чтение значений констант
ГенеральныйДиректор_Значение = Константы.ГенеральныйДиректор.Получить();
ИНН_Значение = Константы.ИНН_Организации.Получить();
НазваниеОрганизации_Значение = Константы.НазваниеОрганизации.Получить();

//Проверяем значения констант на заполненность
НазваниеОрганизации_Заполнено = НЕ ПустаяСтрока(НазваниеОрганизации_Значение);
ИНН_Заполнено = (ИНН_Значение <> 0);
ГенеральныйДиректор_Заполнено = (НазваниеОрганизации_Значение <> Справочники.Сотрудники.ПустаяСсылка());

//Формируем ответ функции
Возврат НазваниеОрганизации_Заполнено И ИНН_Заполнено И ГенеральныйДиректор_Заполнено;

КонецФункции


Общие модули. Создать Уведомление "Данные не заполнены".
Универсальные коллекции значений УКЗ
– это набор данных, предназначенные для хранения временных наборов данных в течение сеанса работы пользователя. Они служат для вспомогательного сбора, группировки, анализа и обработки данных. Это Массив, Структура, Таблица значений, Дерево значений, Список значений, Соответствие
Коллекции значений – подготовка                                               
Где посмотреть, где и какая универсальная коллекция доступна на сервере или на клиенте:
Справка – содержание справки – встроенный язык – универсальные значения колекций  
Мы должны создать 2 общих модуля. 1 будет работать на клиенте, а другой на сервере
- Добавим общий модуль имя: УКЗ_Клиент
Убрать галочку сервер - поставим галочку клиент – закрать
- Копируем созданный модуль – свойства
Имя: УКЗ – ставим галочку сервер – вызов сервера
галочку клиент убрать


Универсальные коллекции значений УКЗ
Коллекции значений – массивы                                      
Массив – это Универсальная коллекция значений с числовыми идентификаторами строк (Индекс)
Открываем Общий модуль УКЗ_Клиент – создаем процедуру:
Проц ctrl + Q  - Процедура – Имя процедуры: СформироватьМассив – ок
Появилась процедура, что бы мы могли вызывать данную процедуру из других модулей пишем рядом Экспорт 
Создаем переменную с типом массив
СотрудникиКомпании = Новый Массив;
Сообщить (СотрудникиКомпании);
Что бы вызвать эту процедуру нам надо прописать её вызов в модуле приложений, поэтому:
Нажим прав кн мыши по конфигурации и открываем модуль приложения
Разворачиваем процедуру ПриНачалеРаботыСистемы
УКЗ_Клиент. Ctrl + пробел – выбираем УКЗ_Клиент.СформироватьМассив ();
Обновляем и в пользоват режиме видим сообщение: Массив
Если хотим получить информацию более детальную получить, надо уточнить, что мы конкретно хотим. Нам на помощь приходят методы. У массива множество методов и с ними можно ознакомится с помощью синтаксис помощника.
Нажать прав кн мыши на слово Массив – поиск в синтакс-помощнике – выбираем УКЗ/Массив – Показать
Мы хотим отследить сколько у нас ячеек в Массиве.
Через точку вызываем Количество
Сообщить (СотрудникиКомпании.Количество () );
И Добавляем Фамилии сотрудников рис 5 Вграница – когда массив пустой, то возвращается значение -1
Для начала вызываем просто сообщение с методом Вграница
Сообщить (СотрудникиКомпании.Вграница ());
Выводится 2 сообщения
а хочется в 1 м сообщении и ,что бы текст выводился красивый
И еще есть альтернативный способ указания многострочной строки прямо в алгоритме. Для того, что бы лучше воспринималось вынесем наш шаблон в отдельную переменную и назовём ТекстШаблона

Коллекции значений – массивы
Цикл для работы с коллекциями значений – Шаблоны - Для каждого и со счётчиком

1) Шаблон со счётчиком
Для ctrl Q – выбрать шаблон Для – счётчик назовём Индекс – Ограничение писать не будем:
Процедура СформироватьМассив() Экспорт

ИмяСотрудника = "Платформов";

СотрудникиКомпании = Новый Массив;

СотрудникиКомпании.Добавить("Платформов");
СотрудникиКомпании.Добавить("Механизмов");
СотрудникиКомпании.Добавить("Вилкин");

Для Индекс = 0 По СотрудникиКомпании.ВГраница() Цикл

ЗначениеЯчейки = СотрудникиКомпании.Получить(Индекс);
СтрокаВывода = СтрШаблон("Ячейка с номером [%1] имеет значение ""%2""", Индекс, ЗначениеЯчейки);

Сообщить(СтрокаВывода);

КонецЦикла;

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

2) Шаблон цикл для универсальных коллекций значений:
Цикл для универсальных коллекций значений – сразу перебирает сами значения без идентификатора, поэтому будет вывод только самого значения
Для ctrl Q – выбрать шаблон Для каждого – переменная назовём ИмяСотрудника – ок – коллекция просто ок:

Процедура СформироватьМассив() Экспорт

ИмяСотрудника = "Платформов";

СотрудникиКомпании = Новый Массив;

СотрудникиКомпании.Добавить("Платформов");
СотрудникиКомпании.Добавить("Механизмов");
СотрудникиКомпании.Добавить("Вилкин");

Для каждого ИмяСотрудника Из СотрудникиКомпании Цикл
СтрокаВывода = СтрШаблон("Ячейка со значением ""%1""", ИмяСотрудника);

Сообщить(СтрокаВывода);
КонецЦикла;

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


Цикл для работы с коллекциями значений – Шаблоны - Для каждого и со счётчиком
Коллекции значений – структуры                                       
  • Общие – Общие модули – УКЗ_Клиент – Проц ctrl Q – выбрать процедура – Имя процедуры СформироватьСтруктуру – ок – и напишем Экспорт
Открыть модуль приложений рис 1 и напишем:
УКЗ_Клиент.СформироватьСтруктуру ());

  • Попробуем получить значение нашей структуры, получим количество ячеек в нашей структуре рис 2
Что бы получить значение кокой либо ячейки есть несколько способов. рис 3, 4,
  • Мы хотим вывести всю информацию из нашей структуры сделаем это с помощью цикла Для каждого рис 5
Пишем Для ctrl Q – Для каждого – переменная не заполняем – ок – коллекцию не заполняем – ок
  • Ещё один способ можно прям в начале в описанииотрудника добавить Отчество и Оклад рис 6
  • Мы создадим массив, внутри которого будут ячейки. В качестве значений этих ячеек мы будем создавать структуры рис 7
Коллекции значений – список значений
Выведем сообщение Какой сегодня день?
Вывод окна - вопрос                        
Выведем сообщение Какой сегодня день?  рис 1
Общие – Общий модуль - УКЗ_Клиент
Проц ctrl Q – выбрать Процедуру – Имя Процедуры: Выбрать день недели напишем Экспорт – пишем СписокДней – ВыбранныйДень и слово ЖДАТЬ и вначале допишем АСИНХ
После нам надо проверить пользователь выбрал что-то или начал отмену для этого:
Если ctrl Q – выбрать Если – условие пропустить
После если пишем Выбр ctrl пробел – ВыбранныйДень рис 2
  • Далее зайти в модуль приложения и указать вызов
УКЗ_Клиент.ВыбратьДеньНеделиАсинх () ;   рис 3 

  • Появилось сообщение рис 4
Сам КОД:
АСИНХ Процедура ВыбратьДеньНеделиАсинх() Экспорт

СписокДней = Новый СписокЗначений;

СписокДней. Добавить (1, "Понедельник");
СписокДней. Добавить (2, "Вторник");
СписокДней. Добавить (3, "Среда");
СписокДней. Добавить (4, "Четверг");
СписокДней. Добавить (5, "Пятница") ;
СписокДней. Добавить (6, "Суббота");
СписокДней. Добавить (7, "Воскресенье");

ВыбранныйДень = ЖДАТЬ СписокДней.ВыбратьЭлементАсинх("Какой сегодня день?");

Если ВыбранныйДень <> Неопределено Тогда
Сообщить ("Сегодня - " + ВыбранныйДень);
КонецЕсли;

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


  •  Вызов новой процедуры. Это окно называется вопросом
Общие – общие модули – УКЗ_Клиент – рис 5
Проц ctrl Q Имя процедуры: ЗадатьВопросАсинх
Перед Процедура пишем Асинх и пишем Экспорт – пишем КнопкиДиалога
Далее нужно выполнить разные действия, смотря какое действие выбрал пользователь используем условие Если
Если ctrl Q – ЕслиИначе –ок - условие пропустить – ок
После Если пишем Ответ = 1
Заверш ctrl пробел – выбрать ЗавершитьРаботуСистемы (Ложь) ;
ИначеЕсли Ответ = 3 ИЛИ Ответ = КодВозвратаДиалога.Таймаут Тогда
ПредупреждениеАсинх

  • Вызываем процедуру из модуля приложений в конфигураторе пр кн мыши пишем УКЗ_Клиент.ЗадатьВопросАсинх () ; рис 6
Видим рещультат в пользоват режиме рис 7

сам КОД:
АСИНХ Процедура ЗадатьВопросАсинх() Экспорт

КнопкиДиалога = Новый СписокЗначений;
КнопкиДиалога.Добавить(1, "Закрыть программу");
КнопкиДиалога.Добавить(2, "Ничего не делать");
КнопкиДиалога.Добавить(3, "Сказать привет");

Ответ = ЖДАТЬ ВопросАсинх("Тестируем список значений в качестве кнопок", КнопкиДиалога, 5, 2, "Выберите действие", 3);

Если Ответ = 1 Тогда
ЗавершитьРаботуСистемы(Ложь);
ИначеЕсли Ответ = 3 ИЛИ Ответ = КодВозвратаДиалога.Таймаут Тогда
ПредупреждениеАсинх("Привет, пользователь!", 5, "Приветствие");
КонецЕсли;

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



Коллекции значений – таблица значений                                  
Общие – общие модули – УКЗ_ВызовСервера – Проц ctrl Q – Процедура – Имя процедуры: СформироватьТаблицуЗначений – рядом напишем экспорт
Пишем код: рис 1

  • Далее перейти в модуль приложения в конфигураторе пр кн мыши в процедуре ПриНачалеРаботыСистемы напишем обращение:
УКЗ_ВызовСервера.СформироватьТаблицуЗначений () ; рис 2

Сам КОД:

Процедура СформироватьТаблицуЗначений() Экспорт

ТаблицаТоваров = Новый ТаблицаЗначений;

//Заполняем колонок таблицы
ТаблицаТоваров.Колонки.Добавить("Товар");
ТаблицаТоваров.Колонки.Добавить("Цена");
ТаблицаТоваров.Колонки.Добавить("Количество");
ТаблицаТоваров.Колонки.Добавить("Сумма");

//Заполняем таблицу данными
НоваяСтрока = ТаблицаТоваров.Добавить();

НоваяСтрока.Товар = "Чайник";
НоваяСтрока.Цена = 100;
НоваяСтрока.Количество = 2;
НоваяСтрока.Сумма = НоваяСтрока.Цена * НоваяСтрока.Количество;

//Добавляем вторую строчку
НоваяСтрока = ТаблицаТоваров.Добавить();

НоваяСтрока.Товар = "Ложка";
НоваяСтрока.Цена = 20;
НоваяСтрока.Количество = 3;
НоваяСтрока.Сумма = НоваяСтрока.Цена * НоваяСтрока.Количество;;

//Добавляем третью строчку
НоваяСтрока = ТаблицаТоваров.Добавить();

НоваяСтрока.Товар = "Вилка";
НоваяСтрока.Цена = 19;
НоваяСтрока.Количество = 3;
НоваяСтрока.Сумма = НоваяСтрока.Цена * НоваяСтрока.Количество;

Сообщить("Итоговая сумма заказа = " + ТаблицаТоваров.Итог("Сумма"));

//Выведем всю информацию таблицы построчно
Для каждого СтрокаТовара Из ТаблицаТоваров Цикл

СтрокаВывода = СтрШаблон("Товар ""%1"" в количестве %2шт. на сумму %3 руб.", СтрокаТовара.Товар, СтрокаТовара.Количество, СтрокаТовара.Сумма);
Сообщить(СтрокаВывода);

КонецЦикла;

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

 Объектная и табличная модели доступа к данным
ВидНоменклатуры_ОдиночныйРежим
ВидНоменклатуры_МножественныйРежим  
·      В первом примере происходит создание нового элемента справочника сотрудники и заполняются 3 реквизита Фамилия, Имя и Отчество
·      Во втором случае происходит взаимодействие с документом Заказ клиента, производится поиск конкретного документа по его номеру, заполняется дата и реквизит покупателя, Проведение, запись документа рис 1

Практика
Справочники – Номенклатура – пр кн м по Команды – добавить –
1)     Имя: ИзменитьВидНоменклатуры_ОдиночныйРежим (в синониме (одиночный режим)) – группа: … Командная панель формы. Важное – ок
Тип параметра команды - … СправочникСсылка – Номенклатура галочку поставить
Режим использования параметра: Одиночный
Изменяет данные: поставить галочку – закрыть Свойства
В Процедуре меняем ПараметрКоманды на НоменклатураСсылка рис 2

·      Для начала нужно определить дерективу компеляции на сервере, то есть должны поставить знак, что эта функция будет работать на сервере
Дирек ctrl Q выбрать на сервере
Функ ctrl Q – выбрать Функция – Имя функции: ПолучитьСписокВидовНоменклатуры - ок –
возвращаемся на клиенте и пишем перед процедурой АСИНХ
·      Если мы говорим о проверки, то это будет блок условие
Если ctrl Q – выбрать Если
·      Определим ещё одну процедуру на сервере. Мы работаем с базой данных. И когда речь идёт об объектном взаимодействии данных, то не может быть никакого клиента поэтому:
Пишем Дирек ctrl Q – выбрать на Сервере
Пишем Проц ctrl Q – выбрать Процедура- имя процедуры: ИзменитьВидНоменклатуры – ок 
  • Обновляем - пользовательском режиме в Номенклатуре видим кнопку Изменить вид номенклатуры (одиночный режим) рис 9  -нажим на эту кнопку и открывается список значений Товар и услуга – выбираем услуга должен был измениться Вид номенклатуры, но не изменилось
Нажимаем F 5, чтобы изменить список рис 4

Изменить ВидНоменклатуры_ОдиночныйРежим сам КОД: рис 3, 4
&НаКлиенте
АСИНХ Процедура ОбработкаКоманды(НоменклатураСсылка, ПараметрыВыполненияКоманды)

СписокВариантов = ПолучитьСписокВидовНоменклатуры();
ВыбранныйВид = ЖДАТЬ СписокВариантов.ВыбратьЭлементАсинх("Выберите вид номенклатуры");

Если ВыбранныйВид <> Неопределено Тогда

ИзменитьВидНоменклатуры(НоменклатураСсылка, ВыбранныйВид.Значение);

КонецЕсли;

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

&НаСервере
Функция ПолучитьСписокВидовНоменклатуры()

Список = Новый СписокЗначений;

Список.Добавить(Перечисления.ВидыНоменклатуры.Товар);
Список.Добавить(Перечисления.ВидыНоменклатуры.Услуга);

Возврат Список;

КонецФункции

&НаСервере
Процедура ИзменитьВидНоменклатуры(НоменклатураСсылка, ВыбранныйВид)

НоменклатураОбъект = НоменклатураСсылка.ПолучитьОбъект();
НоменклатураОбъект.ВидНоменклатуры = ВыбранныйВид;
НоменклатураОбъект.Записать();

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


Изменить ВидНоменклатуры_МножественныйРежим сам КОД: рис 5

В Конфигураторе кликаем по нашей команде ИзменитьВидНоменклатуры_ОдиночныйРежим – открывается наш модуль
В Процедуре НоменклатураСсылка меняем на МассивСсылок, так же меняем в команде Если и в процедуре на (Сервере ИзменитьВидНоменклатуры)
И теперь нужно обработать весь этот массив следующим образом
Пишем Для ctrl Q – выбрать Для каждого – ок – Переменная пропустить - ок
В пользоват режиме выбираем Торговый учёт – Номенклатура – Товары – Чайники – нажмем на 1 чайник и на кнопку изменить вид номенклатуры (множественный режим) выбираем Услуга – справа ещё – обновить либо F 5

сам КОД

&НаКлиенте
АСИНХ Процедура ОбработкаКоманды(МассивСсылок, ПараметрыВыполненияКоманды)

СписокВариантов = ПолучитьСписокВидовНоменклатуры();
ВыбранныйВид = ЖДАТЬ СписокВариантов.ВыбратьЭлементАсинх("Выберите вид номенклатуры");

Если ВыбранныйВид <> Неопределено Тогда

ИзменитьВидНоменклатуры(МассивСсылок, ВыбранныйВид.Значение);

КонецЕсли;

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

&НаСервере
Функция ПолучитьСписокВидовНоменклатуры()

Список = Новый СписокЗначений;

Список.Добавить(Перечисления.ВидыНоменклатуры.Товар);
Список.Добавить(Перечисления.ВидыНоменклатуры.Услуга);

Возврат Список;

КонецФункции

&НаСервере
Процедура ИзменитьВидНоменклатуры(МассивСсылок, ВыбранныйВид)

Для каждого НоменклатураСсылка Из МассивСсылок Цикл

НоменклатураОбъект = НоменклатураСсылка.ПолучитьОбъект();
НоменклатураОбъект.ВидНоменклатуры = ВыбранныйВид;
НоменклатураОбъект.Записать();


КонецЦикла;

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


 Отладка
С единичным товаром проблем нет при нажатии изменить вид номенклатуры, а когда над изменить группы в справочнике появляется ошибка рис 1
Пользователь может сформировать отчёт об ошибки подробный текст обшибки и выслать разработчику.
Разработчик запускает отладку:
Отладка – начать отладку – запускается пользоват режим – Торговый учёт – номенклатура – товары – выбираем группу – нажимаем изменить вид номенклатуры – товары и появляется ошибка – подробно – появляется развёрнутый отчёт - нажим кнопку конфигуратор – открывается модуль нашей команды.
И видим в какой строке ошибка рис 2
Далее нажимаем отладкаостановка по ошибке и поставить галочку останавливаться по ошибке – ок
Возвращаемся в пользоват режим нажать на кнопку изменить вид номенклатуры (одиночный режим) – товары и появляется ошибка рис 3
Появилась стрелочка с лева это и есть наша отладка. Прав кноп мыши нажим по ВыбранныйВид рис 4
Вычислить выражение это наше значение. – закрыть
Нажим на НоменклатураСсылка- вычислить выражение – и видим, что есть уже свойства дополнительные
Копируем выражение НоменклатураСсылкаЭтаГруппа рис 6
И прямо в отладке писать условие:
Если ctrl Q – выбрать Если и вставляем скопированное выражение  НоменклатураСсылкаЭтаГруппа
Перетаскиваем алгоритм в блок условие и дописываем = Ложь рис 7
Нажим отладка – завершить отладку – обновляем конфигурацию ещё раз запускаем отладку – Торговый учёт – Номенклатура – Товары – группа чайники – нажимаем кнопку изменить вид номенклатуры – выбираем товары – и ошибка не выскакивает и теперь тоже самое надо проделать с кнопкой изменить вид номенклатуры (множественный режим)
Регистры сведений - цены номенклатуры                                
Задача от заказчика: доработать функционал программы следующим образом, чтобы в базе была возможность фиксации цен номенклатурных позиций. Причём цены должны хранится с периодическим форматом. Но сначала попробуем хранить информацию в базе, то есть в формате номенклатура и цена.
Для хранения статичных данных, которые не меняются с каким то периодом или же для хранения каких либо доп сведений используется специальная таблица
Регистры сведений (примеры график дней, оклады сотрудников, цены номенклатуры
Регистр сведений НЕперодический
Регистр сведений + добавить – имя: ЦеныНоменклатуры
Представление записи: Цена номенклатуры
Подсистемы: поставить галочку Торговый учёт
Данные: добавить Измерениеимя: Номенклатура –
Тип: … выбрать СправочникСсылка – Номенклатура – ок
Ресурсы – добавить- имя: Цена –
Тип: … выбрать Определяемый тип – Денежные средства – ок – обновить
Открываем пользоват режим – Торговый учёт –
регистр сведений хранится в Цены номенклатуры
Регистр сведений – Данные – Номенклатура – Основные
Ведущее – отвечает за то, что запись в регистре будет подчинена объектам записываемым в данном измерении. Это означает, что когда мы будем привязывать цену номенклатуры конкретному товару, то если этот товар мы будем удалять, то все записи будут удалены
Основной отбор – позволяет строить отбор по этому измерению
Запрет незаполненных значений – если колонка цена будет заполнена, а наименование товар нет, то будет не понятно, поэтому ставим галочку.
Ставим все галочки – обновляем – переходим в пользовательский режим
Теперь - Торговый учёт – Номенклатура – и видим ссылку цены номенклатуры
Нажимаем на чайник разящий. Можем создать и написать новую цену, но мы пока не можем, потому что выскакивает ошибка
Регистры сведений - цены номенклатуры (периодичность) (часть 2)                          
Что бы убрать ошибку нам надо регистр сведений видоизменить, чтобы фиксировать цену в динамике. В этом нам поможет регистр сведений  Периодический
Регистр сведений – ЦеныНоменклатуры – Периодичность: в пределах месяца
Данные – Стандартные реквизиты и видим, что стал активен период. Обновляем
  • В пользоват режиме – Торговый учёт – Цены номенклатуры – заходим в товар и видим, что можно добавить период. Период проставляется всегда на начало месяца
Потом заходим в Торговый учёт – Номенклатура – заходим в товар разящий – создать пишем новую цену и появляется с новым периодом новая цена
  • Когда заходим внутрь заказы клиентов, мы хотим, что бы при изменении поле товар у меня автоматически подтягивалась цена из регистра сведений
Конфигуратор – Регистры сведений – ЦеныНоменклатуры – Прочее – модуль менеджера
Пишем Функ ctrl Q – Функции – имя процедуры: ПолучитьАктуальнуюЦену – ок пишем Экспорт.          В скобки пишем (Номенклатура, ПериодОтбора)
Мы можем создать комментарии для параметров этой функции за это отвечает Рефакторинг. Нажимаем прав кн мыши по ПолучитьАктуальнуюЦену – Рефакторинг – Создать описание функции и описываем комментарии
Пишем КОД: рис 1

// Функция - Получить актуальную цену
//
// Параметры:
// Номенклатура - СправочникСсылка.Номенклатура
// ПериодОтбора - Дата
//
// Возвращаемое значение:
// ЦенаНоменклатуры - Число
//
Функция ПолучитьАктуальнуюЦену(Номенклатура, ПериодОтбора) Экспорт

ЦенаНоменклатуры = 0;

Отбор = Новый Структура("Номенклатура", Номенклатура);

ТаблицаЦен = СрезПоследних(ПериодОтбора, Отбор);

Если ТаблицаЦен.Количество() > 0 Тогда

ЦенаНоменклатуры = ТаблицаЦен.Итог("Цена");;

КонецЕсли;

Возврат ЦенаНоменклатуры;

КонецФункции


Все окна закрываем модуль и регистр сведений
Нас интересует установка актуальной цены, когда пользователь выбирает товар. Надо прописать алгоритм при событии, когда меняется значение в колонке товар
Документы – ЗаказыКлиента – Формы – ФормаДокумента – В левой колонке Форма – ГруппаТовары – Товары – пр кн мыши по ТоварыТовар – События – ПриИзменении – Создать на клиенте – ок – рис 1, 2
Перетаскиваем процедуру в область ОбработчикиСобытийЭлементовФормы рис 3    
 Пишем код рис 4

#Область ОбработчикиСобытийЭлементовФормы

&НаКлиенте
Процедура ТоварыТоварПриИзменении(Элемент)

СтрокаРасчета = Элементы.Товары.ТекущиеДанные;
СтрокаРасчета.Цена = ПолучитьАктуальнуюЦенуНоменклатуры(СтрокаРасчета.Товар, Объект.Дата);

РасчетСтрокиТоваров();

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

&НаКлиенте
Процедура УслугиУслугаПриИзменении(Элемент)
СтрокаРасчета = Элементы.Услуги.ТекущиеДанные;
СтрокаРасчета.Сумма = ПолучитьАктуальнуюЦенуНоменклатуры(СтрокаРасчета.Услуга, Объект.Дата);

РасчетСтрокиТоваров();
КонецПроцедуры

#КонецОбласти


#Область СлужебныеПроцедурыИФункции

&НаСервереБезКонтекста
Функция ПолучитьАктуальнуюЦенуНоменклатуры(Номенклатура, ПериодОтбора)

Возврат РегистрыСведений.ЦеныНоменклатуры.ПолучитьАктуальнуюЦену(Номенклатура, ПериодОтбора);

КонецФункции

#КонецОбласти

Тоже самое сделаем для Табличной части услуги
Документы – ЗаказыКлиента – Формы – ФормаДокумента – В левой колонке Форма – ГруппаУслуги – Услуги – УслугиУслуга пр к мыши – События – ПриИзменении - СоздатьНаКлиенте –
Перетаскиваем процедуру в область ОбработчикиСобытийЭлементовФормы код уже прописан выше

Обновляем запускаем пользоват режим
Открываем Торговый учёт – Номенклатура – Услуги – Доставка –
Цены номенклатуры – создать – цена 890 руб – записать
Торговый учёт – Заказы клиентов – открываем февральский документ – Услуги – заново прописываем доставка и сумма обновляется
У нас есть регистр сведений  - Цены номенклатуры. Надо поместить цены номенклатуры в новую группу команд, которую назовём периодические данные
Конфигурация – общие – Группа команд + добавить –
имя: ПериодическиеДанные
Категория: Панель новигации
Общие – Подсистемы - Торговый учёт – Командный интерфейс
В панели Командный интерфейс. Обычное -Цены номенклатуры рис 9. перетащим в Панель новигации. Периодические данные нажать пр кн мыши – востановить автоматич порядок – ок рис 10
Запускаем пользоват режим появилась отдельная группа Периодические данные

Язык запросов - знакомство с консолью запросов. Объединения и соединения
Ø  Если хотим получить все поля из базы данных для этого ставим * (означает всё)
Ø  Отбор ставится с помощью слова «ГДЕ»
Ø  Теперь хотим, чтобы вместо наименование было написано название, вместо код – артикул. Для этого существует специальное слово как
Ø  Рассмотрим сортировку данных. Для сортировки используется ключевое слово упорядочить по и указываем название поля. Сортировка происходит по возрастанию.
По возрастанию
Ø  Запрос с помощью конструктора. Работаем с соединением. Соединение – это когда информация присоединяется с правой стороны
В тексте запроса пр кн мыши – конструктор запроса
Из База данных нажим на Номенклатура – в таблице раскрываем номенклатуру и перетаскиваем код и наименование
Теперь надо указать название псевдонимом переходим
на вкладку Объединение/Псевдонимы – в Имя поля: вместо код пишем Артикул, вместо наименование - Название
Далее переходим на вкладку порядок и сортируем по полю название – сортировка по убыванию - ок
Сформировался запрос: нажимаем выполнить
Ø  Поработаем с объединением.
Уберем всю информацию с текста запроса и пр кн м зайдём в конструктор запросов
Нам нужно, что бы у нас была одинаковая информация в двух колонках код и представление
Развернём Справочники – Договоры – разворачиваем код и представление из База данных перенесём в таблицу
·       Далее переходим во вкладку объединение/ псевдонимы и слева нажим на плюсик это добавление ещё одного запроса
·       И справа внизу появился выбор редактируемого оператора: запрос 1 и 2 
·       Переходим на запрос 2:
·       Раскрываем справочники – выбираем контрагенты – в таблице разворачиваем контрагенты и перетаскиваем код и представление
·       Переходим на вкладку объединение/псевдонимы и мы видим 2 запроса – ок -
·       Выполнить и видим, что первые 2 строчки относятся к договору, а 2 последние к контрагенту.
·       Таким образом мы можем присоединять информацию 2х разных таблиц друг другу снизу с помощью объединения
·       А соединение нужно, чтобы добавить колонки из другой таблицы
Язык запросов - группировка, итоги, параметры виртуальной таблицы
Ознакомимся со вкладкой группировка в конструкторе запросов
Нажим по пр кн мыши по тексту запросов и заходим в конструктор запроса –
В базе данных – разворачиваем РегистрыНакопленияПродажи перетаскиваем в колонку таблицы – разворачиваем Продажи – и перетаскиваем в колонку Поля – Номенклатура – Количество – Сумма – Выполнить
Видим первые 2 строчки товар одинаковый. Разящий. Рис 1
·       Надо объединить две верхние колонки, чтобы сумма объединилась для этого:
Вернёмся в конструктор запроса – зайдём на вкладку Группировка
Группировать будем по номенклатуре. Перетаскиваем номенклатуру в поле группировки,
А продажи, количество и Продажи сумма перетаскиваем в Суммируемое поле – ок рис 2
Нажим на кнопку ВЫПОЛНИТЬ и видим, что товар, количество и сумма объединилась рис 3
·       Как узнать максимальный объем продаж
Заходим в конструктор запроса – нажимаем на СУММА (продажи, количество) и выбираем МАКСИМУМ (продажи, количество)
Нажимаем на СУММА (продажи, сумма) и выбираем МАКСИМУМ (продажи, сумма) – ок – выполнить рис 4
·       Рассмотрим другой вариант группировки Итоги
Зайдем в конструктор запроса – из поля – Номенклатуру перетащим в колонку: Группировочное поле – Сумма и Количество перетащим в итоговое поле ок рис 5
сформировать и видим результат рис 6
Ø  С помощью механизмов запроса вы сможете строить такие вложенные конструкции для обработки больших данных, где есть иерархия. Рассмотрим пример:
Зайдем в конструктор запроса в колонке ТАБЛИЦЫ удалим ПРОДАЖИ – перетащим в колонку ТАБЛИЦЫ НОМЕНКЛАТУРУ развернём – перетащим в колонку ПОЛЕ – КОД и НОИМЕНОВАНИЕ – переходим на вкладку ИТОГИ
Разворачиваем ВСЕ ПОЛЯ – ссылку перетаскиваем – в колонку группировочное поле – нажимаем в тип итогов на ЭЛЕМЕНТЫ и выбираем ТОЛЬКО ИЕРАРХИЯ - ок
ВЫПОЛНИТЬ. когда разворачиваем услуги видим доставка и сборка
Дополнительно выводится сама группа 2 раза услуги и нам не нужно ее выводить в самой группе, поэтому зайдём в конструктор запроса – зайти на вкладку УСЛОВИЕ – Родитель – ЭтоГруппа – поставим конкретное условие прямо в тексте запроса. Левой кн мыши нажать в колонке условие по Номенклатура.ЭтоГруппа = ЛОЖЬ - ок
Таким образом группы не будут выводится   рис 7
·       Изучим параметры виртуальной таблицы. Поэкспериментируем с регистром сведений
Зайдём в конструктор запроса – РегистрыСведенийЦеныНоменклатуры.СрезПоследних перетаскиваем в колонку таблицы разворачиваем и перетаскиваем Период, Номенклатура, Цена в колонку ПОЛЕ – ок   рис 8
Выполнить и видим цены и разные периоды.  Рис 9.
В пользовательском режиме у нас есть январская цена
Как получить цену за январь с помощью запроса. Заходим в
Конструктор запроса – нажимаем на ЦеныНоменклатурыСрезПоследних и нажимаем на параметры виртуальной таблицы
Открылось окошко параметры виртуальной таблицы где мы можем указать период – поставим амперсант и напишем ДатаСреза – ок – ок    рис 10
ВЫПОЛНИТЬ и видим, что в параметры запроса появилась ДатаСреза. Значение пока равно нулю – поставим дату в значении рис 11
Выполнить  рис 12
·       Теперь мы хотим убрать Victory
Заходим в конструктор запроса - нажимаем на ЦеныНоменклатурыСрезПоследних и нажимаем на параметры виртуальной таблицы – в пункте условие укажем ту номенклатуру, которая указана в параметрах- для этого нажимаем на … троеточие выбрать
Нажимаем 2 раза по номенклатуре пишем = ставим амперcант &НоменклатураОтбора – ок - ок
Выполнить и появляется пустой запрос. Применился наш параметр и Значение пустое
Выберем значение Разящий – Выполнить, то увидим актуальную цену
Made on
Tilda