Имя: Пароль:
1C
1С v8
В цикле не заполняются некоторые строки табличной части.
,
0 wsxedc83
 
14.08.13
23:24
1С:Предприятие 8.2 (8.2.16.368)
Несильно дописанная "Управление торговлей", редакция 10.3 (10.3.10.4)

Есть обработка, которая на основе таблицы номенклатуры программно создает документ "Установка цен номенклатуры".
Проблема в том, что при заполнении документа некоторые строки табличной части "Товары" не записываются! То есть для одного товара может заполниться две цены, но не заполниться третья или, наоборот - одна заполнится,  а две - нет. Или ни одна не заполнится...
Короче бред какой-то.
Вот код:

Если (ЗначениеЗаполнено(НомерСтолбцаЦены)) И (НЕ(ТипЦенБазовый.Пустая())) Тогда
    сВыгрЦену=", ЦенаПоставщика";
    ДокЦенообразования = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
    ДокЦенообразования.Комментарий     = "Заполнено автоматически из бланка заказа";
    ДокЦенообразования.Ответственный  = глЗначениеПеременной("глТекущийПользователь");
    ДокЦенообразования.Информация     = "Заполнено автоматически из бланка заказа";
    ДокЦенообразования.Дата  = ТекущаяДата();
    НовТипЦен = ДокЦенообразования.ТипыЦен.Добавить();
    НовТипЦен.ТипЦен = ТипЦенБазовый;
    Для Каждого СтрокаТабЧасти ИЗ Коэффициенты Цикл
        НовТипЦен = ДокЦенообразования.ТипыЦен.Добавить();
        НовТипЦен.ТипЦен = СтрокаТабЧасти.ТипЦены
    КонецЦикла;
    ДокЦенообразования.Записать();
  Иначе
    сВыгрЦену="";
  КонецЕсли;
  Если ТабИмпорта.Количество()=0 Тогда
    Возврат;
  КонецЕсли;
  ТабНоменклатуры = Новый ТаблицаЗначений;  ТабНоменклатуры = ТабИмпорта.Скопировать(,"Номенклатура"+сВыгрЦену);
  ТабНоменклатуры.Свернуть("Номенклатура"+сВыгрЦену);
  Для Каждого СтрокаТабНоменклатуры ИЗ ТабНоменклатуры Цикл
    Если (ЗначениеЗаполнено(НомерСтолбцаЦены)) И (НЕ(ТипЦенБазовый.Пустая())) Тогда
        НовСтрокаЦенообрТоваров = ДокЦенообразования.Товары.Добавить();
        НовСтрокаЦенообрТоваров.ТипЦен  = ТипЦенБазовый;
        НовСтрокаЦенообрТоваров.Номенклатура = СтрокаТабНоменклатуры.Номенклатура;
        НовСтрокаЦенообрТоваров.Валюта = ТипЦенБазовый.ВалютаЦены;
        НовСтрокаЦенообрТоваров.Цена = СтрокаТабНоменклатуры.ЦенаПоставщика;
        НовСтрокаЦенообрТоваров.ЕдиницаИзмерения    = СтрокаТабНоменклатуры.Номенклатура.ЕдиницаХраненияОстатков;
        Для Каждого СтрокаТабЧасти ИЗ Коэффициенты Цикл
          НовСтрокаЦенообрТоваров = ДокЦенообразования.Товары.Добавить();
          НовСтрокаЦенообрТоваров.ТипЦен = СтрокаТабЧасти.ТипЦены;
          НовСтрокаЦенообрТоваров.Номенклатура  = СтрокаТабНоменклатуры.Номенклатура;
          НовСтрокаЦенообрТоваров.Валюта = СтрокаТабЧасти.ТипЦены.ВалютаЦены;
          НовСтрокаЦенообрТоваров.Цена = СтрокаТабНоменклатуры.ЦенаПоставщика * СтрокаТабЧасти.Коэффициент;
          НовСтрокаЦенообрТоваров.ЕдиницаИзмерения = СтрокаТабНоменклатуры.Номенклатура.ЕдиницаХраненияОстатков;
        КонецЦикла;
    КонецЕсли;
  КонецЦикла;
  Если (ЗначениеЗаполнено(НомерСтолбцаЦены)) И (НЕ(ТипЦенБазовый.Пустая())) Тогда
    Попытка
      ДокЦенообразования.Записать();
    Исключение
      ТекстПредупр = "ru = ""Не удалось записать документ ценообразования"";" + " en = ""Can't write the price""";
      Предупреждение(НСтр(ТекстПредупр) + " """ + СпрНоменклатура + """! "+ ОписаниеОшибки(),60);
        КонецПопытки;
   КонецЕсли;
1 SnarkHunter
 
14.08.13
23:26
Отладчик стал не в моде ныне...
2 GROOVY
 
модератор
14.08.13
23:28
Короче бред какой-то.
3 wsxedc83
 
14.08.13
23:44
(1) Пытаюсь словить отладчиком, но в исходной таблице под 2000 строк. F10 поломается. Может по коду чего не так, не посмотрите?
4 wsxedc83
 
14.08.13
23:46
(2) Что не так? Заполнять документ "Установка цен номенклатуры" программно нельзя? Кривой код? Что не так?
5 wsxedc83
 
15.08.13
01:31
Всем спасибо! Проблему решил. Извините за беспокойство.