Группа: Пользователи
Сообщений: 3
Спасибо сказали: 0 раз
Рейтинг: 0
Здравствуйте Столкнулся с проблемой которую не могу решить
Имеется конфигурация УТ 2.3 Необходимо изменить форму элемента номенклатуры, в стандартной форме при открытии отображает страницы: "По умолчанию", "Дополнительные", "Единицы" и тд.
Необходимо что-бы при открытии стартовая страница была "Дополнительное описание номенклатуры"
в конфигураторе данную форму открывал страницы выставил как мне нужно, но сохранились сделанные изменения только в конфиграторе при запуске с режиме предприятия никаких изменений нет
Группа: Пользователи
Сообщений: 3
Спасибо сказали: 0 раз
Рейтинг: 0
podcast @ Сегодня, 9:23
, При попытке сохранить
{Справочник.Номенклатура.Форма.ФормаЭлемента.Форма(2905,1)}: Определения процедур и функций должны размещаться перед операторами тела модуля <<?>>Процедура ПР_УстановитьДополнительныеРеквизитыФормы() (Проверка: Толстый клиент (обычное приложение))
Перем мПоставщик; Перем мСтраницыПослеЗаписи; Перем мСписокТиповЦенНоменклатуры; Перем мДеревоРамок; Перем мРеквизитыСАвтозаполнением; // реквизиты, которые заполняются системой при записи элемента
// Хранит дерево макетов печатных форм Перем мДеревоМакетов;
//////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ И ФУНКЦИИ
// Если для текущей настройки установлено свойство "Сохранять автоматически", // то текущая настройка будет сохранена. // Процедура СохранитьНастройкуАвтоматически() Экспорт
// Процедура удаляет строки из таблицы в которой каждая строка соответствует странице. // Подготавливает таблицу для работы в ФормаНастройки // Процедура УдалитьСтраницыФормыНастройки() Экспорт ТаблицаСтраницНастройки = ТаблицаСтраниц.Скопировать(); Для Каждого ЭлементаСтраница Из СтруктураСкрываемыхСтраниц Цикл строкаСтраница = ТаблицаСтраницНастройки.Найти(ЭлементаСтраница.Ключ); Если строкаСтраница <> Неопределено Тогда ТаблицаСтраницНастройки.Удалить(строкаСтраница); КонецЕсли; КонецЦикла; КонецПроцедуры // УдалитьСтраницыФормыНастройки()
// Процедура обновляет основную(ТаблицаСтраниц) по новым настройкам установленным пользователем. // Процедура ОбновитьНастройки() Экспорт Для Каждого ЭлементСтраница Из ТаблицаСтраниц Цикл строкаСтраница = ТаблицаСтраницНастройки.Найти(ЭлементСтраница.Имя); Если строкаСтраница <> Неопределено Тогда ЗаполнитьЗначенияСвойств(ЭлементСтраница, строкаСтраница); КонецЕсли; КонецЦикла; КонецПроцедуры // ОбновитьНастройки() // Процедура восстанавливает сохраненные настройки. // Процедура ВосстановитьНастройки(ВосстановитьПриОткрытии = Ложь, ФормаНастройки = Неопределено) Экспорт
Если ВосстановитьПриОткрытии Тогда Если УниверсальныеМеханизмы.ПолучитьНастройкуИспользоватьПриОткрытии(СтруктураНастройки) Тогда мТекущаяНастройка = СтруктураНастройки;
// Процедура добавляет в дерево переданную Рамку группы и УЭ, которые к ней относятся. // // Параметры: // ИмяРамки - Строка. Имя рамки, которую нужно добавить в дерево. // СтруктураЭУ - Структура имен элементов управления, относящихся к рамке. // Процедура ДобавитьЭУВДерево(ИмяРамки, СтруктураЭУ)
// Процедура устанавливает видимость в режиме помощника. // Процедура УстановитьВидимостьПомощник()
Перем НомерТекущейСтраницы;
// Установим видимость и порядок страниц. КоличествоСтраниц = ТаблицаСтраниц.Количество() - 1; Для Тмп = 0 По КоличествоСтраниц Цикл Страница = ТаблицаСтраниц[КоличествоСтраниц - Тмп]; СтраницаПанели = ЭлементыФормы.ОсновнаяПанель.Страницы.Найти(Страница.Имя); СтраницаПанели.Видимость = Страница.Видимость И Страница.ВидимостьСистемная; ЭлементыФормы.ОсновнаяПанель.Страницы.Сдвинуть(СтраницаПанели, КоличествоСтраниц - Тмп - ЭлементыФормы.ОсновнаяПанель.Страницы.Индекс(СтраницаПанели)); КонецЦикла;
Для Каждого СтраницаПослеЗаписи Из мСтраницыПослеЗаписи Цикл СтраницаПослеЗаписи.Ключ.Доступность = Не ЭтоНовый(); КонецЦикла;
// Погасим основную панель, если все страницы невидимы. Если ПолучитьМассивДоступныхСтраниц(НомерТекущейСтраницы, Истина).Количество() = 0 Тогда ЭлементыФормы.ОсновнаяПанель.Видимость = Ложь; Иначе ЭлементыФормы.ОсновнаяПанель.Видимость = Истина; КонецЕсли;
// Установим видимость реквизитов. Для Каждого Реквизит Из ТаблицаРеквизитов Цикл ЭлементыФормы[Реквизит.Имя].Видимость = Реквизит.Доступность И Реквизит.ДоступностьСистемная;
// Для полей ввода еще установим доступность у соответствующей надписи, // а также автоотметку незаполненного. Если Не мСписокВозможныхРеквизитов[Реквизит.Имя] Тогда ЭлементыФормы["Надпись" + Реквизит.Имя].Видимость = Реквизит.Доступность И Реквизит.ДоступностьСистемная; ЭлементыФормы[Реквизит.Имя].АвтоотметкаНезаполненного = Реквизит.Обязательность Или Реквизит.ОбязательностьСистемная;
Если НЕ ЗначениеЗаполнено(ЭлементыФормы[Реквизит.Имя].Значение) Тогда ЭлементыФормы[Реквизит.Имя].ОтметкаНезаполненного = Реквизит.Обязательность Или Реквизит.ОбязательностьСистемная; КонецЕсли; КонецЕсли; КонецЦикла;
// Если все ЭУ, относящиеся к рамке, скрыты, то нужно скрыть и саму рамку. Для Каждого Рамка Из мДеревоРамок.Строки Цикл ФлагВидимости = Ложь;
Для Каждого СтрокаЭУ Из Рамка.Строки Цикл Если СтрокаЭУ.ИмяЭУ.Видимость Тогда ФлагВидимости = Истина; Прервать; КонецЕсли; КонецЦикла;
Если ТаблицаСтраниц.Колонки.Количество() = 0 Тогда ТаблицаСтраниц.Колонки.Добавить("Имя"); ТаблицаСтраниц.Колонки.Добавить("Представление"); ТаблицаСтраниц.Колонки.Добавить("Видимость"); ТаблицаСтраниц.Колонки.Добавить("ВидимостьСистемная"); ТаблицаСтраниц.Индексы.Добавить("Имя");
// Удалим лишние страницы из сохраненной настройки. Для Каждого Страница Из ТаблицаСтраниц Цикл Если ЭлементыФормы.ОсновнаяПанель.Страницы.Найти(Страница.Имя) = Неопределено Тогда ТаблицаСтраниц.Удалить(Страница); КонецЕсли; КонецЦикла;
// Добавим недостающие страницы в сохраненную настройку. Для Каждого Страница Из ЭлементыФормы.ОсновнаяПанель.Страницы Цикл Если ТаблицаСтраниц.Найти(Страница.Имя, "Имя") = Неопределено Тогда НоваяСтраница = ТаблицаСтраниц.Добавить(); НоваяСтраница.Имя = Страница.Имя; НоваяСтраница.Представление = Страница.Заголовок; НоваяСтраница.Видимость = Истина; КонецЕсли; КонецЦикла;
Если ТаблицаРеквизитов.Колонки.Количество() = 0 Тогда ТаблицаРеквизитов.Колонки.Добавить("Имя"); ТаблицаРеквизитов.Колонки.Добавить("Представление"); ТаблицаРеквизитов.Колонки.Добавить("Обязательность"); ТаблицаРеквизитов.Колонки.Добавить("Доступность"); ТаблицаРеквизитов.Колонки.Добавить("Уникальность"); ТаблицаРеквизитов.Колонки.Добавить("ОбязательностьСистемная"); ТаблицаРеквизитов.Колонки.Добавить("ДоступностьСистемная"); КонецЕсли;
// Удалим лишние реквизиты из сохраненной настройки. Для Каждого Реквизит Из ТаблицаРеквизитов Цикл Если мСписокВозможныхРеквизитов[Реквизит.Имя] = Неопределено Тогда ТаблицаРеквизитов.Удалить(Реквизит); КонецЕсли; КонецЦикла;
// Добавим недостающие реквизиты в сохраненную настройку. РеквизитыНоменклатуры = Метаданные().Реквизиты; Для Каждого Реквизит Из мСписокВозможныхРеквизитов Цикл Если ТаблицаРеквизитов.Найти(Реквизит.Ключ, "Имя") = Неопределено Тогда НовыйРеквизит = ТаблицаРеквизитов.Добавить(); НовыйРеквизит.Имя = Реквизит.Ключ;
Если РеквизитыНоменклатуры.Найти(Реквизит.Ключ) = Неопределено Тогда НовыйРеквизит.Представление = Реквизит.Ключ; Иначе НовыйРеквизит.Представление = РеквизитыНоменклатуры[Реквизит.Ключ].Представление(); КонецЕсли;
// Отсортируем список реквизитов. ОтсортироватьСписокРеквизитов();
Если ТаблицаЦенНоменклатуры.Колонки.Количество() = 0 Тогда ТаблицаЦенНоменклатуры.Колонки.Добавить("Имя"); ТаблицаЦенНоменклатуры.Колонки.Добавить("Представление"); ТаблицаЦенНоменклатуры.Колонки.Добавить("Обязательность"); ТаблицаЦенНоменклатуры.Колонки.Добавить("Доступность"); ТаблицаЦенНоменклатуры.Индексы.Добавить("Имя"); КонецЕсли;
// Удалим лишние типы цен из сохраненной настройки. Для Каждого ТипЦен Из ТаблицаЦенНоменклатуры Цикл Если мСписокТиповЦенНоменклатуры[ТипЦен.Имя] = Неопределено Тогда ТаблицаЦенНоменклатуры.Удалить(ТипЦен); КонецЕсли; КонецЦикла;
// Добавим недостающие типы цен в сохраненную настройку. Для Каждого ТипЦен Из мСписокТиповЦенНоменклатуры Цикл Если ТаблицаЦенНоменклатуры.Найти(ТипЦен.Ключ, "Имя") = Неопределено Тогда НовыйТипЦен = ТаблицаЦенНоменклатуры.Добавить(); НовыйТипЦен.Имя = ТипЦен.Ключ; НовыйТипЦен.Представление = ТипЦен.Значение;
// Процедура обновляет данные в полях ввода и табличных частях. // Процедура ОбновитьДанные(ТолькоЦеныКонтрагента = Ложь)
Если Не ЭтоНовый() Тогда Если Не ТолькоЦеныКонтрагента Тогда // заполним ТЧ "Цены номенклатуры" КоличествоСтрок = ЦеныНоменклатуры.Количество() - 1; Для Тмп = 0 По КоличествоСтрок Цикл ЦенаНоменклатуры = ЦеныНоменклатуры[КоличествоСтрок - Тмп];
СтрокаЦен = ТаблицаЦенНоменклатуры.Найти(ЦенаНоменклатуры.ТипЦен, "Имя"); Если Не СтрокаЦен.Доступность Тогда ЦеныНоменклатуры.Удалить(ЦенаНоменклатуры); КонецЕсли; КонецЦикла;
Для Каждого ТипЦен Из ТаблицаЦенНоменклатуры Цикл Если ТипЦен.Доступность Тогда СтрокаЦен = ЦеныНоменклатуры.Найти(ТипЦен.Имя, "ТипЦен"); Если СтрокаЦен = Неопределено Тогда СтрокаЦен = ЦеныНоменклатуры.Добавить(); СтрокаЦен.ТипЦен = ТипЦен.Имя; СтрокаЦен.Цена = 0; СтрокаЦен.СпособРасчетаЦены = СтрокаЦен.ТипЦен.СпособРасчетаЦены; СтрокаЦен.Валюта = СтрокаЦен.ТипЦен.ВалютаЦены; СтрокаЦен.ПроцентСкидкиНаценки = СтрокаЦен.ТипЦен.ПроцентСкидкиНаценки; КонецЕсли;
Если СтрокаЦен.Записать <> Истина Тогда СтрокаЦен.Записать = ТипЦен.Обязательность; КонецЕсли;
Если НЕ ЗначениеЗаполнено(СтрокаЦен.ЕдиницаИзмерения) Тогда СтрокаЦен.ЕдиницаИзмерения = ЕдиницаХраненияОстатков; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли;
// Заполним ТЧ "Цены поставщика". Если мПоставщик <> ОсновнойПоставщик Тогда ЦеныПоставщика.Очистить(); Если ЗначениеЗаполнено(ОсновнойПоставщик) Тогда Выборка = Справочники.ТипыЦенНоменклатурыКонтрагентов.Выбрать(, ОсновнойПоставщик); Пока Выборка.Следующий() Цикл СтрокаЦен = ЦеныПоставщика.Добавить(); СтрокаЦен.ТипЦен = Выборка.Ссылка; СтрокаЦен.Цена = 0; СтрокаЦен.Валюта = СтрокаЦен.ТипЦен.ВалютаЦены; СтрокаЦен.ЕдиницаИзмерения = ЕдиницаХраненияОстатков; КонецЦикла; КонецЕсли;
// Обработчик события "Нажатие" кнопки "Настройка". // Процедура ДействияФормыНастройка(Кнопка)
УдалитьСтраницыФормыНастройки(); // Сохраним данные на случай отмены действий настройки. ТаблицаСтраницВременная = ТаблицаСтраниц.Скопировать(); ТаблицаРеквизитовВременная = ТаблицаРеквизитов.Скопировать(); ТаблицаЦенНоменклатурыВременная = ТаблицаЦенНоменклатуры.Скопировать();
Если ДанныеСтроки.Записать Тогда Если НЕ ЗначениеЗаполнено(ДанныеСтроки.Цена) Тогда ОформлениеСтроки.Ячейки.Цена.ОтметкаНезаполненного = Истина; Иначе ОформлениеСтроки.Ячейки.Цена.ОтметкаНезаполненного = Ложь; КонецЕсли;
Если НЕ ЗначениеЗаполнено(ДанныеСтроки.Валюта) Тогда ОформлениеСтроки.Ячейки.Валюта.ОтметкаНезаполненного = Истина; Иначе ОформлениеСтроки.Ячейки.Валюта.ОтметкаНезаполненного = Ложь; КонецЕсли;
Если НЕ ЗначениеЗаполнено(ДанныеСтроки.ЕдиницаИзмерения) Тогда ОформлениеСтроки.Ячейки.ЕдиницаИзмерения.ОтметкаНезаполненного = Истина; Иначе ОформлениеСтроки.Ячейки.ЕдиницаИзмерения.ОтметкаНезаполненного = Ложь; КонецЕсли; Иначе ОформлениеСтроки.Ячейки.Цена.ОтметкаНезаполненного = Ложь; ОформлениеСтроки.Ячейки.Валюта.ОтметкаНезаполненного = Ложь; ОформлениеСтроки.Ячейки.ЕдиницаИзмерения.ОтметкаНезаполненного = Ложь; КонецЕсли;
// После редактировании строки автоматически установим в этой строке флажок "Записать". Если Не ОтменаРедактирования Тогда Если ЭлементыФормы.ЦеныПоставщика.ТекущаяКолонка.Имя <> "Записать" Тогда ТекущаяСтрока.Записать = Истина; КонецЕсли; КонецЕсли;
// Доступность изменения способа расчета в строке. Если НЕ ЗначениеЗаполнено(ДанныеСтроки.ТипЦен.БазовыйТипЦен) Тогда ОформлениеСтроки.Ячейки.СпособРасчетаЦены.ТолькоПросмотр = Истина; ОформлениеСтроки.Ячейки.СпособРасчетаЦены.ОтметкаНезаполненного = Ложь; Иначе ОформлениеСтроки.Ячейки.СпособРасчетаЦены.ТолькоПросмотр = Ложь;
Если НЕ ЗначениеЗаполнено(ДанныеСтроки.СпособРасчетаЦены) И ДанныеСтроки.Записать Тогда ОформлениеСтроки.Ячейки.СпособРасчетаЦены.ОтметкаНезаполненного = Истина; Иначе ОформлениеСтроки.Ячейки.СпособРасчетаЦены.ОтметкаНезаполненного = Ложь; КонецЕсли; КонецЕсли;
// Доступность изменения цены, валюты, единицы измерения в строке. Если ДанныеСтроки.ТипЦен.Рассчитывается Тогда ОформлениеСтроки.Ячейки.Цена.ТолькоПросмотр = Истина; ОформлениеСтроки.Ячейки.Валюта.ТолькоПросмотр = Истина; ОформлениеСтроки.Ячейки.ЕдиницаИзмерения.ТолькоПросмотр = Истина; ОформлениеСтроки.Ячейки.Цена.ОтметкаНезаполненного = Ложь; Иначе ОформлениеСтроки.Ячейки.Цена.ТолькоПросмотр = Ложь; ОформлениеСтроки.Ячейки.Валюта.ТолькоПросмотр = Ложь; ОформлениеСтроки.Ячейки.ЕдиницаИзмерения.ТолькоПросмотр = Ложь;
Если НЕ ЗначениеЗаполнено(ДанныеСтроки.Цена) И ДанныеСтроки.Записать Тогда ОформлениеСтроки.Ячейки.Цена.ОтметкаНезаполненного = Истина; Иначе ОформлениеСтроки.Ячейки.Цена.ОтметкаНезаполненного = Ложь; КонецЕсли; КонецЕсли;
// Доступность изменения процента скидки наценки в строке. Если НЕ ЗначениеЗаполнено(ДанныеСтроки.ТипЦен.БазовыйТипЦен) Или ДанныеСтроки.СпособРасчетаЦены = Перечисления.СпособыРасчетаЦены.ПоВхождениюБазовойЦеныВДиапазон Тогда ОформлениеСтроки.Ячейки.ПроцентСкидкиНаценки.ТолькоПросмотр = Истина; Иначе ОформлениеСтроки.Ячейки.ПроцентСкидкиНаценки.ТолькоПросмотр = Ложь; КонецЕсли;
Если Колонка.Имя = "Записать" Тогда СтрокаТЗНастройкиЦен = ТаблицаЦенНоменклатуры.Найти(ТекущаяСтрока.ТипЦен, "Имя"); Если СтрокаТЗНастройкиЦен.Обязательность Тогда ТекущаяСтрока.Записать = Истина; Предупреждение("Данные по типу цен """ + Строка(ТекущаяСтрока.ТипЦен) + """ должны быть обязательно заполнены."); КонецЕсли; КонецЕсли;
// После редактировании строки автоматически установим в этой строке флажок "Записать". Если Не ОтменаРедактирования Тогда Если ЭлементыФормы.ЦеныНоменклатуры.ТекущаяКолонка.Имя <> "Записать" Тогда ТекущаяСтрока.Записать = Истина; КонецЕсли; КонецЕсли;
Если НЕ ЗначениеЗаполнено(ТекущаяСтрока.СпособРасчетаЦены) Тогда ТекущаяСтрока.СпособРасчетаЦены = Перечисления.СпособыРасчетаЦены.ПоПроцентнойНаценкеНаБазовыйТип; КонецЕсли;
Если ТекущаяСтрока.СпособРасчетаЦены = Перечисления.СпособыРасчетаЦены.ПоВхождениюБазовойЦеныВДиапазон Тогда ТекущаяСтрока.ПроцентСкидкиНаценки = 0; Иначе ТекущаяСтрока.ПроцентСкидкиНаценки = ТекущаяСтрока.ТипЦен.ПроцентСкидкиНаценки; КонецЕсли;
// Формирует массив из видимых доступных страниц. // // Параметры: // НомерТекущейСтраницы - если передан, в эту переменную вернется номер текущей страницы. // // Возвращаемое значение: // Массив - массив видимых доступных страниц. // Функция ПолучитьМассивДоступныхСтраниц(НомерТекущейСтраницы, ТолькоВидимые = Ложь)
МассивВидимыхСтраниц = Новый Массив;
Для Каждого Страница Из ЭлементыФормы.ОсновнаяПанель.Страницы Цикл Если Страница.Видимость И (ТолькоВидимые Или Страница.Доступность) Тогда МассивВидимыхСтраниц.Добавить(Страница);
Если ЭлементыФормы.ОсновнаяПанель.ТекущаяСтраница = Страница Тогда НомерТекущейСтраницы = МассивВидимыхСтраниц.ВГраница(); КонецЕсли; КонецЕсли; КонецЦикла;
Возврат МассивВидимыхСтраниц;
КонецФункции // ПолучитьМассивДоступныхСтраниц()
// Обработчик события "Нажатие" кнопки "Назад". // Переключает предыдущую по порядку закладку. // Процедура ОсновныеДействияФормыНазад(Кнопка)
Если НомерТекущейСтраницы = 0 Тогда СледующаяСтраница = МассивВидимыхСтраниц[НомерТекущейСтраницы]; Иначе СледующаяСтраница = МассивВидимыхСтраниц[НомерТекущейСтраницы - 1];
// Обработчик события "Нажатие" кнопки "Далее". // Переключает следующую по порядку закладку. // Процедура ОсновныеДействияФормыОсновныеДействияФормыДалее(Кнопка)
Если НомерТекущейСтраницы = МассивВидимыхСтраниц.ВГраница() Тогда СледующаяСтраница = МассивВидимыхСтраниц[НомерТекущейСтраницы]; Иначе СледующаяСтраница = МассивВидимыхСтраниц[НомерТекущейСтраницы + 1];
// Обработчик события "Нажатие" кнопки "РассчитатьПоБазовымЦенам" в командной панели ТЧ ЦеныНоменклатуры. // Процедура КоманднаяПанельЦеныНоменклатурыРассчитатьПоБазовымЦенам(Кнопка)
ДатаЦенСкидок = РабочаяДата;
Для Каждого СтрокаЦен Из ЦеныНоменклатуры Цикл ТипЦен = СтрокаЦен.ТипЦен;
Если Не (ТипЦен.Рассчитывается Или НЕ ЗначениеЗаполнено(ТипЦен.БазовыйТипЦен)) Тогда ВалютаТекущая = ТипЦен.ВалютаЦены;
СтрокаЦенБазовый = ЦеныНоменклатуры.Найти(ТипЦен.БазовыйТипЦен); Если СтрокаЦенБазовый <> Неопределено Тогда Если СтрокаЦен.СпособРасчетаЦены = Перечисления.СпособыРасчетаЦены.ПоПроцентнойНаценкеНаБазовыйТип Тогда
// Обработчик события "Нажатие" кнопки "РассчитатьЦеныКомплекта" в командной панели ТЧ ЦеныНоменклатуры. // Процедура КоманднаяПанельЦеныНоменклатурыРассчитатьЦеныКомплекта(Кнопка)
Запрос = Новый Запрос; Запрос.УстановитьПараметр("Номенклатура", Ссылка);
Запрос.Текст = " |ВЫБРАТЬ | РегКомплектующие.Комплектующая КАК Комплектующая, | РегКомплектующие.ХарактеристикаКомплектующей КАК ХарактеристикаКомплектующей, | РегКомплектующие.Количество КАК Количество, | РегКомплектующие.ЕдиницаИзмерения КАК ЕдиницаИзмерения |ИЗ | РегистрСведений.КомплектующиеНоменклатуры КАК РегКомплектующие |ГДЕ | РегКомплектующие.Номенклатура = &Номенклатура |";
ТЗКомплектующие = Запрос.Выполнить().Выгрузить();
Для Каждого СтрокаЦен Из ЦеныНоменклатуры Цикл Если Не СтрокаЦен.ТипЦен.Рассчитывается Тогда ЦенаКомплекта = 0; Для Каждого СтрокаКомплектующих Из ТЗКомплектующие Цикл ЦенаКомплектующей = Ценообразование.ПолучитьЦенуНоменклатуры(СтрокаКомплектующих.Комплектующая, СтрокаКомплектующих.ХарактеристикаКомплектующей, СтрокаЦен.ТипЦен, РабочаяДата, СтрокаКомплектующих.ЕдиницаИзмерения, СтрокаЦен.Валюта);
// Обработчик события "Нажатие" кнопки "ПеречитатьТекущиеЦены" в командной панели ТЧ ЦеныНоменклатуры. // Процедура КоманднаяПанельЦеныНоменклатурыПеречитатьТекущиеЦены(Кнопка)
Запрос = Новый Запрос(" |ВЫБРАТЬ | Цены.ТипЦен КАК ТипЦен, | Цены.Цена КАК Цена, | Цены.СпособРасчетаЦены КАК СпособРасчетаЦены, | Цены.Валюта КАК Валюта, | Цены.ЕдиницаИзмерения КАК ЕдиницаИзмерения, | Цены.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки |ИЗ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ТипЦен В (&ТипыЦен) | И Номенклатура = &Номенклатура И ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) | ) КАК Цены |");
// Обработчик события "Нажатие" кнопки "ПеречитатьТекущиеЦены" в командной панели ТЧ ЦеныПоставщика. // Процедура КоманднаяПанельЦеныПоставщикаПеречитатьТекущиеЦены(Кнопка)
Запрос = Новый Запрос(" |ВЫБРАТЬ | Цены.ТипЦен КАК ТипЦен, | Цены.Цена КАК Цена, | Цены.Валюта КАК Валюта, | Цены.ЕдиницаИзмерения КАК ЕдиницаИзмерения |ИЗ | РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(&Дата, ТипЦен В (&ТипыЦен) | И Номенклатура = &Номенклатура И ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) | ) КАК Цены |");
// Процедура проверяет правильность заполнения таблицы цен номенклатуры контрагента. // // Параметры: // ЗаголовокСообщений - Строка. Заголовок сообщений об эшибках. // Отказ - в эту переменную вернется значение Истина, если при проверке обнаружены ошибки. Процедура ПроверитьЦеныКонтрагента(ЗаголовокСообщений, Отказ)
Для Каждого ТипЦенКонтрагента Из ЦеныПоставщика Цикл Если ТипЦенКонтрагента.Записать Тогда
// Цена. Если НЕ ЗначениеЗаполнено(ТипЦенКонтрагента.Цена) Тогда СтрокаСообщения = "Для типа цен поставщика """ + Строка(ТипЦенКонтрагента.ТипЦен) + """ не заполнена цена."; ОбщегоНазначения.СообщитьОбОшибке(СтрокаСообщения, Отказ, ЗаголовокСообщений); КонецЕсли;
// Валюта. Если НЕ ЗначениеЗаполнено(ТипЦенКонтрагента.Валюта) Тогда СтрокаСообщения = "Для типа цен поставщика """ + Строка(ТипЦенКонтрагента.ТипЦен) + """ не заполнена валюта."; ОбщегоНазначения.СообщитьОбОшибке(СтрокаСообщения, Отказ, ЗаголовокСообщений); КонецЕсли;
// Единица измерения. Если НЕ ЗначениеЗаполнено(ТипЦенКонтрагента.ЕдиницаИзмерения) Тогда СтрокаСообщения = "Для типа цен поставщика """ + Строка(ТипЦенКонтрагента.ТипЦен) + """ не заполнена единица измерения."; ОбщегоНазначения.СообщитьОбОшибке(СтрокаСообщения, Отказ, ЗаголовокСообщений); КонецЕсли; КонецЕсли; КонецЦикла;
КонецПроцедуры // ПроверитьЦеныКонтрагента()
// Процедура проверяет правильность заполнения таблицы цен номенклатуры. // // Параметры: // ЗаголовокСообщений - Строка. Заголовок сообщений об эшибках. // Отказ - в эту переменную вернется значение Истина, если при проверке обнаружены ошибки. Процедура ПроверитьЦеныНоменклатуры(ЗаголовокСообщений, Отказ)
Для Каждого ТипЦенНоменклатуры Из ЦеныНоменклатуры Цикл Если ТипЦенНоменклатуры.Записать Тогда Если Не ТипЦенНоменклатуры.ТипЦен.Рассчитывается Тогда
// Цена. Если НЕ ЗначениеЗаполнено(ТипЦенНоменклатуры.Цена) Тогда СтрокаСообщения = "Для типа цен """ + Строка(ТипЦенНоменклатуры.ТипЦен) + """ не заполнена цена."; ОбщегоНазначения.СообщитьОбОшибке(СтрокаСообщения, Отказ, ЗаголовокСообщений); КонецЕсли; КонецЕсли;
// Способ расчета цены. Если ЗначениеЗаполнено(ТипЦенНоменклатуры.ТипЦен.БазовыйТипЦен) Тогда Если НЕ ЗначениеЗаполнено(ТипЦенНоменклатуры.СпособРасчетаЦены) Тогда СтрокаСообщения = "Для типа цен """ + Строка(ТипЦенНоменклатуры.ТипЦен) + """ не заполнен способ расчета цены."; ОбщегоНазначения.СообщитьОбОшибке(СтрокаСообщения, Отказ, ЗаголовокСообщений); КонецЕсли; КонецЕсли;
// Валюта. Если НЕ ЗначениеЗаполнено(ТипЦенНоменклатуры.Валюта) Тогда СтрокаСообщения = "Для типа цен """ + Строка(ТипЦенНоменклатуры.ТипЦен) + """ не заполнена валюта."; ОбщегоНазначения.СообщитьОбОшибке(СтрокаСообщения, Отказ, ЗаголовокСообщений); КонецЕсли;
// Единица измерения. Если НЕ ЗначениеЗаполнено(ТипЦенНоменклатуры.ЕдиницаИзмерения) Тогда СтрокаСообщения = "Для типа цен """ + Строка(ТипЦенНоменклатуры.ТипЦен) + """ не заполнена единица измерения."; ОбщегоНазначения.СообщитьОбОшибке(СтрокаСообщения, Отказ, ЗаголовокСообщений); КонецЕсли;
// Доступность изменения процента скидки наценки в строке. Если ЗначениеЗаполнено(ТипЦенНоменклатуры.ТипЦен.БазовыйТипЦен) И ТипЦенНоменклатуры.СпособРасчетаЦены = Перечисления.СпособыРасчетаЦены.ПоПроцентнойНаценкеНаБазовыйТип Тогда // Процент скидки/наценки. Если НЕ ЗначениеЗаполнено(ТипЦенНоменклатуры.ПроцентСкидкиНаценки) Тогда СтрокаСообщения = "Для типа цен """ + Строка(ТипЦенНоменклатуры.ТипЦен) + """ не заполнен процент скидки/наценки."; ОбщегоНазначения.СообщитьОбОшибке(СтрокаСообщения, Отказ, ЗаголовокСообщений); КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла;
КонецПроцедуры // ПроверитьЦеныНоменклатуры()
// Процедура сохраняет данные по номенклатуре контрагента. // // Параметры: // Отказ - в эту переменную вернется значение Истина, если попытка сохранения провалилась. Процедура СохранитьНоменклатуруКонтрагента(Отказ)
// Если Основной поставщик не выбран, то и делать больше нечего. Если ЗначениеЗаполнено(ОсновнойПоставщик) Тогда ЗаписатьЦеныКонтрагента = Ложь; Для Каждого ТипЦенКонтрагента Из ЦеныПоставщика Цикл Если ТипЦенКонтрагента.Записать Тогда ЗаписатьЦеныКонтрагента = Истина; Прервать; КонецЕсли; КонецЦикла;
// Если нет ни одного типа цен для записи, то создавать документ смысла нет. Если ЗаписатьЦеныКонтрагента Тогда Если НЕ ЗначениеЗаполнено(ДокументУстановкаЦенКонтрагента) Тогда Ответ = Вопрос("Не выбран документ для записи данных по ценам поставщика." + Символы.ПС + "Создать новый документ ""Установка цен номенклатуры контрагентов"" и продолжить запись?" , РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Да Тогда ДокументОбъект = Документы.УстановкаЦенНоменклатурыКонтрагентов.СоздатьДокумент(); ДокументОбъект.Дата = РабочаяДата; ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(ДокументОбъект, глЗначениеПеременной("глТекущийПользователь")); ДокументОбъект.Контрагент = ОсновнойПоставщик;
ИндексСтрокиТаблицыЦен = 0; ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда Отказ = Истина; Возврат; КонецЕсли; Иначе ДокументОбъект = ДокументУстановкаЦенКонтрагента.ПолучитьОбъект();
// Определим следующий индекс строки. Если ДокументОбъект.Товары.Количество() = 0 Тогда ИндексСтрокиТаблицыЦен = 1; Иначе СписокИндексов = Новый СписокЗначений; СписокИндексов.ЗагрузитьЗначения(ДокументОбъект.Товары.ВыгрузитьКолонку("ИндексСтрокиТаблицыЦен")); СписокИндексов.СортироватьПоЗначению(НаправлениеСортировки.Убыв); ИндексСтрокиТаблицыЦен = СписокИндексов[0].Значение + 1; КонецЕсли; КонецЕсли;
Для Каждого ТипЦенКонтрагента Из ЦеныПоставщика Цикл Если ТипЦенКонтрагента.Записать Тогда СтрокаТипЦен = ДокументОбъект.ТипыЦен.Найти(ТипЦенКонтрагента.ТипЦен, "ТипЦен");
Если СтрокаТипЦен = Неопределено Тогда СтрокаТипЦен = ДокументОбъект.ТипыЦен.Добавить(); СтрокаТипЦен.ТипЦен = ТипЦенКонтрагента.ТипЦен; КонецЕсли;
СтруктураПоиска = Новый Структура; СтруктураПоиска.Вставить("Номенклатура", Ссылка); СтруктураПоиска.Вставить("ХарактеристикаНоменклатуры", Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка()); СтруктураПоиска.Вставить("ТипЦен", ТипЦенКонтрагента.ТипЦен);
// Процедура сохраняет данные по ценам номенклатуры. // // Параметры: // Отказ - в эту переменную вернется значение Истина, если попытка сохранения провалилась. Процедура СохранитьЦеныНоменклатуры(Отказ)
ЗаписатьЦеныНоменклатуры = Ложь; Для Каждого ТипЦенНоменклатуры Из ЦеныНоменклатуры Цикл Если ТипЦенНоменклатуры.Записать Тогда ЗаписатьЦеныНоменклатуры = Истина; Прервать; КонецЕсли; КонецЦикла;
// Если нет ни одного типа цен для записи, то создавать документ смысла нет. Если ЗаписатьЦеныНоменклатуры Тогда Если НЕ ЗначениеЗаполнено(ДокументУстановкаЦен) Тогда Ответ = Вопрос("Не выбран документ для записи данных по ценам номенклатуры." + Символы.ПС + "Создать новый документ ""Установка цен номенклатуры"" и продолжить запись?" , РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Да Тогда ДокументОбъект = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент(); ДокументОбъект.Дата = РабочаяДата; ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(ДокументОбъект, глЗначениеПеременной("глТекущийПользователь"));
ИндексСтрокиТаблицыЦен = 0; ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда Отказ = Истина; Возврат; КонецЕсли; Иначе ДокументОбъект = ДокументУстановкаЦен.ПолучитьОбъект();
// Определим следующий индекс строки. Если ДокументОбъект.Товары.Количество() = 0 Тогда ИндексСтрокиТаблицыЦен = 1; Иначе СписокИндексов = Новый СписокЗначений; СписокИндексов.ЗагрузитьЗначения(ДокументОбъект.Товары.ВыгрузитьКолонку("ИндексСтрокиТаблицыЦен")); СписокИндексов.СортироватьПоЗначению(НаправлениеСортировки.Убыв); ИндексСтрокиТаблицыЦен = СписокИндексов[0].Значение + 1; КонецЕсли; КонецЕсли;
Для Каждого ТипЦенНоменклатуры Из ЦеныНоменклатуры Цикл Если ТипЦенНоменклатуры.Записать Тогда СтрокаТипЦен = ДокументОбъект.ТипыЦен.Найти(ТипЦенНоменклатуры.ТипЦен, "ТипЦен");
Если СтрокаТипЦен = Неопределено Тогда СтрокаТипЦен = ДокументОбъект.ТипыЦен.Добавить(); СтрокаТипЦен.ТипЦен = ТипЦенНоменклатуры.ТипЦен; КонецЕсли;
СтруктураПоиска = Новый Структура; СтруктураПоиска.Вставить("Номенклатура", Ссылка); СтруктураПоиска.Вставить("ХарактеристикаНоменклатуры", Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка()); СтруктураПоиска.Вставить("ТипЦен", ТипЦенНоменклатуры.ТипЦен);
Попытка ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение); ДокументУстановкаЦен = ДокументОбъект.Ссылка; Исключение Сообщить("Не удалось записать документ установки цен: " + ОписаниеОшибки(), СтатусСообщения.Важное); Отказ = Истина; Возврат; КонецПопытки; КонецЕсли;
КонецПроцедуры // СохранитьЦеныНоменклатуры()
// Процедура управляет внешним видом формы при открытии. // Процедура УстановитьВидимостьПриОткрытии()
СписокКнопокФайлов = Новый СписокЗначений; СписокКнопокФайлов.Добавить(ЭлементыФормы.ДействияФормы.Кнопки.Файлы); СписокКнопокФайлов.Добавить(ЭлементыФормы.ДействияФормы.Кнопки.Подменю.Кнопки.Файлы); РаботаСФайлами.ПолучитьКартинкуКнопкиОткрытияФайлов(Ссылка, СписокКнопокФайлов);
Если НЕ ЗначениеЗаполнено(мЕдиницаИзмеренияВеса) Тогда ЭлементыФормы.ЕдиницыИзмерения.Колонки.Вес.ТекстШапки = "Вес (не назначена единица измерения)"; Иначе ЭлементыФормы.ЕдиницыИзмерения.Колонки.Вес.ТекстШапки = "Вес (" + СокрЛП(мЕдиницаИзмеренияВеса) + ")"; КонецЕсли;
Если НЕ ЗначениеЗаполнено(мЕдиницаИзмеренияОбъема) Тогда ЭлементыФормы.ЕдиницыИзмерения.Колонки.Объем.ТекстШапки = "Объем (не назначена единица измерения)"; Иначе ЭлементыФормы.ЕдиницыИзмерения.Колонки.Объем.ТекстШапки = "Объем (" + СокрЛП(мЕдиницаИзмеренияОбъема) + ")"; КонецЕсли;
// Процедура заполняет реквизиты значениями по умолчанию. // Процедура ЗаполнитьРеквизитыПоУмолчанию()
Если НЕ ЗначениеЗаполнено(БазоваяЕдиницаИзмерения) Тогда БазоваяЕдиницаИзмерения = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнаяЕдиницаПоКлассификатору"); КонецЕсли;
Если НЕ ЗначениеЗаполнено(СтавкаНДС) Тогда СтавкаНДС = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнаяСтавкаНДС"); КонецЕсли;
Если НЕ ЗначениеЗаполнено(ВидНоменклатуры) Тогда Если ЗначениеЗаполнено(Родитель.ВидНоменклатуры) Тогда ВидНоменклатуры = Родитель.ВидНоменклатуры; Иначе ВидНоменклатуры = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнойВидНоменклатуры"); КонецЕсли;
ПриИзмененииВидаНоменклатуры(); КонецЕсли;
КонецПроцедуры // ЗаполнитьРеквизитыПоУмолчанию()
// Процедура, выполняющая необходимые действия при изменении вида номенклатуры. // Процедура ПриИзмененииВидаНоменклатуры()
ЗаполнитьПризнакиПоВидуНоменклатуры();
УстановитьВидимость();
КонецПроцедуры // ПриИзмененииВидаНоменклатуры()
// Процедура устанавливает в поле картинки основное изображение номенклатуры. // Процедура ПоказатьОсновноеИзображение() Экспорт
Если ЭлементыФормы.ДействияФормы.Кнопки.Изображение.Пометка = Истина Тогда Если мТекущееОсновноеИзображение = Неопределено Тогда ЭлементыФормы.ОсновноеИзображение.Картинка = мПустаяКартинка; Иначе ЭлементыФормы.ОсновноеИзображение.Картинка = мТекущееОсновноеИзображение; КонецЕсли; КонецЕсли;
КонецПроцедуры // ПоказатьОсновноеИзображение()
// Показывает или прячет панель основного изображения в зависимости от пометки кнопки изображения. // Процедура ПоказатьСпрятатьПанельОсновногоИзображения()
Если ЭлементыФормы.ДействияФормы.Кнопки.Изображение.Пометка Тогда ЭлементыФормы.ПанельОсновногоИзображения.Свертка = РежимСверткиЭлементаУправления.Нет; Иначе ЭлементыФормы.ПанельОсновногоИзображения.Свертка = РежимСверткиЭлементаУправления.Лево; КонецЕсли;
// Процедура устанавливает свойство в строке ТЧ. // // Параметры: // ТЗ - ТаблицаЗначений, в которой нужно установить свойство. // Имя - Строка. В строке, колонка "Имя" которой содержит переданный параметр, // нужно установить свойство. // ИмяСвойства - Строка. Имя свойства, которое нужно установить. // ЗначениеСвойства - значение которое нужно установить. // Процедура УстановитьСвойствоВТЗ(ТЗ, Имя, ИмяСвойства, ЗначениеСвойства)
// Процедура устанавливает видимость для элементов формы. // Процедура УстановитьВидимость(ТолькоКнопкиНавигации = Ложь)
Перем НомерТекущейСтраницы;
// Погасим кнопки навигации. МассивВидимыхСтраниц = ПолучитьМассивДоступныхСтраниц(НомерТекущейСтраницы); Если МассивВидимыхСтраниц.Количество() = 0 Тогда ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Назад.Доступность = Ложь; ЭлементыФормы.ОсновныеДействияФормы.Кнопки.ОсновныеДействияФормыДалее.Доступность = Ложь; Иначе Если НомерТекущейСтраницы = 0 Тогда ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Назад.Доступность = Ложь; Иначе ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Назад.Доступность = Истина; КонецЕсли; Если НомерТекущейСтраницы = МассивВидимыхСтраниц.ВГраница() Тогда ЭлементыФормы.ОсновныеДействияФормы.Кнопки.ОсновныеДействияФормыДалее.Доступность = Ложь; Иначе ЭлементыФормы.ОсновныеДействияФормы.Кнопки.ОсновныеДействияФормыДалее.Доступность = Истина; КонецЕсли; КонецЕсли;
Если ТолькоКнопкиНавигации Тогда Возврат; КонецЕсли;
НаборКомплект = (Набор Или Комплект); Товар = Не (Услуга Или НаборКомплект); ДоступностьСерия = (мИспользоватьСерии И ВестиУчетПоСериям И Товар); БезНДС = (СтавкаНДС = Перечисления.СтавкиНДС.БезНДС); НеНДС = (СтавкаНДС = Перечисления.СтавкиНДС.НеНДС);
// Системная видимость страниц. ТаблицаСтраниц.ЗаполнитьЗначения(Истина, "ВидимостьСистемная"); УстановитьСвойствоВТЗ(ТаблицаСтраниц, "ПоУмолчанию" , "ВидимостьСистемная", Не Набор); УстановитьСвойствоВТЗ(ТаблицаСтраниц, "Дополнительные" , "ВидимостьСистемная", Не НаборКомплект); УстановитьСвойствоВТЗ(ТаблицаСтраниц, "КодыВесовогоТовара" , "ВидимостьСистемная", Весовой); УстановитьСвойствоВТЗ(ТаблицаСтраниц, "Штрихкоды" , "ВидимостьСистемная", Не Весовой); УстановитьСвойствоВТЗ(ТаблицаСтраниц, "ЦеныНоменклатуры" , "ВидимостьСистемная", Не Набор); УстановитьСвойствоВТЗ(ТаблицаСтраниц, "НоменклатураПоставщика", "ВидимостьСистемная", Не (НЕ ЗначениеЗаполнено(ОсновнойПоставщик) Или НаборКомплект)); УстановитьСвойствоВТЗ(ТаблицаСтраниц, "Характеристики" , "ВидимостьСистемная", ВестиУчетПоХарактеристикам И мИспользоватьХарактеристики); УстановитьСвойствоВТЗ(ТаблицаСтраниц, "Серии" , "ВидимостьСистемная", ВестиУчетПоСериям И мИспользоватьСерии); УстановитьСвойствоВТЗ(ТаблицаСтраниц, "Комплектующие" , "ВидимостьСистемная", Не Услуга); УстановитьСвойствоВТЗ(ТаблицаСтраниц, "МестаХранения" , "ВидимостьСистемная", (Не Услуга) И (Не Набор) И (Не НаборКомплект));
// Системная обязательность реквизитов. ТаблицаРеквизитов.ЗаполнитьЗначения(Ложь, "ОбязательностьСистемная"); УстановитьСвойствоВТЗ(ТаблицаРеквизитов, "БазоваяЕдиницаИзмерения", "ОбязательностьСистемная", Не Услуга); УстановитьСвойствоВТЗ(ТаблицаРеквизитов, "ЕдиницаХраненияОстатков", "ОбязательностьСистемная", Не Услуга); УстановитьСвойствоВТЗ(ТаблицаРеквизитов, "ЕдиницаДляОтчетов" , "ОбязательностьСистемная", Не Услуга); УстановитьСвойствоВТЗ(ТаблицаРеквизитов, "ВидНоменклатуры" , "ОбязательностьСистемная", Истина);
// Видимость колонок в табличных полях. УстановитьВидимостьКолонокТП("Штрихкоды"); УстановитьВидимостьКолонокТП("КодыВесовогоТовара"); УстановитьВидимостьКолонокТП("НоменклатураКонтрагентов"); УстановитьВидимостьКолонокТП("Комплектующие");
УстановитьВидимостьПомощник();
УстановитьОтборыДляТЧ();
ЭлементыФормы.НоменклатураГТД.Доступность = НЕ ЭтоНовый();
ЭлементыФормы.ПодакцизныйТовар.Доступность = Не Услуга; ЭлементыФормы.СтатьяДекларацииПоАкцизномуНалогу.Доступность = ПодакцизныйТовар; ЭлементыФормы.НадписьСтатьяДекларацииПоАкцизномуНалогу.Доступность = ПодакцизныйТовар;
КонецПроцедуры // УстановитьВидимость()
// Процедура снимает флаги, имена которых переданы в структуре, если флаги установлены. // // Параметры: // СтруктураФлагов - структура с именами флагов. // Процедура СнятьФлаги(СтруктураФлагов)
Для Каждого ИмяФлага Из СтруктураФлагов Цикл Если ЭтотОбъект[ИмяФлага.Ключ] Тогда ЭтотОбъект[ИмяФлага.Ключ] = Ложь; КонецЕсли; КонецЦикла;
КонецПроцедуры // СнятьФлаги()
// Процедура заполняет по реквизиту формы ВидНоменлатуры признаки Услуга и Набор // Процедура ЗаполнитьПризнакиПоВидуНоменклатуры()
Если ТранспортнаяУслуга И Не Услуга Тогда ТранспортнаяУслуга=Ложь; КонецЕсли;
Если Услуга Или Набор Или Комплект Тогда СтруктураФлагов = Новый Структура; СтруктураФлагов.Вставить("ВестиУчетПоСериям"); СтруктураФлагов.Вставить("ВестиПартионныйУчетПоСериям"); СтруктураФлагов.Вставить("Весовой"); СтруктураФлагов.Вставить("ВестиСерийныеНомера");
Если Услуга Или Набор Тогда СтруктураФлагов.Вставить("ВестиУчетПоХарактеристикам");
Если Услуга Тогда СтранаПроисхождения = Неопределено; КонецЕсли; КонецЕсли;
// Процедура управляет видимостью колонок "Характеристика", "Серия" и "Качество" // заданного табличного поля. // // Параметры: // ИмяТП - Строка. Имя табличного поля // Процедура УстановитьВидимостьКолонокТП(ИмяТП)
Товар = Не (Услуга Или Набор Или Комплект);
ВидимостьХарактеристики = (Товар Или Комплект) И мИспользоватьХарактеристики И ВестиУчетПоХарактеристикам; ВидимостьСерии = Товар И мИспользоватьСерии И ВестиУчетПоСериям; ВидимостьКачество = Товар;
Колонки = ЭлементыФормы[ИмяТП].Колонки;
КолонкаХарактеристика = Колонки.Найти("ХарактеристикаНоменклатуры"); Если КолонкаХарактеристика <> Неопределено Тогда КолонкаХарактеристика.Видимость = ВидимостьХарактеристики; КолонкаХарактеристика.ИзменятьВидимость = ВидимостьХарактеристики; КонецЕсли;
КолонкаХарактеристикаКомплектующей = Колонки.Найти("ХарактеристикаКомплектующей"); Если КолонкаХарактеристикаКомплектующей <> Неопределено Тогда КолонкаХарактеристикаКомплектующей.Видимость = ВидимостьХарактеристики ИЛИ (мИспользоватьХарактеристики И (Комплект ИЛИ Товар ИЛИ Набор) И ИмяТП = "Комплектующие"); КолонкаХарактеристикаКомплектующей.ИзменятьВидимость = ВидимостьХарактеристики ИЛИ (мИспользоватьХарактеристики И (Комплект ИЛИ Товар ИЛИ Набор) И ИмяТП = "Комплектующие"); КонецЕсли;
КолонкаСерия = Колонки.Найти("СерияНоменклатуры"); Если КолонкаСерия <> Неопределено Тогда КолонкаСерия.Видимость = ВидимостьСерии; КолонкаСерия.ИзменятьВидимость = ВидимостьСерии; КонецЕсли;
КолонкаКачество = Колонки.Найти("Качество"); Если КолонкаКачество <> Неопределено Тогда КолонкаКачество.Видимость = ВидимостьКачество; КолонкаКачество.ИзменятьВидимость = ВидимостьКачество; КонецЕсли;
КонецПроцедуры // УстановитьВидимостьКолонокТП()
// Процедура проверяет, совпадало ли ранее полное наименование с наименованием, // и присваивает соответствующее значение переменной мФормироватьНаименованиеПолноеАвтоматически. // Процедура УстановитьФлагФормироватьНаименованиеПолноеАвтоматически()
Если ПустаяСтрока(НаименованиеПолное) Или НаименованиеПолное = Наименование Тогда мФормироватьНаименованиеПолноеАвтоматически = Истина; Иначе мФормироватьНаименованиеПолноеАвтоматически = Ложь; КонецЕсли;
// Процедура проверяет, необходимо ли формировать полное наименование автоматически или нет, // и, если необходимо, формирует его. // Процедура СформироватьНаименованиеПолноеАвтоматически()
Если мФормироватьНаименованиеПолноеАвтоматически Тогда НаименованиеПолное = Наименование; КонецЕсли;
// Если сохраненного значения нет - режим показа картинки оставим по умолчанию. Если ПоказыватьКартинку <> Неопределено Тогда ЭлементыФормы.ДействияФормы.Кнопки.Изображение.Пометка = ПоказыватьКартинку; КонецЕсли;
ПоказатьСпрятатьПанельОсновногоИзображения();
ОбновитьДанные();
УстановитьВидимостьПриОткрытии();
УстановитьВидимость();
Если НЕ мИспользоватьХарактеристики Тогда СтруктураСкрываемыхСтраниц.Вставить("Характеристики"); КонецЕсли; Если НЕ мИспользоватьСерии Тогда СтруктураСкрываемыхСтраниц.Вставить("Серии"); КонецЕсли;
ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма);
// Установить печатную форму по умолчанию. РаботаСДиалогами.УстановитьКнопкуПечати(ЭтотОбъект, ЭтаФорма);
// Заполнить свойства ОбработкаОбъектЗначенияСвойств.НазначениеСвойств = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура; ПрочитатьЗаполнитьСвойстваИЗначения();
// Заполнить категории ОбработкаОбъектКатегорииОбъекта.НазначениеКатегорий = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура; ПрочитатьЗаполнитьКатегории();
КонецПроцедуры // ПриОткрытии()
// Процедура - обработчик события "ПриЗакрытии" формы. // Процедура ПриЗакрытии()
// Обработчик события ПриЗаписи формы. // Процедура ПриЗаписи(Отказ)
Если Услуга Тогда Если ЗначениеЗаполнено(БазоваяЕдиницаИзмерения) Тогда ПроверитьЕдиницуХраненияОстатков(Отказ); КонецЕсли; Иначе Если НЕ ЗначениеЗаполнено(БазоваяЕдиницаИзмерения) Тогда ОбщегоНазначения.СообщитьОбОшибке("Перед записью необходимо определить базовую единицу измерения!", Отказ); Иначе ПроверитьЕдиницуХраненияОстатков(Отказ); КонецЕсли;
Если ПустаяСтрока(ЕдиницаХраненияОстатков) Тогда ОбщегоНазначения.СообщитьОбОшибке("Перед записью необходимо определить единицу хранения остатков!", Отказ); КонецЕсли; КонецЕсли;
// Обработка записи свойств и категорий. Если Не Отказ Тогда ОбработкаОбъектЗначенияСвойств.ОбъектОтбораЗначений = Ссылка; Отказ = Не ОбработкаОбъектЗначенияСвойств.ЗаписатьЗначенияСвойств();
ОбработкаОбъектКатегорииОбъекта.ОбъектОтбораКатегорий = Ссылка; Отказ = Не ОбработкаОбъектКатегорииОбъекта.ЗаписатьКатегорииОбъекта(); КонецЕсли;
КонецПроцедуры // ПриЗаписи()
// Обработчик события ПослеЗаписи формы. // Процедура ПослеЗаписи()
// Оповестим форму списка о том, что возможно надо обновить изображение. Оповестить("ЗаписанЭлементНоменклатуры", Ссылка, ЭтаФорма);
// Обработчик события ОбработкаВыбора формы. // Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)
Если ТипЗнч(ЗначениеВыбора) = Тип("СправочникСсылка.ТипыЦенНоменклатуры") Тогда мТипЦенДляПечати = ЗначениеВыбора; ИначеЕсли ТипЗнч(ЗначениеВыбора) = Тип("СправочникСсылка.ХранилищеДополнительнойИнформации") Тогда Если ОсновноеИзображение <> ЗначениеВыбора Тогда ОсновноеИзображение = ЗначениеВыбора; КонецЕсли;
СписокКнопокФайлов = Новый СписокЗначений; СписокКнопокФайлов.Добавить(ЭлементыФормы.ДействияФормы.Кнопки.Файлы); СписокКнопокФайлов.Добавить(ЭлементыФормы.ДействияФормы.Кнопки.Подменю.Кнопки.Файлы); РаботаСФайлами.ПолучитьКартинкуКнопкиОткрытияФайлов(Ссылка, СписокКнопокФайлов);
ИначеЕсли ТипЗнч(ЗначениеВыбора) = Тип("Структура") Тогда ОбработкаПодбора(ЗначениеВыбора); КонецЕсли;
КонецПроцедуры // ОбработкаВыбора()
// Обработчик события ОбработкаЗаписиНовогоОбъекта формы. // Процедура ОбработкаЗаписиНовогоОбъекта(Объект, Источник)
Если ТипЗнч(Объект) = Тип("ПланВидовХарактеристикОбъект.СвойстваОбъектов") Тогда ОбработкаОбъектЗначенияСвойств.ПроверитьДобавитьНовоеСвойство(Объект.Ссылка, ЭлементыФормы.СвойстваИЗначения); КонецЕсли;
Если ТипЗнч(Объект) = Тип("СправочникОбъект.КатегорииОбъектов") Тогда ОбработкаОбъектКатегорииОбъекта.ПроверитьДобавитьНовуюКатегорию(Объект.Ссылка, ЭлементыФормы.Категории); КонецЕсли;
КонецПроцедуры // ОбработкаЗаписиНовогоОбъекта()
// Обработчик события ОбработкаОповещения формы. // Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ОбновитьФорму" и (Источник = Ссылка или (ТипЗнч(Источник) = Тип("СправочникСсылка.Номенклатура") и Источник.Пустая())) Тогда ИмяОбновляемогоЭлемента = Параметр.ИмяЭлемента;
Если ИмяОбновляемогоЭлемента = "ОсновноеИзображение" Тогда Если мТекущееОсновноеИзображение <> ОсновноеИзображение.Хранилище.Получить() Тогда мТекущееОсновноеИзображение = ОсновноеИзображение.Хранилище.Получить(); ПоказатьОсновноеИзображение(); КонецЕсли; ИначеЕсли ИмяОбновляемогоЭлемента = "ИзмененСписокСправочникаХранилищеДопИнформации" Тогда СписокКнопокФайлов = Новый СписокЗначений; СписокКнопокФайлов.Добавить(ЭлементыФормы.ДействияФормы.Кнопки.Файлы); СписокКнопокФайлов.Добавить(ЭлементыФормы.ДействияФормы.Кнопки.Подменю.Кнопки.Файлы); РаботаСФайлами.ПолучитьКартинкуКнопкиОткрытияФайлов(Ссылка, СписокКнопокФайлов); КонецЕсли; КонецЕсли;
КонецПроцедуры // ОбработкаОповещения()
// Обработчик события элемента КоманднаяПанельФормы.Файлы. // Процедура ДействияФормыФайлы(Кнопка)
Если Не РаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма) Тогда Возврат; КонецЕсли;
СтруктураДляСпискаИзображдений = Новый Структура("ОтборОбъектИспользование, ОтборОбъектЗначение, ДоступностьОтбораОбъекта, ВидимостьКолонкиОбъекта", Истина, Ссылка, Ложь, Ложь); СтруктураДляСпискаДополнительныхФайлов = Новый Структура("ОтборОбъектИспользование, ОтборОбъектЗначение, ДоступностьОтбораОбъекта, ВидимостьКолонкиОбъекта", Истина, Ссылка, Ложь, Ложь); ОбязательныеОтборы = Новый Структура("Объект", Ссылка);
// Обработчик события НачалоВыбораИзСписка для полного наименования. // Процедура НаименованиеПолноеНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Формирование списка выбора. Список = Новый СписокЗначений; Список.Добавить(Наименование);
// Выбор из списка и обработка выбора. РезультатВыбора = ВыбратьИзСписка(Список, ЭлементыФормы.НаименованиеПолное); Если РезультатВыбора <> Неопределено Тогда НаименованиеПолное = РезультатВыбора.Значение; мФормироватьНаименованиеПолноеАвтоматически = Истина; КонецЕсли;
Если Элемент.Колонки.ПометкаУдаления.Видимость Тогда ОформлениеСтроки.Ячейки.ПометкаУдаления.ОтображатьКартинку = Истина; ОформлениеСтроки.Ячейки.ПометкаУдаления.ИндексКартинки = Число(ДанныеСтроки.ПометкаУдаления); КонецЕсли;
Если Элемент.Колонки.Принадлежность.Видимость Тогда ОформлениеСтроки.Ячейки.Принадлежность.ОтображатьФлажок = Истина; КонецЕсли;
КонецПроцедуры // КатегорииПриВыводеСтроки()
//////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ
// Процедура - обработчик события "НачалоВыбора" для "ЕдиницаХраненияОстатков". // Процедура ЕдиницаХраненияОстатковНачалоВыбора(Элемент, СтандартнаяОбработка)
// Обработчик события нажатия на кнопку Комплектующие. // Процедура ДействияФормыКомплектующие(Кнопка)
МассивНоменклатуры = Новый Массив; МассивНоменклатуры.Добавить(Ссылка); ТабДокумент = РаботаСДиалогами.НапечататьКомплектующие(МассивНоменклатуры);
Если ТабДокумент.ВысотаТаблицы > 0 Тогда УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, , , "Комплектующие", Ссылка); Иначе Предупреждение("Для " + СокрЛП(Ссылка) + " список комплектующих не задан!"); КонецЕсли;
КонецПроцедуры // ДействияФормыКомплектующие()
// Обработчик события элемента КоманднаяПанельФормы.ДействиеОткрытьПрайсЛист. // Процедура ДействияФормыОткрытьПрайсЛист(Кнопка)
// Обработчик события ПриНачалеРедактирования ТЧ "ЕдиницыИзмерения". // Процедура ЕдиницыИзмеренияПриНачалеРедактирования(Элемент, НоваяСтрока)
ТекущаяСтрока = Элемент.ТекущиеДанные;
Если НоваяСтрока Тогда Если ТекущаяСтрока.Коэффициент = 0 Тогда ТекущаяСтрока.Коэффициент = 1; КонецЕсли;
Если НЕ ЗначениеЗаполнено(ТекущаяСтрока.ЕдиницаПоКлассификатору) Тогда ТекущаяСтрока.ЕдиницаПоКлассификатору = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнаяЕдиницаПоКлассификатору"); КонецЕсли; КонецЕсли;
Если Запрос.Выполнить().Пустой() Тогда УстановитьВидимость(); Иначе ОбщегоНазначения.СообщитьОбОшибке("Изменение признака весового товара невозможно, так как для товара заданы " + ?(Весовой, "штрихкоды штучного товара", "коды весового товара")); Весовой = Не Весовой; КонецЕсли;
Если ОтредактировалиТекст = Истина Тогда Комментарий = ФормаРедактированияТекста.ПолучитьРедактируемыйТекст(); КонецЕсли;
КонецПроцедуры // КомментарийНачалоВыбора()
// Процедура вызывается при нажатии кнопки "Печать" командной панели формы, // вызывает печать по умолчанию для формы документа. // Процедура ОсновныеДействияФормыДействиеПечать(Кнопка)
Если ЗначениеЗаполнено(ТекущаяСтрока.ХарактеристикаКомплектующей) И ТекущаяСтрока.ХарактеристикаКомплектующей.Владелец <> ТекущаяСтрока.Комплектующая Тогда ТекущаяСтрока.ХарактеристикаКомплектующей = Неопределено; КонецЕсли;
Если Элемент.Значение = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN128 Тогда Если ПустаяСтрока(ЭлементыФормы.Штрихкоды.ТекущиеДанные.ПредставлениеШтрихкода) Тогда ЭлементыФормы.Штрихкоды.ТекущиеДанные.ПредставлениеШтрихкода = ЭлементыФормы.Штрихкоды.ТекущиеДанные.Штрихкод; Иначе Ответ = Вопрос("Представление штрихкода не пустое. |Изменить представление штрихкода на значение штрихкода?", РежимДиалогаВопрос.ДаНет); Если Ответ = КодВозвратаДиалога.Да Тогда ЭлементыФормы.Штрихкоды.ТекущиеДанные.ПредставлениеШтрихкода = ЭлементыФормы.Штрихкоды.ТекущиеДанные.Штрихкод; КонецЕсли; КонецЕсли; КонецЕсли;
КонецПроцедуры
Процедура ШтрихкодыШтрихкодПриИзменении(Элемент)
Если ЭлементыФормы.Штрихкоды.ТекущиеДанные.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN128 Тогда Если ПустаяСтрока(ЭлементыФормы.Штрихкоды.ТекущиеДанные.ПредставлениеШтрихкода) Тогда ЭлементыФормы.Штрихкоды.ТекущиеДанные.ПредставлениеШтрихкода = Элемент.Значение; Иначе Ответ = Вопрос("Представление штрихкода не пустое. |Изменить представление штрихкода на значение штрихкода?", РежимДиалогаВопрос.ДаНет); Если Ответ = КодВозвратаДиалога.Да Тогда ЭлементыФормы.Штрихкоды.ТекущиеДанные.ПредставлениеШтрихкода = Элемент.Значение; КонецЕсли; КонецЕсли; КонецЕсли;
КонецПроцедуры
// Обработчик события нажатия на кнопку "Новый штрихкод". // Процедура НовыйШтрихкод(Кнопка)
Если Не РаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма) Тогда Возврат; КонецЕсли;
Если ТекущаяСтрока = Неопределено Тогда Ответ = Вопрос("Не выбрана строка таблицы штрихкодов, для которой регистрируется штрихкод." + Символы.ПС + "Добавить новую строку?", РежимДиалогаВопрос.ДаНет); Если Ответ = КодВозвратаДиалога.Нет Тогда Возврат; КонецЕсли;
Попытка ТекЗапись.Записать(); Исключение КонецПопытки; Иначе Если ЗначениеЗаполнено(ТекущаяСтрока.ШтрихКод) Тогда Ответ = Вопрос("Сформировать новый штрихкод для выбранной строки?", РежимДиалогаВопрос.ДаНет); Если Ответ = КодВозвратаДиалога.Нет Тогда Возврат; КонецЕсли; КонецЕсли;
Попытка ТекЗапись.Записать(); Исключение КонецПопытки; КонецЕсли;
КонецПроцедуры // НовыйШтрихкод()
/////////////////////////////////////////////////////////////////////////////// //// ФУНКЦИИ ВЗАИМОДЕЙСТВИЯ С ТОРГОВЫМ ОБОРУДОВАНИЕМ (ОБЩИЕ ФУНКЦИИ API)
// Процедура - обработчик внешнего событие, которое возникает при посылке // внешним приложением сообщения, сформированного в специальном формате. // Внешнее событие сначала обрабатывается всеми открытыми формами, имеющими // обработчик этого события, а затем может быть обработано в процедуре модуля // приложения с именем ОбработкаВнешнегоСобытия(). // // Параметры: // Источник - <Строка> // - Источник внешнего события. // // Событие - <Строка> // - Наименование события. // // Данные - <Строка> // - Данные для события. // Процедура ВнешнееСобытие(Источник, Событие, Данные)
// Функция возвращает признак того, что клиент поддерживает работу с видом ТО, // переданным в качестве параметра. // // Параметры: // Вид - <ПеречислениеСсылка.ВидыТорговогоОборудования> // - Вид торгового оборудования, информация о поддержке // которого запрашивается. // // Возвращаемое значение: // <Булево> - Признак поддержки указанного класса торгового оборудования. // Функция ПоддерживаетсяВидТО(Вид) Экспорт
Результат = Ложь;
Если Вид = Перечисления.ВидыТорговогоОборудования.СканерШтрихКода Тогда Результат = Истина; КонецЕсли;
Возврат Результат;
КонецФункции // ПоддерживаетсяВидТО()
/////////////////////////////////////////////////////////////////////////////// //// ФУНКЦИИ ВЗАИМОДЕЙСТВИЯ С ТОРГОВЫМ ОБОРУДОВАНИЕМ (СКАНЕР ШТРИХКОДА)
// Функция осуществляет обработку считывания штрихкода номенклатуры // // Параметры: // Номенклатура - <СправочникСсылка.Номенклатура> // - Номенклатура, штрихкод которой был отсканирован. // // Характеристика – <СправочникСсылка.ХарактеристикиНоменклатуры> // - Характеристика отсканированной номенклатуры. // // Серия - <СправочникСсылка.СерииНоменклатуры> // - Серия отсканированной номенклатуры. // // Качество - <СправочникСсылка.Качество> // - Качество отсканированной номенклатуры. // // Единица - <СправочникСсылка.ЕдиницыИзмерения> // - Единица измерения отсканированной номенклатуры. // // Количество - <Число> // - Количество отсканированной номенклатуры. // // СШК - <Строка> // - Идентификатор сканера штрихкода, с которым связано данное // событие. // // Возвращаемое значение: // <Булево> - Данная ситуация обработана. // Функция СШКНоменклатура(Номенклатура, Характеристика, Серия, Качество, Единица, Количество, СШК) Экспорт
// Функция осуществляет обработку считывания штрихкода серийного номера // // Параметры: // Номер - <СправочникСсылка.СерийныеНомера> // - Отсканированный серийный номер. // // СШК - <Строка> // - Идентификатор сканера штрихкода, с которым связано данное // событие. // // Возвращаемое значение: // <Булево> - Данная ситуация обработана. // Функция СШКСерийныйНомер(Номер, СШК) Экспорт
Предупреждение("Подбор серийных номеров в данной форме не предусмотрен!"); Возврат Истина;
КонецФункции // СШКСерийныйНомер()
// Функция осуществляет обработку считывания штрихкода информационной карты // // Параметры: // Карта - <СправочникСсылка.ИнформационныеКарты> // - Отсканированная информационная карта. // // СШК - <Строка> // - Идентификатор сканера штрихкода, с которым связано данное // событие. // // Возвращаемое значение: // <Булево> - Данная ситуация обработана. // Функция СШКИнформационнаяКарта(Карта, СШК) Экспорт
Предупреждение("Подбор информационных карт в данной форме не предусмотрен!"); Возврат Истина;
КонецФункции // СШКИнформационнаяКарта()
// Функция осуществляет обработку считывания штрихового кода, который не был // зарегистрирован. // // Параметры: // Штрихкод - <Строка> // - Считанный код. // // ТипКода - <ПланыВидовХарактеристикСсылка.ТипыШтрихкодов> // - Тип штрихкода. Пустая ссылка в случае, если тип определить не // представляется возможным. // // СШК - <Строка> // - Идентификатор сканера штрихкода, с которым связано данное // событие. // // Возвращаемое значение: // <Булево> - Данная ситуация обработана. // Функция СШКНеизвестныйКод(Штрихкод, ТипКода, СШК) Экспорт
Если ЭтоНовый() И РаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма) Тогда ЭлементыФормы.Штрихкоды.ДобавитьСтроку(); КонецЕсли;
Если ТекущиеДанные = Неопределено Тогда Предупреждение("Не выбрана строка таблицы штрихкодов, для которой регистрируется штрихкод."); Возврат Истина; КонецЕсли;
Попытка ТекЗапись.Записать(); Исключение КонецПопытки;
Возврат Истина;
КонецФункции // СШКНеизвестныйКод()
// Процедура осуществляет обработку ошибки, произошедшей при работе со сканером // штрихкода. // // Параметры: // Ошибка - <ПеречислениеСсылка.ТООшибки*> // - Возникшая ошибка. // // Штрихкод - <Строка> // - Считанный штрихкод или пустая строка, если штрихкод не был // считан. // // ТипШК - <ПланыВидовХарактеристикСсылка.ТипыШтрихкодов> // - Тип штрихкода или пустая ссылка в случае, если тип не определён. // // СШК - <Строка> // - Идентификатор сканера штрихкода, с которым связано данное // событие. // Процедура СШКОшибка(Ошибка, Штрихкод, ТипШК, СШК) Экспорт
Текст = ПолучитьСерверТО().ПолучитьТекстОшибкиСШКТО(Ошибка, Штрихкод, ТипШК); Предупреждение(Текст);
// Эта проверка добавлена, чтобы не выполнялось перезаполнение таблицы // при вызове данной процедуры из ПриИзмененииДанных, осуществляемом до // вызова из ПередОткрытием. Если ОбработкаОбъектЗначенияСвойств.НазначениеСвойств = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура Тогда ОбработкаОбъектЗначенияСвойств.ОбъектОтбораЗначений = Ссылка; ОбработкаОбъектЗначенияСвойств.ОбъектОтбораНазначений = ?(ЭтоНовый(), Родитель, Ссылка); ОбработкаОбъектЗначенияСвойств.ПрочитатьЗаполнитьСвойстваИЗначения(); КонецЕсли;
Если ОбработкаОбъектКатегорииОбъекта.НазначениеКатегорий = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура Тогда ОбработкаОбъектКатегорииОбъекта.ОбъектОтбораКатегорий = Ссылка; ОбработкаОбъектКатегорииОбъекта.ПрочитатьЗаполнитьКатегорииОбъекта(); КонецЕсли;
Отказ = Не РаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма);
КонецПроцедуры // СерииПередНачаломДобавления()
// Процедура - обработчик события ПередЗаписью формы. // Процедура ПередЗаписью(Отказ)
СтруктураОбязательныхПолей = Новый Структура;
СтруктураПоискаДублей = Новый Структура; СтруктураПоискаДублей.Вставить("Код", "=");
Для Каждого Реквизит Из ТаблицаРеквизитов Цикл Если (Реквизит.Обязательность Или Реквизит.ОбязательностьСистемная) И мРеквизитыСАвтозаполнением[Реквизит.Имя] = Неопределено Тогда СтруктураОбязательныхПолей.Вставить(Реквизит.Имя, Реквизит.Представление); КонецЕсли;
Если Реквизит.Уникальность Тогда СтруктураПоискаДублей.Вставить(Реквизит.Имя, "="); КонецЕсли; КонецЦикла;
// Проверяет уникальность номенклатуры. // // Параметры: // СтруктураПоискаДублей - структура, содержащая имена полей, по которым надо проверить дубли. // Отказ - флаг отказа в проведении. // Процедура ПроверитьУникальностьНоменклатуры(СтруктураПоискаДублей, Отказ) Экспорт
Если СтруктураПоискаДублей.Количество() > 1 Тогда ПоискДублей = Обработки.ПоискИЗаменаДублирующихсяЭлементов.Создать(); НайденныеОбъекты = ПоискДублей.НайтиДубли(ЭтотОбъект, СтруктураПоискаДублей);
Если НайденныеОбъекты.Количество() <> 0 Тогда Если НайденныеОбъекты.Количество() <> 1 Или ЭтоНовый() Тогда ФормаПоискаДублей = ПоискДублей.ПолучитьФорму("ФормаПоиска", ЭтаФорма); ФормаПоискаДублей.НайденныеОбъекты = НайденныеОбъекты;
Результат = ФормаПоискаДублей.ОткрытьМодально(); Если Результат = Неопределено Тогда Отказ = Истина; ИначеЕсли Результат <> Истина Тогда Отказ = Истина; ОповеститьОЗаписиНовогоОбъекта(Результат); Модифицированность = Ложь; Закрыть(); КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли;
// Функция возвращает значения констант, имена которых переданы в структуре. // // Параметры: // СтруктураКонстант - структура с именами нужных констант. // // Возвращаемое значение: // Выборка из результата запроса по константам. // Функция ПолучитьКонстанты(СтруктураКонстант)
Запрос = Новый Запрос;
ТекстЗапроса = " |ВЫБРАТЬ |";
Для Каждого ТекКонстанта Из СтруктураКонстант Цикл ТекстЗапроса = ТекстЗапроса + " | ТаблицаКонстант." + ТекКонстанта.Ключ + ","; КонецЦикла;
Если ТекущаяСтрока.МестоХранения.Владелец <> ТекущаяСтрока.Склад Тогда ТекущаяСтрока.МестоХранения = Справочники.МестаХранения.ПустаяСсылка(); КонецЕсли;
КонецПроцедуры
мПустаяКартинка = Новый Картинка; мЖирныйШрифт = Новый Шрифт(, , Истина);
СтруктураКонстант = Новый Структура; СтруктураКонстант.Вставить("ИспользоватьХарактеристикиНоменклатуры"); СтруктураКонстант.Вставить("ИспользоватьСерииНоменклатуры"); СтруктураКонстант.Вставить("ИспользоватьСерийныеНомера"); СтруктураКонстант.Вставить("ЕдиницаИзмеренияВеса"); СтруктураКонстант.Вставить("ЕдиницаИзмеренияОбъема");
// Заполним перечень страниц, которые можно открыть только после записи номенклатуры. мСтраницыПослеЗаписи = Новый Соответствие; мСтраницыПослеЗаписи.Вставить(ЭлементыФормы.ОсновнаяПанель.Страницы["НоменклатураПоставщика"], 0); мСтраницыПослеЗаписи.Вставить(ЭлементыФормы.ОсновнаяПанель.Страницы["ЦеныНоменклатуры"] , 0);
// Заполним перечень типов цен номенклатуры. мСписокТиповЦенНоменклатуры = Новый Соответствие;
Запрос = Новый Запрос(" |ВЫБРАТЬ РАЗРЕШЕННЫЕ | ТипыЦен.Ссылка КАК ТипЦен, | ТипыЦен.Наименование КАК ТипЦенПредставление |ИЗ | Справочник.ТипыЦенНоменклатуры КАК ТипыЦен |");
Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл мСписокТиповЦенНоменклатуры.Вставить(Выборка.ТипЦен, Выборка.ТипЦенПредставление); КонецЦикла;
// Создадим дерево, показывающее, какие ЭУ к каким рамкам относятся. мДеревоРамок = Новый ДеревоЗначений; мДеревоРамок.Колонки.Добавить("ИмяЭУ");
// Аналитика затрат. ДобавитьЭУВДерево("РамкаГруппыАналитикаЗатрат", Новый Структура("СтатьяЗатрат, НоменклатурнаяГруппаЗатрат"));
// Номенклатурная группа. ДобавитьЭУВДерево("РамкаГруппыНоменклатурнаяГруппа", Новый Структура("НоменклатурнаяГруппа, ВесовойКоэффициентВхождения"));
// Серийные номера. ДобавитьЭУВДерево("РамкаГруппыСерийныеНомера", Новый Структура("ВестиСерийныеНомера"));
// Заполним перечень реквизитов, которые система заполняет автоматически при записи элемента. мРеквизитыСАвтозаполнением = Новый Соответствие; мРеквизитыСАвтозаполнением.Вставить("ЕдиницаХраненияОстатков", 0); мРеквизитыСАвтозаполнением.Вставить("ЕдиницаДляОтчетов" , 1);
// Заполним перечень реквизитов, по которым можно устанавливать контроль уникальности. мРеквизитыКонтрольУникальности = Новый Соответствие; мРеквизитыКонтрольУникальности.Вставить("Наименование" , 0); мРеквизитыКонтрольУникальности.Вставить("НаименованиеПолное", 1); мРеквизитыКонтрольУникальности.Вставить("Артикул" , 2);
Для Каждого ТекКолонка Из ЭлементыФормы.Штрихкоды.Колонки Цикл Если ЗначениеЗаполнено(ТекКолонка.Данные) Тогда Штрихкоды.Колонки.Добавить(ТекКолонка.Имя); КонецЕсли; КонецЦикла; // Процедура размещает на форме дополнительные реквизиты // // Параметры: нет // Процедура ПР_УстановитьДополнительныеРеквизитыФормы()
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!