7.7 Не устанавливаются цены

Тема в разделе "Типовые решения "1С:Предприятие 7.7"", создана пользователем KingX, 17 апр 2012.

  1. TopicStarter Overlay
    KingX
    Offline

    KingX Опытный в 1С

    Регистрация:
    19 дек 2011
    Сообщения:
    144
    Симпатии:
    0
    Баллы:
    26
    Всем большой привет!
    Народ, подскажите, такая беда... Уже не знаю что делать... Сделал Перемещение ТМЦ, в таблицу добавил нужные товары, при формировки печатной формы М-11 цен нет, кроме одной. Зажел в этом же документе "Обновления цен" И понять не могу, почему нет цен в столбе "в документе" кроме одно... Посмотрел историю, цены есть, документ Поступления ТМЦ есть и проведен с обновлением цен... Что тут не так? ЧТо делать, как вывести цены "в документе", чтобы цены появились в форме печати??

    Вложения:

    • Untitled.jpg
      Untitled.jpg
      Размер файла:
      140,6 КБ
      Просмотров:
      59
  2. Vlad
    Offline

    Vlad Модераторы Команда форума Модератор

    Регистрация:
    16 авг 2006
    Сообщения:
    3.517
    Симпатии:
    19
    Баллы:
    29
    Перемещение с оптового склада на оптовый или на розничный?
  3. TopicStarter Overlay
    KingX
    Offline

    KingX Опытный в 1С

    Регистрация:
    19 дек 2011
    Сообщения:
    144
    Симпатии:
    0
    Баллы:
    26
    Опт на опт
  4. TopicStarter Overlay
    KingX
    Offline

    KingX Опытный в 1С

    Регистрация:
    19 дек 2011
    Сообщения:
    144
    Симпатии:
    0
    Баллы:
    26
    Народ вы тут?
    Забыл сказать что это ТиС 7.7... =)
  5. Vlad
    Offline

    Vlad Модераторы Команда форума Модератор

    Регистрация:
    16 авг 2006
    Сообщения:
    3.517
    Симпатии:
    19
    Баллы:
    29
    То, что ТиС, по скрину увидел...
    Перемещение с опта на отп учитывается по себестоимости. Какие цены ты там хочешь увидеть?
  6. TopicStarter Overlay
    KingX
    Offline

    KingX Опытный в 1С

    Регистрация:
    19 дек 2011
    Сообщения:
    144
    Симпатии:
    0
    Баллы:
    26
    Закупочные. Мы не торгуем а передаем с основной базы на другую т.е перемещаем.
  7. TopicStarter Overlay
    KingX
    Offline

    KingX Опытный в 1С

    Регистрация:
    19 дек 2011
    Сообщения:
    144
    Симпатии:
    0
    Баллы:
    26
    И получается примерно вот так...

    Вложения:

    • Untitlewed.jpg
      Untitlewed.jpg
      Размер файла:
      91 КБ
      Просмотров:
      36
  8. Vlad
    Offline

    Vlad Модераторы Команда форума Модератор

    Регистрация:
    16 авг 2006
    Сообщения:
    3.517
    Симпатии:
    19
    Баллы:
    29
    Нет у тебя себестоимости, значит, на замки. Смотри даты, сделай отчет по регистрам, восстановление последовательности...
    Короче, базу смотреть надо - так не скажу.
  9. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Уточню только что смотреть нужно отчет "Ведомость по партиям ТМЦ". Где-то не распределился товар по партиям. Возможно выключен контроль отрицательных остатков
  10. TopicStarter Overlay
    KingX
    Offline

    KingX Опытный в 1С

    Регистрация:
    19 дек 2011
    Сообщения:
    144
    Симпатии:
    0
    Баллы:
    26
    Я в форме пытаюсь ввести чтоб он читал базовые цены... Но не получается... пробывал так ТабПеч.Цена = Докум.БазоваяТипЦен.Цена ни в какую.... -_-
  11. TopicStarter Overlay
    KingX
    Offline

    KingX Опытный в 1С

    Регистрация:
    19 дек 2011
    Сообщения:
    144
    Симпатии:
    0
    Баллы:
    26
    а где эта функция востановление последовательности? найти не могу...
  12. TopicStarter Overlay
    KingX
    Offline

    KingX Опытный в 1С

    Регистрация:
    19 дек 2011
    Сообщения:
    144
    Симпатии:
    0
    Баллы:
    26
    Я не проведомость по партиям ТМЦ, но проверил что контроль отрицательных остатков включен "по фирмам"
  13. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    В типовой ТиС нет такого реквизита... БазоваяТипЦен Нужно использовать процедуру глПолучитьЦену

    См. Меню-Операции-Проведение документов
  14. TopicStarter Overlay
    KingX
    Offline

    KingX Опытный в 1С

    Регистрация:
    19 дек 2011
    Сообщения:
    144
    Симпатии:
    0
    Баллы:
    26
    Как нету? Я смотрел в обработке обновления цен.... там есть такая процедура...
    ПОпробывал "глПолучитьЦену" все равно есть пустые цены... ПРосто я пытался чтоб он читал из Базовой закупочной цены, а не по документу..
  15. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Речь вообще-то идет о документе "Переменение ТМЦ" или где?
    Причем здесь обработка обновления? Что-то пропустил?
  16. TopicStarter Overlay
    KingX
    Offline

    KingX Опытный в 1С

    Регистрация:
    19 дек 2011
    Сообщения:
    144
    Симпатии:
    0
    Баллы:
    26
    Ну на первом скрине показанно Обновление цен в справочнике которое делается из документа Перемещение ТМЦ "Действие - Обновление цен" Вот там и пишется что в документе 0 руб, а Закупочная базовая есть цена...
  17. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Судя по скрину у вас ВПФ. Выложите - посмотрим что откуда берется
  18. TopicStarter Overlay
    KingX
    Offline

    KingX Опытный в 1С

    Регистрация:
    19 дек 2011
    Сообщения:
    144
    Симпатии:
    0
    Баллы:
    26
    Обновление цен
    Код:
    ////////////////////////////////////////////////////////////////////////////////
    // ПЕРЕМЕННЫЕ МОДУЛЯ
    //
    Перем ВалДок, ДатаДок, КурсДок;  // Реквизиты документа
    Перем ФирмаДок;
    Перем ЕстьНПДок, ЕстьНДСДок, ЦенаВклНПДок, ЦенаВклНДСДок;
    Перем ВидДок;	  // Вид документа
    Перем МеткаЕсть, МеткиНет;	   // Номера иконок пометки строки таблицы
    Перем ШиринаЦены, ШиринаЕдиницы; // Ширины соответствующих колонок
    Перем ШиринаВалюты;
    Перем ДатаЦен;				   // дата, на которую будут записываться цены
    Перем СписокТиповЦен;			// Список всех типов цен. Номер в списке служит
    // для идентификации соответствующей клонки в таблице
    
    Перем ЕстьОптЦена;	 // можно ли обновлять оптовую цену
    Перем ЕстьРознЦена;	 // можно ли обновлять розничную цену
    Перем ЕстьПошлинаСборы;		  // есть ли пошлина и сборы
    Перем НомерРознТипаЦен;		  // в списке СписокТиповЦен
    Перем КолОбязательныхКолонок;	// Количество обязательных колонок
    Перем НомерТекущейФормы, ТаблицаПечФорм;
    ////////////////////////////////////////////////////////////////////////////////
    // ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ
    //
    //******************************************************************************
    // УправлениеВидимостьКолонок(НомерЗакладки)
    //
    // Параметры:
    //  НомерЗакладки
    //   1 - Закладка "Цена"
    //   2 - Закладка "РозничнаяЦена"
    //
    // Возвращаемое значение:
    //  Нет
    //
    // Описание:
    //  Управляет видимостью колонок в зависимости от выбора закладки
    //
    Процедура УправлениеВидимостьКолонок(НомерЗакладки)
    
    Форма.ВключитьВЦенуПошлинуСборы.Видимость(0);
    
    Если НомерЗакладки = 1 Тогда
    
    // Закладка Цена
    ТаблЗнач.ВидимостьКолонки("Цена"		 , 1);
    ТаблЗнач.ВидимостьКолонки("РозничнаяЦена", 0);
    
    // Покажем все колонки по типам цен
    КолТиповЦен = СписокТиповЦен.РазмерСписка();
    Для Сч = 1 По КолТиповЦен Цикл
    ТаблЗнач.ВидимостьКолонки("Цена"+Сч, 1);
    ТаблЗнач.ВидимостьКолонки("Ед"  +Сч, 1);
    ТаблЗнач.ВидимостьКолонки("Вал" +Сч, 1);
    КонецЦикла;
    
    Иначе // Закладка РозничнаяЦена
    
    ТаблЗнач.ВидимостьКолонки("Цена"		 , 0);
    ТаблЗнач.ВидимостьКолонки("РозничнаяЦена", 1);
    
    // Скроем все колонки по типам цен
    КолТиповЦен = СписокТиповЦен.РазмерСписка();
    Для Сч = 1 По КолТиповЦен Цикл
    ТаблЗнач.ВидимостьКолонки("Цена"+Сч, 0);
    ТаблЗнач.ВидимостьКолонки("Ед"  +Сч, 0);
    ТаблЗнач.ВидимостьКолонки("Вал" +Сч, 0);
    КонецЦикла;
    
    // Покажем колонку по розничному типу цен
    ТаблЗнач.ВидимостьКолонки("Цена"+НомерРознТипаЦен, 1);
    ТаблЗнач.ВидимостьКолонки("Ед"  +НомерРознТипаЦен, 1);
    ТаблЗнач.ВидимостьКолонки("Вал" +НомерРознТипаЦен, 1);
    
    КонецЕсли;
    
    КонецПроцедуры // УправлениеВидимостьКолонок()
    //******************************************************************************
    // УправлениеДиалогомПриОткрытии()
    //
    // Параметры:
    //  Нет
    //
    // Возвращаемое значение:
    //  Нет
    //
    // Описание:
    //  Определяет закладки "Цена", "РозничнаяЦена", если есть розничная цена.
    // Управлям диалогом при открытии обработки
    //
    Процедура УправлениеДиалогомПриОткрытии()
    
    Если (ЕстьОптЦена = 1) И (ЕстьРознЦена = 1) Тогда
    Форма.ИспользоватьЗакладки(1);
    Форма.Закладки.ДобавитьЗначение(1,"Цена");
    Форма.Закладки.ДобавитьЗначение(2,"Розничная цена");
    Форма.Закладки.ТекущаяСтрока(1);
    КонецЕсли;
    
    Форма.ИспользоватьСлой("Общий");
    
    // Слой Цена
    Форма.ВключитьВЦенуПошлинуСборы.Видимость(ЕстьПошлинаСборы);
    
    // Слой РозничнаяЦена
    ВариантУстановкиРознЦен = 1; // всегда помечен
    Форма.ТекстРозничныйТипЦен.Заголовок("Розничный тип цен задается в настройке параметров учета.");
    
    // Слой Общий
    Если ЕстьПошлинаСборы = 0 Тогда
    ТаблЗнач.ВидимостьКолонки("ПошлинаСборы", 0);
    КонецЕсли;
    
    Если ЕстьОптЦена = 1 Тогда
    Форма.ИспользоватьСлой("Цена", 1);
    
    ТаблЗнач.ВидимостьКолонки("РозничнаяЦена", 0);
    Иначе
    Форма.ИспользоватьСлой("РозничнаяЦена", 1);
    
    ТаблЗнач.ВидимостьКолонки("Цена", 0);
    
    // Скроем все колонки по типам цен, кроме колонки по розничному типу цен
    КолТиповЦен = СписокТиповЦен.РазмерСписка();
    Для Сч = 1 По КолТиповЦен Цикл
    Если Сч <> НомерРознТипаЦен Тогда
    ТаблЗнач.ВидимостьКолонки("Цена"+Сч, 0);
    ТаблЗнач.ВидимостьКолонки("Ед"  +Сч, 0);
    ТаблЗнач.ВидимостьКолонки("Вал" +Сч, 0);
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    ТаблЗнач.Фиксировать(2);
    
    КонецПроцедуры // УправлениеДиалогомПриОткрытии()
    //******************************************************************************
    // УправлениеДиалогом()
    //
    // Параметры:
    // Нет
    //
    // Возвращаемое значение:
    // Нет
    //
    // Описание:
    // Управление доступностью элементов диалога.
    //
    Процедура УправлениеДиалогом()
    
    Если ВариантУстановкиЦен = 1 Тогда
    Форма.ВключитьВЦенуПошлинуСборы.Доступность(1);
    Форма.БазовыйТипЦен.Доступность(1);
    Иначе // ВариантУстановкиЦен = 2
    Форма.ВключитьВЦенуПошлинуСборы.Доступность(0);
    ВключитьВЦенуПошлинуСборы = 0;
    Форма.БазовыйТипЦен.Доступность(0);
    БазовыйТипЦен = 0;
    КонецЕсли;
    
    КонецПроцедуры // УправлениеДиалогом()
    //******************************************************************************
    // ПриСменеФлагаУстановитьСвойство()
    //
    // Параметры:
    //  Нет
    //
    // Возвращаемое значение:
    //  Нет
    //
    // Вызывается из формул элементов диалога
    // Флаг УстановитьСвойствоТоваров
    //
    // Описание:
    //  Отрабатывает изменение флага
    //
    Процедура ПриСменеФлагаУстановитьСвойство()
    
    Если ПустоеЗначение(УстановитьСвойствоТоваров) = 1 Тогда
    Форма.СвойствоТоваров.Доступность(0);
    Иначе
    Форма.СвойствоТоваров.Доступность(1);
    КонецЕсли;
    
    КонецПроцедуры // ПриСменеФлагаУстановитьСвойство()
    //******************************************************************************
    // ЗаполнитьЦеныВСтрокеТаблицы()
    //
    // Параметры:
    //  Нет
    //
    // Возвращаемое значение:
    //  Нет
    //
    // Описание:
    //  Считывает в текущую строку таблицы формы значения в колонки цен из справочника
    //
    Процедура ЗаполнитьЦеныВСтрокеТаблицы()
    
    Перем Сч;
    ТекСтрока = ТаблЗнач.НомерСтроки;
    ТекНоменклатура = ТаблЗнач.Номенклатура;
    
    // Цикл по типам цен
    Для Сч = 1 По СписокТиповЦен.РазмерСписка() Цикл
    ТекТипЦен   = СписокТиповЦен.ПолучитьЗначение(Сч);
    
    ЦенаЦены = 0; ЕдЦены = ""; ВалЦены = ""; ЦенаСпр = "";
    ИДколонки	= Строка(Сч);
    
    Если глВернутьЦену(ТекНоменклатура, ТекТипЦен, ДатаЦен, ЦенаЦены, ЕдЦены, ВалЦены,,ЦенаСпр) = 1 Тогда
    ТаблЗнач.УстановитьЗначение(ТекСтрока, "ЦенаСпр"+ ИДколонки, ЦенаСпр);
    ТаблЗнач.УстановитьЗначение(ТекСтрока, "Цена" + ИДколонки, Формат(ЦенаЦены,"Ч15.2"));
    ТаблЗнач.УстановитьЗначение(ТекСтрока, "Ед"  + ИДколонки, ЕдЦены);
    ТаблЗнач.УстановитьЗначение(ТекСтрока, "Вал" + ИДколонки, ВалЦены);
    Иначе
    // Цена не задана, почистим ячейки
    ТаблЗнач.УстановитьЗначение(ТекСтрока, "ЦенаСпр"+ ИДколонки, "");
    ТаблЗнач.УстановитьЗначение(ТекСтрока, "Цена"   + ИДколонки, " ");
    ТаблЗнач.УстановитьЗначение(ТекСтрока, "Ед"	 + ИДколонки, " ");
    ТаблЗнач.УстановитьЗначение(ТекСтрока, "Вал" + ИДколонки, " ");
    КонецЕсли;
    
    КонецЦикла;
    КонецПроцедуры // ЗаполнитьЦеныВСтрокеТаблицы()
    //******************************************************************************
    // ЗаполнитьЦеныВТаблице()
    //
    // Параметры:
    //  Нет
    //
    // Возвращаемое значение:
    //  Нет
    //
    // Описание:
    //  Добавляет (считывает) в таблицу формы значения в колонки цен из справочника
    //
    Процедура ЗаполнитьЦеныВТаблице()
    
    КолКол = ТаблЗнач.КоличествоКолонок();
    
    // Сформируем список обрабатываемых типов цен
    Если КолКол <= КолОбязательныхКолонок Тогда
    
    // типы цен из справочника еще не считывали, поэтому надо добавить колонки
    
    СписокТиповЦен.УдалитьВсе();
    
    // Добавим колонки цен, если надо
    СпрТипЦен = СоздатьОбъект("Справочник.ТипыЦен");
    СпрТипЦен.ВыбратьЭлементы();
    Пока СпрТипЦен.ПолучитьЭлемент() = 1 Цикл
    
    ТекТипЦен = СпрТипЦен.ТекущийЭлемент();
    Если ТекТипЦен.ПометкаУдаления() = 1 Тогда
    Продолжить;
    КонецЕсли;
    
    СписокТиповЦен.ДобавитьЗначение(ТекТипЦен);
    
    НазваниеЦены = СокрЛП(ТекТипЦен.Наименование);
    ИДколонки	= Строка(СписокТиповЦен.РазмерСписка());
    
    Если ТекТипЦен = РозничныйТипЦен Тогда
    НомерРознТипаЦен = СписокТиповЦен.РазмерСписка();
    КонецЕсли;
    
    ТаблЗнач.НоваяКолонка("ЦенаСпр"+ ИДколонки);  
    ТаблЗнач.ВидимостьКолонки("ЦенаСпр"+ ИДколонки,0);
    
    ТаблЗнач.НоваяКолонка("Цена" + ИДколонки,,,, НазваниеЦены, ШиринаЦены,, 2);
    ТаблЗнач.НоваяКолонка("Ед"   + ИДколонки,,,, " "		 , ШиринаЕдиницы);
    ТаблЗнач.НоваяКолонка("Вал"  + ИДколонки,,,, " "		 , ШиринаВалюты);
    
    // Заполним две служебные строки
    ПерваяСтр = ?(ПустоеЗначение(ТекТипЦен.БазовыйТипЦен) = 1,
    "Базовая, ",
    СокрЛП(ТекТипЦен.Процент) + "% на " + СокрЛП(ТекТипЦен.БазовыйТипЦен));
    ВтораяСтр = СокрЛП(ТекТипЦен.Валюта);
    
    ТаблЗнач.УстановитьЗначение(1, "Цена"+ ИДколонки, ПерваяСтр);
    ТаблЗнач.УстановитьЗначение(2, "Цена"+ ИДколонки, ВтораяСтр);
    
    КонецЦикла;
    КонецЕсли;
    
    Если СписокТиповЦен.РазмерСписка() = 0 Тогда
    Возврат; // не заданы типы цен, заполнять нечего
    КонецЕсли;
    
    // В цикле по строкам табличной части заполним значения цен
    ТаблЗнач.ВыбратьСтроки();
    Пока ТаблЗнач.ПолучитьСтроку() = 1 Цикл
    
    // Первые две строки пропускаем (служебные)
    Если  ТаблЗнач.НомерСтроки < 3 Тогда
    Продолжить;
    КонецЕсли;
    
    ЗаполнитьЦеныВСтрокеТаблицы();
    
    КонецЦикла;
    
    КонецПроцедуры // ЗаполнитьЦеныВТаблице()
    //******************************************************************************
    // ПриИзмененииСпособаДаты()
    //
    // Параметры:
    //  Нет
    //
    // Возвращаемое значение:
    //  Нет
    //
    // Вызывается из формул элементов диалога
    //  переключатель "устанавливать цены на дату"
    //
    // Описание:
    //  Обработка изменения даты отображения и записи цен
    //
    Процедура ПриИзмененииСпособаДаты()
    
    Если СпособДаты = 1 Тогда
    ДатаЦен = РабочаяДата();
    Иначе
    ДатаЦен = ДатаДок;
    КонецЕсли;
    
    // Обновим цены в таблице (считаем из справочника)
    ЗаполнитьЦеныВТаблице();
    
    КонецПроцедуры // ПриИзмененииСпособаДаты()
    //******************************************************************************
    // ГрупповаяПометка(Режим)
    //
    // Параметры:
    //  Режим:
    //   1 - пометить все
    //   2 - снять пометку
    //   3 - инвертировать пометку
    //
    // Возвращаемое значение:
    //  Нет
    //
    // Вызывается из формул элементов диалога
    // кнопки групповой пометки
    //
    // Описание:
    //  Производит групповые действия с пометкой строк таблицы формы
    //
    Процедура ГрупповаяПометка(Режим)
    
    ТаблЗнач.ВыбратьСтроки();
    
    Пока ТаблЗнач.ПолучитьСтроку() = 1 Цикл
    
    // Первые две строки пропускаем (служебные)
    Если ТаблЗнач.НомерСтроки< 3  Тогда
    Продолжить;
    КонецЕсли;
    
    Если Режим=1 Тогда			
    
    ТаблЗнач.Пометка = МеткаЕсть;
    
    ИначеЕсли Режим=2 Тогда
    
    ТаблЗнач.Пометка = МеткиНет;
    
    ИначеЕсли Режим=3 Тогда
    
    Если ТаблЗнач.Пометка=МеткиНет Тогда
    ТаблЗнач.Пометка = МеткаЕсть;
    Иначе
    ТаблЗнач.Пометка = МеткиНет;
    КонецЕсли;						  
    
    КонецЕсли;
    
    КонецЦикла;
    
    КонецПроцедуры // ГрупповаяПометка()
    //******************************************************************************
    // ПриДвойномЩелчкеНаТаблице()
    //
    // Параметры:
    //  Нет
    //
    // Возвращаемое значение:
    //  Нет
    //
    // Вызывается из формул элементов диалога
    //  Таблица значений ТаблЗнач
    //
    // Описание:
    //  Обрабатывает двойной щелчок (нажатие клавиши "Enter") на таблице формы
    //
    Процедура ПриДвойномЩелчкеНаТаблице()
    
    Перем ТекКол, ТекСтр;
    
    ТаблЗнач.ТекущаяКолонка(,ТекКол);
    ТекСтр = ТаблЗнач.ТекущаяСтрока();
    КодТекКол = ТаблЗнач.ПолучитьПараметрыКолонки(ТекКол);
    
    Если ТекСтр > 0 Тогда
    
    Если КодТекКол = "Пометка" Тогда
    
    Если ТаблЗнач.Пометка = МеткаЕсть Тогда
    ТаблЗнач.Пометка = МеткиНет;
    Иначе
    ТаблЗнач.Пометка = МеткаЕсть;
    КонецЕсли;
    
    ИначеЕсли КодТекКол = "Номенклатура" Тогда
    
    ОткрытьФормуМодально(ТаблЗнач.Номенклатура);
    
    // Могли отредактировать ценовые характеристики - обновим цены в текущей строке
    ЗаполнитьЦеныВСтрокеТаблицы();
    
    ИначеЕсли (Найти(КодТекКол, "Цена") = 1)
    И (СтрДлина(КодТекКол) > 4) Тогда
    
    //Надо открыть форму элемента цен
    НомерТипаЦен = Число(Сред(КодТекКол,5));
    ТипЦен  = СписокТиповЦен.ПолучитьЗначение(НомерТипаЦен,"");  
    Если ТипЦен.Рассчитывается = 0 Тогда
    СпрЦена = 0;
    глВернутьЦену(ТаблЗнач.Номенклатура, ТипЦен, ДатаЦен, , , , , СпрЦена);
    ОткрытьФормуМодально(СпрЦена, ДатаЦен);
    
    // Могли отредактировать ценовые характеристики - обновим цены в текущей строке
    ЗаполнитьЦеныВСтрокеТаблицы();
    Иначе
    Предупреждение("Цена рассчитывается на основании """ + СокрЛП(ТипЦен.БазовыйТипЦен) +"""",60);
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    
    КонецПроцедуры // ПриДвойномЩелчкеНаТаблице()
    //******************************************************************************
    // УстановитьСвойство(Номенклатура, Свойство)
    //
    // Параметры:
    //  Номенклатура - элемент номенклатуры, для которого надо установить свойство
    //  Свойство	 - элемент значения свойств, который надо установить
    //
    // Возвращаемое значение:
    //  Нет
    //
    // Описание:
    //  Устанавливает у переданной позиции номенклатуры переданное значение свойства
    //
    Процедура УстановитьСвойство(Номенклатура, Свойство)
    
    СпрСвойстваНом = СоздатьОбъект("Справочник.СвойстваНоменклатуры");
    СпрСвойстваНом.ИспользоватьВладельца(Номенклатура);
    
    // Уже м.б. это свойство установлено
    Если СпрСвойстваНом.НайтиПоРеквизиту("ЗначениеСвойства",Свойство.ТекущийЭлемент(),0) = 0 Тогда
    
    СпрСвойстваНом.Новый();
    СпрСвойстваНом.ВидСвойства	  = Свойство.Владелец;
    СпрСвойстваНом.ЗначениеСвойства = Свойство.ТекущийЭлемент();
    СпрСвойстваНом.Записать();
    Иначе
    
    // Если уже есть такое, то снимаем пометку удаления если надо
    Если СпрСвойстваНом.ПометкаУдаления()=1 Тогда
    СпрСвойстваНом.СнятьПометкуУдаления();
    КонецЕсли;
    КонецЕсли;
    
    КонецПроцедуры // УстановитьСвойство()
    //******************************************************************************
    // СоздатьЦену(ТМЦ, ТипЦен, НовЦена)
    //
    // Параметры:
    //  ТМЦ   - элемент справочника Номенклатура
    //  ТипЦен  - элемент справочника ТипыЦен
    //  НовЦена  - выходной параметр, созданный элемент справочника цены
    //
    // Возвращаемое значение:
    //  Нет
    //
    // Описание:
    //  Создает новый элемент справочника Цены
    //
    Процедура СоздатьЦену(ТМЦ, ТипЦен, НовЦена)
    
    СпрЦены = СоздатьОбъект("Справочник.Цены");
    СпрЦены.ИспользоватьВладельца(ТМЦ);
    // при создании элемента периодические реквизиты устанавливаютя
    СпрЦены.ИспользоватьДату('01.01.1980', 1);
    
    СпрЦены.Новый();
    СпрЦены.Валюта = ТипЦен.Валюта;
    СпрЦены.Единица = ТМЦ.ОсновнаяЕдиница;
    СпрЦены.Процент = ТипЦен.Процент;
    СпрЦены.ТипЦен = ТипЦен;
    СпрЦены.Цена = 0;
    
    СпрЦены.Записать();
    
    НовЦена = СпрЦены.ТекущийЭлемент();
    
    КонецПроцедуры // СоздатьЦену()
    //******************************************************************************
    // ПересчетНалогов(СтараяЦена, ТекЦена, ЦенаВклНДСБаза, ЦенаВклНПБаза)
    //
    // Параметры:
    //  СтараяЦена - число, величина пересчитываемой цены
    //  ТекЦена	- элемент справочника Цены, определяет ТМЦ и устанавливаемые флаги включения налогов
    //  ЦенаВклНДСБаза - число (1,0) - флаг включения НДС в старую (из которой пересчитываем) цену
    //  ЦенаВклНПБаза  - число (1,0) - флаг включения НП  в старую (из которой пересчитываем) цену
    //
    // Возвращаемое значение:
    //  Новое значение цены
    //
    // Описание:
    //  Пересчитывает цены при изменении флагов включения налогов.
    //  Если флаг "Учитывать налог" выключен (параметр ЕстьНалог = 0)
    // то цену НЕ ПЕРЕСЧИТЫВАЕМ (например когда заполняем цену в справочнике на основании цены из документа
    // и в документе нет реквизита "Учитывать налог" или флаг "Учитывать налог" в документе выключен).
    //  Если флаг "Учитывать налог" включен (параметр ЕстьНалог = 1)
    // то цену пересчитываем (например когда пересчитываем одну цену из справочника
    // на основании другой из справочника (базовой).
    //
    Функция ПересчетНалогов(СтараяЦена, ТекЦена, ЕстьНП, ЕстьНДС, ЦенаВклНПБаза, ЦенаВклНДСБаза)
    
    Цена		   = СтараяЦена;
    ТекТМЦ		 = ТекЦена.Владелец;
    СтавкаНП	   = ТекТМЦ.СтавкаНП.Ставка;
    СтавкаНДС	  = ТекТМЦ.СтавкаНДС;
    ТипЦенЦены	 = ТекЦена.ТипЦен;
    
    ЦенаВклНПЦена  = ТипЦенЦены.ЦенаВклНП;
    ЦенаВклНДСЦена = ТипЦенЦены.ЦенаВклНДС;
    
    // Инициализация переменных
    НадоВключитьНП   = 0;
    НадоИсключитьНП  = 0;
    НадоВключитьНДС  = 0;
    НадоИсключитьНДС = 0;
    
    Если ЕстьНП = 1 Тогда
    Если (ЦенаВклНПБаза = 1) И (ЦенаВклНПЦена = 0) Тогда
    
    НадоИсключитьНП = 1;
    ИначеЕсли (ЦенаВклНПБаза = 0) И (ЦенаВклНПЦена = 1) Тогда
    
    НадоВключитьНП = 1;
    КонецЕсли;
    КонецЕсли;
    
    Если ЕстьНДС = 1 Тогда
    Если (ЦенаВклНДСБаза = 1) И (ЦенаВклНДСЦена = 0) Тогда
    
    НадоИсключитьНДС = 1;
    ИначеЕсли (ЦенаВклНДСБаза = 0) И (ЦенаВклНДСЦена = 1) Тогда
    
    НадоВключитьНДС = 1;
    КонецЕсли;
    КонецЕсли;
    
    Если НадоИсключитьНП = 1 Тогда
    Цена = (Цена*100)/(100+ СтавкаНП);
    КонецЕсли;
    Если НадоИсключитьНДС = 1 Тогда
    Цена = Цена - Цена*глВыделяемыйНДС(СтавкаНДС);
    КонецЕсли;
    Если НадоВключитьНДС = 1 Тогда
    Цена = Цена + Цена*глНачисляемыйНДС(СтавкаНДС);
    КонецЕсли;	
    Если НадоВключитьНП = 1 Тогда
    Цена = (Цена*(100+ СтавкаНП))/100;
    КонецЕсли;
    
    Возврат Цена;
    
    КонецФункции // ПересчетНалогов()
    //******************************************************************************
    // РассчитатьЦену(ТМЦ, ТекТипЦен, ТекЦена)
    //
    // Параметры:
    //  ТМЦ		 - "Справочник.Номенклатура"
    //  ТекТипЦен   - "Справочник.ТипыЦен"
    //  ТекЦена	 - "Справочник.Цены"
    //
    // Возвращаемое значение:
    //  Нет
    //
    // Описание:
    //  Рассчитывает цену по наценкам и записывает значение в справочник цен
    //
    Процедура РассчитатьЦену(ТМЦ, ТекТипЦен, ТекЦена)
    
    СпрЦен = СоздатьОбъект("Справочник.Цены");
    СпрЦен.ИспользоватьДату(ДатаЦен, 1);
    
    БазТипЦен = ТекТипЦен.БазовыйТипЦен;
    
    // Цены, назначаемые вручную, не рассчитываем
    Если ПустоеЗначение(БазТипЦен) = 1 Тогда
    Возврат;
    КонецЕсли;
    
    // Автоматически рассчитываемые не записываем
    Если ТекТипЦен.Рассчитывается = 1 Тогда
    Возврат;
    КонецЕсли;
    
    // Получим базовую цену. Если ее нет, то ничего не делаем
    БазЦена = 0; БазЕдЦены = ""; БазВалЦены = ""; //Инициализация переменных
    Если глВернутьЦену(ТМЦ, БазТипЦен, ДатаЦен, БазЦена, БазЕдЦены, БазВалЦены) = 1 Тогда
    
    Если ПустоеЗначение(ТекЦена) = 1 Тогда // Базовая цена есть, а рассчитываемой нет, надо создать
    
    СоздатьЦену(ТМЦ, ТекТипЦен, ТекЦена);
    
    КонецЕсли;					
    
    СпрЦен.НайтиЭлемент(ТекЦена);
    
    // Пересчитаем базовую цену в нужную единицу
    ЕдЦены = СпрЦен.Единица;
    Если БазЕдЦены <> ЕдЦены Тогда
    Если ПустоеЗначение(БазЕдЦены.Коэффициент) = 0 Тогда
    БазЦена = БазЦена * ЕдЦены.Коэффициент / БазЕдЦены.Коэффициент;
    Иначе
    БазЦена = 0;
    КонецЕсли;
    КонецЕсли;
    
    // Пересчитаем базовую цену в нужную валюту
    ВалЦены = СпрЦен.Валюта;
    Если ПустоеЗначение(ВалЦены) = 0 Тогда
    БазЦена = глПересчет(БазЦена, БазВалЦены, ДатаЦен, ВалЦены, ДатаЦен);
    КонецЕсли;
    
    // Пересчитаем налоги цены
    БазЦена = ПересчетНалогов(БазЦена, ТекЦена, 1, 1, БазТипЦен.ЦенаВклНП, БазТипЦен.ЦенаВклНДС);
    
    // Наценим
    БазЦена = БазЦена * ( 100 + ТекЦена.Процент) / 100;
    
    // Округлим
    БазЦена = глОкруглить(БазЦена, ТекТипЦен.ПорядокОкругления);
    
    Если БазЦена <> СпрЦен.Цена Тогда // если цена изменилась
    
    СпрЦен.Цена = БазЦена;
    
    // Запишем
    СпрЦен.Записать();
    
    // Если надо, то установим свойство
    Если ПустоеЗначение(УстановитьСвойствоТоваров) = 0 Тогда
    УстановитьСвойство(ТМЦ, СвойствоТоваров);
    КонецЕсли;
    
    КонецЕсли;
    КонецЕсли; // Есть базовая цена (глВернутьЦену(ТМЦ, БазТипЦен...) = 1 )
    
    КонецПроцедуры // РассчитатьЦену()
    //******************************************************************************
    // УстановитьБазовуюЦену(Номенклатура, ТипЦен, Цена, Единица, Валюта, ВидЦены)
    //
    // Параметры:
    //  Номенклатура - элемент справочника номенклатуры, для которого надо установить цену
    //  ТипЦен	   - элемент справочника типов цен, определяет цену какого типа надо установить
    //  Цена		 - число нового значение цены
    //  Единица	  - элемент справочника Единиц, определяет за какую единицу назначается цена
    //  Валюта	   - элемент справочника Валюты, определяет за какую валюту назначается цена
    //  ВидЦены	  - строка, определяет какая цена устанавливается. Может принимать значения
    //				 "Оптовая"   - флаги включения налогов в цену из документа,
    //							   единица цены устанавливается из документа
    //				 "Розничная" - флаги включения налогов в цену установлены (1,1),
    //							   единица цены не изменяется
    //
    // Возвращаемое значение:
    //  Нет
    //
    // Описание:
    //  Устанавливает у переданной позиции номенклатуры значение переданного базового типа цен
    //  равным цене в документе
    //
    Процедура УстановитьБазовуюЦену(Номенклатура, ТипЦен, Цена, Единица, Валюта, ВидЦены, ПошлинаСборы = "")
    
    // Автоматически рассчитываемые не записываем
    Если ТипЦен.Рассчитывается = 1 Тогда
    Возврат;
    КонецЕсли;						  
    
    ЦенаЦены = 0; ЕдЦены = 0; ВалЦены = 0; НайденнаяЦена = 0; НаценкаЦены = 0;
    Рез = глВернутьЦену(Номенклатура, ТипЦен, ДатаЦен, ЦенаЦены, ЕдЦены, ВалЦены, НаценкаЦены, НайденнаяЦена);
    
    // В таблице у нас строки, надо переводить в числа
    Цена		 = Число(Цена);
    ПошлинаСборы = Число(ПошлинаСборы);
    
    // Устанавливаем базовую или розничную цену, поэтому не нецениваем
    
    Если Рез = 0 Тогда // цены нет, создадим
    СоздатьЦену(Номенклатура, ТипЦен, НайденнаяЦена);
    ВалЦены = НайденнаяЦена.Валюта;
    КонецЕсли;
    
    // Пересчитаем цену из валюты документа в валюту типа цены
    Цена = глПересчет(Цена, Валюта, ДатаЦен, ВалЦены, ДатаЦен);
    ПошлинаСборы = глПересчет(ПошлинаСборы, Валюта, ДатаЦен, ВалЦены, ДатаЦен);
    
    // Пересчитаем налоги цены
    Если ВидЦены = "Оптовая" Тогда
    
    ВремЕстьНПДок	 = ЕстьНПДок;
    ВремЕстьНДСДок	= ЕстьНДСДок;
    ВремЦенаВклНПДок  = ЦенаВклНПДок;
    ВремЦенаВклНДСДок = ЦенаВклНДСДок;
    
    Если (ЕстьНПДок = 0) И (ЕстьНДСДок = 0) Тогда
    
    // реквизитов "УчитыватьНП", "УчитыватьНДС" в документе нет
    Если ВидДок = "ПоступлениеТМЦИмпорт" Тогда
    Если ВключитьВЦенуПошлинуСборы = 1 Тогда
    
    // считаем что налоги учитываются и не включены в цену с пошиной и сборами
    Цена = Цена + ПошлинаСборы;
    ВремЕстьНПДок	 = 1;
    ВремЕстьНДСДок	= 1;
    ВремЦенаВклНПДок  = 0;
    ВремЦенаВклНДСДок = 0;
    Иначе
    
    // не пересчитываем налоги
    ВремЕстьНПДок	 = 0;
    ВремЕстьНДСДок	= 0;
    ВремЦенаВклНПДок  = 0;
    ВремЦенаВклНДСДок = 0;
    КонецЕсли;
    
    ИначеЕсли ВидДок = "ОприходованиеТМЦ" Тогда
    
    // считаем что налоги учитываются и не включены в цену
    ВремЕстьНПДок	 = 1;
    ВремЕстьНДСДок	= 1;
    ВремЦенаВклНПДок  = 0;
    ВремЦенаВклНДСДок = 0;
    Иначе
    
    // считаем что налоги учитываются и включены в цену
    ВремЕстьНПДок	 = 1;
    ВремЕстьНДСДок	= 1;
    ВремЦенаВклНПДок  = 1;
    ВремЦенаВклНДСДок = 1;
    КонецЕсли;
    
    КонецЕсли;
    
    Цена = ПересчетНалогов(Цена, НайденнаяЦена, ВремЕстьНПДок, ВремЕстьНДСДок, ВремЦенаВклНПДок, ВремЦенаВклНДСДок);
    ИначеЕсли ВидЦены = "Розничная" Тогда
    
    // Пересчитаем налоги розничной цены
    // исходим из того что в документе все налоги учитываются и включены в розничную цену
    Цена = ПересчетНалогов(Цена, НайденнаяЦена, 1, 1, 1, 1);
    КонецЕсли;
    
    // округлим
    Цена = глОкруглить(Цена, ТипЦен.ПорядокОкругления);
    
    СпрЦен = СоздатьОбъект("Справочник.Цены");
    СпрЦен.НайтиЭлемент(НайденнаяЦена);
    СпрЦен.ИспользоватьДату(ДатаЦен,1);  
    
    Если Рез = 1 Тогда // Правим существующую цену
    
    // Проверим, реально изменили ли цену
    // по сравнению с ценой в документе
    
    Если (ЦенаЦены = Цена)
    И ((ЕдЦены = Единица) И (ВидЦены = "Оптовая")) Тогда // для розничной цены единицу менять не будем
    ИзменилиЦену = 0; // Флаг реального изменения цены для установки свойства
    Иначе
    ИзменилиЦену = 1;
    КонецЕсли;		
    
    ИначеЕсли Рез = -1 Тогда // Правим цену, помеченую на удаление
    
    СпрЦен.СнятьПометкуУдаления();
    ИзменилиЦену = 1;
    
    Иначе // Рез = 0
    
    // цену создали ранее
    ИзменилиЦену = 1;
    КонецЕсли;
    
    Если ИзменилиЦену =1 Тогда
    
    Если ВидЦены = "Розничная" Тогда // Надо пересчитать в единицу цены
    Если ПустоеЗначение(Единица.Коэффициент) = 0 Тогда
    Цена = Цена * СпрЦен.Единица.Коэффициент / Единица.Коэффициент;
    СпрЦен.Цена = глОкруглить(Цена, Константа.РозничныйТипЦен.ПорядокОкругления);		
    Иначе
    СпрЦен.Цена = 0;
    КонецЕсли;
    Иначе // цену меняем вместе с единицей
    СпрЦен.Цена  = Цена;
    СпрЦен.Единица = Единица;
    КонецЕсли;
    СпрЦен.Записать();
    // Если надо, то установим свойство
    Если ПустоеЗначение(УстановитьСвойствоТоваров) = 0 Тогда
    УстановитьСвойство(Номенклатура, СвойствоТоваров);
    КонецЕсли;
    
    КонецЕсли;
    
    КонецПроцедуры // УстановитьБазовуюЦену()
    //******************************************************************************
    // ПоКнопкеОбновитьЦены()
    //
    // Параметры:
    //  Нет
    //
    // Возвращаемое значение:
    //  Нет
    //
    // Вызывается из формул элементов диалога
    //  По кнопке ОбновитьЦены
    //
    // Описание:
    //  Обновляет цены в справочнике
    //
    Процедура ПоКнопкеОбновитьЦены()
    
    ИзменяемЦену = 1;
    Если Форма.ИспользоватьЗакладки() = 1 Тогда
    Если Форма.Закладки.ТекущаяСтрока() = 2 Тогда		  
    ИзменяемЦену = 0; // изменяем розничную цену
    КонецЕсли;
    ИначеЕсли ЕстьРознЦена = 1 Тогда
    ИзменяемЦену = 0; // изменяем розничную цену
    КонецЕсли;
    
    // Проверка настроек обновления
    // Если хотим обновить учетную цену, то она должна быть выбрана
    Если (ИзменяемЦену = 1) и (ВариантУстановкиЦен = 1) Тогда
    Если ПустоеЗначение(БазовыйТипЦен) = 1 Тогда
    Предупреждение("Не выбран базовый тип цен",60);
    Возврат;
    КонецЕсли;
    КонецЕсли;
    
    // Если хотим присваивать свойство, то оно должно быть выбрано и не быть основным свойством товара
    Если ПустоеЗначение(УстановитьСвойствоТоваров) = 0  Тогда
    Если ПустоеЗначение(СвойствоТоваров) = 1  Тогда
    Предупреждение("Не выбрано свойство товаров",60);
    Возврат;
    Иначе
    Если СвойствоТоваров.Владелец = Константа.ВидСвойстваНоменклатуры Тогда
    Предупреждение("Основное свойство выбирается в карточке номенклатурной позиции
    |здесь его присваивать нельзя.",60);
    Возврат;
    КонецЕсли;
    КонецЕсли;
    
    КонецЕсли;
    // Обновляем цены
    Попытка
    НачатьТранзакцию();
    Состояние("Обновление цен в справочнике");
    
    ТаблЗнач.ВыбратьСтроки();
    Пока ТаблЗнач.ПолучитьСтроку() = 1 Цикл
    
    // Обрабатываем только помеченные (служебные строки д.б. НЕ помеченными)
    Если ТаблЗнач.Пометка = МеткаЕсть Тогда
    
    ТекСтрока = ТаблЗнач.НомерСтроки;
    Тов = ТаблЗнач.Номенклатура;
    
    // не оказалось товара
    Если Тов.Выбран() = 0 Тогда
    Продолжить;
    КонецЕсли;
    
    Сообщить("Выполняется обработка позиции "+СокрЛП(Тов),".");
    
    Если ИзменяемЦену = 1 Тогда
    Если ВариантУстановкиЦен = 1 Тогда
    
    // Устанавливаем базовый тип цен			
    УстановитьБазовуюЦену(Тов, БазовыйТипЦен, ТаблЗнач.Цена, ТаблЗнач.Единица, ВалДок, "Оптовая", ТаблЗнач.ПошлинаСборы);
    
    Иначе
    
    // Устанавливаем все цены
    СчетчикЦикла = 0;
    Для СчетчикЦикла = 1 По СписокТиповЦен.РазмерСписка() Цикл
    
    ТекТипЦен   = СписокТиповЦен.ПолучитьЗначение(СчетчикЦикла);
    ТекЦена = ТаблЗнач.ПолучитьЗначение(ТекСтрока, "ЦенаСпр" + СчетчикЦикла);
    РассчитатьЦену(Тов, ТекТипЦен, ТекЦена);
    
    КонецЦикла;
    КонецЕсли; // ВариантУстановкиЦен = 1
    Иначе
    
    // устанавливаем розничную цену (не нацениваем)
    УстановитьБазовуюЦену(Тов, РозничныйТипЦен, ТаблЗнач.РозничнаяЦена, ТаблЗнач.Единица, глРубли, "Розничная");
    КонецЕсли;
    
    КонецЕсли; // ТаблЗнач.Пометка = МеткаЕсть
    КонецЦикла;
    
    ЗафиксироватьТранзакцию();
    
    // Обновим цены в таблице
    ТаблЗнач.ВыбратьСтроки();
    Пока ТаблЗнач.ПолучитьСтроку() = 1 Цикл
    Если ТаблЗнач.Пометка = МеткаЕсть Тогда
    Если ТаблЗнач.Номенклатура.Выбран() = 0 Тогда
    Продолжить; // не оказалось товара
    КонецЕсли;
    ЗаполнитьЦеныВСтрокеТаблицы();
    КонецЕсли;
    КонецЦикла;
    
    Сообщить("Обработка закончена",".");
    
    Исключение						
    ОтменитьТранзакцию();
    Сообщить(ОписаниеОшибки(), "!");
    КонецПопытки;
    
    КонецПроцедуры // ПоКнопкеОбновитьЦены()
    //******************************************************************************
    // ПоКнопкеПечатьЦенников()
    //
    // Параметры:
    //  Нет
    //
    // Возвращаемое значение:
    //  Нет
    //
    // Вызывается из формул элементов диалога
    //  По кнопке печать ценников
    //
    // Описание:
    //  Вызывает обработку печати ценников
    //
    Процедура ПоКнопкеПечатьЦенников()
    Перем ТекТип, ТекПоз, СписокТиповЦенДляВыб;
    
    // подготовим список типов цен для выбора
    СписокТиповЦен.Выгрузить(СписокТиповЦенДляВыб);
    Если ЕстьРознЦена = 1 Тогда
    СписокТиповЦенДляВыб.ДобавитьЗначение("РознЦенаИзДокумента", "Цена из документа (розничная)");
    КонецЕсли;
    
    // пользователь болжен выбрать, по какой цене печатать
    Если СписокТиповЦенДляВыб.ВыбратьЗначение(ТекТип, , ТекПоз, 60) <> 1 Тогда
    Возврат;
    КонецЕсли;
    
    Если ТекТип <> "РознЦенаИзДокумента" Тогда
    ИдКолЦена = "Цена" + ТекПоз;
    ИдКолЕд  = "Ед"   + ТекПоз;
    ИдКолВал = "Вал"  + ТекПоз;
    Иначе
    ИдКолЦена = "РозничнаяЦена";
    ИдКолЕд  = "Единица";
    КонецЕсли;
    
    // сформируем таблицу значений с информацией для печати ценников
    ТаблТов = СоздатьОбъект("ТаблицаЗначений");
    ТаблТов.НоваяКолонка("Товар");
    ТаблТов.НоваяКолонка("Цена");
    ТаблТов.НоваяКолонка("Единица");
    ТаблТов.НоваяКолонка("Валюта");
    
    ТаблЗнач.ВыбратьСтроки();
    Пока ТаблЗнач.ПолучитьСтроку() = 1 Цикл
    
    Если ТаблЗнач.Пометка = МеткаЕсть Тогда
    
    ТекСтр = ТаблЗнач.НомерСтроки;
    ТаблТов.НоваяСтрока();
    
    ТаблТов.Товар  = СокрЛП(ТаблЗнач.Номенклатура.ПолнНаименование) + ?(Константа.ПоказыватьАртикул = 1, " " + СокрЛП(ТаблЗнач.Номенклатура.Артикул), "");
    ТаблТов.Цена  = ТаблЗнач.ПолучитьЗначение(ТаблЗнач.НомерСтроки, ИдКолЦена);
    ТаблТов.Единица  = ТаблЗнач.ПолучитьЗначение(ТаблЗнач.НомерСтроки, ИдКолЕд);
    Если ТекТип <> "РознЦенаИзДокумента" Тогда
    ТаблТов.Валюта  = ТаблЗнач.ПолучитьЗначение(ТаблЗнач.НомерСтроки, ИдКолВал);
    Иначе
    ТаблТов.Валюта  = глРубли; // печатаем по розничным ценам - поэтому глРубли
    КонецЕсли;
    
    КонецЕсли;
    КонецЦикла;
    
    // упакуем параметры в список
    
    Параметры = СоздатьОбъект("СписокЗначений");
    ПечФирма = СокрЛП(ФирмаДок.ЮрЛицо.ПолнНаименование);
    Параметры.ДобавитьЗначение(ТаблТов, "Таблица");
    Параметры.ДобавитьЗначение(ПечФирма, "Фирма");
    
    ОткрытьФорму("Обработка.ПечатьЦенников", Параметры);
    
    КонецПроцедуры // ПоКнопкеПечатьЦенников()
    ////////////////////////////////////////////////////////////////////////////////
    // ПРЕДОПРЕДЕЛЕННЫЕ ПРОЦЕДУРЫ
    //
    //******************************************************************************
    // Предопределенная процедура.
    //
    Процедура ПриОткрытии()
    Перем Конт; // Контекст документа, из которого будут переноситься цены в справочник
    
    // Заполним таблицу для выбора печатной формы
    НомерТекущейФормы = глУстановкаКнопкиПечать(Контекст, "Справочник.Номенклатура", ТаблицаПечФорм);
    // Конекст документа д.б. передан через параметр формы
    Конт = Форма.Параметр;
    Если ПустоеЗначение(Конт) = 1 Тогда
    Предупреждение("Эта обработка запускается из других процедур конфигурации
    |Вручную ее запускать запрещено.",60);
    СтатусВозврата(0);
    Возврат;
    КонецЕсли;
    
    // По умолчанию цены устанавливаются на Рабочую дату
    СпособДаты = 1;  
    ДатаЦен = РабочаяДата();
    
    // Сохраним нужные реквизиты документа в переменных
    ВалДок	= Конт.Валюта;
    ДатаДок   = Конт.ДатаДок;
    КурсДок   = Конт.Курс;
    КратДок   = Конт.Кратность;
    ФирмаДок  = Конт.Фирма;
    ВидДок	= Конт.Вид();
    
    ЕстьНПДок	 = глЕстьРеквизитШапки("УчитыватьНП", ВидДок);
    ЕстьНДСДок	= глЕстьРеквизитШапки("УчитыватьНДС",ВидДок);
    ЦенаВклНПДок  = ?(глЕстьРеквизитШапки("СуммаВклНП" , ВидДок)=1, Конт.СуммаВклНП , 0);
    ЦенаВклНДСДок = ?(глЕстьРеквизитШапки("СуммаВклНДС", ВидДок)=1, Конт.СуммаВклНДС, 0);
    
    ВариантУстановкиЦен = 1;
    
    // Определим -  есть ли оптовая цена
    ЕстьОптЦена = 1;
    Если ВидДок = "ПереоценкаРозница" Тогда
    ЕстьОптЦена = 0;
    ИначеЕсли ВидДок = "ПеремещениеТМЦ" Тогда
    Если Конт.СкладПолучатель.РозничныйСклад = 1 Тогда
    ЕстьОптЦена = 0;
    КонецЕсли;
    КонецЕсли;
    
    // Определим -  розничный ли это документ
    ЭтоРознДок = 0;
    Если глЕстьРеквизитМнЧ("РозничнаяЦена", ВидДок) = 1 Тогда // должен быть реквизит таб.части
    ЭтоРознДок = 1;
    ИначеЕсли ВидДок = "ПереоценкаРозница" Тогда
    ЭтоРознДок = 1;
    ИначеЕсли ВидДок = "ПеремещениеТМЦ" Тогда
    Если Конт.СкладПолучатель.РозничныйСклад = 1 Тогда
    ЭтоРознДок = 1;
    КонецЕсли;
    КонецЕсли;
    
    // Определим -  есть ли розничная цена
    ЕстьРознЦена = 0;
    Если ЭтоРознДок = 1 Тогда // должен быть реквизит таб.части
    РозничныйТипЦен = Константа.РозничныйТипЦен;
    Если ПустоеЗначение(РозничныйТипЦен) = 0 Тогда   // должен быть определен
    // не должен быть автоматически рассчетываемым и помеченнным на удаление
    Если (РозничныйТипЦен.Рассчитывается = 0) и (РозничныйТипЦен.ПометкаУдаления() = 0) Тогда
    ЕстьРознЦена = 1;
    КонецЕсли;						  
    КонецЕсли;
    КонецЕсли;
    
    Если (ЕстьОптЦена = 0) И (ЕстьРознЦена = 0) Тогда
    Предупреждение("Не задан или некорректно задан розничный тип цен
    |(задается в настройке параметров учета).",60);
    СтатусВозврата(0);
    Возврат;
    КонецЕсли;
    
    // Определим -  есть ли пошлина и сборы
    ЕстьПошлинаСборы = 0;
    Если ВидДок = "ПоступлениеТМЦИмпорт" Тогда
    ЕстьПошлинаСборы = 1;
    КонецЕсли;
    
    // Загружаем спецификацию документа в таблицу формы
    Если ЕстьРознЦена = 0 Тогда
    Конт.ВыгрузитьТабличнуюЧасть(ТаблЗнач, "Номенклатура, Цена, Единица");
    ТаблЗнач.ВставитьКолонку("РозничнаяЦена", 3);
    Иначе
    Если ВидДок = "ПереоценкаРозница" Тогда
    Конт.ВыгрузитьТабличнуюЧасть(ТаблЗнач, "Номенклатура, Единица");
    
    ТаблЗнач.ВставитьКолонку("Цена", 2);
    ТаблЗнач.ВставитьКолонку("РозничнаяЦена", 3);
    
    Если ТаблЗнач.КоличествоСтрок() > 0 Тогда
    СтолбецРознЦена = СоздатьОбъект("ТаблицаЗначений");
    Конт.ВыгрузитьТабличнуюЧасть(СтолбецРознЦена, "ЦенаНовая");
    ТаблЗнач.Заполнить(СтолбецРознЦена,,,"РозничнаяЦена");
    КонецЕсли;
    
    ИначеЕсли ВидДок = "ПеремещениеТМЦ" Тогда
    Конт.ВыгрузитьТабличнуюЧасть(ТаблЗнач, "Номенклатура, Единица");
    
    ТаблЗнач.ВставитьКолонку("Цена", 2);
    ТаблЗнач.ВставитьКолонку("РозничнаяЦена", 3);
    
    Если ТаблЗнач.КоличествоСтрок() > 0 Тогда
    СтолбецЦена = СоздатьОбъект("ТаблицаЗначений");
    Конт.ВыгрузитьТабличнуюЧасть(СтолбецЦена, "Цена");
    Если ЕстьОптЦена = 1 Тогда
    ТаблЗнач.Заполнить(СтолбецЦена,,,"Цена");
    КонецЕсли;
    Если ЕстьРознЦена = 1 Тогда
    ТаблЗнач.Заполнить(СтолбецЦена,,,"РозничнаяЦена");
    КонецЕсли;
    КонецЕсли;
    
    Иначе // остальные розничные документы
    Конт.ВыгрузитьТабличнуюЧасть(ТаблЗнач, "Номенклатура, Цена, РозничнаяЦена, Единица");
    КонецЕсли;
    
    КонецЕсли;
    
    ТаблЗнач.ВставитьКолонку("ПошлинаСборы", 3);
    
    Если ВидДок = "ПоступлениеТМЦИмпорт" Тогда
    
    // заполним колонку "ПошлинаСборы"
    
    // цены рассчитываем из регистра - поэтому документ должен быть проведен
    Если Конт.Проведен() = 0 Тогда
    Предупреждение("Нельзя обновлять цены в справочнике
    |из непроведенного документа " + глНазваниеДокументаВЖурнале(Конт) +"!", 60);
    СтатусВозврата(0);	
    Возврат;
    ИначеЕсли Конт.Модифицированность() = 1 Тогда
    Если Вопрос("Изменения документа не записаны. Это может привести к некорректному
    |обновлению цен в справочнике. Записать документ?","Да+Нет", 60) <> "Нет" Тогда
    Конт.Записать();
    КонецЕсли;
    КонецЕсли;
    
    ВремТаблЗнач = СоздатьОбъект("ТаблицаЗначений");
    ВремТаблЗнач.НоваяКолонка("НомерСтрокиДок");
    ВремТаблЗнач.НоваяКолонка("Количество");
    ВремТаблЗнач.НоваяКолонка("Сумма");
    
    РегПартии = СоздатьОбъект("Регистр.ПартииНаличие");
    РегПартии.ВыбратьДвиженияДокумента(Конт.ТекущийДокумент());
    Пока РегПартии.ПолучитьДвижение() = 1 Цикл
    Если РегПартии.Приход = 1 Тогда
    ВремТаблЗнач.НоваяСтрока();
    ВремТаблЗнач.НомерСтрокиДок = РегПартии.НомерСтроки();
    ВремТаблЗнач.Количество = РегПартии.Количество;
    ВремТаблЗнач.Сумма = РегПартии.СуммаБезНДС;
    КонецЕсли;
    КонецЦикла;
    
    ВремТаблЗнач.Свернуть("НомерСтрокиДок", "Количество, Сумма");
    
    ВремТаблЗнач.ВыбратьСтроки();
    Пока ВремТаблЗнач.ПолучитьСтроку() = 1 Цикл
    
    // рассчитаем цену
    Если ВремТаблЗнач.Количество <> 0 Тогда
    ВремЦена = ВремТаблЗнач.Сумма / ВремТаблЗнач.Количество;
    Иначе
    ВремЦена = 0;
    КонецЕсли;
    
    ТаблЗнач.ПолучитьСтрокуПоНомеру(ВремТаблЗнач.НомерСтрокиДок);
    
    // пересчитаем цену в валюту документа
    ВремЦена = глПересчет(ВремЦена, глРубли, 1, ВалДок, КурсДок,, КратДок);
    
    // пересчитаем цену в единицу документа
    ВремЦена = ВремЦена * ТаблЗнач.Единица.Коэффициент;
    
    ТаблЗнач.ПошлинаСборы = Окр(ВремЦена - Число(ТаблЗнач.Цена),2);
    КонецЦикла;
    КонецЕсли;
    
    // Установим параметры колонок
    ТаблЗнач.УстановитьПараметрыКолонки("Номенклатура" ,		 ,,,				   ,30);
    ТаблЗнач.УстановитьПараметрыКолонки("Цена"   , "Строка",,, "В документе"	 ,ШиринаЦены,, 2);
    ТаблЗнач.УстановитьПараметрыКолонки("ПошлинаСборы" , "Строка",,, "Пошлина и сборы" ,ШиринаЦены,, 2);
    ТаблЗнач.УстановитьПараметрыКолонки("РозничнаяЦена" , "Строка",,, "В документе"	 ,ШиринаЦены,, 2);
    ТаблЗнач.УстановитьПараметрыКолонки("Единица"  ,		 ,,, " "			   ,ШиринаЕдиницы);
    
    //Добавляем колонку для пометки
    ТаблЗнач.ВставитьКолонку("Пометка",1,"Число",4,0);
    ТаблЗнач.ВыводитьПиктограммы("Пометка",1);
    
    // Добавляем две служебные строки
    ТаблЗнач.НоваяСтрока(1);
    ТаблЗнач.УстановитьЗначение(1, "Пометка"	  , 0);
    ТаблЗнач.УстановитьЗначение(1, "Цена"		 , "");
    ТаблЗнач.УстановитьЗначение(1, "ПошлинаСборы" , "");
    ТаблЗнач.УстановитьЗначение(1, "РозничнаяЦена", "");
    ТаблЗнач.НоваяСтрока(2);
    ТаблЗнач.УстановитьЗначение(2, "Пометка"	  , 0);
    ТаблЗнач.УстановитьЗначение(2, "Цена"		 , СокрЛП(ВалДок));
    ТаблЗнач.УстановитьЗначение(2, "ПошлинаСборы" , СокрЛП(ВалДок));
    ТаблЗнач.УстановитьЗначение(2, "РозничнаяЦена", СокрЛП(глРубли));
    
    // Добавляем колонки цен и считываем цены из справочника
    ЗаполнитьЦеныВТаблице();
    
    // помечаем все товары
    ГрупповаяПометка(1);	  
    
    // делаем недоступным Свойство
    ПриСменеФлагаУстановитьСвойство();
    
    // инициализируем закладки (если нужно), управляем видимостью элементов диалога
    УправлениеДиалогомПриОткрытии();
    
    // заголовок
    Заголовок = глНазваниеДокументаВЖурнале(Конт)+" № "+СокрЛП(Конт.НомерДок)+" от "+Конт.ДатаДок;
    Форма.Заголовок(Заголовок, 1);
    
    УправлениеДиалогом();
    
    КонецПроцедуры // ПриОткрытии()
    //******************************************************************************
    // Предопределенная процедура
    //
    Процедура ПриВыбореЗакладки(Номер)
    
    Если Номер = 1 Тогда
    Форма.ИспользоватьСлой("Общий, Цена");
    Иначе
    Форма.ИспользоватьСлой("Общий, РозничнаяЦена");
    КонецЕсли;
    УправлениеВидимостьКолонок(Номер);
    ТаблЗнач.Фиксировать(2);
    
    КонецПроцедуры // ПриВыбореЗакладки()
    //******************************************************************************
    // Предопределенная процедура
    //
    Процедура ОбработкаВыбораЗначения(ВыбЗнач, ИдентЭлемДиалога, ФлагСтандОбр)
    
    Если ИдентЭлемДиалога = "БазовыйТипЦен" Тогда
    
    Если (ПустоеЗначение(ВыбЗнач.БазовыйТипЦен) = 0) Тогда
    
    // нельзя выбирать цену, которая, в свою очередь, рассчитывается на основе третьей
    Предупреждение("Нельзя выбирать тип цены, который рассчитывается на основании другого типа!", 60);
    ФлагСтандОбр = 0;
    Возврат;
    КонецЕсли;
    
    КонецЕсли;
    
    КонецПроцедуры  // ОбработкаВыбораЗначения()
    //******************************************************************************
    // ПоКнопкеПечать()
    //
    // Параметры:
    // Нет
    //
    // Описание:
    //  Вызывается по кнопке "Печать"
    //
    Процедура ПоКнопкеПечать(СразуНаПринтер = 0,КолЭкз = 1)
    
    Если  ПустоеЗначение(НомерТекущейФормы) = 1  Тогда
    НомерТекущейФормы = 1;
    Форма.кнПечать.Заголовок(ТаблицаПечФорм.ПолучитьЗначение(НомерТекущейФормы, "Кнопка"));
    КонецЕсли;
    
    Если НомерТекущейФормы = 1  Тогда
    ПоКнопкеПечатьЦенников();
    Иначе
    ТабТоваров = СоздатьОбъект("СписокЗначений");
    
    ТаблЗнач.ВыбратьСтроки();
    Пока ТаблЗнач.ПолучитьСтроку() = 1 Цикл
    Если ТаблЗнач.Пометка = МеткаЕсть Тогда
    ТабТоваров.ДобавитьЗначение(ТаблЗнач.Номенклатура);
    КонецЕсли;
    КонецЦикла;
    
    Параметры = СоздатьОбъект("СписокЗначений");
    Параметры.ДобавитьЗначение(ТабТоваров, "Номенклатура");
    ОткрытьФорму("Отчет", Параметры, глКаталогПечФорм+ТаблицаПечФорм.ПолучитьЗначение(НомерТекущейФормы,"Файл"));
    КонецЕсли;
    КонецПроцедуры // ПоКнопкеПечать()
    //******************************************************************************
    // ПоКнопкеВыборПечатнойФормы()
    //
    // Параметры:
    //  нет.  
    //
    // Возвращаемое значение:
    //  нет.
    //
    // Описание:
    //  - открывает список для выбора способа печати.
    //  - формирует таблицу по выбранному способу.
    //
    Процедура ПоКнопкеВыборПечатнойФормы()
    
    ВыбНомер = глВыборПечатнойФормы("Справочник.Номенклатура", ТаблицаПечФорм);
    Если ВыбНомер > 0 Тогда
    НомерТекущейФормы = ВыбНомер;
    Форма.кнПечать.Заголовок(ТаблицаПечФорм.ПолучитьЗначение(НомерТекущейФормы, "Кнопка"));
    ПоКнопкеПечать();
    КонецЕсли;
    КонецПроцедуры // ПоКнопкеВыборПечатнойФормыСпис()
    ////////////////////////////////////////////////////////////////////////////////
    // ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ
    //
    // Номера иконок пометки
    МеткаЕсть = 2;
    МеткиНет = 1;
    // Ширины соответствующих колонок
    ШиринаЦены  = 15;
    ШиринаЕдиницы = 5;
    ШиринаВалюты = 5;
    КолОбязательныхКолонок = 6; // "Пометка, Номенклатура, Цена, ПошлинаСборы, РозничнаяЦена, Единица"
    СписокТиповЦен = СоздатьОбъект("СписокЗначений");
    ////////////////////////////////////////////////////////////////////////////////
    //
    ТаблицаПечФорм  = СоздатьОбъект("ТаблицаЗначений");
    ТаблицаПечФорм.НоваяКолонка("Название","Строка",,,,30);
    ТаблицаПечФорм.НоваяКолонка("Файл","Строка",,,"Файл",10);
    ТаблицаПечФорм.НоваяКолонка("Кнопка","Строка",,,,10);
    ТаблицаПечФорм.НоваяКолонка("ФайлОписания","Строка");
    ТаблицаПечФорм.НоваяСтрока();
    ТаблицаПечФорм.Название = "Ценники";
    ТаблицаПечФорм.Кнопка = "Ценники";
    НомерТекущейФормы = 0;
  19. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Ну и для чего вы выложили текст модуля?
    Я так понял "непонятки" у вас при выводе на печать происходят.
    Вот я просил вас выложить ФАЙЛ ВПФ (внешней печатной формы)
  20. TopicStarter Overlay
    KingX
    Offline

    KingX Опытный в 1С

    Регистрация:
    19 дек 2011
    Сообщения:
    144
    Симпатии:
    0
    Баллы:
    26

    Вложения:

    • M11.ert
      Размер файла:
      39 КБ
      Просмотров:
      9

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